@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.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js +22 -20
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/BaseAIGenerator.ts +24 -16
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/ai/RestLLMProxy.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js +111 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts +95 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/constants/MetaUIConstants.ts +101 -0
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControl.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/BaseHardwareControlRenderer.ts +2 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/CameraControl.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +47 -47
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts +6 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +62 -66
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js +0 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts +0 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/GeolocationControl.ts +3 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js +0 -11
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts +0 -11
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/RichTextControl.ts +2 -9
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js +2 -7
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts +0 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/SignatureControl.ts +3 -7
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js +1 -6
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts +0 -5
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/VoiceInputControl.ts +9 -12
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js +170 -74
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts +29 -4
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/GeneratorHost.ts +179 -79
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js +41 -38
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts +5 -3
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DataSyncDelegate.ts +46 -38
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js +41 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts +6 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/DialogDelegate.ts +47 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ODataDelegate.ts +8 -7
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js +7 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts +5 -2
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/controls/host/delegates/ValidationDelegate.ts +10 -5
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +215 -38
- package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +21 -3
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +218 -40
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js +86 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts +16 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutMutator.ts +82 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js +142 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/LayoutScorer.ts +147 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js +8 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PipelineManager.ts +7 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +153 -50
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +15 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +164 -53
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js +310 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts +73 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/core/PolicyEngine.ts +307 -0
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +35 -14
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +40 -15
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js +15 -3
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/SchemaValidator.ts +15 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +82 -16
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts +16 -0
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +89 -17
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +12 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +13 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts +50 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/IPolicyPlugin.ts +49 -0
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +23 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +27 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +31 -36
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +26 -29
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +47 -11
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +48 -12
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js +74 -58
- package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js +3 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiParserFactory.ts +3 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiRefResolver.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js +2 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/OpenApiUIMapper.ts +4 -3
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/OpenApiHeuristicEngine.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js +12 -8
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/heuristics/plugins/ProtobufVariantHeuristic.ts +15 -11
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js +20 -12
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi2Parser.ts +24 -16
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js +18 -11
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApi3Parser.ts +22 -15
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js +24 -100
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts +8 -72
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/openapi/parsers/OpenApiPropertyMapper.ts +45 -108
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/actions/ClearFormActionPlugin.ts +2 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +24 -18
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +23 -21
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BarcodeScannerPlugin.ts +7 -7
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js +129 -9
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts +46 -10
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts +145 -15
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js +35 -14
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/BooleanPlugin.ts +38 -14
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CameraPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +69 -20
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts +2 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +77 -21
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DatePlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DateTimePlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DictionaryMapPlugin.ts +6 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js +8 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/DropdownPlugin.ts +10 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/EmailPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/FileUploaderPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/GeolocationPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/LinkPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MessageStripPlugin.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js +7 -6
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiInputPlugin.ts +9 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/MultiSelectPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js +36 -21
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/NumberPlugin.ts +40 -23
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +9 -6
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +10 -8
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/PasswordPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RatingIndicatorPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js +29 -12
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts +5 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ReferencePlugin.ts +30 -10
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/RichTextPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SignaturePlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SliderPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StepInputPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/StringPlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/SwitchPlugin.ts +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +58 -56
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +2 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +66 -55
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js +3 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TimePlugin.ts +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js +4 -4
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/controls/VoiceInputPlugin.ts +5 -5
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/LiveSearchPlugin.ts +5 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js +2 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/ODataListBindingPlugin.ts +6 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js +30 -9
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts +2 -2
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteDropdownPlugin.ts +41 -13
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/plugins/datasources/RemoteValueHelpPlugin.ts +5 -3
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js +41 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNotNullConditionPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js +41 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/IsNullConditionPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js +52 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts +30 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericGreaterThanConditionPlugin.ts +45 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js +52 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts +30 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/NumericLessThanConditionPlugin.ts +45 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js +41 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/conditions/StringEqualsConditionPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/EditableEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/RequirementEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/ValidityEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js +40 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts +28 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/plugins/policies/effects/VisibilityEffectPlugin.ts +34 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js +33 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider-dbg.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts +14 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.d.ts.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js +2 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.js.map +1 -0
- package/src/nz/co/siliconst/ui5/metaui/services/SchemaProvider.ts +24 -0
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger-dbg.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger.d.ts.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger.js.map +1 -1
- package/src/nz/co/siliconst/ui5/metaui/utils/Logger.ts +1 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +0 -75
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +0 -47
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +0 -2
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +0 -1
- package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +0 -72
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePlugin-dbg.js","names":["GlobalPipeline","____core_PipelineManager","Logger","____utils_Logger","BasePlugin","control","metadata","fieldKey","modelName","isEditable","useMessageManager","setEditable","editable","setUseMessageManager","generateStableId","engineScopeId","bindingPath","undefined","safePath","replace","generateBindingInfo","typeInstance","additionalOptions","path","model","type","validate","isValid","getVisible","validatorsToRun","argsMap","maxLength","required","push","minLength","pattern","minimum","maximum","min","max","format","ui","validators","v","name","args","length","errorMessage","val","getValue","result","executeValidation","setVisualValidationState","ctrl","setValueState","coreLibrary","ValueState","None","Error","setValueStateText","error","validateAndApplyVisualState","onStateChange","newMetadata","applyState","applyCommonDirectives","readOnly","visibleOn","ExpressionBuilder","sap","require","expr","build","bindProperty","parts","formatter","enabledOn","setEnabled","destroy","__exports","__esModule"],"sources":["BasePlugin.ts"],"sourcesContent":["/**\n * @file BasePlugin.ts\n * @description Abstract foundation for all MetaUI plugins, enforcing lifecycle hooks for v2 Schema.\n */\n\nimport { IPlugin } from \"../../interfaces/IPlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Control from \"sap/ui/core/Control\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\nimport coreLibrary from \"sap/ui/core/library\";\nimport { Logger } from \"../../utils/Logger\";\n\n/**\n * Abstract class representing a standard MetaUI Plugin.\n * Enforces the required rendering, state extraction, and validation contracts.\n * \n * @abstract\n * @public\n */\nexport abstract class BasePlugin implements IPlugin {\n /** The instantiated UI5 control for this plugin. */\n protected control: Control | null = null;\n\n /** The metadata schema defining the field rules. */\n protected metadata: IPropertyMetadata | null = null;\n\n /** The internal JSON path of the field relative to its parent payload. */\n protected fieldKey: string = \"\";\n\n /** The UI5 JSONModel name used for absolute binding paths. */\n protected modelName: string = \"meta\";\n\n /** Indicates if the engine is enforcing an editable mode. */\n protected isEditable: boolean = true;\n\n /** Indicates if the plugin should delegate visual validation to the MessageManager. */\n protected useMessageManager: boolean = false;\n\n /** Internal callback provided by GeneratorHost to signal validation/data changes upwards */\n protected onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;\n\n /**\n * Injects the global editable mode context into the plugin before rendering.\n * @param editable True if the plugin should render in editable mode.\n */\n public setEditable(editable: boolean): void {\n this.isEditable = editable;\n }\n\n /**\n * Injects the global MessageManager context into the plugin.\n * @param useMessageManager True if the MessageManager is handling validation visual states.\n */\n public setUseMessageManager(useMessageManager: boolean): void {\n this.useMessageManager = useMessageManager;\n }\n\n /**\n * Instantiates the raw UI5 control and binds it to the model.\n * \n * @param fieldMetadata The JSON Schema for the field.\n * @param bindingPath The JSON path to bind to.\n * @param modelName The UI5 model name.\n * @param engineScopeId The deterministic scope ID provided by the Engine to prevent cloning collisions.\n * @param onChange The callback fired natively when a field value blur/change occurs.\n * @returns {Control} The generated UI5 control.\n */\n public abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void, model?: unknown): Control;\n\n /**\n * Generates a deterministic, globally unique ID for this control.\n * Prefixes the sanitized binding path with the Engine's scoped ID.\n */\n protected generateStableId(engineScopeId: string | undefined, bindingPath: string): string | undefined {\n if (!engineScopeId) return undefined;\n // Strip leading slash and replace internal slashes with hyphens\n const safePath = bindingPath.replace(/^\\//, '').replace(/\\//g, '-');\n return `${engineScopeId}--${safePath}`;\n }\n\n /**\n * Extracts the current raw value from the underlying UI5 control.\n */\n protected abstract getValue(): unknown;\n\n /**\n * Generates a standardized programmatic binding configuration object.\n * Ensures perfect architectural consistency across all plugins instead of relying on string parsing.\n * \n * @param bindingPath The relative or absolute path.\n * @param modelName The target model name.\n * @param typeInstance An optional UI5 Type instance (e.g. Integer, Float).\n * @param additionalOptions Optional extra configurations (e.g. formatOptions, constraints).\n * @returns A configuration object ready to be assigned to 'value', 'text', 'state', etc.\n */\n protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>): { path: string, model: string, type?: unknown, [key: string]: unknown } {\n return {\n path: bindingPath,\n model: modelName,\n ...(typeInstance ? { type: typeInstance } : {}),\n ...(additionalOptions || {})\n };\n }\n\n /**\n * Universal pipeline validation.\n */\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n if (!this.control || !this.metadata) return { isValid: true };\n\n // Skip validation for hidden fields (e.g. hidden by ConditionEngine visibleOn)\n if (typeof (this.control as Control).getVisible === \"function\") {\n if (!(this.control as Control).getVisible()) {\n return { isValid: true };\n }\n }\n\n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {\n \"maxLength\": this.metadata.maxLength\n };\n\n if (this.metadata.required) {\n validatorsToRun.push(\"required\");\n }\n if (this.metadata.maxLength) validatorsToRun.push(\"maxLength\");\n if (this.metadata.minLength) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = this.metadata.minLength;\n }\n if (this.metadata.pattern) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = this.metadata.pattern;\n }\n if (this.metadata.minimum !== undefined || this.metadata.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: this.metadata.minimum, max: this.metadata.maximum };\n }\n \n const format = this.metadata.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n\n if (this.metadata.ui?.validators) {\n for (const v of this.metadata.ui.validators) {\n if (typeof v === \"string\") {\n validatorsToRun.push(v);\n } else if (v && v.name) {\n validatorsToRun.push(v.name);\n if (v.args !== undefined) {\n argsMap[v.name] = v.args;\n }\n }\n }\n }\n\n if (validatorsToRun.length === 0) {\n return { isValid: true, errorMessage: undefined, fieldKey: this.fieldKey };\n }\n\n const val = this.getValue();\n const result = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n return { isValid: result.isValid, errorMessage: result.errorMessage, fieldKey: this.fieldKey };\n }\n\n /**\n * Natively manipulates the UI5 control's valueState if the control supports it.\n * Uses reflection to safely apply styles without crashing on structural controls.\n */\n public setVisualValidationState(isValid: boolean, errorMessage?: string): void {\n if (!this.control) return;\n\n \n // Use reflection to check if the control supports ValueState (e.g. sap.m.Input does, sap.m.Text does not)\n type StateControl = {\n setValueState?: (state: string) => void;\n setValueStateText?: (text: string) => void;\n };\n const ctrl = this.control as unknown as StateControl;\n if (typeof ctrl.setValueState === \"function\") {\n ctrl.setValueState(isValid ? coreLibrary.ValueState.None : coreLibrary.ValueState.Error);\n \n if (typeof ctrl.setValueStateText === \"function\") {\n ctrl.setValueStateText(isValid ? \"\" : (errorMessage || \"\"));\n }\n } else {\n Logger.error(\"[MetaUI]\", `Plugin ${this.fieldKey} has no setValueState function!`, \"BasePlugin\");\n }\n }\n\n /**\n * Wraps standard validation and immediately applies the visual state.\n * Ideal for 'change' events to instantly turn fields red on blur.\n */\n protected validateAndApplyVisualState(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n const result = this.validate();\n this.setVisualValidationState(result.isValid, result.errorMessage);\n return result;\n }\n\n /**\n * Executes when the condition engine pushes new schema metadata to this field (e.g. readOnly changing).\n * @param newMetadata The mutated schema metadata.\n */\n public onStateChange(newMetadata: IPropertyMetadata): void {\n this.metadata = newMetadata;\n this.applyState();\n }\n\n /**\n * Abstract hook for the plugin to apply state changes to its specific UI5 control (e.g. placeholders, labels).\n */\n protected abstract applyState(): void;\n\n /**\n * Helper to apply common UI directives (like readOnly, visibleOn) directly to any control.\n */\n protected applyCommonDirectives(control: Control, metadata: IPropertyMetadata, modelName: string = \"meta\"): void {\n const ctrl = control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };\n if (metadata.ui?.readOnly !== undefined && typeof ctrl.setEditable === \"function\") {\n ctrl.setEditable(!metadata.ui.readOnly);\n }\n\n if (metadata.ui?.visibleOn) {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.visibleOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.visibleOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"visible\", { parts: [{ path: \"meta>/\" }], formatter: () => false });\n control.bindProperty(\"visible\", expr);\n }\n\n if (metadata.ui?.enabledOn && typeof ctrl.setEnabled === \"function\") {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.enabledOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.enabledOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"enabled\", expr);\n }\n }\n\n\n\n /**\n * Natively destroys the instantiated UI5 control to prevent memory leaks.\n * Can be overridden by subclasses if they manage secondary controls or custom models.\n */\n public destroy(): void {\n if (this.control && typeof this.control.destroy === \"function\") {\n this.control.destroy();\n this.control = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"BasePlugin-dbg.js","names":["GlobalPipeline","____core_PipelineManager","Logger","____utils_Logger","BasePlugin","control","BLOCKED_PROPS","metadata","fieldKey","modelName","isEditable","useMessageManager","policyInvalidMessage","setEditable","editable","setUseMessageManager","generateStableId","engineScopeId","bindingPath","undefined","safePath","replace","generateBindingInfo","typeInstance","additionalOptions","path","model","type","validate","isValid","getVisible","errorMessage","validatorsToRun","argsMap","maxLength","isRequired","_isDynamicallyRequired","required","push","minLength","pattern","minimum","maximum","min","max","format","ui","validators","v","name","args","length","val","getValue","result","executeValidation","fieldLabel","label","setVisualValidationState","ctrl","setValueState","coreLibrary","ValueState","None","Error","setValueStateText","applyError","clearError","applyVisibility","isVisible","setVisible","applyRequired","setRequired","applyEditable","setEnabled","onStateChange","newMetadata","applyState","applyCommonDirectives","readOnly","visibleOn","ExpressionBuilder","sap","require","expr","build","bindProperty","parts","formatter","enabledOn","controlProps","console","error","targetControl","mainControl","target","getMetadata","targetMeta","settings","propName","propValue","Object","entries","includes","warn","hasAggregation","hasEvent","startsWith","endsWith","injectedValue","applySettings","err","getName","message","destroy","__exports","__esModule"],"sources":["BasePlugin.ts"],"sourcesContent":["/**\n * @file BasePlugin.ts\n * @description Abstract foundation for all MetaUI plugins, enforcing lifecycle hooks for v2 Schema.\n */\n\nimport { IPlugin } from \"../../interfaces/IPlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Control from \"sap/ui/core/Control\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\nimport * as coreLibrary from \"sap/ui/core/library\";\nimport { Logger } from \"../../utils/Logger\";\n\n/**\n * Abstract class representing a standard MetaUI Plugin.\n * Enforces the required rendering, state extraction, and validation contracts.\n * \n * @abstract\n * @public\n */\nexport abstract class BasePlugin implements IPlugin {\n /** The instantiated UI5 control for this plugin. */\n protected control: Control | null = null;\n\n /** Explicit reference to the core data widget when this plugin is wrapped in a layout. */\n protected mainControl?: Control;\n\n /** Properties strictly protected by the Sandbox engine. */\n protected BLOCKED_PROPS = [\"value\", \"text\", \"selectedKey\", \"selected\", \"dateValue\", \"editable\", \"enabled\", \"visible\", \"valueState\", \"valueStateText\", \"items\", \"content\", \"pages\", \"formElements\", \"change\", \"press\", \"select\", \"submit\"];\n\n /** The metadata schema defining the field rules. */\n protected metadata: IPropertyMetadata | null = null;\n\n /** The internal JSON path of the field relative to its parent payload. */\n protected fieldKey: string = \"\";\n\n /** The UI5 JSONModel name used for absolute binding paths. */\n protected modelName: string = \"meta\";\n\n /** Indicates if the engine is enforcing an editable mode. */\n protected isEditable: boolean = true;\n\n /** Indicates if the plugin should delegate visual validation to the MessageManager. */\n protected useMessageManager: boolean = false;\n\n /** Internal callback provided by GeneratorHost to signal validation/data changes upwards */\n protected onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;\n\n /** \n * Tracks explicitly forced invalid states pushed down from the PolicyEngine.\n * When populated, this error takes absolute precedence over static SchemaValidator rules.\n */\n protected policyInvalidMessage: string | null = null;\n\n /** Transient state tracking for PBRE required evaluations to prevent schema clobbering */\n protected _isDynamicallyRequired?: boolean;\n\n /**\n * Injects the global editable mode context into the plugin before rendering.\n * @param editable True if the plugin should render in editable mode.\n */\n public setEditable(editable: boolean): void {\n this.isEditable = editable;\n }\n\n /**\n * Injects the global MessageManager context into the plugin.\n * @param useMessageManager True if the MessageManager is handling validation visual states.\n */\n public setUseMessageManager(useMessageManager: boolean): void {\n this.useMessageManager = useMessageManager;\n }\n\n /**\n * Instantiates the raw UI5 control and binds it to the model.\n * \n * @param fieldMetadata The JSON Schema for the field.\n * @param bindingPath The JSON path to bind to.\n * @param modelName The UI5 model name.\n * @param engineScopeId The deterministic scope ID provided by the Engine to prevent cloning collisions.\n * @param onChange The callback fired natively when a field value blur/change occurs.\n * @returns {Control} The generated UI5 control.\n */\n public abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void, model?: unknown): Control;\n\n /**\n * Generates a deterministic, globally unique ID for this control.\n * Prefixes the sanitized binding path with the Engine's scoped ID.\n */\n protected generateStableId(engineScopeId: string | undefined, bindingPath: string): string | undefined {\n if (!engineScopeId) return undefined;\n // Strip leading slash and replace internal slashes with hyphens\n const safePath = bindingPath.replace(/^\\//, '').replace(/\\//g, '-');\n return `${engineScopeId}--${safePath}`;\n }\n\n /**\n * Extracts the current raw value from the underlying UI5 control.\n */\n protected abstract getValue(): unknown;\n\n /**\n * Generates a standardized programmatic binding configuration object.\n * Ensures perfect architectural consistency across all plugins instead of relying on string parsing.\n * \n * @param bindingPath The relative or absolute path.\n * @param modelName The target model name.\n * @param typeInstance An optional UI5 Type instance (e.g. Integer, Float).\n * @param additionalOptions Optional extra configurations (e.g. formatOptions, constraints).\n * @returns A configuration object ready to be assigned to 'value', 'text', 'state', etc.\n */\n protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>): any {\n return {\n path: bindingPath,\n model: modelName,\n ...(typeInstance ? { type: typeInstance } : {}),\n ...(additionalOptions || {})\n };\n }\n\n /**\n * Universal pipeline validation.\n */\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n if (!this.control || !this.metadata) return { isValid: true };\n\n // Skip validation for hidden fields (e.g. hidden by ConditionEngine visibleOn)\n if (typeof (this.control as Control).getVisible === \"function\") {\n if (!(this.control as Control).getVisible()) {\n return { isValid: true };\n }\n }\n\n if (this.policyInvalidMessage) {\n return { isValid: false, errorMessage: this.policyInvalidMessage, fieldKey: this.fieldKey };\n }\n\n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {\n \"maxLength\": this.metadata.maxLength\n };\n\n const isRequired = this._isDynamicallyRequired !== undefined ? this._isDynamicallyRequired : this.metadata.required;\n if (isRequired) {\n validatorsToRun.push(\"required\");\n }\n if (this.metadata.maxLength) validatorsToRun.push(\"maxLength\");\n if (this.metadata.minLength) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = this.metadata.minLength;\n }\n if (this.metadata.pattern) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = this.metadata.pattern;\n }\n if (this.metadata.minimum !== undefined || this.metadata.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: this.metadata.minimum, max: this.metadata.maximum };\n }\n\n const format = this.metadata.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n\n if (this.metadata.ui?.validators) {\n for (const v of this.metadata.ui.validators) {\n if (typeof v === \"string\") {\n validatorsToRun.push(v);\n } else if (v && v.name) {\n validatorsToRun.push(v.name);\n if (v.args !== undefined) {\n argsMap[v.name] = v.args;\n }\n }\n }\n }\n\n if (validatorsToRun.length === 0) {\n return { isValid: true, errorMessage: undefined, fieldKey: this.fieldKey };\n }\n\n const val = this.getValue();\n const result = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n return { isValid: result.isValid, errorMessage: result.errorMessage, fieldKey: this.fieldKey, fieldLabel: this.metadata?.ui?.label };\n }\n\n /**\n * Natively manipulates the UI5 control's valueState if the control supports it.\n * Uses reflection to safely apply styles without crashing on structural controls.\n */\n public setVisualValidationState(isValid: boolean, errorMessage?: string): void {\n if (!this.control) return;\n\n\n // Use reflection to check if the control supports ValueState (e.g. sap.m.Input does, sap.m.Text does not)\n type StateControl = {\n setValueState?: (state: string) => void;\n setValueStateText?: (text: string) => void;\n };\n const ctrl = this.control as unknown as StateControl;\n if (typeof ctrl.setValueState === \"function\") {\n ctrl.setValueState(isValid ? coreLibrary.ValueState.None : coreLibrary.ValueState.Error);\n\n if (typeof ctrl.setValueStateText === \"function\") {\n ctrl.setValueStateText(isValid ? \"\" : (errorMessage || \"\"));\n }\n } else {\n // Quietly ignore. Controls like sap.m.Text natively do not support value states, which is completely valid.\n }\n }\n\n\n\n // --- IPluginStateReceiver Implementation for PBRE ---\n\n /**\n * Natively applies a forced error state from the PolicyEngine.\n * Per MetaUI Architecture Rule 12, this explicitly forces the visual state red \n * independently of the MessageManager auto-sync.\n * \n * @param errorMessage The custom error message to display.\n */\n public applyError(errorMessage: string): void {\n this.policyInvalidMessage = errorMessage;\n this.setVisualValidationState(false, errorMessage);\n }\n\n /**\n * Clears a previously forced error state.\n * Restores the visual boundary to standard (non-error) formatting.\n */\n public clearError(): void {\n this.policyInvalidMessage = null;\n this.setVisualValidationState(true);\n }\n\n /**\n * Dynamically manipulates the visibility state of the control based on PolicyEngine directives.\n * \n * @param isVisible True to display the control, false to hide it.\n */\n public applyVisibility(isVisible: boolean): void {\n const ctrl = this.control as unknown as { setVisible?: (b: boolean) => void };\n if (ctrl && typeof ctrl.setVisible === \"function\") {\n ctrl.setVisible(isVisible);\n }\n }\n\n /**\n * Dynamically alters the mandatory status of the field.\n * Updates internal transient state to ensure the `validate()` pipeline enforces the change,\n * and natively triggers the UI5 required indicator (asterisk) if supported,\n * without permanently corrupting the shared global schema definition.\n * \n * @param isRequired True to make the field mandatory, false to make it optional.\n */\n public applyRequired(isRequired: boolean): void {\n this._isDynamicallyRequired = isRequired;\n const ctrl = this.control as unknown as { setRequired?: (b: boolean) => void };\n if (ctrl && typeof ctrl.setRequired === \"function\") {\n ctrl.setRequired(isRequired);\n }\n }\n\n /**\n * Dynamically alters the editability of the field.\n * Falls back to `setEnabled` if the control is structural rather than purely input-driven.\n * \n * @param isEditable True to allow user input, false to lock it.\n */\n public applyEditable(isEditable: boolean): void {\n const ctrl = this.control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };\n if (ctrl && typeof ctrl.setEditable === \"function\") {\n ctrl.setEditable(isEditable);\n } else if (ctrl && typeof ctrl.setEnabled === \"function\") {\n ctrl.setEnabled(isEditable);\n }\n }\n\n /**\n * Executes when the condition engine pushes new schema metadata to this field (e.g. readOnly changing).\n * @param newMetadata The mutated schema metadata.\n */\n public onStateChange(newMetadata: IPropertyMetadata): void {\n this.metadata = newMetadata;\n this.applyState();\n }\n\n /**\n * Abstract hook for the plugin to apply state changes to its specific UI5 control (e.g. placeholders, labels).\n */\n protected abstract applyState(): void;\n\n /**\n * Helper to apply common UI directives (like readOnly, visibleOn) directly to any control.\n */\n protected applyCommonDirectives(control: Control, metadata: IPropertyMetadata, modelName: string = \"meta\"): void {\n const ctrl = control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };\n if (metadata.ui?.readOnly !== undefined && typeof ctrl.setEditable === \"function\") {\n ctrl.setEditable(!metadata.ui.readOnly);\n }\n\n if (metadata.ui?.visibleOn) {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.visibleOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.visibleOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"visible\", { parts: [{ path: \"meta>/\" }], formatter: () => false });\n control.bindProperty(\"visible\", expr);\n }\n\n if (metadata.ui?.enabledOn && typeof ctrl.setEnabled === \"function\") {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.enabledOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.enabledOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"enabled\", expr);\n }\n\n if (metadata.ui?.controlProps) {\n console.error(`[DEBUG MetaUI] controlProps found for ${this.fieldKey}`, metadata.ui.controlProps);\n const targetControl = this.mainControl || control;\n const target = targetControl as unknown as {\n getMetadata?: () => { getName(): string },\n applySettings?: (settings: Record<string, any>) => void,\n setProperty?: (p: string, v: unknown) => void,\n bindProperty?: (p: string, v: string) => void\n };\n\n if (typeof target.getMetadata === \"function\") {\n const targetMeta = target.getMetadata();\n const settings: Record<string, any> = {};\n for (const [propName, propValue] of Object.entries(metadata.ui.controlProps)) {\n if (this.BLOCKED_PROPS.includes(propName)) {\n Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Property is protected by sandbox)`);\n continue;\n }\n \n // Natively block any aggregations or events to prevent sandbox escapes\n if (typeof (targetMeta as any).hasAggregation === \"function\" && (targetMeta as any).hasAggregation(propName)) {\n Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack aggregations)`);\n continue;\n }\n \n if (typeof (targetMeta as any).hasEvent === \"function\" && (targetMeta as any).hasEvent(propName)) {\n Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack events)`);\n continue;\n }\n\n if (typeof propValue === \"string\" && propValue.startsWith(\"{\") && propValue.endsWith(\"}\")) {\n // The JSON payloads often hardcode 'metaui>' in raw expression bindings, \n // but the Engine dynamically generates model names like 'metaUI_Host1'. \n // We must inject the actual modelName dynamically into the expression string.\n const injectedValue = propValue.replace(/metaui>/g, `${modelName}>`);\n settings[propName] = injectedValue;\n } else {\n settings[propName] = propValue;\n }\n }\n\n try {\n const target = targetControl as unknown as { applySettings?: (s: Record<string, any>) => void };\n if (typeof target.applySettings === \"function\") {\n target.applySettings(settings);\n }\n } catch (err: unknown) {\n Logger.warn(`[BasePlugin] Failed to apply controlProps for field '${this.fieldKey}' on control ${targetMeta.getName()}: ${(err as Error).message}`);\n }\n }\n }\n }\n\n\n\n /**\n * Natively destroys the instantiated UI5 control to prevent memory leaks.\n * Can be overridden by subclasses if they manage secondary controls or custom models.\n */\n public destroy(): void {\n if (this.control && typeof this.control.destroy === \"function\") {\n this.control.destroy();\n this.control = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,6 +16,10 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin" {
|
|
|
16
16
|
export abstract class BasePlugin implements IPlugin {
|
|
17
17
|
/** The instantiated UI5 control for this plugin. */
|
|
18
18
|
protected control: Control | null;
|
|
19
|
+
/** Explicit reference to the core data widget when this plugin is wrapped in a layout. */
|
|
20
|
+
protected mainControl?: Control;
|
|
21
|
+
/** Properties strictly protected by the Sandbox engine. */
|
|
22
|
+
protected BLOCKED_PROPS: string[];
|
|
19
23
|
/** The metadata schema defining the field rules. */
|
|
20
24
|
protected metadata: IPropertyMetadata | null;
|
|
21
25
|
/** The internal JSON path of the field relative to its parent payload. */
|
|
@@ -28,6 +32,13 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin" {
|
|
|
28
32
|
protected useMessageManager: boolean;
|
|
29
33
|
/** Internal callback provided by GeneratorHost to signal validation/data changes upwards */
|
|
30
34
|
protected onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Tracks explicitly forced invalid states pushed down from the PolicyEngine.
|
|
37
|
+
* When populated, this error takes absolute precedence over static SchemaValidator rules.
|
|
38
|
+
*/
|
|
39
|
+
protected policyInvalidMessage: string | null;
|
|
40
|
+
/** Transient state tracking for PBRE required evaluations to prevent schema clobbering */
|
|
41
|
+
protected _isDynamicallyRequired?: boolean;
|
|
31
42
|
/**
|
|
32
43
|
* Injects the global editable mode context into the plugin before rendering.
|
|
33
44
|
* @param editable True if the plugin should render in editable mode.
|
|
@@ -48,7 +59,7 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin" {
|
|
|
48
59
|
* @param onChange The callback fired natively when a field value blur/change occurs.
|
|
49
60
|
* @returns {Control} The generated UI5 control.
|
|
50
61
|
*/
|
|
51
|
-
abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void, model?: unknown): Control;
|
|
62
|
+
abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void, model?: unknown): Control;
|
|
52
63
|
/**
|
|
53
64
|
* Generates a deterministic, globally unique ID for this control.
|
|
54
65
|
* Prefixes the sanitized binding path with the Engine's scoped ID.
|
|
@@ -68,12 +79,7 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin" {
|
|
|
68
79
|
* @param additionalOptions Optional extra configurations (e.g. formatOptions, constraints).
|
|
69
80
|
* @returns A configuration object ready to be assigned to 'value', 'text', 'state', etc.
|
|
70
81
|
*/
|
|
71
|
-
protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>):
|
|
72
|
-
path: string;
|
|
73
|
-
model: string;
|
|
74
|
-
type?: unknown;
|
|
75
|
-
[key: string]: unknown;
|
|
76
|
-
};
|
|
82
|
+
protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>): any;
|
|
77
83
|
/**
|
|
78
84
|
* Universal pipeline validation.
|
|
79
85
|
*/
|
|
@@ -84,10 +90,40 @@ declare module "nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin" {
|
|
|
84
90
|
*/
|
|
85
91
|
setVisualValidationState(isValid: boolean, errorMessage?: string): void;
|
|
86
92
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
93
|
+
* Natively applies a forced error state from the PolicyEngine.
|
|
94
|
+
* Per MetaUI Architecture Rule 12, this explicitly forces the visual state red
|
|
95
|
+
* independently of the MessageManager auto-sync.
|
|
96
|
+
*
|
|
97
|
+
* @param errorMessage The custom error message to display.
|
|
98
|
+
*/
|
|
99
|
+
applyError(errorMessage: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Clears a previously forced error state.
|
|
102
|
+
* Restores the visual boundary to standard (non-error) formatting.
|
|
103
|
+
*/
|
|
104
|
+
clearError(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Dynamically manipulates the visibility state of the control based on PolicyEngine directives.
|
|
107
|
+
*
|
|
108
|
+
* @param isVisible True to display the control, false to hide it.
|
|
109
|
+
*/
|
|
110
|
+
applyVisibility(isVisible: boolean): void;
|
|
111
|
+
/**
|
|
112
|
+
* Dynamically alters the mandatory status of the field.
|
|
113
|
+
* Updates internal transient state to ensure the `validate()` pipeline enforces the change,
|
|
114
|
+
* and natively triggers the UI5 required indicator (asterisk) if supported,
|
|
115
|
+
* without permanently corrupting the shared global schema definition.
|
|
116
|
+
*
|
|
117
|
+
* @param isRequired True to make the field mandatory, false to make it optional.
|
|
118
|
+
*/
|
|
119
|
+
applyRequired(isRequired: boolean): void;
|
|
120
|
+
/**
|
|
121
|
+
* Dynamically alters the editability of the field.
|
|
122
|
+
* Falls back to `setEnabled` if the control is structural rather than purely input-driven.
|
|
123
|
+
*
|
|
124
|
+
* @param isEditable True to allow user input, false to lock it.
|
|
89
125
|
*/
|
|
90
|
-
|
|
126
|
+
applyEditable(isEditable: boolean): void;
|
|
91
127
|
/**
|
|
92
128
|
* Executes when the condition engine pushes new schema metadata to this field (e.g. readOnly changing).
|
|
93
129
|
* @param newMetadata The mutated schema metadata.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,wDAAwD,CAAC;IACxE;;;OAGG;IAEH,OAAO,EAAE,OAAO,EAAE,MAAM,+CAA+C,CAAC;IACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;IAClF,OAAO,OAAO,MAAM,qBAAqB,CAAC;IAK1C;;;;;;OAMG;IACH,eAAsB,UAAW,YAAW,OAAO;QAC/C,oDAAoD;QACpD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;QAEzC,oDAAoD;QACpD,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAQ;QAEpD,0EAA0E;QAC1E,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAM;QAEhC,8DAA8D;QAC9D,SAAS,CAAC,SAAS,EAAE,MAAM,CAAU;QAErC,6DAA6D;QAC7D,SAAS,CAAC,UAAU,EAAE,OAAO,CAAQ;QAErC,uFAAuF;QACvF,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAS;QAE7C,4FAA4F;QAC5F,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAE9G;;;WAGG;QACI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;QAI3C;;;WAGG;QACI,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI;QAI7D;;;;;;;;;WASG;iBACa,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"BasePlugin.d.ts","sourceRoot":"../../../../../../../../..","sources":["src/nz/co/siliconst/ui5/metaui/plugins/controls/BasePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
sap.ui.define(["../../core/PipelineManager","sap/ui/core/library","../../utils/Logger"],function(e,t,i){"use strict";const a=e["GlobalPipeline"];const s=i["Logger"];class n{control=null;metadata=null;fieldKey="";modelName="meta";isEditable=true;useMessageManager=false;setEditable(e){this.isEditable=e}setUseMessageManager(e){this.useMessageManager=e}generateStableId(e,t){if(!e)return undefined;const i=t.replace(/^\//,"").replace(/\//g,"-");return`${e}--${i}`}generateBindingInfo(e,t,i,a){return{path:e,model:t,...i?{type:i}:{},...a||{}}}validate(){if(!this.control||!this.metadata)return{isValid:true};if(typeof this.control.getVisible==="function"){if(!this.control.getVisible()){return{isValid:true}}}const e=[];const t={maxLength:this.metadata.maxLength};
|
|
1
|
+
sap.ui.define(["../../core/PipelineManager","sap/ui/core/library","../../utils/Logger"],function(e,t,i){"use strict";const a=e["GlobalPipeline"];const s=i["Logger"];class n{control=null;BLOCKED_PROPS=["value","text","selectedKey","selected","dateValue","editable","enabled","visible","valueState","valueStateText","items","content","pages","formElements","change","press","select","submit"];metadata=null;fieldKey="";modelName="meta";isEditable=true;useMessageManager=false;policyInvalidMessage=null;setEditable(e){this.isEditable=e}setUseMessageManager(e){this.useMessageManager=e}generateStableId(e,t){if(!e)return undefined;const i=t.replace(/^\//,"").replace(/\//g,"-");return`${e}--${i}`}generateBindingInfo(e,t,i,a){return{path:e,model:t,...i?{type:i}:{},...a||{}}}validate(){if(!this.control||!this.metadata)return{isValid:true};if(typeof this.control.getVisible==="function"){if(!this.control.getVisible()){return{isValid:true}}}if(this.policyInvalidMessage){return{isValid:false,errorMessage:this.policyInvalidMessage,fieldKey:this.fieldKey}}const e=[];const t={maxLength:this.metadata.maxLength};const i=this._isDynamicallyRequired!==undefined?this._isDynamicallyRequired:this.metadata.required;if(i){e.push("required")}if(this.metadata.maxLength)e.push("maxLength");if(this.metadata.minLength){e.push("minLength");t["minLength"]=this.metadata.minLength}if(this.metadata.pattern){e.push("pattern");t["pattern"]=this.metadata.pattern}if(this.metadata.minimum!==undefined||this.metadata.maximum!==undefined){e.push("range");t["range"]={min:this.metadata.minimum,max:this.metadata.maximum}}const s=this.metadata.ui?.format;if(s==="email"||s==="url"||s==="iban"){e.push(s)}if(this.metadata.ui?.validators){for(const i of this.metadata.ui.validators){if(typeof i==="string"){e.push(i)}else if(i&&i.name){e.push(i.name);if(i.args!==undefined){t[i.name]=i.args}}}}if(e.length===0){return{isValid:true,errorMessage:undefined,fieldKey:this.fieldKey}}const n=this.getValue();const l=a.executeValidation(n,e,t);return{isValid:l.isValid,errorMessage:l.errorMessage,fieldKey:this.fieldKey,fieldLabel:this.metadata?.ui?.label}}setVisualValidationState(e,i){if(!this.control)return;const a=this.control;if(typeof a.setValueState==="function"){a.setValueState(e?t.ValueState.None:t.ValueState.Error);if(typeof a.setValueStateText==="function"){a.setValueStateText(e?"":i||"")}}else{}}applyError(e){this.policyInvalidMessage=e;this.setVisualValidationState(false,e)}clearError(){this.policyInvalidMessage=null;this.setVisualValidationState(true)}applyVisibility(e){const t=this.control;if(t&&typeof t.setVisible==="function"){t.setVisible(e)}}applyRequired(e){this._isDynamicallyRequired=e;const t=this.control;if(t&&typeof t.setRequired==="function"){t.setRequired(e)}}applyEditable(e){const t=this.control;if(t&&typeof t.setEditable==="function"){t.setEditable(e)}else if(t&&typeof t.setEnabled==="function"){t.setEnabled(e)}}onStateChange(e){this.metadata=e;this.applyState()}applyCommonDirectives(e,t,i="meta"){const a=e;if(t.ui?.readOnly!==undefined&&typeof a.setEditable==="function"){a.setEditable(!t.ui.readOnly)}if(t.ui?.visibleOn){const a=sap.ui.require("nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder")?.ExpressionBuilder;let s="";if(a){s=a.build(t.ui.visibleOn,this.fieldKey,i)}else{s=`{= ${t.ui.visibleOn.replace(/\$root\./g,`${i}>/`).replace(/\./g,"/")} }`}e.bindProperty("visible",{parts:[{path:"meta>/"}],formatter:()=>false});e.bindProperty("visible",s)}if(t.ui?.enabledOn&&typeof a.setEnabled==="function"){const a=sap.ui.require("nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder")?.ExpressionBuilder;let s="";if(a){s=a.build(t.ui.enabledOn,this.fieldKey,i)}else{s=`{= ${t.ui.enabledOn.replace(/\$root\./g,`${i}>/`).replace(/\./g,"/")} }`}e.bindProperty("enabled",s)}if(t.ui?.controlProps){console.error(`[DEBUG MetaUI] controlProps found for ${this.fieldKey}`,t.ui.controlProps);const a=this.mainControl||e;const n=a;if(typeof n.getMetadata==="function"){const e=n.getMetadata();const l={};for(const[a,n]of Object.entries(t.ui.controlProps)){if(this.BLOCKED_PROPS.includes(a)){s.warn(`[BasePlugin] Cannot apply controlProps '${a}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Property is protected by sandbox)`);continue}if(typeof e.hasAggregation==="function"&&e.hasAggregation(a)){s.warn(`[BasePlugin] Cannot apply controlProps '${a}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack aggregations)`);continue}if(typeof e.hasEvent==="function"&&e.hasEvent(a)){s.warn(`[BasePlugin] Cannot apply controlProps '${a}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack events)`);continue}if(typeof n==="string"&&n.startsWith("{")&&n.endsWith("}")){const e=n.replace(/metaui>/g,`${i}>`);l[a]=e}else{l[a]=n}}try{const e=a;if(typeof e.applySettings==="function"){e.applySettings(l)}}catch(t){s.warn(`[BasePlugin] Failed to apply controlProps for field '${this.fieldKey}' on control ${e.getName()}: ${t.message}`)}}}}destroy(){if(this.control&&typeof this.control.destroy==="function"){this.control.destroy();this.control=null}}}var l={__esModule:true};l.BasePlugin=n;return l});
|
|
2
2
|
//# sourceMappingURL=BasePlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePlugin.js","names":["GlobalPipeline","____core_PipelineManager","Logger","____utils_Logger","BasePlugin","control","metadata","fieldKey","modelName","isEditable","useMessageManager","setEditable","editable","this","setUseMessageManager","generateStableId","engineScopeId","bindingPath","undefined","safePath","replace","generateBindingInfo","typeInstance","additionalOptions","path","model","type","validate","isValid","getVisible","validatorsToRun","argsMap","maxLength","required","push","minLength","pattern","minimum","maximum","min","max","format","ui","validators","v","name","args","length","errorMessage","val","getValue","result","executeValidation","setVisualValidationState","ctrl","setValueState","coreLibrary","ValueState","None","Error","setValueStateText","error","validateAndApplyVisualState","onStateChange","newMetadata","applyState","applyCommonDirectives","readOnly","visibleOn","ExpressionBuilder","sap","require","expr","build","bindProperty","parts","formatter","enabledOn","setEnabled","destroy","__exports","__esModule"],"sources":["BasePlugin.ts"],"sourcesContent":["/**\n * @file BasePlugin.ts\n * @description Abstract foundation for all MetaUI plugins, enforcing lifecycle hooks for v2 Schema.\n */\n\nimport { IPlugin } from \"../../interfaces/IPlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Control from \"sap/ui/core/Control\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\nimport coreLibrary from \"sap/ui/core/library\";\nimport { Logger } from \"../../utils/Logger\";\n\n/**\n * Abstract class representing a standard MetaUI Plugin.\n * Enforces the required rendering, state extraction, and validation contracts.\n * \n * @abstract\n * @public\n */\nexport abstract class BasePlugin implements IPlugin {\n /** The instantiated UI5 control for this plugin. */\n protected control: Control | null = null;\n\n /** The metadata schema defining the field rules. */\n protected metadata: IPropertyMetadata | null = null;\n\n /** The internal JSON path of the field relative to its parent payload. */\n protected fieldKey: string = \"\";\n\n /** The UI5 JSONModel name used for absolute binding paths. */\n protected modelName: string = \"meta\";\n\n /** Indicates if the engine is enforcing an editable mode. */\n protected isEditable: boolean = true;\n\n /** Indicates if the plugin should delegate visual validation to the MessageManager. */\n protected useMessageManager: boolean = false;\n\n /** Internal callback provided by GeneratorHost to signal validation/data changes upwards */\n protected onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;\n\n /**\n * Injects the global editable mode context into the plugin before rendering.\n * @param editable True if the plugin should render in editable mode.\n */\n public setEditable(editable: boolean): void {\n this.isEditable = editable;\n }\n\n /**\n * Injects the global MessageManager context into the plugin.\n * @param useMessageManager True if the MessageManager is handling validation visual states.\n */\n public setUseMessageManager(useMessageManager: boolean): void {\n this.useMessageManager = useMessageManager;\n }\n\n /**\n * Instantiates the raw UI5 control and binds it to the model.\n * \n * @param fieldMetadata The JSON Schema for the field.\n * @param bindingPath The JSON path to bind to.\n * @param modelName The UI5 model name.\n * @param engineScopeId The deterministic scope ID provided by the Engine to prevent cloning collisions.\n * @param onChange The callback fired natively when a field value blur/change occurs.\n * @returns {Control} The generated UI5 control.\n */\n public abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void, model?: unknown): Control;\n\n /**\n * Generates a deterministic, globally unique ID for this control.\n * Prefixes the sanitized binding path with the Engine's scoped ID.\n */\n protected generateStableId(engineScopeId: string | undefined, bindingPath: string): string | undefined {\n if (!engineScopeId) return undefined;\n // Strip leading slash and replace internal slashes with hyphens\n const safePath = bindingPath.replace(/^\\//, '').replace(/\\//g, '-');\n return `${engineScopeId}--${safePath}`;\n }\n\n /**\n * Extracts the current raw value from the underlying UI5 control.\n */\n protected abstract getValue(): unknown;\n\n /**\n * Generates a standardized programmatic binding configuration object.\n * Ensures perfect architectural consistency across all plugins instead of relying on string parsing.\n * \n * @param bindingPath The relative or absolute path.\n * @param modelName The target model name.\n * @param typeInstance An optional UI5 Type instance (e.g. Integer, Float).\n * @param additionalOptions Optional extra configurations (e.g. formatOptions, constraints).\n * @returns A configuration object ready to be assigned to 'value', 'text', 'state', etc.\n */\n protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>): { path: string, model: string, type?: unknown, [key: string]: unknown } {\n return {\n path: bindingPath,\n model: modelName,\n ...(typeInstance ? { type: typeInstance } : {}),\n ...(additionalOptions || {})\n };\n }\n\n /**\n * Universal pipeline validation.\n */\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n if (!this.control || !this.metadata) return { isValid: true };\n\n // Skip validation for hidden fields (e.g. hidden by ConditionEngine visibleOn)\n if (typeof (this.control as Control).getVisible === \"function\") {\n if (!(this.control as Control).getVisible()) {\n return { isValid: true };\n }\n }\n\n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {\n \"maxLength\": this.metadata.maxLength\n };\n\n if (this.metadata.required) {\n validatorsToRun.push(\"required\");\n }\n if (this.metadata.maxLength) validatorsToRun.push(\"maxLength\");\n if (this.metadata.minLength) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = this.metadata.minLength;\n }\n if (this.metadata.pattern) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = this.metadata.pattern;\n }\n if (this.metadata.minimum !== undefined || this.metadata.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: this.metadata.minimum, max: this.metadata.maximum };\n }\n \n const format = this.metadata.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n\n if (this.metadata.ui?.validators) {\n for (const v of this.metadata.ui.validators) {\n if (typeof v === \"string\") {\n validatorsToRun.push(v);\n } else if (v && v.name) {\n validatorsToRun.push(v.name);\n if (v.args !== undefined) {\n argsMap[v.name] = v.args;\n }\n }\n }\n }\n\n if (validatorsToRun.length === 0) {\n return { isValid: true, errorMessage: undefined, fieldKey: this.fieldKey };\n }\n\n const val = this.getValue();\n const result = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n return { isValid: result.isValid, errorMessage: result.errorMessage, fieldKey: this.fieldKey };\n }\n\n /**\n * Natively manipulates the UI5 control's valueState if the control supports it.\n * Uses reflection to safely apply styles without crashing on structural controls.\n */\n public setVisualValidationState(isValid: boolean, errorMessage?: string): void {\n if (!this.control) return;\n\n \n // Use reflection to check if the control supports ValueState (e.g. sap.m.Input does, sap.m.Text does not)\n type StateControl = {\n setValueState?: (state: string) => void;\n setValueStateText?: (text: string) => void;\n };\n const ctrl = this.control as unknown as StateControl;\n if (typeof ctrl.setValueState === \"function\") {\n ctrl.setValueState(isValid ? coreLibrary.ValueState.None : coreLibrary.ValueState.Error);\n \n if (typeof ctrl.setValueStateText === \"function\") {\n ctrl.setValueStateText(isValid ? \"\" : (errorMessage || \"\"));\n }\n } else {\n Logger.error(\"[MetaUI]\", `Plugin ${this.fieldKey} has no setValueState function!`, \"BasePlugin\");\n }\n }\n\n /**\n * Wraps standard validation and immediately applies the visual state.\n * Ideal for 'change' events to instantly turn fields red on blur.\n */\n protected validateAndApplyVisualState(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n const result = this.validate();\n this.setVisualValidationState(result.isValid, result.errorMessage);\n return result;\n }\n\n /**\n * Executes when the condition engine pushes new schema metadata to this field (e.g. readOnly changing).\n * @param newMetadata The mutated schema metadata.\n */\n public onStateChange(newMetadata: IPropertyMetadata): void {\n this.metadata = newMetadata;\n this.applyState();\n }\n\n /**\n * Abstract hook for the plugin to apply state changes to its specific UI5 control (e.g. placeholders, labels).\n */\n protected abstract applyState(): void;\n\n /**\n * Helper to apply common UI directives (like readOnly, visibleOn) directly to any control.\n */\n protected applyCommonDirectives(control: Control, metadata: IPropertyMetadata, modelName: string = \"meta\"): void {\n const ctrl = control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };\n if (metadata.ui?.readOnly !== undefined && typeof ctrl.setEditable === \"function\") {\n ctrl.setEditable(!metadata.ui.readOnly);\n }\n\n if (metadata.ui?.visibleOn) {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.visibleOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.visibleOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"visible\", { parts: [{ path: \"meta>/\" }], formatter: () => false });\n control.bindProperty(\"visible\", expr);\n }\n\n if (metadata.ui?.enabledOn && typeof ctrl.setEnabled === \"function\") {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.enabledOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.enabledOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"enabled\", expr);\n }\n }\n\n\n\n /**\n * Natively destroys the instantiated UI5 control to prevent memory leaks.\n * Can be overridden by subclasses if they manage secondary controls or custom models.\n */\n public destroy(): void {\n if (this.control && typeof this.control.destroy === \"function\") {\n this.control.destroy();\n this.control = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"BasePlugin.js","names":["GlobalPipeline","____core_PipelineManager","Logger","____utils_Logger","BasePlugin","control","BLOCKED_PROPS","metadata","fieldKey","modelName","isEditable","useMessageManager","policyInvalidMessage","setEditable","editable","this","setUseMessageManager","generateStableId","engineScopeId","bindingPath","undefined","safePath","replace","generateBindingInfo","typeInstance","additionalOptions","path","model","type","validate","isValid","getVisible","errorMessage","validatorsToRun","argsMap","maxLength","isRequired","_isDynamicallyRequired","required","push","minLength","pattern","minimum","maximum","min","max","format","ui","validators","v","name","args","length","val","getValue","result","executeValidation","fieldLabel","label","setVisualValidationState","ctrl","setValueState","coreLibrary","ValueState","None","Error","setValueStateText","applyError","clearError","applyVisibility","isVisible","setVisible","applyRequired","setRequired","applyEditable","setEnabled","onStateChange","newMetadata","applyState","applyCommonDirectives","readOnly","visibleOn","ExpressionBuilder","sap","require","expr","build","bindProperty","parts","formatter","enabledOn","controlProps","console","error","targetControl","mainControl","target","getMetadata","targetMeta","settings","propName","propValue","Object","entries","includes","warn","hasAggregation","hasEvent","startsWith","endsWith","injectedValue","applySettings","err","getName","message","destroy","__exports","__esModule"],"sources":["BasePlugin.ts"],"sourcesContent":["/**\n * @file BasePlugin.ts\n * @description Abstract foundation for all MetaUI plugins, enforcing lifecycle hooks for v2 Schema.\n */\n\nimport { IPlugin } from \"../../interfaces/IPlugin\";\nimport { IPropertyMetadata } from \"../../interfaces/ISchema\";\nimport Control from \"sap/ui/core/Control\";\nimport { GlobalPipeline } from \"../../core/PipelineManager\";\nimport * as coreLibrary from \"sap/ui/core/library\";\nimport { Logger } from \"../../utils/Logger\";\n\n/**\n * Abstract class representing a standard MetaUI Plugin.\n * Enforces the required rendering, state extraction, and validation contracts.\n * \n * @abstract\n * @public\n */\nexport abstract class BasePlugin implements IPlugin {\n /** The instantiated UI5 control for this plugin. */\n protected control: Control | null = null;\n\n /** Explicit reference to the core data widget when this plugin is wrapped in a layout. */\n protected mainControl?: Control;\n\n /** Properties strictly protected by the Sandbox engine. */\n protected BLOCKED_PROPS = [\"value\", \"text\", \"selectedKey\", \"selected\", \"dateValue\", \"editable\", \"enabled\", \"visible\", \"valueState\", \"valueStateText\", \"items\", \"content\", \"pages\", \"formElements\", \"change\", \"press\", \"select\", \"submit\"];\n\n /** The metadata schema defining the field rules. */\n protected metadata: IPropertyMetadata | null = null;\n\n /** The internal JSON path of the field relative to its parent payload. */\n protected fieldKey: string = \"\";\n\n /** The UI5 JSONModel name used for absolute binding paths. */\n protected modelName: string = \"meta\";\n\n /** Indicates if the engine is enforcing an editable mode. */\n protected isEditable: boolean = true;\n\n /** Indicates if the plugin should delegate visual validation to the MessageManager. */\n protected useMessageManager: boolean = false;\n\n /** Internal callback provided by GeneratorHost to signal validation/data changes upwards */\n protected onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;\n\n /** \n * Tracks explicitly forced invalid states pushed down from the PolicyEngine.\n * When populated, this error takes absolute precedence over static SchemaValidator rules.\n */\n protected policyInvalidMessage: string | null = null;\n\n /** Transient state tracking for PBRE required evaluations to prevent schema clobbering */\n protected _isDynamicallyRequired?: boolean;\n\n /**\n * Injects the global editable mode context into the plugin before rendering.\n * @param editable True if the plugin should render in editable mode.\n */\n public setEditable(editable: boolean): void {\n this.isEditable = editable;\n }\n\n /**\n * Injects the global MessageManager context into the plugin.\n * @param useMessageManager True if the MessageManager is handling validation visual states.\n */\n public setUseMessageManager(useMessageManager: boolean): void {\n this.useMessageManager = useMessageManager;\n }\n\n /**\n * Instantiates the raw UI5 control and binds it to the model.\n * \n * @param fieldMetadata The JSON Schema for the field.\n * @param bindingPath The JSON path to bind to.\n * @param modelName The UI5 model name.\n * @param engineScopeId The deterministic scope ID provided by the Engine to prevent cloning collisions.\n * @param onChange The callback fired natively when a field value blur/change occurs.\n * @returns {Control} The generated UI5 control.\n */\n public abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void, model?: unknown): Control;\n\n /**\n * Generates a deterministic, globally unique ID for this control.\n * Prefixes the sanitized binding path with the Engine's scoped ID.\n */\n protected generateStableId(engineScopeId: string | undefined, bindingPath: string): string | undefined {\n if (!engineScopeId) return undefined;\n // Strip leading slash and replace internal slashes with hyphens\n const safePath = bindingPath.replace(/^\\//, '').replace(/\\//g, '-');\n return `${engineScopeId}--${safePath}`;\n }\n\n /**\n * Extracts the current raw value from the underlying UI5 control.\n */\n protected abstract getValue(): unknown;\n\n /**\n * Generates a standardized programmatic binding configuration object.\n * Ensures perfect architectural consistency across all plugins instead of relying on string parsing.\n * \n * @param bindingPath The relative or absolute path.\n * @param modelName The target model name.\n * @param typeInstance An optional UI5 Type instance (e.g. Integer, Float).\n * @param additionalOptions Optional extra configurations (e.g. formatOptions, constraints).\n * @returns A configuration object ready to be assigned to 'value', 'text', 'state', etc.\n */\n protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>): any {\n return {\n path: bindingPath,\n model: modelName,\n ...(typeInstance ? { type: typeInstance } : {}),\n ...(additionalOptions || {})\n };\n }\n\n /**\n * Universal pipeline validation.\n */\n public validate(): import(\"../../interfaces/IPlugin\").IPluginValidationResult {\n if (!this.control || !this.metadata) return { isValid: true };\n\n // Skip validation for hidden fields (e.g. hidden by ConditionEngine visibleOn)\n if (typeof (this.control as Control).getVisible === \"function\") {\n if (!(this.control as Control).getVisible()) {\n return { isValid: true };\n }\n }\n\n if (this.policyInvalidMessage) {\n return { isValid: false, errorMessage: this.policyInvalidMessage, fieldKey: this.fieldKey };\n }\n\n const validatorsToRun: string[] = [];\n const argsMap: Record<string, unknown> = {\n \"maxLength\": this.metadata.maxLength\n };\n\n const isRequired = this._isDynamicallyRequired !== undefined ? this._isDynamicallyRequired : this.metadata.required;\n if (isRequired) {\n validatorsToRun.push(\"required\");\n }\n if (this.metadata.maxLength) validatorsToRun.push(\"maxLength\");\n if (this.metadata.minLength) {\n validatorsToRun.push(\"minLength\");\n argsMap[\"minLength\"] = this.metadata.minLength;\n }\n if (this.metadata.pattern) {\n validatorsToRun.push(\"pattern\");\n argsMap[\"pattern\"] = this.metadata.pattern;\n }\n if (this.metadata.minimum !== undefined || this.metadata.maximum !== undefined) {\n validatorsToRun.push(\"range\");\n argsMap[\"range\"] = { min: this.metadata.minimum, max: this.metadata.maximum };\n }\n\n const format = this.metadata.ui?.format;\n if (format === \"email\" || format === \"url\" || format === \"iban\") {\n validatorsToRun.push(format);\n }\n\n if (this.metadata.ui?.validators) {\n for (const v of this.metadata.ui.validators) {\n if (typeof v === \"string\") {\n validatorsToRun.push(v);\n } else if (v && v.name) {\n validatorsToRun.push(v.name);\n if (v.args !== undefined) {\n argsMap[v.name] = v.args;\n }\n }\n }\n }\n\n if (validatorsToRun.length === 0) {\n return { isValid: true, errorMessage: undefined, fieldKey: this.fieldKey };\n }\n\n const val = this.getValue();\n const result = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);\n return { isValid: result.isValid, errorMessage: result.errorMessage, fieldKey: this.fieldKey, fieldLabel: this.metadata?.ui?.label };\n }\n\n /**\n * Natively manipulates the UI5 control's valueState if the control supports it.\n * Uses reflection to safely apply styles without crashing on structural controls.\n */\n public setVisualValidationState(isValid: boolean, errorMessage?: string): void {\n if (!this.control) return;\n\n\n // Use reflection to check if the control supports ValueState (e.g. sap.m.Input does, sap.m.Text does not)\n type StateControl = {\n setValueState?: (state: string) => void;\n setValueStateText?: (text: string) => void;\n };\n const ctrl = this.control as unknown as StateControl;\n if (typeof ctrl.setValueState === \"function\") {\n ctrl.setValueState(isValid ? coreLibrary.ValueState.None : coreLibrary.ValueState.Error);\n\n if (typeof ctrl.setValueStateText === \"function\") {\n ctrl.setValueStateText(isValid ? \"\" : (errorMessage || \"\"));\n }\n } else {\n // Quietly ignore. Controls like sap.m.Text natively do not support value states, which is completely valid.\n }\n }\n\n\n\n // --- IPluginStateReceiver Implementation for PBRE ---\n\n /**\n * Natively applies a forced error state from the PolicyEngine.\n * Per MetaUI Architecture Rule 12, this explicitly forces the visual state red \n * independently of the MessageManager auto-sync.\n * \n * @param errorMessage The custom error message to display.\n */\n public applyError(errorMessage: string): void {\n this.policyInvalidMessage = errorMessage;\n this.setVisualValidationState(false, errorMessage);\n }\n\n /**\n * Clears a previously forced error state.\n * Restores the visual boundary to standard (non-error) formatting.\n */\n public clearError(): void {\n this.policyInvalidMessage = null;\n this.setVisualValidationState(true);\n }\n\n /**\n * Dynamically manipulates the visibility state of the control based on PolicyEngine directives.\n * \n * @param isVisible True to display the control, false to hide it.\n */\n public applyVisibility(isVisible: boolean): void {\n const ctrl = this.control as unknown as { setVisible?: (b: boolean) => void };\n if (ctrl && typeof ctrl.setVisible === \"function\") {\n ctrl.setVisible(isVisible);\n }\n }\n\n /**\n * Dynamically alters the mandatory status of the field.\n * Updates internal transient state to ensure the `validate()` pipeline enforces the change,\n * and natively triggers the UI5 required indicator (asterisk) if supported,\n * without permanently corrupting the shared global schema definition.\n * \n * @param isRequired True to make the field mandatory, false to make it optional.\n */\n public applyRequired(isRequired: boolean): void {\n this._isDynamicallyRequired = isRequired;\n const ctrl = this.control as unknown as { setRequired?: (b: boolean) => void };\n if (ctrl && typeof ctrl.setRequired === \"function\") {\n ctrl.setRequired(isRequired);\n }\n }\n\n /**\n * Dynamically alters the editability of the field.\n * Falls back to `setEnabled` if the control is structural rather than purely input-driven.\n * \n * @param isEditable True to allow user input, false to lock it.\n */\n public applyEditable(isEditable: boolean): void {\n const ctrl = this.control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };\n if (ctrl && typeof ctrl.setEditable === \"function\") {\n ctrl.setEditable(isEditable);\n } else if (ctrl && typeof ctrl.setEnabled === \"function\") {\n ctrl.setEnabled(isEditable);\n }\n }\n\n /**\n * Executes when the condition engine pushes new schema metadata to this field (e.g. readOnly changing).\n * @param newMetadata The mutated schema metadata.\n */\n public onStateChange(newMetadata: IPropertyMetadata): void {\n this.metadata = newMetadata;\n this.applyState();\n }\n\n /**\n * Abstract hook for the plugin to apply state changes to its specific UI5 control (e.g. placeholders, labels).\n */\n protected abstract applyState(): void;\n\n /**\n * Helper to apply common UI directives (like readOnly, visibleOn) directly to any control.\n */\n protected applyCommonDirectives(control: Control, metadata: IPropertyMetadata, modelName: string = \"meta\"): void {\n const ctrl = control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };\n if (metadata.ui?.readOnly !== undefined && typeof ctrl.setEditable === \"function\") {\n ctrl.setEditable(!metadata.ui.readOnly);\n }\n\n if (metadata.ui?.visibleOn) {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.visibleOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.visibleOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"visible\", { parts: [{ path: \"meta>/\" }], formatter: () => false });\n control.bindProperty(\"visible\", expr);\n }\n\n if (metadata.ui?.enabledOn && typeof ctrl.setEnabled === \"function\") {\n const ExpressionBuilder = sap.ui.require(\"nz/co/siliconst/ui5/metaui/utils/ExpressionBuilder\")?.ExpressionBuilder;\n let expr = \"\";\n if (ExpressionBuilder) {\n expr = ExpressionBuilder.build(metadata.ui.enabledOn, this.fieldKey, modelName);\n } else {\n expr = `{= ${metadata.ui.enabledOn.replace(/\\$root\\./g, `${modelName}>/`).replace(/\\./g, '/')} }`;\n }\n control.bindProperty(\"enabled\", expr);\n }\n\n if (metadata.ui?.controlProps) {\n console.error(`[DEBUG MetaUI] controlProps found for ${this.fieldKey}`, metadata.ui.controlProps);\n const targetControl = this.mainControl || control;\n const target = targetControl as unknown as {\n getMetadata?: () => { getName(): string },\n applySettings?: (settings: Record<string, any>) => void,\n setProperty?: (p: string, v: unknown) => void,\n bindProperty?: (p: string, v: string) => void\n };\n\n if (typeof target.getMetadata === \"function\") {\n const targetMeta = target.getMetadata();\n const settings: Record<string, any> = {};\n for (const [propName, propValue] of Object.entries(metadata.ui.controlProps)) {\n if (this.BLOCKED_PROPS.includes(propName)) {\n Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Property is protected by sandbox)`);\n continue;\n }\n \n // Natively block any aggregations or events to prevent sandbox escapes\n if (typeof (targetMeta as any).hasAggregation === \"function\" && (targetMeta as any).hasAggregation(propName)) {\n Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack aggregations)`);\n continue;\n }\n \n if (typeof (targetMeta as any).hasEvent === \"function\" && (targetMeta as any).hasEvent(propName)) {\n Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack events)`);\n continue;\n }\n\n if (typeof propValue === \"string\" && propValue.startsWith(\"{\") && propValue.endsWith(\"}\")) {\n // The JSON payloads often hardcode 'metaui>' in raw expression bindings, \n // but the Engine dynamically generates model names like 'metaUI_Host1'. \n // We must inject the actual modelName dynamically into the expression string.\n const injectedValue = propValue.replace(/metaui>/g, `${modelName}>`);\n settings[propName] = injectedValue;\n } else {\n settings[propName] = propValue;\n }\n }\n\n try {\n const target = targetControl as unknown as { applySettings?: (s: Record<string, any>) => void };\n if (typeof target.applySettings === \"function\") {\n target.applySettings(settings);\n }\n } catch (err: unknown) {\n Logger.warn(`[BasePlugin] Failed to apply controlProps for field '${this.fieldKey}' on control ${targetMeta.getName()}: ${(err as Error).message}`);\n }\n }\n }\n }\n\n\n\n /**\n * Natively destroys the instantiated UI5 control to prevent memory leaks.\n * Can be overridden by subclasses if they manage secondary controls or custom models.\n */\n public destroy(): void {\n if (this.control && typeof this.control.destroy === \"function\") {\n this.control.destroy();\n this.control = null;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ import { IPlugin } from "../../interfaces/IPlugin";
|
|
|
7
7
|
import { IPropertyMetadata } from "../../interfaces/ISchema";
|
|
8
8
|
import Control from "sap/ui/core/Control";
|
|
9
9
|
import { GlobalPipeline } from "../../core/PipelineManager";
|
|
10
|
-
import coreLibrary from "sap/ui/core/library";
|
|
10
|
+
import * as coreLibrary from "sap/ui/core/library";
|
|
11
11
|
import { Logger } from "../../utils/Logger";
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -21,6 +21,12 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
21
21
|
/** The instantiated UI5 control for this plugin. */
|
|
22
22
|
protected control: Control | null = null;
|
|
23
23
|
|
|
24
|
+
/** Explicit reference to the core data widget when this plugin is wrapped in a layout. */
|
|
25
|
+
protected mainControl?: Control;
|
|
26
|
+
|
|
27
|
+
/** Properties strictly protected by the Sandbox engine. */
|
|
28
|
+
protected BLOCKED_PROPS = ["value", "text", "selectedKey", "selected", "dateValue", "editable", "enabled", "visible", "valueState", "valueStateText", "items", "content", "pages", "formElements", "change", "press", "select", "submit"];
|
|
29
|
+
|
|
24
30
|
/** The metadata schema defining the field rules. */
|
|
25
31
|
protected metadata: IPropertyMetadata | null = null;
|
|
26
32
|
|
|
@@ -39,6 +45,15 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
39
45
|
/** Internal callback provided by GeneratorHost to signal validation/data changes upwards */
|
|
40
46
|
protected onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void;
|
|
41
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Tracks explicitly forced invalid states pushed down from the PolicyEngine.
|
|
50
|
+
* When populated, this error takes absolute precedence over static SchemaValidator rules.
|
|
51
|
+
*/
|
|
52
|
+
protected policyInvalidMessage: string | null = null;
|
|
53
|
+
|
|
54
|
+
/** Transient state tracking for PBRE required evaluations to prevent schema clobbering */
|
|
55
|
+
protected _isDynamicallyRequired?: boolean;
|
|
56
|
+
|
|
42
57
|
/**
|
|
43
58
|
* Injects the global editable mode context into the plugin before rendering.
|
|
44
59
|
* @param editable True if the plugin should render in editable mode.
|
|
@@ -65,7 +80,7 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
65
80
|
* @param onChange The callback fired natively when a field value blur/change occurs.
|
|
66
81
|
* @returns {Control} The generated UI5 control.
|
|
67
82
|
*/
|
|
68
|
-
public abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string) => void, model?: unknown): Control;
|
|
83
|
+
public abstract render(fieldMetadata: IPropertyMetadata, bindingPath: string, modelName?: string, engineScopeId?: string, onChange?: (isValid: boolean, fieldKey?: string, errorMessage?: string, controlId?: string) => void, model?: unknown): Control;
|
|
69
84
|
|
|
70
85
|
/**
|
|
71
86
|
* Generates a deterministic, globally unique ID for this control.
|
|
@@ -93,7 +108,7 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
93
108
|
* @param additionalOptions Optional extra configurations (e.g. formatOptions, constraints).
|
|
94
109
|
* @returns A configuration object ready to be assigned to 'value', 'text', 'state', etc.
|
|
95
110
|
*/
|
|
96
|
-
protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>):
|
|
111
|
+
protected generateBindingInfo(bindingPath: string, modelName: string, typeInstance?: unknown, additionalOptions?: Record<string, unknown>): any {
|
|
97
112
|
return {
|
|
98
113
|
path: bindingPath,
|
|
99
114
|
model: modelName,
|
|
@@ -115,12 +130,17 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
115
130
|
}
|
|
116
131
|
}
|
|
117
132
|
|
|
133
|
+
if (this.policyInvalidMessage) {
|
|
134
|
+
return { isValid: false, errorMessage: this.policyInvalidMessage, fieldKey: this.fieldKey };
|
|
135
|
+
}
|
|
136
|
+
|
|
118
137
|
const validatorsToRun: string[] = [];
|
|
119
138
|
const argsMap: Record<string, unknown> = {
|
|
120
139
|
"maxLength": this.metadata.maxLength
|
|
121
140
|
};
|
|
122
141
|
|
|
123
|
-
|
|
142
|
+
const isRequired = this._isDynamicallyRequired !== undefined ? this._isDynamicallyRequired : this.metadata.required;
|
|
143
|
+
if (isRequired) {
|
|
124
144
|
validatorsToRun.push("required");
|
|
125
145
|
}
|
|
126
146
|
if (this.metadata.maxLength) validatorsToRun.push("maxLength");
|
|
@@ -136,7 +156,7 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
136
156
|
validatorsToRun.push("range");
|
|
137
157
|
argsMap["range"] = { min: this.metadata.minimum, max: this.metadata.maximum };
|
|
138
158
|
}
|
|
139
|
-
|
|
159
|
+
|
|
140
160
|
const format = this.metadata.ui?.format;
|
|
141
161
|
if (format === "email" || format === "url" || format === "iban") {
|
|
142
162
|
validatorsToRun.push(format);
|
|
@@ -161,7 +181,7 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
161
181
|
|
|
162
182
|
const val = this.getValue();
|
|
163
183
|
const result = GlobalPipeline.executeValidation(val, validatorsToRun, argsMap);
|
|
164
|
-
return { isValid: result.isValid, errorMessage: result.errorMessage, fieldKey: this.fieldKey };
|
|
184
|
+
return { isValid: result.isValid, errorMessage: result.errorMessage, fieldKey: this.fieldKey, fieldLabel: this.metadata?.ui?.label };
|
|
165
185
|
}
|
|
166
186
|
|
|
167
187
|
/**
|
|
@@ -171,7 +191,7 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
171
191
|
public setVisualValidationState(isValid: boolean, errorMessage?: string): void {
|
|
172
192
|
if (!this.control) return;
|
|
173
193
|
|
|
174
|
-
|
|
194
|
+
|
|
175
195
|
// Use reflection to check if the control supports ValueState (e.g. sap.m.Input does, sap.m.Text does not)
|
|
176
196
|
type StateControl = {
|
|
177
197
|
setValueState?: (state: string) => void;
|
|
@@ -180,23 +200,81 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
180
200
|
const ctrl = this.control as unknown as StateControl;
|
|
181
201
|
if (typeof ctrl.setValueState === "function") {
|
|
182
202
|
ctrl.setValueState(isValid ? coreLibrary.ValueState.None : coreLibrary.ValueState.Error);
|
|
183
|
-
|
|
203
|
+
|
|
184
204
|
if (typeof ctrl.setValueStateText === "function") {
|
|
185
205
|
ctrl.setValueStateText(isValid ? "" : (errorMessage || ""));
|
|
186
206
|
}
|
|
187
207
|
} else {
|
|
188
|
-
|
|
208
|
+
// Quietly ignore. Controls like sap.m.Text natively do not support value states, which is completely valid.
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
// --- IPluginStateReceiver Implementation for PBRE ---
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Natively applies a forced error state from the PolicyEngine.
|
|
218
|
+
* Per MetaUI Architecture Rule 12, this explicitly forces the visual state red
|
|
219
|
+
* independently of the MessageManager auto-sync.
|
|
220
|
+
*
|
|
221
|
+
* @param errorMessage The custom error message to display.
|
|
222
|
+
*/
|
|
223
|
+
public applyError(errorMessage: string): void {
|
|
224
|
+
this.policyInvalidMessage = errorMessage;
|
|
225
|
+
this.setVisualValidationState(false, errorMessage);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Clears a previously forced error state.
|
|
230
|
+
* Restores the visual boundary to standard (non-error) formatting.
|
|
231
|
+
*/
|
|
232
|
+
public clearError(): void {
|
|
233
|
+
this.policyInvalidMessage = null;
|
|
234
|
+
this.setVisualValidationState(true);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Dynamically manipulates the visibility state of the control based on PolicyEngine directives.
|
|
239
|
+
*
|
|
240
|
+
* @param isVisible True to display the control, false to hide it.
|
|
241
|
+
*/
|
|
242
|
+
public applyVisibility(isVisible: boolean): void {
|
|
243
|
+
const ctrl = this.control as unknown as { setVisible?: (b: boolean) => void };
|
|
244
|
+
if (ctrl && typeof ctrl.setVisible === "function") {
|
|
245
|
+
ctrl.setVisible(isVisible);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Dynamically alters the mandatory status of the field.
|
|
251
|
+
* Updates internal transient state to ensure the `validate()` pipeline enforces the change,
|
|
252
|
+
* and natively triggers the UI5 required indicator (asterisk) if supported,
|
|
253
|
+
* without permanently corrupting the shared global schema definition.
|
|
254
|
+
*
|
|
255
|
+
* @param isRequired True to make the field mandatory, false to make it optional.
|
|
256
|
+
*/
|
|
257
|
+
public applyRequired(isRequired: boolean): void {
|
|
258
|
+
this._isDynamicallyRequired = isRequired;
|
|
259
|
+
const ctrl = this.control as unknown as { setRequired?: (b: boolean) => void };
|
|
260
|
+
if (ctrl && typeof ctrl.setRequired === "function") {
|
|
261
|
+
ctrl.setRequired(isRequired);
|
|
189
262
|
}
|
|
190
263
|
}
|
|
191
264
|
|
|
192
265
|
/**
|
|
193
|
-
*
|
|
194
|
-
*
|
|
266
|
+
* Dynamically alters the editability of the field.
|
|
267
|
+
* Falls back to `setEnabled` if the control is structural rather than purely input-driven.
|
|
268
|
+
*
|
|
269
|
+
* @param isEditable True to allow user input, false to lock it.
|
|
195
270
|
*/
|
|
196
|
-
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
271
|
+
public applyEditable(isEditable: boolean): void {
|
|
272
|
+
const ctrl = this.control as unknown as { setEditable?: (b: boolean) => void, setEnabled?: (b: boolean) => void };
|
|
273
|
+
if (ctrl && typeof ctrl.setEditable === "function") {
|
|
274
|
+
ctrl.setEditable(isEditable);
|
|
275
|
+
} else if (ctrl && typeof ctrl.setEnabled === "function") {
|
|
276
|
+
ctrl.setEnabled(isEditable);
|
|
277
|
+
}
|
|
200
278
|
}
|
|
201
279
|
|
|
202
280
|
/**
|
|
@@ -244,6 +322,58 @@ export abstract class BasePlugin implements IPlugin {
|
|
|
244
322
|
}
|
|
245
323
|
control.bindProperty("enabled", expr);
|
|
246
324
|
}
|
|
325
|
+
|
|
326
|
+
if (metadata.ui?.controlProps) {
|
|
327
|
+
console.error(`[DEBUG MetaUI] controlProps found for ${this.fieldKey}`, metadata.ui.controlProps);
|
|
328
|
+
const targetControl = this.mainControl || control;
|
|
329
|
+
const target = targetControl as unknown as {
|
|
330
|
+
getMetadata?: () => { getName(): string },
|
|
331
|
+
applySettings?: (settings: Record<string, any>) => void,
|
|
332
|
+
setProperty?: (p: string, v: unknown) => void,
|
|
333
|
+
bindProperty?: (p: string, v: string) => void
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
if (typeof target.getMetadata === "function") {
|
|
337
|
+
const targetMeta = target.getMetadata();
|
|
338
|
+
const settings: Record<string, any> = {};
|
|
339
|
+
for (const [propName, propValue] of Object.entries(metadata.ui.controlProps)) {
|
|
340
|
+
if (this.BLOCKED_PROPS.includes(propName)) {
|
|
341
|
+
Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Property is protected by sandbox)`);
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Natively block any aggregations or events to prevent sandbox escapes
|
|
346
|
+
if (typeof (targetMeta as any).hasAggregation === "function" && (targetMeta as any).hasAggregation(propName)) {
|
|
347
|
+
Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack aggregations)`);
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (typeof (targetMeta as any).hasEvent === "function" && (targetMeta as any).hasEvent(propName)) {
|
|
352
|
+
Logger.warn(`[BasePlugin] Cannot apply controlProps '${propName}' for field '${this.fieldKey}' - ILLEGAL OVERRIDE (Cannot hijack events)`);
|
|
353
|
+
continue;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if (typeof propValue === "string" && propValue.startsWith("{") && propValue.endsWith("}")) {
|
|
357
|
+
// The JSON payloads often hardcode 'metaui>' in raw expression bindings,
|
|
358
|
+
// but the Engine dynamically generates model names like 'metaUI_Host1'.
|
|
359
|
+
// We must inject the actual modelName dynamically into the expression string.
|
|
360
|
+
const injectedValue = propValue.replace(/metaui>/g, `${modelName}>`);
|
|
361
|
+
settings[propName] = injectedValue;
|
|
362
|
+
} else {
|
|
363
|
+
settings[propName] = propValue;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
try {
|
|
368
|
+
const target = targetControl as unknown as { applySettings?: (s: Record<string, any>) => void };
|
|
369
|
+
if (typeof target.applySettings === "function") {
|
|
370
|
+
target.applySettings(settings);
|
|
371
|
+
}
|
|
372
|
+
} catch (err: unknown) {
|
|
373
|
+
Logger.warn(`[BasePlugin] Failed to apply controlProps for field '${this.fieldKey}' on control ${targetMeta.getName()}: ${(err as Error).message}`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
247
377
|
}
|
|
248
378
|
|
|
249
379
|
|