@siliconst/metaui 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/README.md +134 -123
  2. package/package.json +3 -2
  3. package/src/nz/co/siliconst/ui5/metaui/.library +7 -7
  4. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost-dbg.js +299 -163
  5. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost-dbg.js.map +1 -1
  6. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.d.ts +54 -6
  7. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.d.ts.map +1 -1
  8. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.js +1 -1
  9. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.js.map +1 -1
  10. package/src/nz/co/siliconst/ui5/metaui/controls/GeneratorHost.ts +292 -162
  11. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js +51 -43
  12. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine-dbg.js.map +1 -1
  13. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts +5 -0
  14. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.d.ts.map +1 -1
  15. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js +1 -1
  16. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.js.map +1 -1
  17. package/src/nz/co/siliconst/ui5/metaui/core/ConditionEngine.ts +49 -40
  18. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +81 -58
  19. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  20. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +5 -12
  21. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js +1 -1
  23. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +82 -56
  25. package/src/nz/co/siliconst/ui5/metaui/core/EventBus-dbg.js +65 -50
  26. package/src/nz/co/siliconst/ui5/metaui/core/EventBus-dbg.js.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.d.ts +9 -0
  28. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.d.ts.map +1 -1
  29. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.js +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.js.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/core/EventBus.ts +60 -45
  32. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js +72 -59
  33. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry-dbg.js.map +1 -1
  34. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts +6 -4
  35. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.d.ts.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js +1 -1
  37. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.js.map +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/core/PluginRegistry.ts +71 -56
  39. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js +145 -36
  40. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer-dbg.js.map +1 -1
  41. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts +13 -8
  42. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.d.ts.map +1 -1
  43. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.js.map +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/core/SchemaNormalizer.ts +157 -31
  46. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js +55 -55
  47. package/src/nz/co/siliconst/ui5/metaui/core/StateManager-dbg.js.map +1 -1
  48. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.d.ts.map +1 -1
  49. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.js.map +1 -1
  50. package/src/nz/co/siliconst/ui5/metaui/core/StateManager.ts +56 -56
  51. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus-dbg.js +1 -1
  52. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus-dbg.js.map +1 -1
  53. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.d.ts.map +1 -1
  54. package/src/nz/co/siliconst/ui5/metaui/interfaces/IEventBus.ts +29 -29
  55. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager-dbg.js +1 -1
  56. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager-dbg.js.map +1 -1
  57. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.d.ts +6 -12
  58. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.d.ts.map +1 -1
  59. package/src/nz/co/siliconst/ui5/metaui/interfaces/ILayoutManager.ts +21 -26
  60. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js +1 -1
  61. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin-dbg.js.map +1 -1
  62. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts +3 -20
  63. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.d.ts.map +1 -1
  64. package/src/nz/co/siliconst/ui5/metaui/interfaces/IPlugin.ts +14 -33
  65. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js +1 -1
  66. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema-dbg.js.map +1 -1
  67. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts +33 -43
  68. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.d.ts.map +1 -1
  69. package/src/nz/co/siliconst/ui5/metaui/interfaces/ISchema.ts +70 -70
  70. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout-dbg.js +23 -38
  71. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout-dbg.js.map +1 -1
  72. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.d.ts +4 -17
  73. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.d.ts.map +1 -1
  74. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.js +1 -1
  75. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.js.map +1 -1
  76. package/src/nz/co/siliconst/ui5/metaui/layouts/BaseLayout.ts +22 -34
  77. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js +98 -56
  78. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout-dbg.js.map +1 -1
  79. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts +7 -7
  80. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.d.ts.map +1 -1
  81. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js +1 -1
  82. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.js.map +1 -1
  83. package/src/nz/co/siliconst/ui5/metaui/layouts/FormLayout.ts +97 -60
  84. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +102 -90
  85. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  86. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts +4 -8
  87. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  88. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  89. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  90. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +119 -102
  91. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js +43 -32
  92. package/src/nz/co/siliconst/ui5/metaui/library-dbg.js.map +1 -1
  93. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +22 -17
  94. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  95. package/src/nz/co/siliconst/ui5/metaui/library.d.ts.map +1 -1
  96. package/src/nz/co/siliconst/ui5/metaui/library.js +1 -1
  97. package/src/nz/co/siliconst/ui5/metaui/library.js.map +1 -1
  98. package/src/nz/co/siliconst/ui5/metaui/library.ts +55 -43
  99. package/src/nz/co/siliconst/ui5/metaui/manifest.json +1 -0
  100. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin-dbg.js +68 -0
  101. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin-dbg.js.map +1 -0
  102. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.d.ts +15 -0
  103. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.d.ts.map +1 -0
  104. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.js +2 -0
  105. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.js.map +1 -0
  106. package/src/nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin.ts +71 -0
  107. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin-dbg.js +54 -59
  108. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin-dbg.js.map +1 -1
  109. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.d.ts +8 -27
  110. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.d.ts.map +1 -1
  111. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.js +1 -1
  112. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.js.map +1 -1
  113. package/src/nz/co/siliconst/ui5/metaui/plugins/BasePlugin.ts +56 -58
  114. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin-dbg.js +41 -42
  115. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin-dbg.js.map +1 -1
  116. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.d.ts +2 -2
  117. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.d.ts.map +1 -1
  118. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.js +1 -1
  119. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.js.map +1 -1
  120. package/src/nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin.ts +41 -42
  121. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin-dbg.js +68 -60
  122. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin-dbg.js.map +1 -1
  123. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.d.ts +2 -2
  124. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.d.ts.map +1 -1
  125. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.js +1 -1
  126. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.js.map +1 -1
  127. package/src/nz/co/siliconst/ui5/metaui/plugins/DatePlugin.ts +69 -63
  128. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin-dbg.js +68 -0
  129. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin-dbg.js.map +1 -0
  130. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.d.ts +18 -0
  131. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.d.ts.map +1 -0
  132. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.js +2 -0
  133. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.js.map +1 -0
  134. package/src/nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin.ts +68 -0
  135. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin-dbg.js +66 -66
  136. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin-dbg.js.map +1 -1
  137. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.d.ts +2 -2
  138. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.d.ts.map +1 -1
  139. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.js +1 -1
  140. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.js.map +1 -1
  141. package/src/nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin.ts +65 -65
  142. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin-dbg.js +55 -53
  143. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin-dbg.js.map +1 -1
  144. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.d.ts +3 -3
  145. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.d.ts.map +1 -1
  146. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.js +1 -1
  147. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.js.map +1 -1
  148. package/src/nz/co/siliconst/ui5/metaui/plugins/NumberPlugin.ts +56 -55
  149. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin-dbg.js +56 -53
  150. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin-dbg.js.map +1 -1
  151. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.d.ts +2 -2
  152. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.d.ts.map +1 -1
  153. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.js +1 -1
  154. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.js.map +1 -1
  155. package/src/nz/co/siliconst/ui5/metaui/plugins/StringPlugin.ts +58 -55
  156. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin-dbg.js +43 -0
  157. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin-dbg.js.map +1 -0
  158. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.d.ts +18 -0
  159. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.d.ts.map +1 -0
  160. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.js +2 -0
  161. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.js.map +1 -0
  162. package/src/nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin.ts +42 -0
  163. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin-dbg.js +58 -0
  164. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin-dbg.js.map +1 -0
  165. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.d.ts +18 -0
  166. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.d.ts.map +1 -0
  167. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.js +2 -0
  168. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.js.map +1 -0
  169. package/src/nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin.ts +58 -0
  170. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin-dbg.js +74 -0
  171. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin-dbg.js.map +1 -0
  172. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.d.ts +18 -0
  173. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.d.ts.map +1 -0
  174. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.js +2 -0
  175. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.js.map +1 -0
  176. package/src/nz/co/siliconst/ui5/metaui/plugins/TimePlugin.ts +71 -0
  177. package/ui5.yaml +3 -3
  178. package/test-resources/App.js +0 -11
  179. package/test-resources/Main.controller.js +0 -73
  180. package/test-resources/Main.view.xml +0 -42
  181. package/test-resources/index.html +0 -21
  182. package/test-resources/mockData.json +0 -27
  183. package/test-resources/mockSchema.json +0 -98
