@siliconst/metaui 1.4.21 → 1.4.37

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 (555) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +22 -20
  4. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -1
  5. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +3 -3
  6. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +24 -16
  10. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -1
  11. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +2 -2
  13. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +111 -0
  14. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -0
  15. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +95 -0
  16. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -0
  17. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +2 -0
  18. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -0
  19. package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +101 -0
  20. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js.map +1 -1
  21. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.ts +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js.map +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.ts +2 -1
  27. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +2 -2
  28. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +3 -3
  32. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +47 -47
  33. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +6 -2
  35. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  37. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +62 -66
  39. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +0 -9
  40. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +0 -9
  42. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +3 -9
  46. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +0 -11
  47. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
  48. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +0 -11
  49. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
  51. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +2 -9
  53. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +2 -7
  54. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
  55. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +0 -5
  56. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js +1 -1
  58. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +3 -7
  60. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +1 -6
  61. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
  62. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +0 -5
  63. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js +1 -1
  65. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +9 -12
  67. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +170 -74
  68. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +29 -4
  70. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
  71. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
  73. package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +179 -79
  74. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +41 -38
  75. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +5 -3
  77. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
  78. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
  80. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +46 -38
  81. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +41 -2
  82. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +6 -2
  84. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
  85. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
  87. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +47 -2
  88. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js.map +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts.map +1 -1
  91. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js.map +1 -1
  92. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.ts +8 -7
  93. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +7 -2
  94. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +5 -2
  96. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
  99. package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +10 -5
  100. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +215 -38
  101. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  102. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +21 -3
  103. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  104. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  105. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  106. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +218 -40
  107. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +86 -0
  108. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -0
  109. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts +16 -0
  110. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -0
  111. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +2 -0
  112. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -0
  113. package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +82 -0
  114. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +142 -0
  115. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -0
  116. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts +24 -0
  117. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -0
  118. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +2 -0
  119. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -0
  120. package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +147 -0
  121. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +8 -0
  122. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
  123. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
  124. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +7 -0
  127. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +153 -50
  128. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  129. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +15 -0
  130. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  131. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  132. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  133. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +164 -53
  134. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js +310 -0
  135. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js.map +1 -0
  136. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts +73 -0
  137. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts.map +1 -0
  138. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js +2 -0
  139. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js.map +1 -0
  140. package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts +307 -0
  141. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +35 -14
  142. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  143. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  144. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  145. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +40 -15
  147. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +15 -3
  148. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
  149. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
  150. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
  152. package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +15 -1
  153. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +82 -16
  154. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +16 -0
  156. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  157. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
  158. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  159. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +89 -17
  160. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  161. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +12 -1
  162. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  163. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +13 -1
  164. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js +2 -0
  165. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js.map +1 -0
  166. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts +50 -0
  167. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts.map +1 -0
  168. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js +2 -0
  169. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js.map +1 -0
  170. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.ts +49 -0
  171. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  172. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +23 -1
  173. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  174. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +27 -1
  175. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +31 -36
  176. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  177. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  178. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  179. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  180. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +26 -29
  181. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +47 -11
  182. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  183. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  184. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  185. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  186. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +48 -12
  187. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +74 -58
  188. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  189. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +3 -2
  190. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
  191. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
  192. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +1 -1
  193. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
  194. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +3 -2
  195. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
  196. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
  197. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +3 -3
  198. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js +2 -1
  199. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
  200. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
  201. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
  202. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +1 -1
  203. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
  204. package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +4 -3
  205. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +2 -2
  206. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -1
  207. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -1
  208. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +2 -2
  209. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +12 -8
  210. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
  211. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
  212. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +1 -1
  213. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
  214. package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +15 -11
  215. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +20 -12
  216. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
  217. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +4 -4
  218. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
  219. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +1 -1
  220. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
  221. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +24 -16
  222. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +18 -11
  223. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
  224. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +4 -4
  225. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
  226. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +1 -1
  227. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
  228. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +22 -15
  229. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +24 -100
  230. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
  231. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +8 -72
  232. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
  233. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +1 -1
  234. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
  235. package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +45 -108
  236. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js.map +1 -1
  237. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts.map +1 -1
  238. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js.map +1 -1
  239. package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.ts +2 -1
  240. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +24 -18
  241. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  242. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +1 -1
  243. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  244. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  245. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  246. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +23 -21
  247. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +5 -5
  248. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
  249. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +1 -1
  250. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
  251. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
  252. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
  253. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +7 -7
  254. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +129 -9
  255. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
  256. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +46 -10
  257. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
  258. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
  259. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
  260. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +145 -15
  261. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +35 -14
  262. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
  263. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +1 -1
  264. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
  265. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
  266. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
  267. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +38 -14
  268. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +4 -4
  269. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
  270. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +1 -1
  271. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
  272. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
  273. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
  274. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +5 -5
  275. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +69 -20
  276. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  277. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +2 -1
  278. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  279. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  280. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  281. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +77 -21
  282. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +3 -3
  283. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
  284. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +1 -1
  285. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
  286. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
  287. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
  288. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +5 -5
  289. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +3 -3
  290. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
  291. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +1 -1
  292. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
  293. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
  294. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
  295. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +5 -5
  296. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +1 -0
  297. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -1
  298. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -1
  299. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +1 -1
  300. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -1
  301. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +6 -5
  302. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +8 -3
  303. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
  304. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +1 -1
  305. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
  306. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
  307. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
  308. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +10 -5
  309. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +3 -3
  310. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
  311. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +1 -1
  312. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -1
  313. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
  314. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
  315. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +4 -4
  316. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +3 -3
  317. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
  318. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +1 -1
  319. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
  320. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
  321. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
  322. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +5 -5
  323. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +4 -4
  324. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
  325. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +1 -1
  326. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
  327. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
  328. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
  329. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +5 -5
  330. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +3 -3
  331. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
  332. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +1 -1
  333. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -1
  334. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
  335. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
  336. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +4 -4
  337. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
  338. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +1 -1
  339. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
  340. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
  341. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
  342. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +7 -6
  343. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
  344. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +1 -1
  345. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
  346. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
  347. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
  348. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +9 -8
  349. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +2 -2
  350. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
  351. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +1 -1
  352. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
  353. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
  354. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
  355. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -3
  356. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +36 -21
  357. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
  358. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +1 -1
  359. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
  360. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
  361. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
  362. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +40 -23
  363. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +9 -6
  364. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  365. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +1 -1
  366. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  367. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
  368. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  369. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +10 -8
  370. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +3 -3
  371. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
  372. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +1 -1
  373. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -1
  374. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
  375. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
  376. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +4 -4
  377. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +3 -3
  378. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
  379. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +1 -1
  380. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
  381. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
  382. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
  383. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +5 -5
  384. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +29 -12
  385. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
  386. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +5 -1
  387. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
  388. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
  389. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
  390. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +30 -10
  391. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +4 -4
  392. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
  393. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +1 -1
  394. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
  395. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
  396. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
  397. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +5 -5
  398. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +4 -4
  399. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
  400. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +1 -1
  401. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
  402. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
  403. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
  404. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +5 -5
  405. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +3 -3
  406. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
  407. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +1 -1
  408. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
  409. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
  410. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
  411. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +4 -4
  412. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +3 -3
  413. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
  414. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +1 -1
  415. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -1
  416. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
  417. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
  418. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +5 -5
  419. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +3 -3
  420. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
  421. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +1 -1
  422. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
  423. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
  424. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
  425. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +4 -4
  426. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +2 -2
  427. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
  428. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +1 -1
  429. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
  430. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
  431. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
  432. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -3
  433. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +58 -56
  434. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  435. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +2 -5
  436. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  437. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  438. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  439. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +66 -55
  440. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +3 -3
  441. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
  442. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +1 -1
  443. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
  444. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
  445. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
  446. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +4 -4
  447. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +4 -4
  448. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
  449. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +1 -1
  450. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
  451. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
  452. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
  453. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +5 -5
  454. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
  455. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts.map +1 -1
  456. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
  457. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +5 -3
  458. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +2 -1
  459. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
  460. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
  461. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +1 -1
  462. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
  463. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +6 -3
  464. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +30 -9
  465. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
  466. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +2 -2
  467. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
  468. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +1 -1
  469. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
  470. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +41 -13
  471. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
  472. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts.map +1 -1
  473. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
  474. package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +5 -3
  475. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js +41 -0
  476. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js.map +1 -0
  477. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts +24 -0
  478. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts.map +1 -0
  479. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js +2 -0
  480. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js.map +1 -0
  481. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.ts +34 -0
  482. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js +41 -0
  483. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js.map +1 -0
  484. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts +24 -0
  485. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts.map +1 -0
  486. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js +2 -0
  487. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js.map +1 -0
  488. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.ts +34 -0
  489. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js +52 -0
  490. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js.map +1 -0
  491. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts +30 -0
  492. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts.map +1 -0
  493. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js +2 -0
  494. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js.map +1 -0
  495. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.ts +45 -0
  496. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js +52 -0
  497. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js.map +1 -0
  498. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts +30 -0
  499. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts.map +1 -0
  500. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js +2 -0
  501. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js.map +1 -0
  502. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.ts +45 -0
  503. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js +41 -0
  504. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js.map +1 -0
  505. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts +24 -0
  506. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts.map +1 -0
  507. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js +2 -0
  508. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js.map +1 -0
  509. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.ts +34 -0
  510. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js +40 -0
  511. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js.map +1 -0
  512. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts +28 -0
  513. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts.map +1 -0
  514. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js +2 -0
  515. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js.map +1 -0
  516. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.ts +34 -0
  517. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js +40 -0
  518. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js.map +1 -0
  519. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts +28 -0
  520. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts.map +1 -0
  521. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js +2 -0
  522. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js.map +1 -0
  523. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.ts +34 -0
  524. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js +40 -0
  525. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js.map +1 -0
  526. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts +28 -0
  527. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts.map +1 -0
  528. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js +2 -0
  529. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js.map +1 -0
  530. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.ts +34 -0
  531. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js +40 -0
  532. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js.map +1 -0
  533. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts +28 -0
  534. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts.map +1 -0
  535. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js +2 -0
  536. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js.map +1 -0
  537. package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.ts +34 -0
  538. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js +33 -0
  539. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js.map +1 -0
  540. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts +14 -0
  541. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts.map +1 -0
  542. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js +2 -0
  543. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js.map +1 -0
  544. package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.ts +24 -0
  545. package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js.map +1 -1
  546. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts.map +1 -1
  547. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js.map +1 -1
  548. package/src/nz/co/siliconst/ui5/metaui/utils/Logger.ts +1 -1
  549. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -75
  550. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +0 -1
  551. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -47
  552. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +0 -1
  553. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +0 -2
  554. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +0 -1
  555. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -72
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimePlugin.js","names":["BasePlugin","___BasePlugin","DateTimePlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","formatOptions","source","pattern","applyCommonDirectives","DateTimePicker","value","editable","ui","readOnly","required","change","oEvent","val","getParameter","result","validateAndApplyVisualState","isValid","getValue","applyState","input","setEditable","setRequired","__exports","__esModule"],"sources":["DateTimePlugin.ts"],"sourcesContent":["/**\n * @file DateTimePlugin.ts\n * @description Handles rendering logic for DateTime strings (timestamps).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport DateTimePicker from \"sap/m/DateTimePicker\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering and logic for timestamps/datetime inputs.\n */\nexport class DateTimePlugin extends BasePlugin {\n /**\n * Renders a `sap.m.DateTimePicker` component.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured DateTimePicker control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n \n if (!this.isEditable) {\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, \"sap.ui.model.type.DateTime\", {\n formatOptions: {\n source: { pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\" },\n pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\"\n }\n })\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new DateTimePicker({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName, \"sap.ui.model.type.DateTime\", {\n formatOptions: {\n source: { pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\" },\n pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\"\n }\n }),\n editable: !fieldMetadata.ui?.readOnly,\n required: fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const val = oEvent.getParameter(\"value\");\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n\n return this.control as Control;\n }\n\n /**\n * Retrieves the current datetime string.\n * @returns {unknown} The datetime value.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as DateTimePicker).getValue() : null;\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const input = this.control as DateTimePicker;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(this.metadata.required);\n }\n }\n}\n"],"mappings":"gGAAA,MAKSA,EAAUC,EAAA,cASZ,MAAMC,UAAuBF,EAWzBG,OAAOC,EAAmCC,EAAsBC,EAAoB,OAAQC,EAAwBC,GACvHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAElBL,KAAKM,QAAU,IAAIC,EAAY,CAC3BC,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCc,KAAMV,KAAKW,oBAAoBf,EAAaC,EAAW,6BAA8B,CACjFe,cAAe,CACXC,OAAQ,CAAEC,QAAS,4BACnBA,QAAS,gCAIrBd,KAAKe,sBAAsBf,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEAN,KAAKM,QAAU,IAAIU,EAAe,CAC9BR,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCqB,MAAOjB,KAAKW,oBAAoBf,EAAaC,EAAW,6BAA8B,CAClFe,cAAe,CACXC,OAAQ,CAAEC,QAAS,4BACnBA,QAAS,8BAGjBI,UAAWvB,EAAcwB,IAAIC,SAC7BC,SAAU1B,EAAc0B,SACxBC,OAASC,IACL,MAAMC,EAAMD,EAAOE,aAAa,SAChC,MAAMC,EAAS1B,KAAK2B,8BACpB,GAAI3B,KAAKD,SAAU,CACfC,KAAKD,SAAS2B,EAAOE,QAAS5B,KAAKE,SACvC,KAIRF,KAAKe,sBAAsBf,KAAKM,QAASX,EAAeE,GAExD,OAAOG,KAAKM,OAChB,CAMUuB,WACN,OAAO7B,KAAKM,QAAWN,KAAKM,QAA2BuB,WAAa,IACxE,CAKUC,aACN,GAAI9B,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACtB,MAAM0B,EAAQ/B,KAAKM,QACnByB,EAAMC,aAAahC,KAAKC,SAASkB,IAAIC,UACrCW,EAAME,YAAYjC,KAAKC,SAASoB,SACpC,CACJ,EACH,IAAAa,EAAA,CAAAC,WAAA,MAAAD,EAAAzC,iBAAA,OAAAyC,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"DateTimePlugin.js","names":["BasePlugin","___BasePlugin","DateTimePlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","formatOptions","source","pattern","applyCommonDirectives","DateTimePicker","value","editable","ui","readOnly","required","change","oEvent","val","getParameter","result","validate","isValid","errorMessage","getValue","getProperty","applyState","input","setEditable","setRequired","__exports","__esModule"],"sources":["DateTimePlugin.ts"],"sourcesContent":["/**\n * @file DateTimePlugin.ts\n * @description Handles rendering logic for DateTime strings (timestamps).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport DateTimePicker from \"sap/m/DateTimePicker\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering and logic for timestamps/datetime inputs.\n */\nexport class DateTimePlugin extends BasePlugin {\n /**\n * Renders a `sap.m.DateTimePicker` component.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured DateTimePicker control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n \n if (!this.isEditable) {\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, \"sap.ui.model.type.DateTime\", {\n formatOptions: {\n source: { pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\" },\n pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\"\n }\n })\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new DateTimePicker({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName, \"sap.ui.model.type.DateTime\", {\n formatOptions: {\n source: { pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\" },\n pattern: \"yyyy-MM-dd'T'HH:mm:ss'Z'\"\n }\n }),\n editable: !fieldMetadata.ui?.readOnly,\n required: fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const val = (oEvent as any).getParameter(\"value\");\n const result = this.validate();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey, result.errorMessage);\n }\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n\n return this.control as Control;\n }\n\n /**\n * Retrieves the current datetime string.\n * @returns {unknown} The datetime value.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as DateTimePicker).getProperty('value') : null;\n }\n\n /**\n * Applies dynamic read-only state.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const input = this.control as DateTimePicker;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(this.metadata.required);\n }\n }\n}\n"],"mappings":"gGAAA,MAKSA,EAAUC,EAAA,cASZ,MAAMC,UAAuBF,EAWzBG,OAAOC,EAAmCC,EAAsBC,EAAoB,OAAQC,EAAwBC,GACvHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAElBL,KAAKM,QAAU,IAAIC,EAAY,CAC3BC,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCc,KAAMV,KAAKW,oBAAoBf,EAAaC,EAAW,6BAA8B,CACjFe,cAAe,CACXC,OAAQ,CAAEC,QAAS,4BACnBA,QAAS,gCAIrBd,KAAKe,sBAAsBf,KAAKM,QAASX,EAAeE,GACxD,OAAOG,KAAKM,OAChB,CAEAN,KAAKM,QAAU,IAAIU,EAAe,CAC9BR,GAAIR,KAAKS,iBAAiBX,EAAeF,GACzCqB,MAAOjB,KAAKW,oBAAoBf,EAAaC,EAAW,6BAA8B,CAClFe,cAAe,CACXC,OAAQ,CAAEC,QAAS,4BACnBA,QAAS,8BAGjBI,UAAWvB,EAAcwB,IAAIC,SAC7BC,SAAU1B,EAAc0B,SACxBC,OAASC,IACL,MAAMC,EAAOD,EAAeE,aAAa,SACzC,MAAMC,EAAS1B,KAAK2B,WACpB,GAAI3B,KAAKD,SAAU,CACfC,KAAKD,SAAS2B,EAAOE,QAAS5B,KAAKE,SAAUwB,EAAOG,aACxD,KAIR7B,KAAKe,sBAAsBf,KAAKM,QAASX,EAAeE,GAExD,OAAOG,KAAKM,OAChB,CAMUwB,WACN,OAAO9B,KAAKM,QAAWN,KAAKM,QAA2ByB,YAAY,SAAW,IAClF,CAKUC,aACN,GAAIhC,KAAKM,SAAWN,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACtB,MAAM4B,EAAQjC,KAAKM,QACnB2B,EAAMC,aAAalC,KAAKC,SAASkB,IAAIC,UACrCa,EAAME,YAAYnC,KAAKC,SAASoB,SACpC,CACJ,EACH,IAAAe,EAAA,CAAAC,WAAA,MAAAD,EAAA3C,iBAAA,OAAA2C,CAAA","ignoreList":[]}
@@ -23,7 +23,7 @@ export class DateTimePlugin extends BasePlugin {
23
23
  * @param onChange The callback fired on value change.
24
24
  * @returns {Control} The configured DateTimePicker control.
25
25
  */
26
- public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {
26
+ public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {
27
27
  this.onChange = onChange;
28
28
  this.metadata = fieldMetadata;
29
29
  this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
@@ -54,10 +54,10 @@ export class DateTimePlugin extends BasePlugin {
54
54
  editable: !fieldMetadata.ui?.readOnly,
55
55
  required: fieldMetadata.required,
56
56
  change: (oEvent: sap.ui.base.Event) => {
57
- const val = oEvent.getParameter("value");
58
- const result = this.validateAndApplyVisualState();
57
+ const val = (oEvent as any).getParameter("value");
58
+ const result = this.validate();
59
59
  if (this.onChange) {
60
- this.onChange(result.isValid, this.fieldKey);
60
+ this.onChange(result.isValid, this.fieldKey, result.errorMessage);
61
61
  }
62
62
  }
63
63
  });
@@ -72,7 +72,7 @@ export class DateTimePlugin extends BasePlugin {
72
72
  * @returns {unknown} The datetime value.
73
73
  */
74
74
  protected getValue(): unknown {
75
- return this.control ? (this.control as DateTimePicker).getValue() : null;
75
+ return this.control ? (this.control as DateTimePicker).getProperty('value') : null;
76
76
  }
77
77
 
78
78
  /**
@@ -193,6 +193,7 @@ sap.ui.define(["./BasePlugin", "../../core/PluginRegistry", "sap/m/VBox", "sap/m
193
193
  dialog.open();
194
194
  }
195
195
  });
196
+ this.applyCommonDirectives(this.control, schema, modelName);
196
197
  return this.control;
197
198
  }
198
199
  getValue() {
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryMapPlugin-dbg.js","names":["BasePlugin","___BasePlugin","PluginRegistry","____core_PluginRegistry","DictionaryMapPlugin","_isSyncing","_binding","canHandle","schema","type","additionalProperties","render","bindingPath","modelName","engineScopeId","onChange","model","metadata","valueSchema","container","VBox","width","addStyleClass","absolutePath","startsWith","currentData","getProperty","localItems","Object","keys","map","k","key","value","localModel","JSONModel","items","syncToParent","newDict","forEach","item","trim","setProperty","bindProperty","attachChange","initialize","headerItems","Title","text","title","ui","label","level","isEditable","push","Button","icon","press","header","HBox","justifyContent","alignItems","addItem","columns","Column","Label","hAlign","table","Table","mode","noDataText","setModel","bindItems","path","factory","sId","oContext","rowPath","getPath","keyInput","Input","editable","change","plugin","getInstance","getPlugin","widget","effectiveValueSchema","readOnly","valueControl","Date","now","cells","delBtn","matchIndex","parseInt","split","pop","splice","ColumnListItem","control","id","generateStableId","dialog","Dialog","contentWidth","contentHeight","horizontalScrolling","content","buttons","close","afterClose","removeAllContent","destroy","addDependent","open","getValue","validate","isValid","applyState"],"sources":["DictionaryMapPlugin.ts"],"sourcesContent":["/**\n * @file DictionaryMapPlugin.ts\n * @description Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { ISchema, IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport { PluginRegistry } from \"../../core/PluginRegistry\";\nimport VBox from \"sap/m/VBox\";\nimport HBox from \"sap/m/HBox\";\nimport Input from \"sap/m/Input\";\nimport Button from \"sap/m/Button\";\nimport Title from \"sap/m/Title\";\nimport Table from \"sap/m/Table\";\nimport Column from \"sap/m/Column\";\nimport Label from \"sap/m/Label\";\nimport ColumnListItem from \"sap/m/ColumnListItem\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport Control from \"sap/ui/core/Control\";\nimport Dialog from \"sap/m/Dialog\";\nimport Toolbar from \"sap/m/Toolbar\";\nimport ToolbarSpacer from \"sap/m/ToolbarSpacer\";\n\n/**\n * Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n * Uses a local JSONModel and sap.m.Table to provide a stable, zero-hack UI5 two-way binding experience.\n * \n * @public\n */\nexport default class DictionaryMapPlugin extends BasePlugin {\n private _isSyncing: boolean = false;\n private _binding: sap.ui.model.PropertyBinding | null = null;\n\n public canHandle(schema: ISchema | IPropertyMetadata): boolean {\n return schema.type === \"object\" && typeof schema.additionalProperties === \"object\";\n }\n\n public render(\n schema: ISchema | IPropertyMetadata, \n bindingPath: string, \n modelName: string, \n engineScopeId: string, \n onChange?: () => void, \n model?: sap.ui.model.Model\n ): Control {\n this.onChange = onChange;\n this.metadata = schema as IPropertyMetadata;\n\n\n\n const valueSchema = (schema.additionalProperties as IPropertyMetadata) || { type: \"string\" };\n const container = new VBox({ width: \"100%\" }).addStyleClass(\"sapUiSmallMarginTopBottom\");\n \n const absolutePath = bindingPath.startsWith(\"/\") ? bindingPath : `/${bindingPath}`;\n \n // 1. Initialize local flat array model for the Table\n const currentData = model ? model.getProperty(absolutePath) || {} : {};\n\n \n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n const localModel = new JSONModel({ items: localItems });\n \n // Setup listener to flush local model back to parent dictionary model\n const syncToParent = () => {\n if (!model) return;\n this._isSyncing = true;\n const items = localModel.getProperty(\"/items\") as any[];\n const newDict: Record<string, any> = {};\n items.forEach(item => {\n if (item.key && item.key.trim() !== \"\") {\n newDict[item.key] = item.value;\n }\n });\n\n model.setProperty(absolutePath, newDict);\n if (this.onChange) this.onChange();\n this._isSyncing = false;\n };\n\n if (model) {\n this._binding = model.bindProperty(absolutePath);\n this._binding.attachChange(() => {\n if (this._isSyncing) return;\n const currentData = model.getProperty(absolutePath) || {};\n\n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n localModel.setProperty(\"/items\", localItems);\n });\n this._binding.initialize();\n }\n\n const headerItems: Control[] = [\n new Title({ text: schema.title || schema.ui?.label || \"Dictionary Map\", level: \"H5\" })\n ];\n\n if (this.isEditable) {\n headerItems.push(\n new Button({\n text: \"Add Property\",\n icon: \"sap-icon://add\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as any[];\n items.push({ key: \"\", value: null });\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n })\n );\n }\n\n const header = new HBox({\n justifyContent: \"SpaceBetween\",\n alignItems: \"Center\",\n items: headerItems\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n container.addItem(header);\n\n // 2. Build the Table\n const columns = [\n new Column({ header: new Label({ text: \"Key\" }) }),\n new Column({ header: new Label({ text: \"Value\" }) })\n ];\n\n if (this.isEditable) {\n columns.push(new Column({ width: \"4rem\", hAlign: \"Center\" }));\n }\n\n const table = new Table({\n mode: \"None\",\n noDataText: \"No metadata properties defined.\",\n columns: columns\n });\n\n table.setModel(localModel, \"localDict\");\n\n table.bindItems({\n path: \"localDict>/items\",\n factory: (sId: string, oContext: sap.ui.model.Context) => {\n const rowPath = oContext.getPath();\n \n // Key Input\n const keyInput = new Input({\n value: \"{localDict>key}\",\n editable: this.isEditable,\n change: () => syncToParent()\n });\n\n // Value Control\n const plugin = PluginRegistry.getInstance().getPlugin(valueSchema.type || \"string\", valueSchema.ui?.widget);\n \n // Temporarily override value schema readOnly state if the dictionary as a whole is readOnly\n const effectiveValueSchema = { ...valueSchema };\n if (!this.isEditable) {\n if (!effectiveValueSchema.ui) effectiveValueSchema.ui = {};\n effectiveValueSchema.ui.readOnly = true;\n }\n\n const valueControl = plugin.render(\n effectiveValueSchema,\n `${rowPath}/value`,\n \"localDict\",\n \"dict_\" + Date.now(),\n () => syncToParent(),\n localModel\n );\n\n const cells: Control[] = [keyInput, valueControl];\n\n if (this.isEditable) {\n const delBtn = new Button({\n icon: \"sap-icon://delete\",\n type: \"Reject\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as any[];\n const matchIndex = parseInt(rowPath.split(\"/\").pop() || \"0\", 10);\n items.splice(matchIndex, 1);\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n });\n cells.push(delBtn);\n }\n\n return new ColumnListItem({ cells });\n }\n });\n\n container.addItem(table);\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? \"View Dictionary\" : \"Edit Dictionary\",\n icon: !this.isEditable ? \"sap-icon://display\" : \"sap-icon://form\",\n press: () => {\n\n const dialog = new Dialog({\n title: schema.title || schema.ui?.label || \"Dictionary Map\",\n contentWidth: \"600px\",\n contentHeight: \"400px\",\n horizontalScrolling: false,\n content: [container],\n buttons: [\n new Button({\n text: !this.isEditable ? \"Close\" : \"OK\",\n type: \"Emphasized\",\n press: () => {\n dialog.close();\n }\n })\n ],\n afterClose: () => {\n // Remove container so it isn't destroyed when the dialog is destroyed\n dialog.removeAllContent();\n dialog.destroy();\n }\n });\n \n // Add dependent to ensure models are inherited properly if needed\n if (this.control) {\n this.control.addDependent(dialog);\n }\n \n dialog.open();\n }\n });\n\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return null;\n }\n\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n return { isValid: true };\n }\n\n protected applyState(): void {\n }\n\n public destroy(): void {\n if (this._binding) {\n this._binding.destroy();\n this._binding = null;\n }\n super.destroy();\n }\n}\n"],"mappings":";;;EAAA;AACA;AACA;AACA;EAHA,MAKSA,UAAU,GAAAC,aAAA;EAAA,MAEVC,cAAc,GAAAC,uBAAA;EAgBvB;AACA;AACA;AACA;AACA;AACA;EACe,MAAMC,mBAAmB,SAASJ,UAAU,CAAC;IAChDK,UAAU,GAAY,KAAK;IAC3BC,QAAQ,GAAwC,IAAI;IAErDC,SAASA,CAACC,MAAmC,EAAW;MAC3D,OAAOA,MAAM,CAACC,IAAI,KAAK,QAAQ,IAAI,OAAOD,MAAM,CAACE,oBAAoB,KAAK,QAAQ;IACtF;IAEOC,MAAMA,CACTH,MAAmC,EACnCI,WAAmB,EACnBC,SAAiB,EACjBC,aAAqB,EACrBC,QAAqB,EACrBC,KAA0B,EACnB;MACP,IAAI,CAACD,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACE,QAAQ,GAAGT,MAA2B;MAI3C,MAAMU,WAAW,GAAIV,MAAM,CAACE,oBAAoB,IAA0B;QAAED,IAAI,EAAE;MAAS,CAAC;MAC5F,MAAMU,SAAS,GAAG,IAAIC,IAAI,CAAC;QAAEC,KAAK,EAAE;MAAO,CAAC,CAAC,CAACC,aAAa,CAAC,2BAA2B,CAAC;MAExF,MAAMC,YAAY,GAAGX,WAAW,CAACY,UAAU,CAAC,GAAG,CAAC,GAAGZ,WAAW,GAAG,IAAIA,WAAW,EAAE;;MAElF;MACA,MAAMa,WAAW,GAAGT,KAAK,GAAGA,KAAK,CAACU,WAAW,CAACH,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;MAGtE,MAAMI,UAAU,GAAGC,MAAM,CAACC,IAAI,CAACJ,WAAW,CAAC,CAACK,GAAG,CAACC,CAAC,KAAK;QAAEC,GAAG,EAAED,CAAC;QAAEE,KAAK,EAAER,WAAW,CAACM,CAAC;MAAE,CAAC,CAAC,CAAC;MACzF,MAAMG,UAAU,GAAG,IAAIC,SAAS,CAAC;QAAEC,KAAK,EAAET;MAAW,CAAC,CAAC;;MAEvD;MACA,MAAMU,YAAY,GAAGA,CAAA,KAAM;QACvB,IAAI,CAACrB,KAAK,EAAE;QACZ,IAAI,CAACX,UAAU,GAAG,IAAI;QACtB,MAAM+B,KAAK,GAAGF,UAAU,CAACR,WAAW,CAAC,QAAQ,CAAU;QACvD,MAAMY,OAA4B,GAAG,CAAC,CAAC;QACvCF,KAAK,CAACG,OAAO,CAACC,IAAI,IAAI;UAClB,IAAIA,IAAI,CAACR,GAAG,IAAIQ,IAAI,CAACR,GAAG,CAACS,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACpCH,OAAO,CAACE,IAAI,CAACR,GAAG,CAAC,GAAGQ,IAAI,CAACP,KAAK;UAClC;QACJ,CAAC,CAAC;QAEFjB,KAAK,CAAC0B,WAAW,CAACnB,YAAY,EAAEe,OAAO,CAAC;QACxC,IAAI,IAAI,CAACvB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAAC,CAAC;QAClC,IAAI,CAACV,UAAU,GAAG,KAAK;MAC3B,CAAC;MAED,IAAIW,KAAK,EAAE;QACP,IAAI,CAACV,QAAQ,GAAGU,KAAK,CAAC2B,YAAY,CAACpB,YAAY,CAAC;QAChD,IAAI,CAACjB,QAAQ,CAACsC,YAAY,CAAC,MAAM;UAC7B,IAAI,IAAI,CAACvC,UAAU,EAAE;UACrB,MAAMoB,WAAW,GAAGT,KAAK,CAACU,WAAW,CAACH,YAAY,CAAC,IAAI,CAAC,CAAC;UAEzD,MAAMI,UAAU,GAAGC,MAAM,CAACC,IAAI,CAACJ,WAAW,CAAC,CAACK,GAAG,CAACC,CAAC,KAAK;YAAEC,GAAG,EAAED,CAAC;YAAEE,KAAK,EAAER,WAAW,CAACM,CAAC;UAAE,CAAC,CAAC,CAAC;UACzFG,UAAU,CAACQ,WAAW,CAAC,QAAQ,EAAEf,UAAU,CAAC;QAChD,CAAC,CAAC;QACF,IAAI,CAACrB,QAAQ,CAACuC,UAAU,CAAC,CAAC;MAC9B;MAEA,MAAMC,WAAsB,GAAG,CAC3B,IAAIC,KAAK,CAAC;QAAEC,IAAI,EAAExC,MAAM,CAACyC,KAAK,IAAIzC,MAAM,CAAC0C,EAAE,EAAEC,KAAK,IAAI,gBAAgB;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC,CACzF;MAED,IAAI,IAAI,CAACC,UAAU,EAAE;QACjBP,WAAW,CAACQ,IAAI,CACZ,IAAIC,MAAM,CAAC;UACPP,IAAI,EAAE,cAAc;UACpBQ,IAAI,EAAE,gBAAgB;UACtBC,KAAK,EAAEA,CAAA,KAAM;YACT,MAAMrB,KAAK,GAAGF,UAAU,CAACR,WAAW,CAAC,QAAQ,CAAU;YACvDU,KAAK,CAACkB,IAAI,CAAC;cAAEtB,GAAG,EAAE,EAAE;cAAEC,KAAK,EAAE;YAAK,CAAC,CAAC;YACpCC,UAAU,CAACQ,WAAW,CAAC,QAAQ,EAAEN,KAAK,CAAC;YACvCC,YAAY,CAAC,CAAC;UAClB;QACJ,CAAC,CACL,CAAC;MACL;MAEA,MAAMqB,MAAM,GAAG,IAAIC,IAAI,CAAC;QACpBC,cAAc,EAAE,cAAc;QAC9BC,UAAU,EAAE,QAAQ;QACpBzB,KAAK,EAAEU;MACX,CAAC,CAAC,CAACxB,aAAa,CAAC,wBAAwB,CAAC;MAE1CH,SAAS,CAAC2C,OAAO,CAACJ,MAAM,CAAC;;MAEzB;MACA,MAAMK,OAAO,GAAG,CACZ,IAAIC,MAAM,CAAC;QAAEN,MAAM,EAAE,IAAIO,KAAK,CAAC;UAAEjB,IAAI,EAAE;QAAM,CAAC;MAAE,CAAC,CAAC,EAClD,IAAIgB,MAAM,CAAC;QAAEN,MAAM,EAAE,IAAIO,KAAK,CAAC;UAAEjB,IAAI,EAAE;QAAQ,CAAC;MAAE,CAAC,CAAC,CACvD;MAED,IAAI,IAAI,CAACK,UAAU,EAAE;QACjBU,OAAO,CAACT,IAAI,CAAC,IAAIU,MAAM,CAAC;UAAE3C,KAAK,EAAE,MAAM;UAAE6C,MAAM,EAAE;QAAS,CAAC,CAAC,CAAC;MACjE;MAEA,MAAMC,KAAK,GAAG,IAAIC,KAAK,CAAC;QACpBC,IAAI,EAAE,MAAM;QACZC,UAAU,EAAE,iCAAiC;QAC7CP,OAAO,EAAEA;MACb,CAAC,CAAC;MAEFI,KAAK,CAACI,QAAQ,CAACrC,UAAU,EAAE,WAAW,CAAC;MAEvCiC,KAAK,CAACK,SAAS,CAAC;QACZC,IAAI,EAAE,kBAAkB;QACxBC,OAAO,EAAEA,CAACC,GAAW,EAAEC,QAA8B,KAAK;UACtD,MAAMC,OAAO,GAAGD,QAAQ,CAACE,OAAO,CAAC,CAAC;;UAElC;UACA,MAAMC,QAAQ,GAAG,IAAIC,KAAK,CAAC;YACvB/C,KAAK,EAAE,iBAAiB;YACxBgD,QAAQ,EAAE,IAAI,CAAC5B,UAAU;YACzB6B,MAAM,EAAEA,CAAA,KAAM7C,YAAY,CAAC;UAC/B,CAAC,CAAC;;UAEF;UACA,MAAM8C,MAAM,GAAGjF,cAAc,CAACkF,WAAW,CAAC,CAAC,CAACC,SAAS,CAACnE,WAAW,CAACT,IAAI,IAAI,QAAQ,EAAES,WAAW,CAACgC,EAAE,EAAEoC,MAAM,CAAC;;UAE3G;UACA,MAAMC,oBAAoB,GAAG;YAAE,GAAGrE;UAAY,CAAC;UAC/C,IAAI,CAAC,IAAI,CAACmC,UAAU,EAAE;YAClB,IAAI,CAACkC,oBAAoB,CAACrC,EAAE,EAAEqC,oBAAoB,CAACrC,EAAE,GAAG,CAAC,CAAC;YAC1DqC,oBAAoB,CAACrC,EAAE,CAACsC,QAAQ,GAAG,IAAI;UAC3C;UAEA,MAAMC,YAAY,GAAGN,MAAM,CAACxE,MAAM,CAC9B4E,oBAAoB,EACpB,GAAGV,OAAO,QAAQ,EAClB,WAAW,EACX,OAAO,GAAGa,IAAI,CAACC,GAAG,CAAC,CAAC,EACpB,MAAMtD,YAAY,CAAC,CAAC,EACpBH,UACJ,CAAC;UAED,MAAM0D,KAAgB,GAAG,CAACb,QAAQ,EAAEU,YAAY,CAAC;UAEjD,IAAI,IAAI,CAACpC,UAAU,EAAE;YACjB,MAAMwC,MAAM,GAAG,IAAItC,MAAM,CAAC;cACtBC,IAAI,EAAE,mBAAmB;cACzB/C,IAAI,EAAE,QAAQ;cACdgD,KAAK,EAAEA,CAAA,KAAM;gBACT,MAAMrB,KAAK,GAAGF,UAAU,CAACR,WAAW,CAAC,QAAQ,CAAU;gBACvD,MAAMoE,UAAU,GAAGC,QAAQ,CAAClB,OAAO,CAACmB,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBAChE7D,KAAK,CAAC8D,MAAM,CAACJ,UAAU,EAAE,CAAC,CAAC;gBAC3B5D,UAAU,CAACQ,WAAW,CAAC,QAAQ,EAAEN,KAAK,CAAC;gBACvCC,YAAY,CAAC,CAAC;cAClB;YACJ,CAAC,CAAC;YACFuD,KAAK,CAACtC,IAAI,CAACuC,MAAM,CAAC;UACtB;UAEA,OAAO,IAAIM,cAAc,CAAC;YAAEP;UAAM,CAAC,CAAC;QACxC;MACJ,CAAC,CAAC;MAEFzE,SAAS,CAAC2C,OAAO,CAACK,KAAK,CAAC;MAExB,IAAI,CAACiC,OAAO,GAAG,IAAI7C,MAAM,CAAC;QACtB8C,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACxF,aAAa,EAAEF,WAAW,CAAC;QACrDoC,IAAI,EAAE,CAAC,IAAI,CAACK,UAAU,GAAG,iBAAiB,GAAG,iBAAiB;QAC9DG,IAAI,EAAE,CAAC,IAAI,CAACH,UAAU,GAAG,oBAAoB,GAAG,iBAAiB;QACjEI,KAAK,EAAEA,CAAA,KAAM;UAET,MAAM8C,MAAM,GAAG,IAAIC,MAAM,CAAC;YACtBvD,KAAK,EAAEzC,MAAM,CAACyC,KAAK,IAAIzC,MAAM,CAAC0C,EAAE,EAAEC,KAAK,IAAI,gBAAgB;YAC3DsD,YAAY,EAAE,OAAO;YACrBC,aAAa,EAAE,OAAO;YACtBC,mBAAmB,EAAE,KAAK;YAC1BC,OAAO,EAAE,CAACzF,SAAS,CAAC;YACpB0F,OAAO,EAAE,CACL,IAAItD,MAAM,CAAC;cACPP,IAAI,EAAE,CAAC,IAAI,CAACK,UAAU,GAAG,OAAO,GAAG,IAAI;cACvC5C,IAAI,EAAE,YAAY;cAClBgD,KAAK,EAAEA,CAAA,KAAM;gBACT8C,MAAM,CAACO,KAAK,CAAC,CAAC;cAClB;YACJ,CAAC,CAAC,CACL;YACDC,UAAU,EAAEA,CAAA,KAAM;cACd;cACAR,MAAM,CAACS,gBAAgB,CAAC,CAAC;cACzBT,MAAM,CAACU,OAAO,CAAC,CAAC;YACpB;UACJ,CAAC,CAAC;;UAEF;UACA,IAAI,IAAI,CAACb,OAAO,EAAE;YACd,IAAI,CAACA,OAAO,CAACc,YAAY,CAACX,MAAM,CAAC;UACrC;UAEAA,MAAM,CAACY,IAAI,CAAC,CAAC;QACjB;MACJ,CAAC,CAAC;MAEF,OAAO,IAAI,CAACf,OAAO;IACvB;IAEUgB,QAAQA,CAAA,EAAY;MAC1B,OAAO,IAAI;IACf;IAEOC,QAAQA,CAAA,EAA+D;MAC1E,OAAO;QAAEC,OAAO,EAAE;MAAK,CAAC;IAC5B;IAEUC,UAAUA,CAAA,EAAS,CAC7B;IAEON,OAAOA,CAAA,EAAS;MACnB,IAAI,IAAI,CAAC3G,QAAQ,EAAE;QACf,IAAI,CAACA,QAAQ,CAAC2G,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC3G,QAAQ,GAAG,IAAI;MACxB;MACA,KAAK,CAAC2G,OAAO,CAAC,CAAC;IACnB;EACJ;EAAC,OAAA7G,mBAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"DictionaryMapPlugin-dbg.js","names":["BasePlugin","___BasePlugin","PluginRegistry","____core_PluginRegistry","DictionaryMapPlugin","_isSyncing","_binding","canHandle","schema","type","additionalProperties","render","bindingPath","modelName","engineScopeId","onChange","model","metadata","valueSchema","container","VBox","width","addStyleClass","absolutePath","startsWith","currentData","getProperty","localItems","Object","keys","map","k","key","value","localModel","JSONModel","items","syncToParent","newDict","forEach","item","trim","setProperty","bindProperty","attachChange","initialize","headerItems","Title","text","title","ui","label","level","isEditable","push","Button","icon","press","header","HBox","justifyContent","alignItems","addItem","columns","Column","Label","hAlign","table","Table","mode","noDataText","setModel","bindItems","path","factory","sId","oContext","rowPath","getPath","keyInput","Input","editable","change","plugin","getInstance","getPlugin","widget","effectiveValueSchema","readOnly","valueControl","Date","now","cells","delBtn","matchIndex","parseInt","split","pop","splice","ColumnListItem","control","id","generateStableId","dialog","Dialog","contentWidth","contentHeight","horizontalScrolling","content","buttons","close","afterClose","removeAllContent","destroy","addDependent","open","applyCommonDirectives","getValue","validate","isValid","applyState"],"sources":["DictionaryMapPlugin.ts"],"sourcesContent":["/**\n * @file DictionaryMapPlugin.ts\n * @description Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { ISchema, IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport { PluginRegistry } from \"../../core/PluginRegistry\";\nimport VBox from \"sap/m/VBox\";\nimport HBox from \"sap/m/HBox\";\nimport Input from \"sap/m/Input\";\nimport Button from \"sap/m/Button\";\nimport Title from \"sap/m/Title\";\nimport Table from \"sap/m/Table\";\nimport Column from \"sap/m/Column\";\nimport Label from \"sap/m/Label\";\nimport ColumnListItem from \"sap/m/ColumnListItem\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport Control from \"sap/ui/core/Control\";\nimport Dialog from \"sap/m/Dialog\";\nimport Toolbar from \"sap/m/Toolbar\";\nimport ToolbarSpacer from \"sap/m/ToolbarSpacer\";\n\n/**\n * Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n * Uses a local JSONModel and sap.m.Table to provide a stable, zero-hack UI5 two-way binding experience.\n * \n * @public\n */\nexport default class DictionaryMapPlugin extends BasePlugin {\n private _isSyncing: boolean = false;\n private _binding: sap.ui.model.PropertyBinding | null = null;\n\n public canHandle(schema: ISchema | IPropertyMetadata): boolean {\n return schema.type === \"object\" && typeof schema.additionalProperties === \"object\";\n }\n\n public render(\n schema: ISchema | IPropertyMetadata, \n bindingPath: string, \n modelName: string, \n engineScopeId: string, \n onChange?: () => void, \n model?: sap.ui.model.Model\n ): Control {\n this.onChange = onChange;\n this.metadata = schema as IPropertyMetadata;\n\n\n\n const valueSchema = (schema.additionalProperties as IPropertyMetadata) || { type: \"string\" };\n const container = new VBox({ width: \"100%\" }).addStyleClass(\"sapUiSmallMarginTopBottom\");\n \n const absolutePath = bindingPath.startsWith(\"/\") ? bindingPath : `/${bindingPath}`;\n \n // 1. Initialize local flat array model for the Table\n const currentData = model ? model.getProperty(absolutePath) || {} : {};\n\n \n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n const localModel = new JSONModel({ items: localItems });\n \n // Setup listener to flush local model back to parent dictionary model\n const syncToParent = () => {\n if (!model) return;\n this._isSyncing = true;\n const items = localModel.getProperty(\"/items\") as Record<string, unknown>[];\n const newDict: Record<string, unknown> = {};\n items.forEach(item => {\n if (item.key && item.key.trim() !== \"\") {\n newDict[item.key] = item.value;\n }\n });\n\n model.setProperty(absolutePath, newDict);\n if (this.onChange) this.onChange();\n this._isSyncing = false;\n };\n\n if (model) {\n this._binding = model.bindProperty(absolutePath);\n this._binding.attachChange(() => {\n if (this._isSyncing) return;\n const currentData = model.getProperty(absolutePath) || {};\n\n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n localModel.setProperty(\"/items\", localItems);\n });\n this._binding.initialize();\n }\n\n const headerItems: Control[] = [\n new Title({ text: schema.title || schema.ui?.label || \"Dictionary Map\", level: \"H5\" })\n ];\n\n if (this.isEditable) {\n headerItems.push(\n new Button({\n text: \"Add Property\",\n icon: \"sap-icon://add\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as Record<string, unknown>[];\n items.push({ key: \"\", value: null });\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n })\n );\n }\n\n const header = new HBox({\n justifyContent: \"SpaceBetween\",\n alignItems: \"Center\",\n items: headerItems\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n container.addItem(header);\n\n // 2. Build the Table\n const columns = [\n new Column({ header: new Label({ text: \"Key\" }) }),\n new Column({ header: new Label({ text: \"Value\" }) })\n ];\n\n if (this.isEditable) {\n columns.push(new Column({ width: \"4rem\", hAlign: \"Center\" }));\n }\n\n const table = new Table({\n mode: \"None\",\n noDataText: \"No metadata properties defined.\",\n columns: columns\n });\n\n table.setModel(localModel, \"localDict\");\n\n table.bindItems({\n path: \"localDict>/items\",\n factory: (sId: string, oContext: sap.ui.model.Context) => {\n const rowPath = oContext.getPath();\n \n // Key Input\n const keyInput = new Input({\n value: \"{localDict>key}\",\n editable: this.isEditable,\n change: () => syncToParent()\n });\n\n // Value Control\n const plugin = PluginRegistry.getInstance().getPlugin(valueSchema.type || \"string\", valueSchema.ui?.widget);\n \n // Temporarily override value schema readOnly state if the dictionary as a whole is readOnly\n const effectiveValueSchema = { ...valueSchema };\n if (!this.isEditable) {\n if (!effectiveValueSchema.ui) effectiveValueSchema.ui = {};\n effectiveValueSchema.ui.readOnly = true;\n }\n\n const valueControl = plugin.render(\n effectiveValueSchema,\n `${rowPath}/value`,\n \"localDict\",\n \"dict_\" + Date.now(),\n () => syncToParent(),\n localModel\n );\n\n const cells: Control[] = [keyInput, valueControl];\n\n if (this.isEditable) {\n const delBtn = new Button({\n icon: \"sap-icon://delete\",\n type: \"Reject\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as Record<string, unknown>[];\n const matchIndex = parseInt(rowPath.split(\"/\").pop() || \"0\", 10);\n items.splice(matchIndex, 1);\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n });\n cells.push(delBtn);\n }\n\n return new ColumnListItem({ cells });\n }\n });\n\n container.addItem(table);\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? \"View Dictionary\" : \"Edit Dictionary\",\n icon: !this.isEditable ? \"sap-icon://display\" : \"sap-icon://form\",\n press: () => {\n\n const dialog = new Dialog({\n title: schema.title || schema.ui?.label || \"Dictionary Map\",\n contentWidth: \"600px\",\n contentHeight: \"400px\",\n horizontalScrolling: false,\n content: [container],\n buttons: [\n new Button({\n text: !this.isEditable ? \"Close\" : \"OK\",\n type: \"Emphasized\",\n press: () => {\n dialog.close();\n }\n })\n ],\n afterClose: () => {\n // Remove container so it isn't destroyed when the dialog is destroyed\n dialog.removeAllContent();\n dialog.destroy();\n }\n });\n \n // Add dependent to ensure models are inherited properly if needed\n if (this.control) {\n this.control.addDependent(dialog);\n }\n dialog.open();\n }\n });\n\n this.applyCommonDirectives(this.control, schema, modelName);\n\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return null;\n }\n\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n return { isValid: true };\n }\n\n protected applyState(): void {\n }\n\n public destroy(): void {\n if (this._binding) {\n this._binding.destroy();\n this._binding = null;\n }\n super.destroy();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryMapPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iEAAiE,CAAC;IACjF;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAY3F,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAK1C;;;;;OAKG;IACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;QACvD,OAAO,CAAC,UAAU,CAAkB;QACpC,OAAO,CAAC,QAAQ,CAA6C;QAEtD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,OAAO;QAIvD,MAAM,CACT,MAAM,EAAE,OAAO,GAAG,iBAAiB,EACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,EACrB,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAC3B,OAAO;QA0LV,SAAS,CAAC,QAAQ,IAAI,OAAO;QAItB,QAAQ,IAAI,OAAO,+CAA+C,EAAE,uBAAuB;QAIlG,SAAS,CAAC,UAAU,IAAI,IAAI;QAGrB,OAAO,IAAI,IAAI;KAOzB;CAEA"}
1
+ {"version":3,"file":"DictionaryMapPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iEAAiE,CAAC;IACjF;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAY3F,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAK1C;;;;;OAKG;IACH,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;QACvD,OAAO,CAAC,UAAU,CAAkB;QACpC,OAAO,CAAC,QAAQ,CAA6C;QAEtD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,OAAO;QAIvD,MAAM,CACT,MAAM,EAAE,OAAO,GAAG,iBAAiB,EACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,EACrB,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAC3B,OAAO;QA2LV,SAAS,CAAC,QAAQ,IAAI,OAAO;QAItB,QAAQ,IAAI,OAAO,+CAA+C,EAAE,uBAAuB;QAIlG,SAAS,CAAC,UAAU,IAAI,IAAI;QAGrB,OAAO,IAAI,IAAI;KAOzB;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./BasePlugin","../../core/PluginRegistry","sap/m/VBox","sap/m/HBox","sap/m/Input","sap/m/Button","sap/m/Title","sap/m/Table","sap/m/Column","sap/m/Label","sap/m/ColumnListItem","sap/ui/model/json/JSONModel","sap/m/Dialog"],function(t,e,i,n,s,o,a,l,r,c,d,p,u){"use strict";const h=t["BasePlugin"];const y=e["PluginRegistry"];class g extends h{_isSyncing=false;_binding=null;canHandle(t){return t.type==="object"&&typeof t.additionalProperties==="object"}render(t,e,h,g,m,b){this.onChange=m;this.metadata=t;const f=t.additionalProperties||{type:"string"};const w=new i({width:"100%"}).addStyleClass("sapUiSmallMarginTopBottom");const P=e.startsWith("/")?e:`/${e}`;const C=b?b.getProperty(P)||{}:{};const S=Object.keys(C).map(t=>({key:t,value:C[t]}));const x=new p({items:S});const D=()=>{if(!b)return;this._isSyncing=true;const t=x.getProperty("/items");const e={};t.forEach(t=>{if(t.key&&t.key.trim()!==""){e[t.key]=t.value}});b.setProperty(P,e);if(this.onChange)this.onChange();this._isSyncing=false};if(b){this._binding=b.bindProperty(P);this._binding.attachChange(()=>{if(this._isSyncing)return;const t=b.getProperty(P)||{};const e=Object.keys(t).map(e=>({key:e,value:t[e]}));x.setProperty("/items",e)});this._binding.initialize()}const _=[new a({text:t.title||t.ui?.label||"Dictionary Map",level:"H5"})];if(this.isEditable){_.push(new o({text:"Add Property",icon:"sap-icon://add",press:()=>{const t=x.getProperty("/items");t.push({key:"",value:null});x.setProperty("/items",t);D()}}))}const E=new n({justifyContent:"SpaceBetween",alignItems:"Center",items:_}).addStyleClass("sapUiSmallMarginBottom");w.addItem(E);const k=[new r({header:new c({text:"Key"})}),new r({header:new c({text:"Value"})})];if(this.isEditable){k.push(new r({width:"4rem",hAlign:"Center"}))}const v=new l({mode:"None",noDataText:"No metadata properties defined.",columns:k});v.setModel(x,"localDict");v.bindItems({path:"localDict>/items",factory:(t,e)=>{const i=e.getPath();const n=new s({value:"{localDict>key}",editable:this.isEditable,change:()=>D()});const a=y.getInstance().getPlugin(f.type||"string",f.ui?.widget);const l={...f};if(!this.isEditable){if(!l.ui)l.ui={};l.ui.readOnly=true}const r=a.render(l,`${i}/value`,"localDict","dict_"+Date.now(),()=>D(),x);const c=[n,r];if(this.isEditable){const t=new o({icon:"sap-icon://delete",type:"Reject",press:()=>{const t=x.getProperty("/items");const e=parseInt(i.split("/").pop()||"0",10);t.splice(e,1);x.setProperty("/items",t);D()}});c.push(t)}return new d({cells:c})}});w.addItem(v);this.control=new o({id:this.generateStableId(g,e),text:!this.isEditable?"View Dictionary":"Edit Dictionary",icon:!this.isEditable?"sap-icon://display":"sap-icon://form",press:()=>{const e=new u({title:t.title||t.ui?.label||"Dictionary Map",contentWidth:"600px",contentHeight:"400px",horizontalScrolling:false,content:[w],buttons:[new o({text:!this.isEditable?"Close":"OK",type:"Emphasized",press:()=>{e.close()}})],afterClose:()=>{e.removeAllContent();e.destroy()}});if(this.control){this.control.addDependent(e)}e.open()}});return this.control}getValue(){return null}validate(){return{isValid:true}}applyState(){}destroy(){if(this._binding){this._binding.destroy();this._binding=null}super.destroy()}}return g});
1
+ sap.ui.define(["./BasePlugin","../../core/PluginRegistry","sap/m/VBox","sap/m/HBox","sap/m/Input","sap/m/Button","sap/m/Title","sap/m/Table","sap/m/Column","sap/m/Label","sap/m/ColumnListItem","sap/ui/model/json/JSONModel","sap/m/Dialog"],function(t,e,i,n,s,o,a,l,r,c,p,d,h){"use strict";const u=t["BasePlugin"];const y=e["PluginRegistry"];class m extends u{_isSyncing=false;_binding=null;canHandle(t){return t.type==="object"&&typeof t.additionalProperties==="object"}render(t,e,u,m,g,b){this.onChange=g;this.metadata=t;const f=t.additionalProperties||{type:"string"};const w=new i({width:"100%"}).addStyleClass("sapUiSmallMarginTopBottom");const P=e.startsWith("/")?e:`/${e}`;const C=b?b.getProperty(P)||{}:{};const D=Object.keys(C).map(t=>({key:t,value:C[t]}));const S=new d({items:D});const x=()=>{if(!b)return;this._isSyncing=true;const t=S.getProperty("/items");const e={};t.forEach(t=>{if(t.key&&t.key.trim()!==""){e[t.key]=t.value}});b.setProperty(P,e);if(this.onChange)this.onChange();this._isSyncing=false};if(b){this._binding=b.bindProperty(P);this._binding.attachChange(()=>{if(this._isSyncing)return;const t=b.getProperty(P)||{};const e=Object.keys(t).map(e=>({key:e,value:t[e]}));S.setProperty("/items",e)});this._binding.initialize()}const _=[new a({text:t.title||t.ui?.label||"Dictionary Map",level:"H5"})];if(this.isEditable){_.push(new o({text:"Add Property",icon:"sap-icon://add",press:()=>{const t=S.getProperty("/items");t.push({key:"",value:null});S.setProperty("/items",t);x()}}))}const E=new n({justifyContent:"SpaceBetween",alignItems:"Center",items:_}).addStyleClass("sapUiSmallMarginBottom");w.addItem(E);const v=[new r({header:new c({text:"Key"})}),new r({header:new c({text:"Value"})})];if(this.isEditable){v.push(new r({width:"4rem",hAlign:"Center"}))}const k=new l({mode:"None",noDataText:"No metadata properties defined.",columns:v});k.setModel(S,"localDict");k.bindItems({path:"localDict>/items",factory:(t,e)=>{const i=e.getPath();const n=new s({value:"{localDict>key}",editable:this.isEditable,change:()=>x()});const a=y.getInstance().getPlugin(f.type||"string",f.ui?.widget);const l={...f};if(!this.isEditable){if(!l.ui)l.ui={};l.ui.readOnly=true}const r=a.render(l,`${i}/value`,"localDict","dict_"+Date.now(),()=>x(),S);const c=[n,r];if(this.isEditable){const t=new o({icon:"sap-icon://delete",type:"Reject",press:()=>{const t=S.getProperty("/items");const e=parseInt(i.split("/").pop()||"0",10);t.splice(e,1);S.setProperty("/items",t);x()}});c.push(t)}return new p({cells:c})}});w.addItem(k);this.control=new o({id:this.generateStableId(m,e),text:!this.isEditable?"View Dictionary":"Edit Dictionary",icon:!this.isEditable?"sap-icon://display":"sap-icon://form",press:()=>{const e=new h({title:t.title||t.ui?.label||"Dictionary Map",contentWidth:"600px",contentHeight:"400px",horizontalScrolling:false,content:[w],buttons:[new o({text:!this.isEditable?"Close":"OK",type:"Emphasized",press:()=>{e.close()}})],afterClose:()=>{e.removeAllContent();e.destroy()}});if(this.control){this.control.addDependent(e)}e.open()}});this.applyCommonDirectives(this.control,t,u);return this.control}getValue(){return null}validate(){return{isValid:true}}applyState(){}destroy(){if(this._binding){this._binding.destroy();this._binding=null}super.destroy()}}return m});
2
2
  //# sourceMappingURL=DictionaryMapPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryMapPlugin.js","names":["BasePlugin","___BasePlugin","PluginRegistry","____core_PluginRegistry","DictionaryMapPlugin","_isSyncing","_binding","canHandle","schema","type","additionalProperties","render","bindingPath","modelName","engineScopeId","onChange","model","this","metadata","valueSchema","container","VBox","width","addStyleClass","absolutePath","startsWith","currentData","getProperty","localItems","Object","keys","map","k","key","value","localModel","JSONModel","items","syncToParent","newDict","forEach","item","trim","setProperty","bindProperty","attachChange","initialize","headerItems","Title","text","title","ui","label","level","isEditable","push","Button","icon","press","header","HBox","justifyContent","alignItems","addItem","columns","Column","Label","hAlign","table","Table","mode","noDataText","setModel","bindItems","path","factory","sId","oContext","rowPath","getPath","keyInput","Input","editable","change","plugin","getInstance","getPlugin","widget","effectiveValueSchema","readOnly","valueControl","Date","now","cells","delBtn","matchIndex","parseInt","split","pop","splice","ColumnListItem","control","id","generateStableId","dialog","Dialog","contentWidth","contentHeight","horizontalScrolling","content","buttons","close","afterClose","removeAllContent","destroy","addDependent","open","getValue","validate","isValid","applyState","super"],"sources":["DictionaryMapPlugin.ts"],"sourcesContent":["/**\n * @file DictionaryMapPlugin.ts\n * @description Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { ISchema, IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport { PluginRegistry } from \"../../core/PluginRegistry\";\nimport VBox from \"sap/m/VBox\";\nimport HBox from \"sap/m/HBox\";\nimport Input from \"sap/m/Input\";\nimport Button from \"sap/m/Button\";\nimport Title from \"sap/m/Title\";\nimport Table from \"sap/m/Table\";\nimport Column from \"sap/m/Column\";\nimport Label from \"sap/m/Label\";\nimport ColumnListItem from \"sap/m/ColumnListItem\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport Control from \"sap/ui/core/Control\";\nimport Dialog from \"sap/m/Dialog\";\nimport Toolbar from \"sap/m/Toolbar\";\nimport ToolbarSpacer from \"sap/m/ToolbarSpacer\";\n\n/**\n * Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n * Uses a local JSONModel and sap.m.Table to provide a stable, zero-hack UI5 two-way binding experience.\n * \n * @public\n */\nexport default class DictionaryMapPlugin extends BasePlugin {\n private _isSyncing: boolean = false;\n private _binding: sap.ui.model.PropertyBinding | null = null;\n\n public canHandle(schema: ISchema | IPropertyMetadata): boolean {\n return schema.type === \"object\" && typeof schema.additionalProperties === \"object\";\n }\n\n public render(\n schema: ISchema | IPropertyMetadata, \n bindingPath: string, \n modelName: string, \n engineScopeId: string, \n onChange?: () => void, \n model?: sap.ui.model.Model\n ): Control {\n this.onChange = onChange;\n this.metadata = schema as IPropertyMetadata;\n\n\n\n const valueSchema = (schema.additionalProperties as IPropertyMetadata) || { type: \"string\" };\n const container = new VBox({ width: \"100%\" }).addStyleClass(\"sapUiSmallMarginTopBottom\");\n \n const absolutePath = bindingPath.startsWith(\"/\") ? bindingPath : `/${bindingPath}`;\n \n // 1. Initialize local flat array model for the Table\n const currentData = model ? model.getProperty(absolutePath) || {} : {};\n\n \n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n const localModel = new JSONModel({ items: localItems });\n \n // Setup listener to flush local model back to parent dictionary model\n const syncToParent = () => {\n if (!model) return;\n this._isSyncing = true;\n const items = localModel.getProperty(\"/items\") as any[];\n const newDict: Record<string, any> = {};\n items.forEach(item => {\n if (item.key && item.key.trim() !== \"\") {\n newDict[item.key] = item.value;\n }\n });\n\n model.setProperty(absolutePath, newDict);\n if (this.onChange) this.onChange();\n this._isSyncing = false;\n };\n\n if (model) {\n this._binding = model.bindProperty(absolutePath);\n this._binding.attachChange(() => {\n if (this._isSyncing) return;\n const currentData = model.getProperty(absolutePath) || {};\n\n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n localModel.setProperty(\"/items\", localItems);\n });\n this._binding.initialize();\n }\n\n const headerItems: Control[] = [\n new Title({ text: schema.title || schema.ui?.label || \"Dictionary Map\", level: \"H5\" })\n ];\n\n if (this.isEditable) {\n headerItems.push(\n new Button({\n text: \"Add Property\",\n icon: \"sap-icon://add\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as any[];\n items.push({ key: \"\", value: null });\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n })\n );\n }\n\n const header = new HBox({\n justifyContent: \"SpaceBetween\",\n alignItems: \"Center\",\n items: headerItems\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n container.addItem(header);\n\n // 2. Build the Table\n const columns = [\n new Column({ header: new Label({ text: \"Key\" }) }),\n new Column({ header: new Label({ text: \"Value\" }) })\n ];\n\n if (this.isEditable) {\n columns.push(new Column({ width: \"4rem\", hAlign: \"Center\" }));\n }\n\n const table = new Table({\n mode: \"None\",\n noDataText: \"No metadata properties defined.\",\n columns: columns\n });\n\n table.setModel(localModel, \"localDict\");\n\n table.bindItems({\n path: \"localDict>/items\",\n factory: (sId: string, oContext: sap.ui.model.Context) => {\n const rowPath = oContext.getPath();\n \n // Key Input\n const keyInput = new Input({\n value: \"{localDict>key}\",\n editable: this.isEditable,\n change: () => syncToParent()\n });\n\n // Value Control\n const plugin = PluginRegistry.getInstance().getPlugin(valueSchema.type || \"string\", valueSchema.ui?.widget);\n \n // Temporarily override value schema readOnly state if the dictionary as a whole is readOnly\n const effectiveValueSchema = { ...valueSchema };\n if (!this.isEditable) {\n if (!effectiveValueSchema.ui) effectiveValueSchema.ui = {};\n effectiveValueSchema.ui.readOnly = true;\n }\n\n const valueControl = plugin.render(\n effectiveValueSchema,\n `${rowPath}/value`,\n \"localDict\",\n \"dict_\" + Date.now(),\n () => syncToParent(),\n localModel\n );\n\n const cells: Control[] = [keyInput, valueControl];\n\n if (this.isEditable) {\n const delBtn = new Button({\n icon: \"sap-icon://delete\",\n type: \"Reject\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as any[];\n const matchIndex = parseInt(rowPath.split(\"/\").pop() || \"0\", 10);\n items.splice(matchIndex, 1);\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n });\n cells.push(delBtn);\n }\n\n return new ColumnListItem({ cells });\n }\n });\n\n container.addItem(table);\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? \"View Dictionary\" : \"Edit Dictionary\",\n icon: !this.isEditable ? \"sap-icon://display\" : \"sap-icon://form\",\n press: () => {\n\n const dialog = new Dialog({\n title: schema.title || schema.ui?.label || \"Dictionary Map\",\n contentWidth: \"600px\",\n contentHeight: \"400px\",\n horizontalScrolling: false,\n content: [container],\n buttons: [\n new Button({\n text: !this.isEditable ? \"Close\" : \"OK\",\n type: \"Emphasized\",\n press: () => {\n dialog.close();\n }\n })\n ],\n afterClose: () => {\n // Remove container so it isn't destroyed when the dialog is destroyed\n dialog.removeAllContent();\n dialog.destroy();\n }\n });\n \n // Add dependent to ensure models are inherited properly if needed\n if (this.control) {\n this.control.addDependent(dialog);\n }\n \n dialog.open();\n }\n });\n\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return null;\n }\n\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n return { isValid: true };\n }\n\n protected applyState(): void {\n }\n\n public destroy(): void {\n if (this._binding) {\n this._binding.destroy();\n this._binding = null;\n }\n super.destroy();\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DictionaryMapPlugin.js","names":["BasePlugin","___BasePlugin","PluginRegistry","____core_PluginRegistry","DictionaryMapPlugin","_isSyncing","_binding","canHandle","schema","type","additionalProperties","render","bindingPath","modelName","engineScopeId","onChange","model","this","metadata","valueSchema","container","VBox","width","addStyleClass","absolutePath","startsWith","currentData","getProperty","localItems","Object","keys","map","k","key","value","localModel","JSONModel","items","syncToParent","newDict","forEach","item","trim","setProperty","bindProperty","attachChange","initialize","headerItems","Title","text","title","ui","label","level","isEditable","push","Button","icon","press","header","HBox","justifyContent","alignItems","addItem","columns","Column","Label","hAlign","table","Table","mode","noDataText","setModel","bindItems","path","factory","sId","oContext","rowPath","getPath","keyInput","Input","editable","change","plugin","getInstance","getPlugin","widget","effectiveValueSchema","readOnly","valueControl","Date","now","cells","delBtn","matchIndex","parseInt","split","pop","splice","ColumnListItem","control","id","generateStableId","dialog","Dialog","contentWidth","contentHeight","horizontalScrolling","content","buttons","close","afterClose","removeAllContent","destroy","addDependent","open","applyCommonDirectives","getValue","validate","isValid","applyState","super"],"sources":["DictionaryMapPlugin.ts"],"sourcesContent":["/**\n * @file DictionaryMapPlugin.ts\n * @description Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { ISchema, IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport { PluginRegistry } from \"../../core/PluginRegistry\";\nimport VBox from \"sap/m/VBox\";\nimport HBox from \"sap/m/HBox\";\nimport Input from \"sap/m/Input\";\nimport Button from \"sap/m/Button\";\nimport Title from \"sap/m/Title\";\nimport Table from \"sap/m/Table\";\nimport Column from \"sap/m/Column\";\nimport Label from \"sap/m/Label\";\nimport ColumnListItem from \"sap/m/ColumnListItem\";\nimport JSONModel from \"sap/ui/model/json/JSONModel\";\nimport Control from \"sap/ui/core/Control\";\nimport Dialog from \"sap/m/Dialog\";\nimport Toolbar from \"sap/m/Toolbar\";\nimport ToolbarSpacer from \"sap/m/ToolbarSpacer\";\n\n/**\n * Plugin for rendering open-ended JSON Dictionaries (additionalProperties).\n * Uses a local JSONModel and sap.m.Table to provide a stable, zero-hack UI5 two-way binding experience.\n * \n * @public\n */\nexport default class DictionaryMapPlugin extends BasePlugin {\n private _isSyncing: boolean = false;\n private _binding: sap.ui.model.PropertyBinding | null = null;\n\n public canHandle(schema: ISchema | IPropertyMetadata): boolean {\n return schema.type === \"object\" && typeof schema.additionalProperties === \"object\";\n }\n\n public render(\n schema: ISchema | IPropertyMetadata, \n bindingPath: string, \n modelName: string, \n engineScopeId: string, \n onChange?: () => void, \n model?: sap.ui.model.Model\n ): Control {\n this.onChange = onChange;\n this.metadata = schema as IPropertyMetadata;\n\n\n\n const valueSchema = (schema.additionalProperties as IPropertyMetadata) || { type: \"string\" };\n const container = new VBox({ width: \"100%\" }).addStyleClass(\"sapUiSmallMarginTopBottom\");\n \n const absolutePath = bindingPath.startsWith(\"/\") ? bindingPath : `/${bindingPath}`;\n \n // 1. Initialize local flat array model for the Table\n const currentData = model ? model.getProperty(absolutePath) || {} : {};\n\n \n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n const localModel = new JSONModel({ items: localItems });\n \n // Setup listener to flush local model back to parent dictionary model\n const syncToParent = () => {\n if (!model) return;\n this._isSyncing = true;\n const items = localModel.getProperty(\"/items\") as Record<string, unknown>[];\n const newDict: Record<string, unknown> = {};\n items.forEach(item => {\n if (item.key && item.key.trim() !== \"\") {\n newDict[item.key] = item.value;\n }\n });\n\n model.setProperty(absolutePath, newDict);\n if (this.onChange) this.onChange();\n this._isSyncing = false;\n };\n\n if (model) {\n this._binding = model.bindProperty(absolutePath);\n this._binding.attachChange(() => {\n if (this._isSyncing) return;\n const currentData = model.getProperty(absolutePath) || {};\n\n const localItems = Object.keys(currentData).map(k => ({ key: k, value: currentData[k] }));\n localModel.setProperty(\"/items\", localItems);\n });\n this._binding.initialize();\n }\n\n const headerItems: Control[] = [\n new Title({ text: schema.title || schema.ui?.label || \"Dictionary Map\", level: \"H5\" })\n ];\n\n if (this.isEditable) {\n headerItems.push(\n new Button({\n text: \"Add Property\",\n icon: \"sap-icon://add\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as Record<string, unknown>[];\n items.push({ key: \"\", value: null });\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n })\n );\n }\n\n const header = new HBox({\n justifyContent: \"SpaceBetween\",\n alignItems: \"Center\",\n items: headerItems\n }).addStyleClass(\"sapUiSmallMarginBottom\");\n\n container.addItem(header);\n\n // 2. Build the Table\n const columns = [\n new Column({ header: new Label({ text: \"Key\" }) }),\n new Column({ header: new Label({ text: \"Value\" }) })\n ];\n\n if (this.isEditable) {\n columns.push(new Column({ width: \"4rem\", hAlign: \"Center\" }));\n }\n\n const table = new Table({\n mode: \"None\",\n noDataText: \"No metadata properties defined.\",\n columns: columns\n });\n\n table.setModel(localModel, \"localDict\");\n\n table.bindItems({\n path: \"localDict>/items\",\n factory: (sId: string, oContext: sap.ui.model.Context) => {\n const rowPath = oContext.getPath();\n \n // Key Input\n const keyInput = new Input({\n value: \"{localDict>key}\",\n editable: this.isEditable,\n change: () => syncToParent()\n });\n\n // Value Control\n const plugin = PluginRegistry.getInstance().getPlugin(valueSchema.type || \"string\", valueSchema.ui?.widget);\n \n // Temporarily override value schema readOnly state if the dictionary as a whole is readOnly\n const effectiveValueSchema = { ...valueSchema };\n if (!this.isEditable) {\n if (!effectiveValueSchema.ui) effectiveValueSchema.ui = {};\n effectiveValueSchema.ui.readOnly = true;\n }\n\n const valueControl = plugin.render(\n effectiveValueSchema,\n `${rowPath}/value`,\n \"localDict\",\n \"dict_\" + Date.now(),\n () => syncToParent(),\n localModel\n );\n\n const cells: Control[] = [keyInput, valueControl];\n\n if (this.isEditable) {\n const delBtn = new Button({\n icon: \"sap-icon://delete\",\n type: \"Reject\",\n press: () => {\n const items = localModel.getProperty(\"/items\") as Record<string, unknown>[];\n const matchIndex = parseInt(rowPath.split(\"/\").pop() || \"0\", 10);\n items.splice(matchIndex, 1);\n localModel.setProperty(\"/items\", items);\n syncToParent();\n }\n });\n cells.push(delBtn);\n }\n\n return new ColumnListItem({ cells });\n }\n });\n\n container.addItem(table);\n\n this.control = new Button({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: !this.isEditable ? \"View Dictionary\" : \"Edit Dictionary\",\n icon: !this.isEditable ? \"sap-icon://display\" : \"sap-icon://form\",\n press: () => {\n\n const dialog = new Dialog({\n title: schema.title || schema.ui?.label || \"Dictionary Map\",\n contentWidth: \"600px\",\n contentHeight: \"400px\",\n horizontalScrolling: false,\n content: [container],\n buttons: [\n new Button({\n text: !this.isEditable ? \"Close\" : \"OK\",\n type: \"Emphasized\",\n press: () => {\n dialog.close();\n }\n })\n ],\n afterClose: () => {\n // Remove container so it isn't destroyed when the dialog is destroyed\n dialog.removeAllContent();\n dialog.destroy();\n }\n });\n \n // Add dependent to ensure models are inherited properly if needed\n if (this.control) {\n this.control.addDependent(dialog);\n }\n dialog.open();\n }\n });\n\n this.applyCommonDirectives(this.control, schema, modelName);\n\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return null;\n }\n\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n return { isValid: true };\n }\n\n protected applyState(): void {\n }\n\n public destroy(): void {\n if (this._binding) {\n this._binding.destroy();\n this._binding = null;\n }\n super.destroy();\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -64,8 +64,8 @@ export default class DictionaryMapPlugin extends BasePlugin {
64
64
  const syncToParent = () => {
65
65
  if (!model) return;
66
66
  this._isSyncing = true;
67
- const items = localModel.getProperty("/items") as any[];
68
- const newDict: Record<string, any> = {};
67
+ const items = localModel.getProperty("/items") as Record<string, unknown>[];
68
+ const newDict: Record<string, unknown> = {};
69
69
  items.forEach(item => {
70
70
  if (item.key && item.key.trim() !== "") {
71
71
  newDict[item.key] = item.value;
@@ -99,7 +99,7 @@ export default class DictionaryMapPlugin extends BasePlugin {
99
99
  text: "Add Property",
100
100
  icon: "sap-icon://add",
101
101
  press: () => {
102
- const items = localModel.getProperty("/items") as any[];
102
+ const items = localModel.getProperty("/items") as Record<string, unknown>[];
103
103
  items.push({ key: "", value: null });
104
104
  localModel.setProperty("/items", items);
105
105
  syncToParent();
@@ -172,7 +172,7 @@ export default class DictionaryMapPlugin extends BasePlugin {
172
172
  icon: "sap-icon://delete",
173
173
  type: "Reject",
174
174
  press: () => {
175
- const items = localModel.getProperty("/items") as any[];
175
+ const items = localModel.getProperty("/items") as Record<string, unknown>[];
176
176
  const matchIndex = parseInt(rowPath.split("/").pop() || "0", 10);
177
177
  items.splice(matchIndex, 1);
178
178
  localModel.setProperty("/items", items);
@@ -220,11 +220,12 @@ export default class DictionaryMapPlugin extends BasePlugin {
220
220
  if (this.control) {
221
221
  this.control.addDependent(dialog);
222
222
  }
223
-
224
223
  dialog.open();
225
224
  }
226
225
  });
227
226
 
227
+ this.applyCommonDirectives(this.control, schema, modelName);
228
+
228
229
  return this.control as Control;
229
230
  }
230
231
 
@@ -53,9 +53,9 @@ sap.ui.define(["./BasePlugin", "sap/m/Select", "sap/ui/core/Item", "sap/m/Text"]
53
53
  change: oEvent => {
54
54
  const item = oEvent.getParameter("selectedItem");
55
55
  const val = item ? item.getKey() : "";
56
- const result = this.validateAndApplyVisualState();
56
+ const result = this.validate();
57
57
  if (this.onChange) {
58
- this.onChange(result.isValid, this.fieldKey);
58
+ this.onChange(result.isValid, this.fieldKey, result.errorMessage);
59
59
  }
60
60
  }
61
61
  });
@@ -86,7 +86,12 @@ sap.ui.define(["./BasePlugin", "sap/m/Select", "sap/ui/core/Item", "sap/m/Text"]
86
86
  * @returns {unknown} The selected key.
87
87
  */
88
88
  getValue() {
89
- return this.control ? this.control.getSelectedKey() : null;
89
+ const val = this.control ? this.control.getSelectedKey() : null;
90
+ if (val && this.metadata && (this.metadata.type === "number" || this.metadata.type === "integer")) {
91
+ const parsed = parseFloat(val);
92
+ return isNaN(parsed) ? val : parsed;
93
+ }
94
+ return val;
90
95
  }
91
96
 
92
97
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownPlugin-dbg.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","startsWith","substring","isEditable","valueHelpArray","valueHelp","Array","isArray","enum","map","e","key","String","text","control","TextControl","id","generateStableId","generateBindingInfo","undefined","formatter","match","find","vh","applyCommonDirectives","select","Select","selectedKey","enabled","ui","readOnly","forceSelection","change","oEvent","item","getParameter","val","getKey","result","validateAndApplyVisualState","isValid","length","addItem","Item","forEach","getValue","getSelectedKey","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\n * @file DropdownPlugin.ts\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Select from \"sap/m/Select\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for dropdown inputs.\n * Maps the static `valueHelp` schema array to `sap.ui.core.Item` elements.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class DropdownPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Select` component populated with schema-defined value help.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured Select control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n \n if (!this.isEditable) {\n \n \n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, undefined, {\n formatter: (key: string) => {\n const match = valueHelpArray.find(vh => vh.key === key);\n return match ? match.text : key;\n }\n })\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n const select = new Select({\n id: this.generateStableId(engineScopeId, bindingPath),\n selectedKey: this.generateBindingInfo(bindingPath, modelName),\n enabled: !fieldMetadata.ui?.readOnly,\n forceSelection: false,\n change: (oEvent: sap.ui.base.Event) => {\n const item = oEvent.getParameter(\"selectedItem\");\n const val = item ? item.getKey() : \"\";\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n\n if (valueHelpArray.length > 0) {\n // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\n \n valueHelpArray.forEach(vh => {\n select.addItem(new Item({ key: vh.key, text: vh.text }));\n });\n }\n\n this.control = select;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Retrieves the currently selected key.\n * @returns {unknown} The selected key.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as Select).getSelectedKey() : null;\n }\n\n /**\n * Applies dynamic metadata state (e.g. readOnly) when the ConditionEngine fires.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const select = this.control as Select;\n select.setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DropdownPlugin-dbg.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","startsWith","substring","isEditable","valueHelpArray","valueHelp","Array","isArray","enum","map","e","key","String","text","control","TextControl","id","generateStableId","generateBindingInfo","undefined","formatter","match","find","vh","applyCommonDirectives","select","Select","selectedKey","enabled","ui","readOnly","forceSelection","change","oEvent","item","getParameter","val","getKey","result","validate","isValid","errorMessage","length","addItem","Item","forEach","getValue","getSelectedKey","type","parsed","parseFloat","isNaN","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\n * @file DropdownPlugin.ts\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Select from \"sap/m/Select\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for dropdown inputs.\n * Maps the static `valueHelp` schema array to `sap.ui.core.Item` elements.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class DropdownPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Select` component populated with schema-defined value help.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured Select control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n \n if (!this.isEditable) {\n \n \n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, undefined, {\n formatter: (key: string) => {\n const match = valueHelpArray.find(vh => vh.key === key);\n return match ? match.text : key;\n }\n })\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n const select = new Select({\n id: this.generateStableId(engineScopeId, bindingPath),\n selectedKey: this.generateBindingInfo(bindingPath, modelName),\n enabled: !fieldMetadata.ui?.readOnly,\n forceSelection: false,\n change: (oEvent: sap.ui.base.Event) => {\n const item = (oEvent as any).getParameter(\"selectedItem\");\n const val = item ? item.getKey() : \"\";\n const result = this.validate();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey, result.errorMessage);\n }\n }\n });\n\n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n\n if (valueHelpArray.length > 0) {\n // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\n \n valueHelpArray.forEach(vh => {\n select.addItem(new Item({ key: vh.key, text: vh.text }));\n });\n }\n\n this.control = select;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Retrieves the currently selected key.\n * @returns {unknown} The selected key.\n */\n protected getValue(): unknown {\n const val = this.control ? (this.control as Select).getSelectedKey() : null;\n if (val && this.metadata && (this.metadata.type === \"number\" || this.metadata.type === \"integer\")) {\n const parsed = parseFloat(val);\n return isNaN(parsed) ? val : parsed;\n }\n return val;\n }\n\n /**\n * Applies dynamic metadata state (e.g. readOnly) when the ConditionEngine fires.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const select = this.control as Select;\n select.setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -24,7 +24,7 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin" {
24
24
  * @param onChange The callback fired on value change.
25
25
  * @returns {Control} The configured Select control.
26
26
  */
27
- render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control;
27
+ render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control;
28
28
  /**
29
29
  * Retrieves the currently selected key.
30
30
  * @returns {unknown} The selected key.
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,4DAA4D,CAAC;IAC5E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAGlF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C;;;;;;OAMG;IACH,MAAa,cAAe,SAAQ,UAAU;QAC1C;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAG,WAAW,EAAE,MAAM,EAAG,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA0D7L;;;WAGG;QACH,SAAS,CAAC,QAAQ,IAAI,OAAO;QAI7B;;WAEG;QACH,SAAS,CAAC,UAAU,IAAI,IAAI;KAO/B;CAEA"}
1
+ {"version":3,"file":"DropdownPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,4DAA4D,CAAC;IAC5E;;;OAGG;IAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAGlF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C;;;;;;OAMG;IACH,MAAa,cAAe,SAAQ,UAAU;QAC1C;;;;;;;;;WASG;QACI,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAG,WAAW,EAAE,MAAM,EAAG,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA0DxO;;;WAGG;QACH,SAAS,CAAC,QAAQ,IAAI,OAAO;QAS7B;;WAEG;QACH,SAAS,CAAC,UAAU,IAAI,IAAI;KAO/B;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./BasePlugin","sap/m/Select","sap/ui/core/Item","sap/m/Text"],function(e,t,n,i){"use strict";const a=e["BasePlugin"];class s extends a{render(e,a,s="meta",r,l){this.onChange=l;this.metadata=e;this.fieldKey=a.startsWith("/")?a.substring(1):a;if(!this.isEditable){const t=e.valueHelp&&Array.isArray(e.valueHelp)?e.valueHelp:e.enum?e.enum.map(e=>({key:String(e),text:String(e)})):[];this.control=new i({id:this.generateStableId(r,a),text:this.generateBindingInfo(a,s,undefined,{formatter:e=>{const n=t.find(t=>t.key===e);return n?n.text:e}})});this.applyCommonDirectives(this.control,e,s);return this.control}const o=new t({id:this.generateStableId(r,a),selectedKey:this.generateBindingInfo(a,s),enabled:!e.ui?.readOnly,forceSelection:false,change:e=>{const t=e.getParameter("selectedItem");const n=t?t.getKey():"";const i=this.validateAndApplyVisualState();if(this.onChange){this.onChange(i.isValid,this.fieldKey)}}});const d=e.valueHelp&&Array.isArray(e.valueHelp)?e.valueHelp:e.enum?e.enum.map(e=>({key:String(e),text:String(e)})):[];if(d.length>0){o.addItem(new n({key:"",text:"--- Select ---"}));d.forEach(e=>{o.addItem(new n({key:e.key,text:e.text}))})}this.control=o;this.applyCommonDirectives(this.control,e,s);return this.control}getValue(){return this.control?this.control.getSelectedKey():null}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;const e=this.control;e.setEnabled(!this.metadata.ui?.readOnly)}}}var r={__esModule:true};r.DropdownPlugin=s;return r});
1
+ sap.ui.define(["./BasePlugin","sap/m/Select","sap/ui/core/Item","sap/m/Text"],function(e,t,n,i){"use strict";const a=e["BasePlugin"];class s extends a{render(e,a,s="meta",r,l){this.onChange=l;this.metadata=e;this.fieldKey=a.startsWith("/")?a.substring(1):a;if(!this.isEditable){const t=e.valueHelp&&Array.isArray(e.valueHelp)?e.valueHelp:e.enum?e.enum.map(e=>({key:String(e),text:String(e)})):[];this.control=new i({id:this.generateStableId(r,a),text:this.generateBindingInfo(a,s,undefined,{formatter:e=>{const n=t.find(t=>t.key===e);return n?n.text:e}})});this.applyCommonDirectives(this.control,e,s);return this.control}const o=new t({id:this.generateStableId(r,a),selectedKey:this.generateBindingInfo(a,s),enabled:!e.ui?.readOnly,forceSelection:false,change:e=>{const t=e.getParameter("selectedItem");const n=t?t.getKey():"";const i=this.validate();if(this.onChange){this.onChange(i.isValid,this.fieldKey,i.errorMessage)}}});const d=e.valueHelp&&Array.isArray(e.valueHelp)?e.valueHelp:e.enum?e.enum.map(e=>({key:String(e),text:String(e)})):[];if(d.length>0){o.addItem(new n({key:"",text:"--- Select ---"}));d.forEach(e=>{o.addItem(new n({key:e.key,text:e.text}))})}this.control=o;this.applyCommonDirectives(this.control,e,s);return this.control}getValue(){const e=this.control?this.control.getSelectedKey():null;if(e&&this.metadata&&(this.metadata.type==="number"||this.metadata.type==="integer")){const t=parseFloat(e);return isNaN(t)?e:t}return e}applyState(){if(this.control&&this.metadata){if(!this.isEditable)return;const e=this.control;e.setEnabled(!this.metadata.ui?.readOnly)}}}var r={__esModule:true};r.DropdownPlugin=s;return r});
2
2
  //# sourceMappingURL=DropdownPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownPlugin.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","valueHelpArray","valueHelp","Array","isArray","enum","map","e","key","String","text","control","TextControl","id","generateStableId","generateBindingInfo","undefined","formatter","match","find","vh","applyCommonDirectives","select","Select","selectedKey","enabled","ui","readOnly","forceSelection","change","oEvent","item","getParameter","val","getKey","result","validateAndApplyVisualState","isValid","length","addItem","Item","forEach","getValue","getSelectedKey","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\n * @file DropdownPlugin.ts\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Select from \"sap/m/Select\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for dropdown inputs.\n * Maps the static `valueHelp` schema array to `sap.ui.core.Item` elements.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class DropdownPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Select` component populated with schema-defined value help.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured Select control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n \n if (!this.isEditable) {\n \n \n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, undefined, {\n formatter: (key: string) => {\n const match = valueHelpArray.find(vh => vh.key === key);\n return match ? match.text : key;\n }\n })\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n const select = new Select({\n id: this.generateStableId(engineScopeId, bindingPath),\n selectedKey: this.generateBindingInfo(bindingPath, modelName),\n enabled: !fieldMetadata.ui?.readOnly,\n forceSelection: false,\n change: (oEvent: sap.ui.base.Event) => {\n const item = oEvent.getParameter(\"selectedItem\");\n const val = item ? item.getKey() : \"\";\n const result = this.validateAndApplyVisualState();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey);\n }\n }\n });\n\n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n\n if (valueHelpArray.length > 0) {\n // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\n \n valueHelpArray.forEach(vh => {\n select.addItem(new Item({ key: vh.key, text: vh.text }));\n });\n }\n\n this.control = select;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Retrieves the currently selected key.\n * @returns {unknown} The selected key.\n */\n protected getValue(): unknown {\n return this.control ? (this.control as Select).getSelectedKey() : null;\n }\n\n /**\n * Applies dynamic metadata state (e.g. readOnly) when the ConditionEngine fires.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const select = this.control as Select;\n select.setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"6GAAA,MAKSA,EAAUC,EAAA,cAcZ,MAAMC,UAAuBF,EAWzBG,OAAOC,EAAmCC,EAAsBC,EAAoB,OAAQC,EAAwBC,GACvHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAGlB,MAAMC,EAAiBX,EAAcY,WAAaC,MAAMC,QAAQd,EAAcY,WACxEZ,EAAcY,UACbZ,EAAce,KAAOf,EAAce,KAAKC,IAAIC,IAAC,CAAOC,IAAKC,OAAOF,GAAIG,KAAMD,OAAOF,MAAS,GAEjGZ,KAAKgB,QAAU,IAAIC,EAAY,CAC3BC,GAAIlB,KAAKmB,iBAAiBrB,EAAeF,GACzCmB,KAAMf,KAAKoB,oBAAoBxB,EAAaC,EAAWwB,UAAW,CAC9DC,UAAYT,IACR,MAAMU,EAAQjB,EAAekB,KAAKC,GAAMA,EAAGZ,MAAQA,GACnD,OAAOU,EAAQA,EAAMR,KAAOF,OAIxCb,KAAK0B,sBAAsB1B,KAAKgB,QAASrB,EAAeE,GACxD,OAAOG,KAAKgB,OAChB,CAEA,MAAMW,EAAS,IAAIC,EAAO,CACtBV,GAAIlB,KAAKmB,iBAAiBrB,EAAeF,GACzCiC,YAAa7B,KAAKoB,oBAAoBxB,EAAaC,GACnDiC,SAAUnC,EAAcoC,IAAIC,SAC5BC,eAAgB,MAChBC,OAASC,IACL,MAAMC,EAAOD,EAAOE,aAAa,gBACjC,MAAMC,EAAMF,EAAOA,EAAKG,SAAW,GACnC,MAAMC,EAASxC,KAAKyC,8BACpB,GAAIzC,KAAKD,SAAU,CACfC,KAAKD,SAASyC,EAAOE,QAAS1C,KAAKE,SACvC,KAIR,MAAMI,EAAiBX,EAAcY,WAAaC,MAAMC,QAAQd,EAAcY,WACxEZ,EAAcY,UACbZ,EAAce,KAAOf,EAAce,KAAKC,IAAIC,IAAC,CAAOC,IAAKC,OAAOF,GAAIG,KAAMD,OAAOF,MAAS,GAEjG,GAAIN,EAAeqC,OAAS,EAAG,CAE3BhB,EAAOiB,QAAQ,IAAIC,EAAK,CAAEhC,IAAK,GAAIE,KAAM,oBAEzCT,EAAewC,QAAQrB,IACnBE,EAAOiB,QAAQ,IAAIC,EAAK,CAAEhC,IAAKY,EAAGZ,IAAKE,KAAMU,EAAGV,SAExD,CAEAf,KAAKgB,QAAUW,EACf3B,KAAK0B,sBAAsB1B,KAAKgB,QAASrB,EAAeE,GACxD,OAAOG,KAAKgB,OAChB,CAMU+B,WACN,OAAO/C,KAAKgB,QAAWhB,KAAKgB,QAAmBgC,iBAAmB,IACtE,CAKUC,aACN,GAAIjD,KAAKgB,SAAWhB,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACtB,MAAMsB,EAAS3B,KAAKgB,QACpBW,EAAOuB,YAAYlD,KAAKC,SAAS8B,IAAIC,SACzC,CACJ,EACH,IAAAmB,EAAA,CAAAC,WAAA,MAAAD,EAAA1D,iBAAA,OAAA0D,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"DropdownPlugin.js","names":["BasePlugin","___BasePlugin","DropdownPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","this","metadata","fieldKey","startsWith","substring","isEditable","valueHelpArray","valueHelp","Array","isArray","enum","map","e","key","String","text","control","TextControl","id","generateStableId","generateBindingInfo","undefined","formatter","match","find","vh","applyCommonDirectives","select","Select","selectedKey","enabled","ui","readOnly","forceSelection","change","oEvent","item","getParameter","val","getKey","result","validate","isValid","errorMessage","length","addItem","Item","forEach","getValue","getSelectedKey","type","parsed","parseFloat","isNaN","applyState","setEnabled","__exports","__esModule"],"sources":["DropdownPlugin.ts"],"sourcesContent":["/**\n * @file DropdownPlugin.ts\n * @description Renders a sap.m.Select utilizing the schema's valueHelp structure.\n */\n\nimport { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Select from \"sap/m/Select\";\nimport Item from \"sap/ui/core/Item\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\n/**\n * Handles rendering logic for dropdown inputs.\n * Maps the static `valueHelp` schema array to `sap.ui.core.Item` elements.\n * \n * @namespace nz.co.siliconst.ui5.metaui.plugins.controls\n * @public\n */\nexport class DropdownPlugin extends BasePlugin {\n /**\n * Renders a `sap.m.Select` component populated with schema-defined value help.\n * \n * @param fieldMetadata The specific JSON schema properties for this field.\n * @param bindingPath The JSON path bound to this control.\n * @param modelName The UI5 JSONModel name.\n * @param engineScopeId The deterministic scope ID.\n * @param onChange The callback fired on value change.\n * @returns {Control} The configured Select control.\n */\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;\n \n if (!this.isEditable) {\n \n \n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n \n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName, undefined, {\n formatter: (key: string) => {\n const match = valueHelpArray.find(vh => vh.key === key);\n return match ? match.text : key;\n }\n })\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n const select = new Select({\n id: this.generateStableId(engineScopeId, bindingPath),\n selectedKey: this.generateBindingInfo(bindingPath, modelName),\n enabled: !fieldMetadata.ui?.readOnly,\n forceSelection: false,\n change: (oEvent: sap.ui.base.Event) => {\n const item = (oEvent as any).getParameter(\"selectedItem\");\n const val = item ? item.getKey() : \"\";\n const result = this.validate();\n if (this.onChange) {\n this.onChange(result.isValid, this.fieldKey, result.errorMessage);\n }\n }\n });\n\n const valueHelpArray = fieldMetadata.valueHelp && Array.isArray(fieldMetadata.valueHelp) \n ? fieldMetadata.valueHelp \n : (fieldMetadata.enum ? fieldMetadata.enum.map(e => ({ key: String(e), text: String(e) })) : []);\n\n if (valueHelpArray.length > 0) {\n // Always add the empty placeholder so that 'required' checks can actually fire if the user hasn't made a choice\n select.addItem(new Item({ key: \"\", text: \"--- Select ---\" }));\n \n valueHelpArray.forEach(vh => {\n select.addItem(new Item({ key: vh.key, text: vh.text }));\n });\n }\n\n this.control = select;\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n /**\n * Retrieves the currently selected key.\n * @returns {unknown} The selected key.\n */\n protected getValue(): unknown {\n const val = this.control ? (this.control as Select).getSelectedKey() : null;\n if (val && this.metadata && (this.metadata.type === \"number\" || this.metadata.type === \"integer\")) {\n const parsed = parseFloat(val);\n return isNaN(parsed) ? val : parsed;\n }\n return val;\n }\n\n /**\n * Applies dynamic metadata state (e.g. readOnly) when the ConditionEngine fires.\n */\n protected applyState(): void {\n if (this.control && this.metadata) {\n if (!this.isEditable) return;\n const select = this.control as Select;\n select.setEnabled(!this.metadata.ui?.readOnly);\n }\n }\n}\n"],"mappings":"6GAAA,MAKSA,EAAUC,EAAA,cAcZ,MAAMC,UAAuBF,EAWzBG,OAAOC,EAAmCC,EAAsBC,EAAoB,OAAQC,EAAwBC,GACvHC,KAAKD,SAAWA,EAChBC,KAAKC,SAAWN,EAChBK,KAAKE,SAAWN,EAAYO,WAAW,KAAOP,EAAYQ,UAAU,GAAKR,EAEzE,IAAKI,KAAKK,WAAY,CAGlB,MAAMC,EAAiBX,EAAcY,WAAaC,MAAMC,QAAQd,EAAcY,WACxEZ,EAAcY,UACbZ,EAAce,KAAOf,EAAce,KAAKC,IAAIC,IAAC,CAAOC,IAAKC,OAAOF,GAAIG,KAAMD,OAAOF,MAAS,GAEjGZ,KAAKgB,QAAU,IAAIC,EAAY,CAC3BC,GAAIlB,KAAKmB,iBAAiBrB,EAAeF,GACzCmB,KAAMf,KAAKoB,oBAAoBxB,EAAaC,EAAWwB,UAAW,CAC9DC,UAAYT,IACR,MAAMU,EAAQjB,EAAekB,KAAKC,GAAMA,EAAGZ,MAAQA,GACnD,OAAOU,EAAQA,EAAMR,KAAOF,OAIxCb,KAAK0B,sBAAsB1B,KAAKgB,QAASrB,EAAeE,GACxD,OAAOG,KAAKgB,OAChB,CAEA,MAAMW,EAAS,IAAIC,EAAO,CACtBV,GAAIlB,KAAKmB,iBAAiBrB,EAAeF,GACzCiC,YAAa7B,KAAKoB,oBAAoBxB,EAAaC,GACnDiC,SAAUnC,EAAcoC,IAAIC,SAC5BC,eAAgB,MAChBC,OAASC,IACL,MAAMC,EAAQD,EAAeE,aAAa,gBAC1C,MAAMC,EAAMF,EAAOA,EAAKG,SAAW,GACnC,MAAMC,EAASxC,KAAKyC,WACpB,GAAIzC,KAAKD,SAAU,CACfC,KAAKD,SAASyC,EAAOE,QAAS1C,KAAKE,SAAUsC,EAAOG,aACxD,KAIR,MAAMrC,EAAiBX,EAAcY,WAAaC,MAAMC,QAAQd,EAAcY,WACxEZ,EAAcY,UACbZ,EAAce,KAAOf,EAAce,KAAKC,IAAIC,IAAC,CAAOC,IAAKC,OAAOF,GAAIG,KAAMD,OAAOF,MAAS,GAEjG,GAAIN,EAAesC,OAAS,EAAG,CAE3BjB,EAAOkB,QAAQ,IAAIC,EAAK,CAAEjC,IAAK,GAAIE,KAAM,oBAEzCT,EAAeyC,QAAQtB,IACnBE,EAAOkB,QAAQ,IAAIC,EAAK,CAAEjC,IAAKY,EAAGZ,IAAKE,KAAMU,EAAGV,SAExD,CAEAf,KAAKgB,QAAUW,EACf3B,KAAK0B,sBAAsB1B,KAAKgB,QAASrB,EAAeE,GACxD,OAAOG,KAAKgB,OAChB,CAMUgC,WACN,MAAMV,EAAMtC,KAAKgB,QAAWhB,KAAKgB,QAAmBiC,iBAAmB,KACvE,GAAIX,GAAOtC,KAAKC,WAAaD,KAAKC,SAASiD,OAAS,UAAYlD,KAAKC,SAASiD,OAAS,WAAY,CAC/F,MAAMC,EAASC,WAAWd,GAC1B,OAAOe,MAAMF,GAAUb,EAAMa,CACjC,CACA,OAAOb,CACX,CAKUgB,aACN,GAAItD,KAAKgB,SAAWhB,KAAKC,SAAU,CAC/B,IAAKD,KAAKK,WAAY,OACtB,MAAMsB,EAAS3B,KAAKgB,QACpBW,EAAO4B,YAAYvD,KAAKC,SAAS8B,IAAIC,SACzC,CACJ,EACH,IAAAwB,EAAA,CAAAC,WAAA,MAAAD,EAAA/D,iBAAA,OAAA+D,CAAA","ignoreList":[]}
@@ -28,7 +28,7 @@ export class DropdownPlugin extends BasePlugin {
28
28
  * @param onChange The callback fired on value change.
29
29
  * @returns {Control} The configured Select control.
30
30
  */
31
- public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {
31
+ public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = "meta", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {
32
32
  this.onChange = onChange;
33
33
  this.metadata = fieldMetadata;
34
34
  this.fieldKey = bindingPath.startsWith('/') ? bindingPath.substring(1) : bindingPath;
@@ -59,11 +59,11 @@ export class DropdownPlugin extends BasePlugin {
59
59
  enabled: !fieldMetadata.ui?.readOnly,
60
60
  forceSelection: false,
61
61
  change: (oEvent: sap.ui.base.Event) => {
62
- const item = oEvent.getParameter("selectedItem");
62
+ const item = (oEvent as any).getParameter("selectedItem");
63
63
  const val = item ? item.getKey() : "";
64
- const result = this.validateAndApplyVisualState();
64
+ const result = this.validate();
65
65
  if (this.onChange) {
66
- this.onChange(result.isValid, this.fieldKey);
66
+ this.onChange(result.isValid, this.fieldKey, result.errorMessage);
67
67
  }
68
68
  }
69
69
  });
@@ -91,7 +91,12 @@ export class DropdownPlugin extends BasePlugin {
91
91
  * @returns {unknown} The selected key.
92
92
  */
93
93
  protected getValue(): unknown {
94
- return this.control ? (this.control as Select).getSelectedKey() : null;
94
+ const val = this.control ? (this.control as Select).getSelectedKey() : null;
95
+ if (val && this.metadata && (this.metadata.type === "number" || this.metadata.type === "integer")) {
96
+ const parsed = parseFloat(val);
97
+ return isNaN(parsed) ? val : parsed;
98
+ }
99
+ return val;
95
100
  }
96
101
 
97
102
  /**
@@ -22,15 +22,15 @@ sap.ui.define(["./BasePlugin", "sap/m/Input", "sap/m/Text"], function (___BasePl
22
22
  maxLength: fieldMetadata.maxLength || 0,
23
23
  required: !!fieldMetadata.required,
24
24
  change: oEvent => {
25
- const result = this.validateAndApplyVisualState();
26
- if (this.onChange) this.onChange(result.isValid, this.fieldKey);
25
+ const result = this.validate();
26
+ if (this.onChange) this.onChange(result.isValid, this.fieldKey, result.errorMessage);
27
27
  }
28
28
  });
29
29
  this.applyCommonDirectives(this.control, fieldMetadata, modelName);
30
30
  return this.control;
31
31
  }
32
32
  getValue() {
33
- return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? this.control.getValue() : null;
33
+ return this.control && this.control.getMetadata().getName() === "sap.m.Input" ? this.control.getProperty('value') : null;
34
34
  }
35
35
  applyState() {
36
36
  if (!this.control || !this.metadata || this.control.getMetadata().getName() !== "sap.m.Input") return;
@@ -1 +1 @@
1
- {"version":3,"file":"EmailPlugin-dbg.js","names":["BasePlugin","___BasePlugin","EmailPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","replace","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","applyCommonDirectives","Input","value","type","maxLength","required","change","oEvent","result","validateAndApplyVisualState","isValid","getValue","getMetadata","getName","applyState","input","setEditable","ui","readOnly","setRequired","__exports","__esModule"],"sources":["EmailPlugin.ts"],"sourcesContent":["import { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Input from \"sap/m/Input\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\nexport class EmailPlugin extends BasePlugin {\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.replace(\"/\", \"\");\n \n if (!this.isEditable) {\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName)\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName),\n type: \"Email\",\n maxLength: fieldMetadata.maxLength || 0,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const result = this.validateAndApplyVisualState();\n if (this.onChange) this.onChange(result.isValid, this.fieldKey);\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return this.control && this.control.getMetadata().getName() === \"sap.m.Input\" ? (this.control as Input).getValue() : null;\n }\n\n protected applyState(): void {\n if (!this.control || !this.metadata || this.control.getMetadata().getName() !== \"sap.m.Input\") return;\n const input = this.control as Input;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(!!this.metadata.required);\n }\n}\n"],"mappings":";;;QAASA,UAAU,GAAAC,aAAA;EAMZ,MAAMC,WAAW,SAASF,UAAU,CAAC;IACjCG,MAAMA,CAACC,aAAgC,EAAEC,WAAmB,EAAEC,SAAiB,GAAG,MAAM,EAAEC,aAAsB,EAAEC,QAAwD,EAAW;MACxL,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,QAAQ,GAAGL,aAAa;MAC7B,IAAI,CAACM,QAAQ,GAAGL,WAAW,CAACM,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;MAE5C,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;QAClB,IAAI,CAACC,OAAO,GAAG,IAAIC,WAAW,CAAC;UAC3BC,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACT,aAAa,EAAEF,WAAW,CAAC;UACrDY,IAAI,EAAE,IAAI,CAACC,mBAAmB,CAACb,WAAW,EAAEC,SAAS;QACzD,CAAC,CAAC;QACF,IAAI,CAACa,qBAAqB,CAAC,IAAI,CAACN,OAAO,EAAET,aAAa,EAAEE,SAAS,CAAC;QAClE,OAAO,IAAI,CAACO,OAAO;MACvB;MAEA,IAAI,CAACA,OAAO,GAAG,IAAIO,KAAK,CAAC;QACrBL,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACT,aAAa,EAAEF,WAAW,CAAC;QACrDgB,KAAK,EAAE,IAAI,CAACH,mBAAmB,CAACb,WAAW,EAAEC,SAAS,CAAC;QACvDgB,IAAI,EAAE,OAAO;QACbC,SAAS,EAAEnB,aAAa,CAACmB,SAAS,IAAI,CAAC;QACvCC,QAAQ,EAAE,CAAC,CAACpB,aAAa,CAACoB,QAAQ;QAClCC,MAAM,EAAGC,MAAyB,IAAK;UACnC,MAAMC,MAAM,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;UACjD,IAAI,IAAI,CAACpB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAACmB,MAAM,CAACE,OAAO,EAAE,IAAI,CAACnB,QAAQ,CAAC;QACnE;MACJ,CAAC,CAAC;MAEF,IAAI,CAACS,qBAAqB,CAAC,IAAI,CAACN,OAAO,EAAET,aAAa,EAAEE,SAAS,CAAC;MAClE,OAAO,IAAI,CAACO,OAAO;IACvB;IAEUiB,QAAQA,CAAA,EAAY;MAC1B,OAAO,IAAI,CAACjB,OAAO,IAAI,IAAI,CAACA,OAAO,CAACkB,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,KAAK,aAAa,GAAI,IAAI,CAACnB,OAAO,CAAWiB,QAAQ,CAAC,CAAC,GAAG,IAAI;IAC7H;IAEUG,UAAUA,CAAA,EAAS;MACzB,IAAI,CAAC,IAAI,CAACpB,OAAO,IAAI,CAAC,IAAI,CAACJ,QAAQ,IAAI,IAAI,CAACI,OAAO,CAACkB,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,KAAK,aAAa,EAAE;MAC/F,MAAME,KAAK,GAAG,IAAI,CAACrB,OAAgB;MACnCqB,KAAK,CAACC,WAAW,CAAC,CAAC,IAAI,CAAC1B,QAAQ,CAAC2B,EAAE,EAAEC,QAAQ,CAAC;MAC9CH,KAAK,CAACI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC7B,QAAQ,CAACe,QAAQ,CAAC;IAC/C;EACJ;EAAC,IAAAe,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAArC,WAAA,GAAAA,WAAA;EAAA,OAAAqC,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"EmailPlugin-dbg.js","names":["BasePlugin","___BasePlugin","EmailPlugin","render","fieldMetadata","bindingPath","modelName","engineScopeId","onChange","metadata","fieldKey","replace","isEditable","control","TextControl","id","generateStableId","text","generateBindingInfo","applyCommonDirectives","Input","value","type","maxLength","required","change","oEvent","result","validate","isValid","errorMessage","getValue","getMetadata","getName","getProperty","applyState","input","setEditable","ui","readOnly","setRequired","__exports","__esModule"],"sources":["EmailPlugin.ts"],"sourcesContent":["import { BasePlugin } from \"./BasePlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Input from \"sap/m/Input\";\nimport Control from \"sap/ui/core/Control\";\nimport TextControl from \"sap/m/Text\";\n\nexport class EmailPlugin extends BasePlugin {\n public render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName: string = \"meta\", engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control {\n this.onChange = onChange;\n this.metadata = fieldMetadata;\n this.fieldKey = bindingPath.replace(\"/\", \"\");\n \n if (!this.isEditable) {\n this.control = new TextControl({\n id: this.generateStableId(engineScopeId, bindingPath),\n text: this.generateBindingInfo(bindingPath, modelName)\n });\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n this.control = new Input({\n id: this.generateStableId(engineScopeId, bindingPath),\n value: this.generateBindingInfo(bindingPath, modelName),\n type: \"Email\",\n maxLength: fieldMetadata.maxLength || 0,\n required: !!fieldMetadata.required,\n change: (oEvent: sap.ui.base.Event) => {\n const result = this.validate();\n if (this.onChange) this.onChange(result.isValid, this.fieldKey, result.errorMessage);\n }\n });\n\n this.applyCommonDirectives(this.control, fieldMetadata, modelName);\n return this.control as Control;\n }\n\n protected getValue(): unknown {\n return this.control && this.control.getMetadata().getName() === \"sap.m.Input\" ? (this.control as Input).getProperty('value') : null;\n }\n\n protected applyState(): void {\n if (!this.control || !this.metadata || this.control.getMetadata().getName() !== \"sap.m.Input\") return;\n const input = this.control as Input;\n input.setEditable(!this.metadata.ui?.readOnly);\n input.setRequired(!!this.metadata.required);\n }\n}\n"],"mappings":";;;QAASA,UAAU,GAAAC,aAAA;EAMZ,MAAMC,WAAW,SAASF,UAAU,CAAC;IACjCG,MAAMA,CAACC,aAAgC,EAAEC,WAAmB,EAAEC,SAAiB,GAAG,MAAM,EAAEC,aAAsB,EAAEC,QAAmG,EAAW;MACnO,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MACxB,IAAI,CAACC,QAAQ,GAAGL,aAAa;MAC7B,IAAI,CAACM,QAAQ,GAAGL,WAAW,CAACM,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;MAE5C,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;QAClB,IAAI,CAACC,OAAO,GAAG,IAAIC,WAAW,CAAC;UAC3BC,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACT,aAAa,EAAEF,WAAW,CAAC;UACrDY,IAAI,EAAE,IAAI,CAACC,mBAAmB,CAACb,WAAW,EAAEC,SAAS;QACzD,CAAC,CAAC;QACF,IAAI,CAACa,qBAAqB,CAAC,IAAI,CAACN,OAAO,EAAET,aAAa,EAAEE,SAAS,CAAC;QAClE,OAAO,IAAI,CAACO,OAAO;MACvB;MAEA,IAAI,CAACA,OAAO,GAAG,IAAIO,KAAK,CAAC;QACrBL,EAAE,EAAE,IAAI,CAACC,gBAAgB,CAACT,aAAa,EAAEF,WAAW,CAAC;QACrDgB,KAAK,EAAE,IAAI,CAACH,mBAAmB,CAACb,WAAW,EAAEC,SAAS,CAAC;QACvDgB,IAAI,EAAE,OAAO;QACbC,SAAS,EAAEnB,aAAa,CAACmB,SAAS,IAAI,CAAC;QACvCC,QAAQ,EAAE,CAAC,CAACpB,aAAa,CAACoB,QAAQ;QAClCC,MAAM,EAAGC,MAAyB,IAAK;UACnC,MAAMC,MAAM,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;UAC9B,IAAI,IAAI,CAACpB,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAACmB,MAAM,CAACE,OAAO,EAAE,IAAI,CAACnB,QAAQ,EAAEiB,MAAM,CAACG,YAAY,CAAC;QACxF;MACJ,CAAC,CAAC;MAEF,IAAI,CAACX,qBAAqB,CAAC,IAAI,CAACN,OAAO,EAAET,aAAa,EAAEE,SAAS,CAAC;MAClE,OAAO,IAAI,CAACO,OAAO;IACvB;IAEUkB,QAAQA,CAAA,EAAY;MAC1B,OAAO,IAAI,CAAClB,OAAO,IAAI,IAAI,CAACA,OAAO,CAACmB,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,KAAK,aAAa,GAAI,IAAI,CAACpB,OAAO,CAAWqB,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IACvI;IAEUC,UAAUA,CAAA,EAAS;MACzB,IAAI,CAAC,IAAI,CAACtB,OAAO,IAAI,CAAC,IAAI,CAACJ,QAAQ,IAAI,IAAI,CAACI,OAAO,CAACmB,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,KAAK,aAAa,EAAE;MAC/F,MAAMG,KAAK,GAAG,IAAI,CAACvB,OAAgB;MACnCuB,KAAK,CAACC,WAAW,CAAC,CAAC,IAAI,CAAC5B,QAAQ,CAAC6B,EAAE,EAAEC,QAAQ,CAAC;MAC9CH,KAAK,CAACI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC/B,QAAQ,CAACe,QAAQ,CAAC;IAC/C;EACJ;EAAC,IAAAiB,SAAA;IAAAC,UAAA;EAAA;EAAAD,SAAA,CAAAvC,WAAA,GAAAA,WAAA;EAAA,OAAAuC,SAAA;AAAA","ignoreList":[]}
@@ -3,7 +3,7 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin" {
3
3
  import { IPropertyMetadata } from "nz/co/siliconst/ui5/metaui/interfaces/ISchema";
4
4
  import Control from "sap/ui/core/Control";
5
5
  export class EmailPlugin extends BasePlugin {
6
- render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void): Control;
6
+ render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void): Control;
7
7
  protected getValue(): unknown;
8
8
  protected applyState(): void;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EmailPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,yDAAyD,CAAC;IACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C,MAAa,WAAY,SAAQ,UAAU;QAChC,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA8B3L,SAAS,CAAC,QAAQ,IAAI,OAAO;QAI7B,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
1
+ {"version":3,"file":"EmailPlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,yDAAyD,CAAC;IACzE,OAAO,EAAE,UAAU,EAAE,MAAM,wDAAwD,CAAC;IACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAElF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAG1C,MAAa,WAAY,SAAQ,UAAU;QAChC,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAe,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;QA8BtO,SAAS,CAAC,QAAQ,IAAI,OAAO;QAI7B,SAAS,CAAC,UAAU,IAAI,IAAI;KAM/B;CAEA"}
@@ -1,2 +1,2 @@
1
- sap.ui.define(["./BasePlugin","sap/m/Input","sap/m/Text"],function(t,e,i){"use strict";const a=t["BasePlugin"];class n extends a{render(t,a,n="meta",s,r){this.onChange=r;this.metadata=t;this.fieldKey=a.replace("/","");if(!this.isEditable){this.control=new i({id:this.generateStableId(s,a),text:this.generateBindingInfo(a,n)});this.applyCommonDirectives(this.control,t,n);return this.control}this.control=new e({id:this.generateStableId(s,a),value:this.generateBindingInfo(a,n),type:"Email",maxLength:t.maxLength||0,required:!!t.required,change:t=>{const e=this.validateAndApplyVisualState();if(this.onChange)this.onChange(e.isValid,this.fieldKey)}});this.applyCommonDirectives(this.control,t,n);return this.control}getValue(){return this.control&&this.control.getMetadata().getName()==="sap.m.Input"?this.control.getValue():null}applyState(){if(!this.control||!this.metadata||this.control.getMetadata().getName()!=="sap.m.Input")return;const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(!!this.metadata.required)}}var s={__esModule:true};s.EmailPlugin=n;return s});
1
+ sap.ui.define(["./BasePlugin","sap/m/Input","sap/m/Text"],function(t,e,i){"use strict";const a=t["BasePlugin"];class n extends a{render(t,a,n="meta",s,r){this.onChange=r;this.metadata=t;this.fieldKey=a.replace("/","");if(!this.isEditable){this.control=new i({id:this.generateStableId(s,a),text:this.generateBindingInfo(a,n)});this.applyCommonDirectives(this.control,t,n);return this.control}this.control=new e({id:this.generateStableId(s,a),value:this.generateBindingInfo(a,n),type:"Email",maxLength:t.maxLength||0,required:!!t.required,change:t=>{const e=this.validate();if(this.onChange)this.onChange(e.isValid,this.fieldKey,e.errorMessage)}});this.applyCommonDirectives(this.control,t,n);return this.control}getValue(){return this.control&&this.control.getMetadata().getName()==="sap.m.Input"?this.control.getProperty("value"):null}applyState(){if(!this.control||!this.metadata||this.control.getMetadata().getName()!=="sap.m.Input")return;const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(!!this.metadata.required)}}var s={__esModule:true};s.EmailPlugin=n;return s});
2
2
  //# sourceMappingURL=EmailPlugin.js.map