@siliconst/metaui 1.4.9 → 1.4.10

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 (46) hide show
  1. package/package.json +1 -1
  2. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js +10 -0
  3. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost-dbg.js.map +1 -1
  4. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.d.ts.map +1 -1
  5. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js +1 -1
  6. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.js.map +1 -1
  7. package/src/nz/co/siliconst/ui5/metaui/controls/DynamicHost.ts +11 -0
  8. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js +2 -0
  9. package/src/nz/co/siliconst/ui5/metaui/core/Engine-dbg.js.map +1 -1
  10. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts +2 -0
  11. package/src/nz/co/siliconst/ui5/metaui/core/Engine.d.ts.map +1 -1
  12. package/src/nz/co/siliconst/ui5/metaui/core/Engine.js.map +1 -1
  13. package/src/nz/co/siliconst/ui5/metaui/core/Engine.ts +3 -0
  14. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js +10 -0
  15. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout-dbg.js.map +1 -1
  16. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.d.ts.map +1 -1
  17. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js +1 -1
  18. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.js.map +1 -1
  19. package/src/nz/co/siliconst/ui5/metaui/layouts/TableLayout.ts +10 -0
  20. package/src/nz/co/siliconst/ui5/metaui/library-preload.js +6 -6
  21. package/src/nz/co/siliconst/ui5/metaui/library-preload.js.map +1 -1
  22. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js +6 -0
  23. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin-dbg.js.map +1 -1
  24. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.d.ts.map +1 -1
  25. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js +1 -1
  26. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.js.map +1 -1
  27. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ArrayPlugin.ts +6 -0
  28. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js +5 -2
  29. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin-dbg.js.map +1 -1
  30. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.d.ts.map +1 -1
  31. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js +1 -1
  32. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.js.map +1 -1
  33. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/CodeEditorPlugin.ts +5 -2
  34. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js +6 -0
  35. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin-dbg.js.map +1 -1
  36. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.d.ts.map +1 -1
  37. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js +1 -1
  38. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.js.map +1 -1
  39. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/ObjectPlugin.ts +6 -0
  40. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js +39 -3
  41. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin-dbg.js.map +1 -1
  42. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts +4 -0
  43. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.d.ts.map +1 -1
  44. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js +1 -1
  45. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.js.map +1 -1
  46. package/src/nz/co/siliconst/ui5/metaui/plugins/controls/TextAreaPlugin.ts +40 -2
@@ -43,21 +43,59 @@ export class TextAreaPlugin extends BasePlugin {
43
43
  value: `{${modelName}>${bindingPath}}`,
44
44
  maxLength: fieldMetadata.maxLength || 0,
45
45
  required: !!fieldMetadata.required,
46
- rows: fieldMetadata.ui?.rows || 4, // Default to 4 rows for text areas
46
+ rows: 3, // Start with at least 3 lines
47
+ growing: false, // We manage height manually to maintain the +2 lines requirement
47
48
  change: (oEvent: sap.ui.base.Event) => {
48
- const val = (oEvent as sap.ui.base.Event).getParameter("value");
49
+ this.updateHeight(oEvent.getSource() as TextArea);
49
50
  const result = this.validate();
50
51
  if (this.onChange) {
51
52
  this.onChange(result.isValid, this.fieldKey);
52
53
  }
54
+ },
55
+ liveChange: (oEvent: sap.ui.base.Event) => {
56
+ this.updateHeight(oEvent.getSource() as TextArea);
53
57
  }
54
58
  });
55
59
 
60
+ // Clean architecture: Wait for the model context, then calculate initial height
61
+ (this.control as TextArea).attachEventOnce("modelContextChange", () => {
62
+ const oBinding = (this.control as TextArea).getBinding("value");
63
+
64
+ const initLogic = () => {
65
+ if (this.control) {
66
+ this.updateHeight(this.control as TextArea);
67
+ }
68
+ };
69
+
70
+ if (oBinding) {
71
+ oBinding.attachChange(initLogic);
72
+ }
73
+ // Execute immediately in case the model is synchronous (JSONModel)
74
+ initLogic();
75
+ });
76
+
56
77
  this.applyCommonDirectives(this.control, fieldMetadata, modelName);
57
78
 
58
79
  return this.control as Control;
59
80
  }
60
81
 
82
+ /**
83
+ * Dynamically sets the rows to the content length + 2
84
+ */
85
+ private updateHeight(oTextArea: TextArea): void {
86
+ const val = oTextArea.getValue() || "";
87
+ // Count actual newlines in the string
88
+ const numLines = val.split(/\r\n|\r|\n/).length;
89
+ // Also estimate word wrapping if they type a really long single line without pressing enter
90
+ // A standard character width approximation, assuming ~80 chars per line for full width
91
+ const wrappedLines = Math.ceil(val.length / 80);
92
+
93
+ const totalLines = Math.max(numLines, wrappedLines);
94
+
95
+ // Ensure there is always 2 lines of extra breathing room
96
+ oTextArea.setRows(Math.max(3, totalLines + 2));
97
+ }
98
+
61
99
  /**
62
100
  * Retrieves the current text string.
63
101
  * @returns {unknown} The text string.