@@ -1,102 +1,119 @@
1
- /**
2
- * @file TableLayout.ts
3
- * @description Generates a responsive SAP Fiori Table layout.
4
- */
5
-
6
- import Table from "sap/m/Table";
7
- import Column from "sap/m/Column";
8
- import Text from "sap/m/Text";
9
- import ColumnListItem from "sap/m/ColumnListItem";
10
- import Toolbar from "sap/m/Toolbar";
11
- import Title from "sap/m/Title";
12
- import ToolbarSpacer from "sap/m/ToolbarSpacer";
13
- import Button from "sap/m/Button";
14
- import JSONModel from "sap/ui/model/json/JSONModel";
15
- import { ITableMetadata, IFieldMetadata } from "../interfaces/ISchema";
16
- import { PluginRegistry } from "../core/PluginRegistry";
17
- import Control from "sap/ui/core/Control";
18
-
19
- /**
20
- * Utility class strictly for constructing sap.m.Table structures with dynamic pop-in vectors.
21
- */
22
- export class TableLayout {
23
- /**
24
- * Builds a responsive Table, dynamically calculating column priorities.
25
- * @param tableMeta The metadata defining the table's columns and nested fields.
26
- * @returns A fully constructed sap.m.Table ready to be bound to a list array.
27
- */
28
- public static build(tableMeta: ITableMetadata): Table {
29
- const table = new Table({
30
- headerToolbar: new Toolbar({
31
- content: [
32
- new Title({ text: tableMeta.label || tableMeta.tableName }),
33
- new ToolbarSpacer(),
34
- new Button({
35
- text: "Add Row",
36
- icon: "sap-icon://add",
37
- press: (oEvent: any) => {
38
- const btn = oEvent.getSource();
39
- const tbl = btn.getParent().getParent() as Table;
40
- const model = tbl.getModel("meta") as JSONModel;
41
- const path = `/${tableMeta.tableName}`;
42
- const data = model.getProperty(path) || [];
43
- data.push({}); // append empty row
44
- model.setProperty(path, data);
45
- }
46
- })
47
- ]
48
- }),
49
- fixedLayout: false, // Allows native UI5 column width calculations
50
- mode: "Delete",
51
- delete: (oEvent: any) => {
52
- const item = oEvent.getParameter("listItem");
53
- const path = item.getBindingContext("meta").getPath(); // e.g. "/Contacts/0"
54
- const model = item.getModel("meta") as JSONModel;
55
-
56
- const parts = path.split("/");
57
- const index = parseInt(parts.pop() || "0", 10);
58
- const arrayPath = parts.join("/");
59
-
60
- const data = model.getProperty(arrayPath);
61
- data.splice(index, 1);
62
- model.setProperty(arrayPath, data);
63
- }
64
- });
65
-
66
- const templateCells: Control[] = [];
67
- const registry = PluginRegistry.getInstance();
68
-
69
- tableMeta.fields.forEach((field: IFieldMetadata) => {
70
- // Build the column header
71
- const column = new Column({
72
- header: new Text({ text: field.label }),
73
- // Fiori UX: High priority for primary keys so they don't pop-in too early
74
- demandPopin: !field.isKey,
75
- minScreenWidth: field.isKey ? "" : "Tablet",
76
- popinDisplay: "Inline"
77
- });
78
- table.addColumn(column);
79
-
80
- // Instantiate the cell template (plugin)
81
- const plugin = registry.getPlugin(field.type);
82
-
83
- // In table lists, the binding path is relative to the row's context context (e.g. "{fieldName}")
84
- const control = plugin.render(field, field.fieldName);
85
- templateCells.push(control);
86
- });
87
-
88
- // Create the row template and bind it to the table via the tableName array path
89
- const rowTemplate = new ColumnListItem({
90
- cells: templateCells
91
- });
92
-
93
- // The absolute binding path from the StateManager for this table (using the named model 'meta')
94
- table.bindItems({
95
- path: `meta>/${tableMeta.tableName}`,
96
- template: rowTemplate,
97
- templateShareable: false
98
- });
99
-
100
- return table;
101
- }
102
- }
1
+ /**
2
+ * @file TableLayout.ts
3
+ * @description Generates a responsive SAP Fiori Table layout for v2 schema.
4
+ */
5
+
6
+ import Table from "sap/m/Table";
7
+ import Column from "sap/m/Column";
8
+ import Text from "sap/m/Text";
9
+ import ColumnListItem from "sap/m/ColumnListItem";
10
+ import Toolbar from "sap/m/Toolbar";
11
+ import Title from "sap/m/Title";
12
+ import ToolbarSpacer from "sap/m/ToolbarSpacer";
13
+ import Button from "sap/m/Button";
14
+ import JSONModel from "sap/ui/model/json/JSONModel";
15
+ import { PluginRegistry } from "../core/PluginRegistry";
16
+ import Control from "sap/ui/core/Control";
17
+ import { IPlugin } from "../interfaces/IPlugin";
18
+ import { IPropertyMetadata } from "../interfaces/ISchema";
19
+
20
+ export class TableLayout {
21
+ /**
22
+ * Builds a responsive Table, dynamically calculating column priorities.
23
+ */
24
+ public static build(tableMeta: IPropertyMetadata, bindingPath: string = "meta>/", tableTitle: string = "Table", trackPlugin?: (plugin: IPlugin) => void): Table {
25
+ if (!tableMeta.properties) {
26
+ throw new Error("[MetaUI] Table requires an items schema with properties.");
27
+ }
28
+
29
+ const parts = bindingPath.split(">");
30
+ const actualModelName = parts.length > 1 ? parts[0] : undefined;
31
+ const actualPath = parts.length > 1 ? parts[1] : bindingPath;
32
+ // e.g. "meta>/Contacts" -> actualModelName = "meta", actualPath = "/Contacts"
33
+
34
+ const table = new Table({
35
+ headerToolbar: new Toolbar({
36
+ content: [
37
+ new Title({ text: tableTitle }),
38
+ new ToolbarSpacer(),
39
+ new Button({
40
+ text: "Add Row",
41
+ icon: "sap-icon://add",
42
+ press: (oEvent: any) => {
43
+ const btn = oEvent.getSource();
44
+ const tbl = btn.getParent().getParent() as Table;
45
+ const model = tbl.getModel(actualModelName) as JSONModel;
46
+ const info = tbl.getBindingInfo("items");
47
+ if (!info || !info.path) return;
48
+
49
+ const data = model.getProperty(info.path) || [];
50
+ data.push({}); // append empty row
51
+ model.setProperty(info.path, data);
52
+ }
53
+ })
54
+ ]
55
+ }),
56
+ fixedLayout: false,
57
+ mode: "Delete",
58
+ delete: (oEvent: any) => {
59
+ const item = oEvent.getParameter("listItem");
60
+ const path = item.getBindingContext(actualModelName).getPath();
61
+ const model = item.getModel(actualModelName) as JSONModel;
62
+
63
+ const splitPaths = path.split("/");
64
+ const index = parseInt(splitPaths.pop() || "0", 10);
65
+ let arrayPath = splitPaths.join("/");
66
+ if (arrayPath === "") arrayPath = "/";
67
+
68
+ const data = model.getProperty(arrayPath);
69
+ data.splice(index, 1);
70
+ model.setProperty(arrayPath, data);
71
+ }
72
+ });
73
+
74
+ const templateCells: Control[] = [];
75
+ const registry = PluginRegistry.getInstance();
76
+ const props = tableMeta.properties;
77
+
78
+ Object.keys(props).forEach((key) => {
79
+ try {
80
+ const fieldMeta = props[key];
81
+ const isKey = !!fieldMeta.ui?.isKey;
82
+
83
+ const column = new Column({
84
+ header: new Text({ text: fieldMeta.ui?.label || key }),
85
+ demandPopin: !isKey,
86
+ minScreenWidth: isKey ? "" : "Tablet",
87
+ popinDisplay: "Inline"
88
+ });
89
+ table.addColumn(column);
90
+
91
+ const plugin = registry.getPlugin(fieldMeta.type, fieldMeta.ui?.widget);
92
+ if (trackPlugin) trackPlugin(plugin);
93
+ const control = plugin.render(fieldMeta, key, actualModelName); // No trailing slash for relative bindings
94
+ templateCells.push(control);
95
+ } catch (error) {
96
+ sap.ui.require(["sap/base/Log"], (Log: any) => {
97
+ if (Log) Log.error(`[MetaUI] Failed to render column ${key}`, (error as Error).message, "TableLayout");
98
+ });
99
+
100
+ // Add an empty text control as a fallback so the table columns match the cells array length
101
+ templateCells.push(new Text({ text: "Error" }));
102
+ }
103
+ });
104
+
105
+ const rowTemplate = new ColumnListItem({
106
+ cells: templateCells
107
+ });
108
+
109
+ // V2 Fix: Actually bind the items to the table!
110
+ table.bindItems({
111
+ path: actualPath,
112
+ model: actualModelName,
113
+ template: rowTemplate,
114
+ templateShareable: false
115
+ });
116
+
117
+ return table;
118
+ }
119
+ }
@@ -1,33 +1,44 @@
1
- sap.ui.define(["sap/ui/core/Core", "./core/PluginRegistry", "./plugins/StringPlugin", "./plugins/NumberPlugin", "./plugins/BooleanPlugin", "./plugins/DropdownPlugin", "./plugins/DatePlugin"], function (Core, ___core_PluginRegistry, ___plugins_StringPlugin, ___plugins_NumberPlugin, ___plugins_BooleanPlugin, ___plugins_DropdownPlugin, ___plugins_DatePlugin) {
2
- "use strict";
3
-
4
- const PluginRegistry = ___core_PluginRegistry["PluginRegistry"];
5
- const StringPlugin = ___plugins_StringPlugin["StringPlugin"];
6
- const NumberPlugin = ___plugins_NumberPlugin["NumberPlugin"];
7
- const BooleanPlugin = ___plugins_BooleanPlugin["BooleanPlugin"];
8
- const DropdownPlugin = ___plugins_DropdownPlugin["DropdownPlugin"];
9
- const DatePlugin = ___plugins_DatePlugin["DatePlugin"]; // Delegate to standard library registration
10
- Core.initLibrary({
11
- name: "nz.co.siliconst.ui5.metaui",
12
- version: "1.0.0",
13
- dependencies: ["sap.ui.core", "sap.m", "sap.ui.layout", "sap.ui.table"],
14
- controls: ["nz.co.siliconst.ui5.metaui.controls.GeneratorHost"],
15
- elements: [],
16
- interfaces: []
17
- });
18
-
19
- /**
20
- * Global Bootstrapper: Maps all standard primitive types to their respective plugins.
21
- */
22
- const registry = PluginRegistry.getInstance();
23
- registry.register("string", StringPlugin);
24
- registry.register("number", NumberPlugin);
25
- registry.register("boolean", BooleanPlugin);
26
- registry.register("dropdown", DropdownPlugin);
27
- registry.register("date", DatePlugin);
28
-
29
- // Exporting window object safely for UI5 compatibility if needed
30
- var __exports = window["nz"]["co"]["siliconst"]["ui5"]["metaui"];
31
- return __exports;
32
- });
1
+ sap.ui.define(["sap/ui/core/Core", "./core/PluginRegistry", "./plugins/StringPlugin", "./plugins/NumberPlugin", "./plugins/BooleanPlugin", "./plugins/DropdownPlugin", "./plugins/DatePlugin", "./plugins/TimePlugin", "./plugins/DateTimePlugin", "./plugins/ArrayPlugin", "./plugins/TextAreaPlugin", "./plugins/SwitchPlugin"], function (Core, ___core_PluginRegistry, ___plugins_StringPlugin, ___plugins_NumberPlugin, ___plugins_BooleanPlugin, ___plugins_DropdownPlugin, ___plugins_DatePlugin, ___plugins_TimePlugin, ___plugins_DateTimePlugin, ___plugins_ArrayPlugin, ___plugins_TextAreaPlugin, ___plugins_SwitchPlugin) {
2
+ "use strict";
3
+
4
+ const PluginRegistry = ___core_PluginRegistry["PluginRegistry"];
5
+ const StringPlugin = ___plugins_StringPlugin["StringPlugin"];
6
+ const NumberPlugin = ___plugins_NumberPlugin["NumberPlugin"];
7
+ const BooleanPlugin = ___plugins_BooleanPlugin["BooleanPlugin"];
8
+ const DropdownPlugin = ___plugins_DropdownPlugin["DropdownPlugin"];
9
+ const DatePlugin = ___plugins_DatePlugin["DatePlugin"];
10
+ const TimePlugin = ___plugins_TimePlugin["TimePlugin"];
11
+ const DateTimePlugin = ___plugins_DateTimePlugin["DateTimePlugin"];
12
+ const ArrayPlugin = ___plugins_ArrayPlugin["ArrayPlugin"];
13
+ const TextAreaPlugin = ___plugins_TextAreaPlugin["TextAreaPlugin"];
14
+ const SwitchPlugin = ___plugins_SwitchPlugin["SwitchPlugin"]; // Delegate to standard library registration
15
+ Core.initLibrary({
16
+ name: "nz.co.siliconst.ui5.metaui",
17
+ version: "1.0.0",
18
+ dependencies: ["sap.ui.core", "sap.m", "sap.ui.layout", "sap.ui.table"],
19
+ controls: ["nz.co.siliconst.ui5.metaui.controls.GeneratorHost"],
20
+ elements: [],
21
+ interfaces: [],
22
+ noLibraryCSS: true
23
+ });
24
+
25
+ /**
26
+ * Global Bootstrapper: Maps all standard primitive types to their respective plugins.
27
+ */
28
+ const registry = PluginRegistry.getInstance();
29
+ registry.register("string", StringPlugin);
30
+ registry.register("string", TextAreaPlugin, "textArea");
31
+ registry.register("number", NumberPlugin);
32
+ registry.register("boolean", BooleanPlugin);
33
+ registry.register("boolean", SwitchPlugin, "switch");
34
+ registry.register("dropdown", DropdownPlugin);
35
+ registry.register("date", DatePlugin);
36
+ registry.register("time", TimePlugin);
37
+ registry.register("datetime", DateTimePlugin);
38
+ registry.register("array", ArrayPlugin);
39
+
40
+ // Exporting window object safely for UI5 compatibility if needed
41
+ var __exports = window["nz"]["co"]["siliconst"]["ui5"]["metaui"];
42
+ return __exports;
43
+ });
33
44
  //# sourceMappingURL=library-dbg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"library-dbg.js","names":["PluginRegistry","___core_PluginRegistry","StringPlugin","___plugins_StringPlugin","NumberPlugin","___plugins_NumberPlugin","BooleanPlugin","___plugins_BooleanPlugin","DropdownPlugin","___plugins_DropdownPlugin","DatePlugin","___plugins_DatePlugin","Core","initLibrary","name","version","dependencies","controls","elements","interfaces","registry","getInstance","register","__exports","window"],"sources":["library.ts"],"sourcesContent":["/**\r\n * @file library.ts\r\n * @description Standard SAP UI5 library registration file. Exposes the MetaUI namespace \r\n * and automatically bootstraps the internal PluginRegistry.\r\n */\r\n\r\nimport Core from \"sap/ui/core/Core\";\r\nimport { PluginRegistry } from \"./core/PluginRegistry\";\r\nimport { StringPlugin } from \"./plugins/StringPlugin\";\r\nimport { NumberPlugin } from \"./plugins/NumberPlugin\";\r\nimport { BooleanPlugin } from \"./plugins/BooleanPlugin\";\r\nimport { DropdownPlugin } from \"./plugins/DropdownPlugin\";\r\nimport { DatePlugin } from \"./plugins/DatePlugin\";\r\n\r\n// Delegate to standard library registration\r\nCore.initLibrary({\r\n name: \"nz.co.siliconst.ui5.metaui\",\r\n version: \"1.0.0\",\r\n dependencies: [\r\n \"sap.ui.core\",\r\n \"sap.m\",\r\n \"sap.ui.layout\",\r\n \"sap.ui.table\"\r\n ],\r\n controls: [\r\n \"nz.co.siliconst.ui5.metaui.controls.GeneratorHost\"\r\n ],\r\n elements: [],\r\n interfaces: []\r\n});\r\n\r\n/**\r\n * Global Bootstrapper: Maps all standard primitive types to their respective plugins.\r\n */\r\nconst registry = PluginRegistry.getInstance();\r\nregistry.register(\"string\", StringPlugin);\r\nregistry.register(\"number\", NumberPlugin);\r\nregistry.register(\"boolean\", BooleanPlugin);\r\nregistry.register(\"dropdown\", DropdownPlugin);\r\nregistry.register(\"date\", DatePlugin);\r\n\r\n// Exporting window object safely for UI5 compatibility if needed\r\nexport default (window as any)[\"nz\"][\"co\"][\"siliconst\"][\"ui5\"][\"metaui\"];\r\n"],"mappings":";;;QAOSA,cAAc,GAAAC,sBAAA;EAAA,MACdC,YAAY,GAAAC,uBAAA;EAAA,MACZC,YAAY,GAAAC,uBAAA;EAAA,MACZC,aAAa,GAAAC,wBAAA;EAAA,MACbC,cAAc,GAAAC,yBAAA;EAAA,MACdC,UAAU,GAAAC,qBAAA,gBAEnB;EACAC,IAAI,CAACC,WAAW,CAAC;IACbC,IAAI,EAAE,4BAA4B;IAClCC,OAAO,EAAE,OAAO;IAChBC,YAAY,EAAE,CACV,aAAa,EACb,OAAO,EACP,eAAe,EACf,cAAc,CACjB;IACDC,QAAQ,EAAE,CACN,mDAAmD,CACtD;IACDC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EAChB,CAAC,CAAC;;EAEF;AACA;AACA;EACA,MAAMC,QAAQ,GAAGpB,cAAc,CAACqB,WAAW,CAAC,CAAC;EAC7CD,QAAQ,CAACE,QAAQ,CAAC,QAAQ,EAAEpB,YAAY,CAAC;EACzCkB,QAAQ,CAACE,QAAQ,CAAC,QAAQ,EAAElB,YAAY,CAAC;EACzCgB,QAAQ,CAACE,QAAQ,CAAC,SAAS,EAAEhB,aAAa,CAAC;EAC3Cc,QAAQ,CAACE,QAAQ,CAAC,UAAU,EAAEd,cAAc,CAAC;EAC7CY,QAAQ,CAACE,QAAQ,CAAC,MAAM,EAAEZ,UAAU,CAAC;;EAErC;EAAA,IAAAa,SAAA,GACgBC,MAAM,CAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;EAAA,OAAAD,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"library-dbg.js","names":["PluginRegistry","___core_PluginRegistry","StringPlugin","___plugins_StringPlugin","NumberPlugin","___plugins_NumberPlugin","BooleanPlugin","___plugins_BooleanPlugin","DropdownPlugin","___plugins_DropdownPlugin","DatePlugin","___plugins_DatePlugin","TimePlugin","___plugins_TimePlugin","DateTimePlugin","___plugins_DateTimePlugin","ArrayPlugin","___plugins_ArrayPlugin","TextAreaPlugin","___plugins_TextAreaPlugin","SwitchPlugin","___plugins_SwitchPlugin","Core","initLibrary","name","version","dependencies","controls","elements","interfaces","noLibraryCSS","registry","getInstance","register","__exports","window"],"sources":["library.ts"],"sourcesContent":["/**\n * @file library.ts\n * @description Standard SAP UI5 library registration file. Exposes the MetaUI namespace \n * and automatically bootstraps the internal PluginRegistry.\n */\n\nimport Core from \"sap/ui/core/Core\";\nimport { PluginRegistry } from \"./core/PluginRegistry\";\nimport { StringPlugin } from \"./plugins/StringPlugin\";\nimport { NumberPlugin } from \"./plugins/NumberPlugin\";\nimport { BooleanPlugin } from \"./plugins/BooleanPlugin\";\nimport { DropdownPlugin } from \"./plugins/DropdownPlugin\";\nimport { DatePlugin } from \"./plugins/DatePlugin\";\nimport { TimePlugin } from \"./plugins/TimePlugin\";\nimport { DateTimePlugin } from \"./plugins/DateTimePlugin\";\nimport { ArrayPlugin } from \"./plugins/ArrayPlugin\";\n\nimport { TextAreaPlugin } from \"./plugins/TextAreaPlugin\";\nimport { SwitchPlugin } from \"./plugins/SwitchPlugin\";\n\n// Delegate to standard library registration\nCore.initLibrary({\n name: \"nz.co.siliconst.ui5.metaui\",\n version: \"1.0.0\",\n dependencies: [\n \"sap.ui.core\",\n \"sap.m\",\n \"sap.ui.layout\",\n \"sap.ui.table\"\n ],\n controls: [\n \"nz.co.siliconst.ui5.metaui.controls.GeneratorHost\"\n ],\n elements: [],\n interfaces: [],\n noLibraryCSS: true\n});\n\n/**\n * Global Bootstrapper: Maps all standard primitive types to their respective plugins.\n */\nconst registry = PluginRegistry.getInstance();\nregistry.register(\"string\", StringPlugin);\nregistry.register(\"string\", TextAreaPlugin, \"textArea\");\nregistry.register(\"number\", NumberPlugin);\nregistry.register(\"boolean\", BooleanPlugin);\nregistry.register(\"boolean\", SwitchPlugin, \"switch\");\nregistry.register(\"dropdown\", DropdownPlugin);\nregistry.register(\"date\", DatePlugin);\nregistry.register(\"time\", TimePlugin);\nregistry.register(\"datetime\", DateTimePlugin);\nregistry.register(\"array\", ArrayPlugin);\n\n// Exporting window object safely for UI5 compatibility if needed\nexport default (window as any)[\"nz\"][\"co\"][\"siliconst\"][\"ui5\"][\"metaui\"];\n"],"mappings":";;;QAOSA,cAAc,GAAAC,sBAAA;EAAA,MACdC,YAAY,GAAAC,uBAAA;EAAA,MACZC,YAAY,GAAAC,uBAAA;EAAA,MACZC,aAAa,GAAAC,wBAAA;EAAA,MACbC,cAAc,GAAAC,yBAAA;EAAA,MACdC,UAAU,GAAAC,qBAAA;EAAA,MACVC,UAAU,GAAAC,qBAAA;EAAA,MACVC,cAAc,GAAAC,yBAAA;EAAA,MACdC,WAAW,GAAAC,sBAAA;EAAA,MAEXC,cAAc,GAAAC,yBAAA;EAAA,MACdC,YAAY,GAAAC,uBAAA,kBAErB;EACAC,IAAI,CAACC,WAAW,CAAC;IACbC,IAAI,EAAE,4BAA4B;IAClCC,OAAO,EAAE,OAAO;IAChBC,YAAY,EAAE,CACV,aAAa,EACb,OAAO,EACP,eAAe,EACf,cAAc,CACjB;IACDC,QAAQ,EAAE,CACN,mDAAmD,CACtD;IACDC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,EAAE;IACdC,YAAY,EAAE;EAClB,CAAC,CAAC;;EAEF;AACA;AACA;EACA,MAAMC,QAAQ,GAAG/B,cAAc,CAACgC,WAAW,CAAC,CAAC;EAC7CD,QAAQ,CAACE,QAAQ,CAAC,QAAQ,EAAE/B,YAAY,CAAC;EACzC6B,QAAQ,CAACE,QAAQ,CAAC,QAAQ,EAAEf,cAAc,EAAE,UAAU,CAAC;EACvDa,QAAQ,CAACE,QAAQ,CAAC,QAAQ,EAAE7B,YAAY,CAAC;EACzC2B,QAAQ,CAACE,QAAQ,CAAC,SAAS,EAAE3B,aAAa,CAAC;EAC3CyB,QAAQ,CAACE,QAAQ,CAAC,SAAS,EAAEb,YAAY,EAAE,QAAQ,CAAC;EACpDW,QAAQ,CAACE,QAAQ,CAAC,UAAU,EAAEzB,cAAc,CAAC;EAC7CuB,QAAQ,CAACE,QAAQ,CAAC,MAAM,EAAEvB,UAAU,CAAC;EACrCqB,QAAQ,CAACE,QAAQ,CAAC,MAAM,EAAErB,UAAU,CAAC;EACrCmB,QAAQ,CAACE,QAAQ,CAAC,UAAU,EAAEnB,cAAc,CAAC;EAC7CiB,QAAQ,CAACE,QAAQ,CAAC,OAAO,EAAEjB,WAAW,CAAC;;EAEvC;EAAA,IAAAkB,SAAA,GACgBC,MAAM,CAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;EAAA,OAAAD,SAAA;AAAA","ignoreList":[]}
@@ -1,21 +1,26 @@
1
1
  //@ui5-bundle nz/co/siliconst/ui5/metaui/library-preload.js
2
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/controls/GeneratorHost", ["sap/ui/core/Control","sap/m/Dialog","sap/m/Button","../core/SchemaNormalizer","../core/Engine","../core/StateManager","../layouts/BaseLayout"],function(t,e,n,i,a,o,s){"use strict";const r=i["SchemaNormalizer"];const c=a["Engine"];const l=o["StateManager"];const g=s["BaseLayout"];const h=t.extend("nz.co.siliconst.ui5.metaui.controls.GeneratorHost",{constructor:function e(){t.prototype.constructor.apply(this,arguments);this.stateManager=null;this.generatedContent=null},renderer:{apiVersion:2,render(t,e){t.openStart("div",e);t.style("width","100%");t.style("height","100%");t.openEnd();const n=e.getAggregation("_content");if(n){t.renderControl(n)}t.close("div")}},metadata:{properties:{schemaDefinition:{type:"object",defaultValue:null},initialData:{type:"object",defaultValue:{}}},aggregations:{_content:{type:"sap.ui.core.Control",multiple:false,visibility:"hidden"}},events:{submit:{parameters:{payload:{type:"object"}}},cancel:{}}},init:function e(){t.prototype.init.call(this)},onBeforeRendering:function t(){if(!this.generatedContent&&this.getProperty("schemaDefinition")){this.generate()}},triggerSubmit:function t(){if(this.stateManager){const t=this.stateManager.extractPayload();this.fireEvent("submit",{payload:t})}},generate:function t(){const e=this.getProperty("schemaDefinition");const n=this.getProperty("initialData");if(!e){throw new Error("[MetaUI] Cannot generate layout without a schemaDefinition.")}const i=r.normalize(e);this.stateManager=new l(n);this.setModel(this.stateManager.getModel(),"meta");const a=new c;const o=new g;this.generatedContent=a.build(i,o);this.setAggregation("_content",this.generatedContent)},openInDialog:function t(i="Dynamic Form",a="Save"){if(!this.generatedContent){this.generate()}const o=new e({title:i,contentWidth:"800px",content:[this],beginButton:new n({text:a,type:"Emphasized",press:()=>{if(this.stateManager){const t=this.stateManager.extractPayload();this.fireEvent("submit",{payload:t})}o.close()}}),endButton:new n({text:"Cancel",press:()=>{this.fireEvent("cancel");o.close()}}),afterClose:()=>{o.destroy()}});o.open()}});return h});
3
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/ConditionEngine", ["./EventBus"],function(e){"use strict";const i=e["EventBus"];class n{constructor(e){this.schema=e;this.initializeListeners()}initializeListeners(){i.getInstance().subscribe(this.handleEvent.bind(this))}handleEvent(e){}}var t={__esModule:true};t.ConditionEngine=n;return t});
4
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/Engine", ["./ConditionEngine","sap/m/VBox"],function(e,n){"use strict";const t=e["ConditionEngine"];class r{conditionEngine=null;build(e,r){this.conditionEngine=new t(e);if(e.mode==="form"){return r.renderForm(e)}else if(e.mode==="table"){if(!e.tables||e.tables.length===0){throw new Error("[MetaUI] Table mode requires at least one table definition.")}return r.renderTable(e.tables[0])}else if(e.mode==="mixed"){const t=new n({renderType:"Bare"});if(e.rootFields&&e.rootFields.length>0){t.addItem(r.renderForm(e))}if(e.tables&&e.tables.length>0){e.tables.forEach(e=>{t.addItem(r.renderTable(e))})}return t}throw new Error(`[MetaUI] Mode '${e.mode}' is not yet implemented or invalid.`)}}var i={__esModule:true};i.Engine=r;return i});
5
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/EventBus", [],function(){"use strict";class s{listeners=[];constructor(){}static getInstance(){if(!s.instance){s.instance=new s}return s.instance}publishFieldChange(s){this.listeners.forEach(e=>e(s))}subscribe(s){this.listeners.push(s)}}var e={__esModule:true};e.EventBus=s;return e});
6
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/PluginRegistry", [],function(){"use strict";class e{plugins=new Map;constructor(){}static getInstance(){if(!e.instance){e.instance=new e}return e.instance}register(e,t){this.plugins.set(e,t)}getPlugin(e){const t=this.plugins.get(e);if(!t){throw new Error(`[MetaUI] No plugin registered for FieldType: ${e}`)}return new t}}var t={__esModule:true};t.PluginRegistry=e;return t});
7
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/SchemaNormalizer", [],function(){"use strict";class e{static normalize(e){if(!e||typeof e!=="object"){throw new Error("[MetaUI] Invalid Schema Payload: Payload is not an object.")}if(!e.mode||!e.rootFields||!e.tables){throw new Error("[MetaUI] Invalid Schema Payload: Missing required structures (mode, rootFields, tables).")}return e}}var r={__esModule:true};r.SchemaNormalizer=e;return r});
2
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/controls/GeneratorHost", ["sap/ui/core/Control","sap/m/Dialog","sap/m/Button","sap/m/MessagePage","sap/base/Log","../core/SchemaNormalizer","../core/Engine","../core/StateManager","../layouts/BaseLayout"],function(e,t,n,a,i,s,r,o,l){"use strict";const g=s["SchemaNormalizer"];const c=r["Engine"];const u=o["StateManager"];const d=l["BaseLayout"];const p=e.extend("nz.co.siliconst.ui5.metaui.controls.GeneratorHost",{constructor:function t(){e.prototype.constructor.apply(this,arguments);this.stateManager=null;this.generatedContent=null;this.engine=null},renderer:{apiVersion:2,render(e,t){e.openStart("div",t);e.style("width","100%");e.style("height","100%");e.openEnd();const n=t.getAggregation("_content");if(n){e.renderControl(n)}e.close("div")}},metadata:{properties:{schemaDefinition:{type:"any",defaultValue:null},initialData:{type:"any",defaultValue:null},initialDataJson:{type:"string",defaultValue:null},outputData:{type:"object",defaultValue:null},outputDataJson:{type:"string",defaultValue:null},useMessageManager:{type:"boolean",defaultValue:false}},aggregations:{_content:{type:"sap.ui.core.Control",multiple:false,visibility:"hidden"}},events:{beforeSubmit:{parameters:{payload:{type:"object"},addError:{type:"function"},preventDefault:{type:"function"}}},submit:{parameters:{payload:{type:"object"},payloadJson:{type:"string"}}},cancel:{}}},init:function t(){e.prototype.init.call(this)},exit:function e(){if(this.engine){this.engine.destroy();this.engine=null}if(this.stateManager){this.stateManager.getModel().destroy();this.stateManager=null}if(this.generatedContent){this.generatedContent.destroy();this.generatedContent=null}},onBeforeRendering:function e(){if(!this.generatedContent&&this.getProperty("schemaDefinition")){this.generate()}},triggerSubmit:function e(){if(this.stateManager&&this.engine){let e=false;const t=this.getProperty("useMessageManager");let n=null;if(t){n=sap.ui.getCore().getMessageManager();n.removeAllMessages()}const a=(e,a)=>{if(t&&n){sap.ui.require(["sap/ui/core/message/Message"],t=>{n.addMessages(new t({message:a,type:"Error",target:`${this.stateManager?.getModel().getId()}>/${e}`,processor:this.stateManager?.getModel()}))})}};if(!this.engine.validateAll()){a("","One or more fields failed schema validation. Please review the highlighted fields.");return false}const s=this.stateManager.extractPayload();const r=JSON.stringify(s);this.fireEvent("beforeSubmit",{payload:s,preventDefault:()=>{e=true},addError:(s,r)=>{e=true;if(t&&n){a(s,r)}else{i.warning(`[MetaUI] Validation Error for ${s}: ${r}`,"GeneratorHost")}}});if(e){return false}this.setProperty("outputData",s,true);this.setProperty("outputDataJson",r,true);this.fireEvent("submit",{payload:s,payloadJson:r});return true}return false},generate:function e(){try{const e=this.getProperty("schemaDefinition");let t=this.getProperty("initialData");const n=this.getProperty("initialDataJson");if(n){try{t=JSON.parse(n)}catch(e){i.error("[MetaUI] Failed to parse initialDataJson string.",e.message,"GeneratorHost")}}else if(typeof t==="string"){try{t=JSON.parse(t)}catch(e){i.error("[MetaUI] Failed to parse initialData string.",e.message,"GeneratorHost")}}const a=g.normalize(e,t);this.stateManager=new u(t||{});const s="metaUI_"+this.getId();this.setModel(this.stateManager.getModel(),s);this.engine=new c;const r=new d;this.generatedContent=this.engine.build(a,r,s);this.setAggregation("_content",this.generatedContent)}catch(e){i.error("[MetaUI] Engine failed to generate layout. Preventing Launchpad crash.",e.message,"GeneratorHost");const t=new a({text:"UI Generation Failed",description:"The dynamic schema could not be rendered. Please check the Fiori console for diagnostic logs.",icon:"sap-icon://error"});this.setAggregation("_content",t)}},openInDialog:function e(a="Dynamic Form",i="Save"){if(!this.generatedContent){this.generate()}const s=new t({title:a,contentWidth:"800px",content:[this],beginButton:new n({text:i,type:"Emphasized",press:()=>{const e=this.triggerSubmit();if(e){s.close()}}}),endButton:new n({text:"Cancel",press:()=>{this.fireEvent("cancel");s.close()}}),afterClose:()=>{s.destroy()}});s.open()}});return p});
3
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/ConditionEngine", ["./EventBus"],function(n){"use strict";const e=n["EventBus"];class s{constructor(n){this.schema=n;this.boundHandler=this.handleEvent.bind(this);this.initializeListeners()}initializeListeners(){e.getInstance().subscribe(this.boundHandler)}handleEvent(n){}destroy(){e.getInstance().unsubscribe(this.boundHandler)}}var t={__esModule:true};t.ConditionEngine=s;return t});
4
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/Engine", ["./ConditionEngine","sap/m/VBox"],function(e,t){"use strict";const i=e["ConditionEngine"];class n{conditionEngine=null;activePlugins=[];build(e,n,s="meta"){this.conditionEngine=new i(e);this.activePlugins=[];const r=e=>this.activePlugins.push(e);if(e.type==="array"){if(!e.items){throw new Error("[MetaUI] Array schema must define 'items'.")}return n.renderTable(e.items,`${s}>/`,e.title)}if(e.type==="object"){const i=new t({renderType:"Bare"});const o=e.properties||{};const a={};const c=[];for(const e of Object.keys(o)){if(o[e].type==="array"){c.push({key:e,meta:o[e]})}else{a[e]=o[e]}}if(Object.keys(a).length>0){i.addItem(n.renderForm(a,s,e.title,r))}for(const e of c){if(e.meta.items){i.addItem(n.renderTable(e.meta.items,`${s}>/${e.key}`,e.meta.ui?.label||e.key))}}return i}throw new Error(`[MetaUI] Unsupported schema type: ${e.type}`)}validateAll(){let e=true;for(const t of this.activePlugins){if(!t.validate()){e=false}}return e}destroy(){if(this.conditionEngine){this.conditionEngine.destroy();this.conditionEngine=null}this.activePlugins=[]}}var s={__esModule:true};s.Engine=n;return s});
5
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/EventBus", [],function(){"use strict";class s{listeners=[];constructor(){}static getInstance(){if(!s.instance){s.instance=new s}return s.instance}publishFieldChange(s){this.listeners.forEach(e=>e(s))}subscribe(s){this.listeners.push(s)}unsubscribe(s){this.listeners=this.listeners.filter(e=>e!==s)}unsubscribeAll(){this.listeners=[]}}var e={__esModule:true};e.EventBus=s;return e});
6
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/PluginRegistry", [],function(){"use strict";class e{plugins=new Map;constructor(){}static getInstance(){if(!e.instance){e.instance=new e}return e.instance}register(e,t,n){const i=n?`${e}:${n}`:e;this.plugins.set(i,t)}getPlugin(e,t){let n;if(t){n=this.plugins.get(`${e}:${t}`)}if(!n){n=this.plugins.get(e)}if(!n){throw new Error(`[MetaUI] No plugin registered for FieldType: ${e}`)}return new n}}var t={__esModule:true};t.PluginRegistry=e;return t});
7
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/SchemaNormalizer", [],function(){"use strict";class e{static normalize(e,t){let r=e;if(typeof r==="string"){try{r=JSON.parse(r)}catch(e){console.warn("[MetaUI] Failed to parse schema string, falling back to inference.",e);r=null}}if(!r||typeof r!=="object"||Array.isArray(r)){return this.inferSchemaFromData(t)}const i={title:r.title||"MetaUI Generated Form",type:r.type||(r.items?"array":"object")};if(i.type==="object"){i.properties=this.normalizeProperties(r.properties||{})}else if(i.type==="array"){i.items=this.normalizePropertyMetadata(r.items||{type:"object",properties:{}},"items")}return i}static normalizeProperties(e){const t={};for(const r of Object.keys(e)){t[r]=this.normalizePropertyMetadata(e[r],r)}return t}static normalizePropertyMetadata(e,t){const r={type:e.type||"string",ui:{label:e.ui?.label||this.generateLabel(t),isKey:!!e.ui?.isKey,readOnly:!!e.ui?.readOnly,widget:e.ui?.widget,group:e.ui?.group,visibleOn:e.ui?.visibleOn,enabledOn:e.ui?.enabledOn,format:e.ui?.format},required:!!e.required,maxLength:e.maxLength,minimum:e.minimum,maximum:e.maximum,pattern:e.pattern,precision:e.precision,scale:e.scale,valueHelp:e.valueHelp};if(r.type==="object"&&e.properties){r.properties=this.normalizeProperties(e.properties)}else if(r.type==="array"&&e.items){r.items=this.normalizePropertyMetadata(e.items,"items")}return r}static generateLabel(e){if(!e)return"";let t=e.replace(/([A-Z])/g," $1").replace(/_/g," ");return t.split(" ").filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim()}static inferSchemaFromData(e){const t={type:"object",properties:{}};if(!e||typeof e!=="object"){return t}if(Array.isArray(e)){t.type="array";t.items={type:"object",properties:e.length>0?this.inferPropertiesFromObject(e[0]):{}}}else{t.type="object";t.properties=this.inferPropertiesFromObject(e)}return t}static inferPropertiesFromObject(e){const t={};if(!e||typeof e!=="object")return t;for(const r of Object.keys(e)){const i=e[r];if(i===null||i===undefined)continue;if(typeof i==="object"&&!Array.isArray(i))continue;let a="string";let s;if(typeof i==="number")a="number";else if(typeof i==="boolean")a="boolean";else if(Array.isArray(i)){a="array";s={type:"object",properties:i.length>0?this.inferPropertiesFromObject(i[0]):{}}}t[r]={type:a,items:s,ui:{label:this.generateLabel(r),isKey:false,readOnly:false}}}return t}}var t={__esModule:true};t.SchemaNormalizer=e;return t});
8
8
  sap.ui.predefine("nz/co/siliconst/ui5/metaui/core/StateManager", ["sap/ui/model/json/JSONModel"],function(e){"use strict";class t{constructor(t={}){const o=JSON.parse(JSON.stringify(t));this.model=new e(o);this.model.setDefaultBindingMode("TwoWay")}getModel(){return this.model}bindControl(e,t,o){e.bindProperty(t,{path:o,model:"meta"})}extractPayload(){const e=this.model.getData();return JSON.parse(JSON.stringify(e))}}var o={__esModule:true};o.StateManager=t;return o});
9
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/layouts/BaseLayout", ["./FormLayout","./TableLayout"],function(e,r){"use strict";const t=e["FormLayout"];const u=r["TableLayout"];class o{renderForm(e){return t.build(e.rootFields)}renderTable(e){return u.build(e)}}var a={__esModule:true};a.BaseLayout=o;return a});
10
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/layouts/FormLayout", ["sap/ui/layout/form/SimpleForm","sap/m/Label","../core/PluginRegistry"],function(e,n,t){"use strict";const a=t["PluginRegistry"];class l{static build(t){const l=new e({editable:true,layout:"ResponsiveGridLayout",labelSpanXL:4,labelSpanL:4,labelSpanM:4,labelSpanS:12,adjustLabelSpan:false,emptySpanXL:0,emptySpanL:0,emptySpanM:0,emptySpanS:0,columnsXL:1,columnsL:1,columnsM:1,singleContainerFullSize:false});const s=a.getInstance();t.forEach(e=>{const t=new n({text:e.label,required:e.isRequired});const a=s.getPlugin(e.type);const o=a.render(e,`/${e.fieldName}`);l.addContent(t);l.addContent(o)});return l}}var s={__esModule:true};s.FormLayout=l;return s});
11
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/layouts/TableLayout", ["sap/m/Table","sap/m/Column","sap/m/Text","sap/m/ColumnListItem","sap/m/Toolbar","sap/m/Title","sap/m/ToolbarSpacer","sap/m/Button","../core/PluginRegistry"],function(e,t,n,s,a,o,l,r,c){"use strict";const i=c["PluginRegistry"];class p{static build(c){const p=new e({headerToolbar:new a({content:[new o({text:c.label||c.tableName}),new l,new r({text:"Add Row",icon:"sap-icon://add",press:e=>{const t=e.getSource();const n=t.getParent().getParent();const s=n.getModel("meta");const a=`/${c.tableName}`;const o=s.getProperty(a)||[];o.push({});s.setProperty(a,o)}})]}),fixedLayout:false,mode:"Delete",delete:e=>{const t=e.getParameter("listItem");const n=t.getBindingContext("meta").getPath();const s=t.getModel("meta");const a=n.split("/");const o=parseInt(a.pop()||"0",10);const l=a.join("/");const r=s.getProperty(l);r.splice(o,1);s.setProperty(l,r)}});const m=[];const d=i.getInstance();c.fields.forEach(e=>{const s=new t({header:new n({text:e.label}),demandPopin:!e.isKey,minScreenWidth:e.isKey?"":"Tablet",popinDisplay:"Inline"});p.addColumn(s);const a=d.getPlugin(e.type);const o=a.render(e,e.fieldName);m.push(o)});const u=new s({cells:m});p.bindItems({path:`meta>/${c.tableName}`,template:u,templateShareable:false});return p}}var m={__esModule:true};m.TableLayout=p;return m});
12
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/library", ["sap/ui/core/Core","./core/PluginRegistry","./plugins/StringPlugin","./plugins/NumberPlugin","./plugins/BooleanPlugin","./plugins/DropdownPlugin","./plugins/DatePlugin"],function(n,i,e,s,t,o,r){"use strict";const u=i["PluginRegistry"];const g=e["StringPlugin"];const l=s["NumberPlugin"];const a=t["BooleanPlugin"];const c=o["DropdownPlugin"];const p=r["DatePlugin"];n.initLibrary({name:"nz.co.siliconst.ui5.metaui",version:"1.0.0",dependencies:["sap.ui.core","sap.m","sap.ui.layout","sap.ui.table"],controls:["nz.co.siliconst.ui5.metaui.controls.GeneratorHost"],elements:[],interfaces:[]});const P=u.getInstance();P.register("string",g);P.register("number",l);P.register("boolean",a);P.register("dropdown",c);P.register("date",p);var d=window["nz"]["co"]["siliconst"]["ui5"]["metaui"];return d});
13
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/BasePlugin", ["../core/EventBus"],function(e){"use strict";const t=e["EventBus"];class a{control=null;metadata=null;onStateChange(e){this.metadata=e;this.applyState()}publishChange(e){if(this.metadata){t.getInstance().publishFieldChange({fieldName:this.metadata.fieldName,newValue:e})}}}var n={__esModule:true};n.BasePlugin=a;return n});
14
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin", ["./BasePlugin","sap/m/Switch"],function(t,e){"use strict";const a=t["BasePlugin"];class s extends a{render(t,a){this.metadata=t;this.control=new e({state:`{meta>${a}}`,enabled:!t.isReadOnly,change:t=>{const e=t.getParameter("state");this.publishChange(e);this.validate()}});return this.control}validate(){return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEnabled(!this.metadata.isReadOnly)}}}var n={__esModule:true};n.BooleanPlugin=s;return n});
15
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/DatePlugin", ["./BasePlugin","sap/m/DatePicker"],function(t,e){"use strict";const a=t["BasePlugin"];class i extends a{render(t,a){this.metadata=t;this.control=new e({value:`{meta>${a}}`,valueFormat:"yyyy-MM-dd",displayFormat:"long",editable:!t.isReadOnly,required:t.isRequired,change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=t.isValidValue();const a=t.getValue();if(this.metadata.isRequired&&(!a||a.trim()==="")){t.setValueState("Error");t.setValueStateText("A valid date is required.");return false}if(a&&!e){t.setValueState("Error");t.setValueStateText("Invalid date format.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.isReadOnly);t.setRequired(this.metadata.isRequired)}}}var s={__esModule:true};s.DatePlugin=i;return s});
16
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin", ["./BasePlugin","sap/m/Select","sap/ui/core/Item"],function(e,t,a){"use strict";const s=e["BasePlugin"];class i extends s{render(e,s){this.metadata=e;const i=new t({selectedKey:`{meta>${s}}`,enabled:!e.isReadOnly,change:e=>{const t=e.getParameter("selectedItem");const a=t?t.getKey():"";this.publishChange(a);this.validate()}});if(e.valueHelp&&Array.isArray(e.valueHelp)){if(!e.isRequired){i.addItem(new a({key:"",text:"--- Select ---"}))}e.valueHelp.forEach(e=>{i.addItem(new a({key:e.key,text:e.text}))})}this.control=i;return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=e.getSelectedKey();if(this.metadata.isRequired&&(!t||t.trim()==="")){e.setValueState("Error");e.setValueStateText("Selection is required.");return false}e.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEnabled(!this.metadata.isReadOnly)}}}var r={__esModule:true};r.DropdownPlugin=i;return r});
17
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/NumberPlugin", ["./BasePlugin","sap/m/StepInput"],function(e,t){"use strict";const a=e["BasePlugin"];class i extends a{render(e,a){this.metadata=e;this.control=new t({value:`{meta>${a}}`,displayValuePrecision:e.scale||0,editable:!e.isReadOnly,required:e.isRequired,change:e=>{const t=e.getParameter("value");this.publishChange(t);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=e.getValue();if(this.metadata.isRequired&&(t===null||t===undefined)){e.setValueState("Error");e.setValueStateText("This field is required.");return false}e.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEditable(!this.metadata.isReadOnly);e.setRequired(this.metadata.isRequired)}}}var s={__esModule:true};s.NumberPlugin=i;return s});
18
- sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/StringPlugin", ["./BasePlugin","sap/m/Input"],function(t,e){"use strict";const a=t["BasePlugin"];class i extends a{render(t,a){this.metadata=t;this.control=new e({value:`{meta>${a}}`,maxLength:t.maxLength||0,editable:!t.isReadOnly,required:t.isRequired,change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=t.getValue();if(this.metadata.isRequired&&(!e||e.trim()==="")){t.setValueState("Error");t.setValueStateText("This field is required.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.isReadOnly);t.setRequired(this.metadata.isRequired)}}}var s={__esModule:true};s.StringPlugin=i;return s});
9
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/layouts/BaseLayout", ["./FormLayout","./TableLayout"],function(e,r){"use strict";const t=e["FormLayout"];const u=r["TableLayout"];class a{renderForm(e,r="meta",u,a){return t.build(e,r,u,a)}renderTable(e,r="meta",t,a){return u.build(e,r,t,a)}}var o={__esModule:true};o.BaseLayout=a;return o});
10
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/layouts/FormLayout", ["sap/ui/layout/form/SimpleForm","sap/m/Label","sap/ui/core/Title","../core/PluginRegistry"],function(e,t,a,n){"use strict";const i=n["PluginRegistry"];class s{static build(n,s="meta",o,r){const l=new e({editable:true,title:o,layout:"ResponsiveGridLayout",labelSpanXL:4,labelSpanL:4,labelSpanM:4,labelSpanS:12,adjustLabelSpan:false,emptySpanXL:0,emptySpanL:0,emptySpanM:0,emptySpanS:0,columnsXL:1,columnsL:1,columnsM:1,singleContainerFullSize:false});const u=i.getInstance();const p={};const c="__DEFAULT__";for(const e of Object.keys(n)){const t=n[e];const a=t.ui?.group||c;if(!p[a])p[a]=[];p[a].push({key:e,meta:t})}for(const e of Object.keys(p)){if(e!==c){l.addContent(new a({text:e}))}p[e].forEach(e=>{try{const a=new t({text:e.meta.ui?.label||e.key,required:e.meta.required});if(e.meta.ui?.visibleOn){const t=`{= ${e.meta.ui.visibleOn.replace(/\$root\./g,`${s}>/`).replace(/\./g,"/")} }`;a.bindProperty("visible",{parts:[{path:"meta>/"}],formatter:()=>false})}const n=u.getPlugin(e.meta.type,e.meta.ui?.widget);if(r)r(n);const i=n.render(e.meta,`/${e.key}`,s);if(e.meta.ui?.fullWidth){sap.ui.require(["sap/ui/layout/GridData"],e=>{i.setLayoutData(new e({span:"XL12 L12 M12 S12"}))})}l.addContent(a);l.addContent(i)}catch(t){sap.ui.require(["sap/base/Log"],a=>{if(a)a.error(`[MetaUI] Failed to render field ${e.key}`,t.message,"FormLayout")})}})}return l}}var o={__esModule:true};o.FormLayout=s;return o});
11
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/layouts/TableLayout", ["sap/m/Table","sap/m/Column","sap/m/Text","sap/m/ColumnListItem","sap/m/Toolbar","sap/m/Title","sap/m/ToolbarSpacer","sap/m/Button","../core/PluginRegistry"],function(e,t,n,s,o,a,r,i,c){"use strict";const l=c["PluginRegistry"];class p{static build(c,p="meta>/",u="Table",d){if(!c.properties){throw new Error("[MetaUI] Table requires an items schema with properties.")}const m=p.split(">");const g=m.length>1?m[0]:undefined;const h=m.length>1?m[1]:p;const b=new e({headerToolbar:new o({content:[new a({text:u}),new r,new i({text:"Add Row",icon:"sap-icon://add",press:e=>{const t=e.getSource();const n=t.getParent().getParent();const s=n.getModel(g);const o=n.getBindingInfo("items");if(!o||!o.path)return;const a=s.getProperty(o.path)||[];a.push({});s.setProperty(o.path,a)}})]}),fixedLayout:false,mode:"Delete",delete:e=>{const t=e.getParameter("listItem");const n=t.getBindingContext(g).getPath();const s=t.getModel(g);const o=n.split("/");const a=parseInt(o.pop()||"0",10);let r=o.join("/");if(r==="")r="/";const i=s.getProperty(r);i.splice(a,1);s.setProperty(r,i)}});const w=[];const y=l.getInstance();const f=c.properties;Object.keys(f).forEach(e=>{try{const s=f[e];const o=!!s.ui?.isKey;const a=new t({header:new n({text:s.ui?.label||e}),demandPopin:!o,minScreenWidth:o?"":"Tablet",popinDisplay:"Inline"});b.addColumn(a);const r=y.getPlugin(s.type,s.ui?.widget);if(d)d(r);const i=r.render(s,e,g);w.push(i)}catch(t){sap.ui.require(["sap/base/Log"],n=>{if(n)n.error(`[MetaUI] Failed to render column ${e}`,t.message,"TableLayout")});w.push(new n({text:"Error"}))}});const P=new s({cells:w});b.bindItems({path:h,model:g,template:P,templateShareable:false});return b}}var u={__esModule:true};u.TableLayout=p;return u});
12
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/library", ["sap/ui/core/Core","./core/PluginRegistry","./plugins/StringPlugin","./plugins/NumberPlugin","./plugins/BooleanPlugin","./plugins/DropdownPlugin","./plugins/DatePlugin","./plugins/TimePlugin","./plugins/DateTimePlugin","./plugins/ArrayPlugin","./plugins/TextAreaPlugin","./plugins/SwitchPlugin"],function(i,n,e,t,r,s,u,g,o,l,a,c){"use strict";const P=n["PluginRegistry"];const p=e["StringPlugin"];const m=t["NumberPlugin"];const d=r["BooleanPlugin"];const b=s["DropdownPlugin"];const w=u["DatePlugin"];const y=g["TimePlugin"];const D=o["DateTimePlugin"];const S=l["ArrayPlugin"];const T=a["TextAreaPlugin"];const A=c["SwitchPlugin"];i.initLibrary({name:"nz.co.siliconst.ui5.metaui",version:"1.0.0",dependencies:["sap.ui.core","sap.m","sap.ui.layout","sap.ui.table"],controls:["nz.co.siliconst.ui5.metaui.controls.GeneratorHost"],elements:[],interfaces:[],noLibraryCSS:true});const f=P.getInstance();f.register("string",p);f.register("string",T,"textArea");f.register("number",m);f.register("boolean",d);f.register("boolean",A,"switch");f.register("dropdown",b);f.register("date",w);f.register("time",y);f.register("datetime",D);f.register("array",S);var h=window["nz"]["co"]["siliconst"]["ui5"]["metaui"];return h});
13
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/ArrayPlugin", ["sap/m/Button"],function(t){"use strict";class e{render(e,n,s){const o=n.startsWith("/")?n.substring(1):n;return new t({text:"View Records",icon:"sap-icon://list",press:t=>{const n=t.getSource();const i=n.getBindingContext(s);if(!i)return;const r=i.getObject();const a=r[o]||[];const c={type:"object",properties:{[o]:{type:"array",ui:{label:e.ui?.label||o},items:e.items||{type:"object",properties:{}}}}};sap.ui.require(["nz/co/siliconst/ui5/metaui/controls/GeneratorHost"],t=>{const i=new t({schemaDefinition:c,initialData:{[o]:a}});i.attachSubmit(t=>{const e=t.getParameter("payload");const i=e[o];const r=n.getModel(s);const a=n.getBindingContext(s).getPath();r.setProperty(`${a}/${o}`,i)});i.openInDialog(`Nested Records: ${e.ui?.label||o}`,"Close")})}})}validate(){return true}onStateChange(t){}}var n={__esModule:true};n.ArrayPlugin=e;return n});
14
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/BasePlugin", ["../core/EventBus"],function(e){"use strict";const t=e["EventBus"];class i{control=null;metadata=null;fieldKey="";onStateChange(e){this.metadata=e;this.applyState()}applyCommonDirectives(e,t,i="meta"){if(t.ui?.readOnly!==undefined&&typeof e.setEditable==="function"){e.setEditable(!t.ui.readOnly)}if(t.ui?.visibleOn){const a=`{= ${t.ui.visibleOn.replace(/\$root\./g,`${i}>/`).replace(/\./g,"/")} }`;e.bindProperty("visible",{parts:[{path:"meta>/"}],formatter:()=>false});e.bindProperty("visible",a)}if(t.ui?.enabledOn&&typeof e.setEnabled==="function"){const a=`{= ${t.ui.enabledOn.replace(/\$root\./g,`${i}>/`).replace(/\./g,"/")} }`;e.bindProperty("enabled",a)}}publishChange(e){if(this.metadata&&this.fieldKey){t.getInstance().publishFieldChange({fieldName:this.fieldKey,newValue:e})}}}var a={__esModule:true};a.BasePlugin=i;return a});
15
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/BooleanPlugin", ["./BasePlugin","sap/m/CheckBox"],function(e,t){"use strict";const a=e["BasePlugin"];class s extends a{render(e,a,s="meta"){this.metadata=e;this.control=new t({selected:`{${s}>${a}}`,enabled:!e.ui?.readOnly,select:e=>{const t=e.getParameter("selected");this.publishChange(t);this.validate()}});return this.control}validate(){return true}applyState(){if(this.control&&this.metadata){this.control.setEnabled(!this.metadata.ui?.readOnly)}}}var n={__esModule:true};n.BooleanPlugin=s;return n});
16
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/DatePlugin", ["./BasePlugin","sap/m/DatePicker"],function(t,e){"use strict";const a=t["BasePlugin"];class r extends a{render(t,a,r="meta"){this.metadata=t;this.control=new e({value:{path:`${r}>${a}`,type:"sap.ui.model.type.Date",formatOptions:{source:{pattern:"yyyy-MM-dd"},pattern:"yyyy-MM-dd"}},displayFormat:"long",editable:!t.ui?.readOnly,required:t.required,change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=typeof t.isValidValue==="function"?t.isValidValue():true;const a=t.getValue();if(this.metadata.required&&(!a||typeof a!=="string"||a.trim()==="")){t.setValueState("Error");t.setValueStateText("A valid date is required.");return false}if(a&&!e){t.setValueState("Error");t.setValueStateText("Invalid date format.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(this.metadata.required)}}}var i={__esModule:true};i.DatePlugin=r;return i});
17
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/DateTimePlugin", ["./BasePlugin","sap/m/DateTimePicker"],function(t,e){"use strict";const a=t["BasePlugin"];class i extends a{render(t,a,i="meta"){this.metadata=t;this.control=new e({value:{path:`${i}>${a}`,type:"sap.ui.model.type.DateTime",formatOptions:{source:{pattern:"yyyy-MM-dd'T'HH:mm:ss'Z'"},pattern:"yyyy-MM-dd'T'HH:mm:ss'Z'"}},editable:!t.ui?.readOnly,required:t.required,change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=typeof t.isValidValue==="function"?t.isValidValue():true;const a=t.getValue();if(this.metadata.required&&(!a||typeof a!=="string"||a.trim()==="")){t.setValueState("Error");t.setValueStateText("This field is required.");return false}if(a&&!e){t.setValueState("Error");t.setValueStateText("Invalid datetime format.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(this.metadata.required)}}}var r={__esModule:true};r.DateTimePlugin=i;return r});
18
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/DropdownPlugin", ["./BasePlugin","sap/m/Select","sap/ui/core/Item"],function(e,t,a){"use strict";const r=e["BasePlugin"];class s extends r{render(e,r,s="meta"){this.metadata=e;const n=new t({selectedKey:`{${s}>${r}}`,enabled:!e.ui?.readOnly,forceSelection:false,change:e=>{const t=e.getParameter("selectedItem");const a=t?t.getKey():"";this.publishChange(a);this.validate()}});if(e.valueHelp&&Array.isArray(e.valueHelp)){n.addItem(new a({key:"",text:"--- Select ---"}));e.valueHelp.forEach(e=>{n.addItem(new a({key:e.key,text:e.text}))})}this.control=n;return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=e.getSelectedKey();if(this.metadata.required&&(!t||t.trim()==="")){e.setValueState("Error");e.setValueStateText("Selection is required.");return false}e.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEnabled(!this.metadata.ui?.readOnly)}}}var n={__esModule:true};n.DropdownPlugin=s;return n});
19
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/NumberPlugin", ["./BasePlugin","sap/m/StepInput"],function(e,t){"use strict";const a=e["BasePlugin"];class i extends a{render(e,a,i="meta"){this.metadata=e;this.control=new t({value:`{${i}>${a}}`,displayValuePrecision:e.scale||0,editable:!e.ui?.readOnly,required:e.required,change:e=>{const t=e.getParameter("value");this.publishChange(t);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=e.getValue();if(this.metadata.required&&(t===null||t===undefined||Number.isNaN(t)||t==="")){e.setValueState("Error");e.setValueStateText("This field is required.");return false}e.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEditable(!this.metadata.ui?.readOnly);e.setRequired(this.metadata.required)}}}var r={__esModule:true};r.NumberPlugin=i;return r});
20
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/StringPlugin", ["./BasePlugin","sap/m/Input"],function(t,e){"use strict";const a=t["BasePlugin"];class i extends a{render(t,a,i="meta"){this.metadata=t;this.fieldKey=a.replace("/","");this.control=new e({value:`{${i}>${a}}`,maxLength:t.maxLength||0,required:!!t.required,showValueHelp:t.ui?.widget==="searchHelp",change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});this.applyCommonDirectives(this.control,t,i);return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=t.getValue();if(this.metadata.required&&(!e||typeof e!=="string"||e.trim()==="")){t.setValueState("Error");t.setValueStateText("This field is required.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(this.metadata.required)}}}var r={__esModule:true};r.StringPlugin=i;return r});
21
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/SwitchPlugin", ["./BasePlugin","sap/m/Switch"],function(t,e){"use strict";const a=t["BasePlugin"];class s extends a{render(t,a,s="meta"){this.metadata=t;this.control=new e({state:`{${s}>${a}}`,enabled:!t.ui?.readOnly,change:t=>{const e=t.getParameter("state");this.publishChange(e);this.validate()}});return this.control}validate(){return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEnabled(!this.metadata.ui?.readOnly)}}}var n={__esModule:true};n.SwitchPlugin=s;return n});
22
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/TextAreaPlugin", ["./BasePlugin","sap/m/TextArea"],function(t,e){"use strict";const a=t["BasePlugin"];class r extends a{render(t,a,r="meta"){this.metadata=t;this.fieldKey=a.replace("/","");this.control=new e({value:`{${r}>${a}}`,maxLength:t.maxLength||0,required:!!t.required,rows:t.ui?.rows||4,change:t=>{const e=t.getParameter("value");this.publishChange(e);this.validate()}});this.applyCommonDirectives(this.control,t,r);return this.control}validate(){if(!this.control||!this.metadata)return true;const t=this.control;const e=t.getValue();if(this.metadata.required&&(!e||typeof e!=="string"||e.trim()==="")){t.setValueState("Error");t.setValueStateText("This field is required.");return false}t.setValueState("None");return true}applyState(){if(this.control&&this.metadata){const t=this.control;t.setEditable(!this.metadata.ui?.readOnly);t.setRequired(this.metadata.required)}}}var i={__esModule:true};i.TextAreaPlugin=r;return i});
23
+ sap.ui.predefine("nz/co/siliconst/ui5/metaui/plugins/TimePlugin", ["./BasePlugin","sap/m/TimePicker"],function(e,t){"use strict";const a=e["BasePlugin"];class r extends a{render(e,a,r="meta"){this.metadata=e;this.control=new t({value:{path:`${r}>${a}`,type:"sap.ui.model.type.Time",formatOptions:{source:{pattern:"HH:mm:ss"},pattern:"HH:mm:ss"}},displayFormat:"HH:mm:ss",editable:!e.ui?.readOnly,required:e.required,change:e=>{const t=e.getParameter("value");this.publishChange(t);this.validate()}});return this.control}validate(){if(!this.control||!this.metadata)return true;const e=this.control;const t=typeof e.isValidValue==="function"?e.isValidValue():true;const a=e.getValue();const r=sap.ui.require("sap/ui/core/library");const i=r?r.ValueState:{Error:"Error",None:"None"};if(this.metadata.required&&(!a||typeof a!=="string"||a.trim()==="")){e.setValueState(i.Error);e.setValueStateText("This field is required.");return false}if(a&&!t){e.setValueState(i.Error);e.setValueStateText("Invalid time format.");return false}e.setValueState(i.None);return true}applyState(){if(this.control&&this.metadata){const e=this.control;e.setEditable(!this.metadata.ui?.readOnly);e.setRequired(this.metadata.required)}}}var i={__esModule:true};i.TimePlugin=r;return i});
19
24
  sap.ui.require.preload({
20
25
  "nz/co/siliconst/ui5/metaui/interfaces/IEventBus.js":function(){
21
26
 
@@ -29,6 +34,6 @@ sap.ui.require.preload({
29
34
  "nz/co/siliconst/ui5/metaui/interfaces/ISchema.js":function(){
30
35
 
31
36
  },
32
- "nz/co/siliconst/ui5/metaui/manifest.json":'{"_version":"1.21.0","sap.app":{"id":"nz.co.siliconst.ui5.metaui","type":"library","embeds":[],"applicationVersion":{"version":"1.0.0"},"title":"MetaUI Engine","resources":"resources.json","offline":true},"sap.ui":{"technology":"UI5","supportedThemes":[]},"sap.ui5":{"dependencies":{"libs":{}},"library":{"i18n":false,"content":{"controls":["nz.co.siliconst.ui5.metaui.controls.GeneratorHost"],"elements":[],"types":[],"interfaces":[]}}}}'
37
+ "nz/co/siliconst/ui5/metaui/manifest.json":'{"_version":"1.21.0","sap.app":{"id":"nz.co.siliconst.ui5.metaui","type":"library","embeds":[],"applicationVersion":{"version":"1.0.0"},"title":"MetaUI Engine","resources":"resources.json","offline":true},"sap.ui":{"technology":"UI5","supportedThemes":[]},"sap.ui5":{"dependencies":{"libs":{}},"library":{"i18n":false,"css":false,"content":{"controls":["nz.co.siliconst.ui5.metaui.controls.GeneratorHost"],"elements":[],"types":[],"interfaces":[]}}}}'
33
38
  });
34
39
  //# sourceMappingURL=library-preload.js.map