@sapui5/sap.fe.macros 1.138.0 → 1.140.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 (240) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -2,7 +2,7 @@ import Log from "sap/base/Log";
2
2
  import type { BindingToolkitExpression, CompiledBindingToolkitExpression, EmbeddedUI5BindingExpression } from "sap/fe/base/BindingToolkit";
3
3
  import { and, compileExpression, constant, isConstant, not, or, resolveBindingString } from "sap/fe/base/BindingToolkit";
4
4
  import type { PropertiesOf } from "sap/fe/base/ClassSupport";
5
- import { aggregation, defineReference, defineUI5Class, property } from "sap/fe/base/ClassSupport";
5
+ import { aggregation, defineReference, defineUI5Class, implementInterface, property } from "sap/fe/base/ClassSupport";
6
6
  import type { Ref } from "sap/fe/base/jsx-runtime/jsx";
7
7
  import type AppComponent from "sap/fe/core/AppComponent";
8
8
  import CommonUtils from "sap/fe/core/CommonUtils";
@@ -31,10 +31,14 @@ import {
31
31
  PRINT_ICON
32
32
  } from "sap/fe/core/converters/controls/Common/Action";
33
33
  import FPMHelper from "sap/fe/core/helpers/FPMHelper";
34
+ import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
34
35
  import type { ViewData } from "sap/fe/core/services/TemplatedViewServiceFactory";
35
36
  import ShareOptions from "sap/fe/macros/share/ShareOptions";
37
+ import OverflowToolbarLayoutData from "sap/m/OverflowToolbarLayoutData";
36
38
  import OverflowToolbarMenuButton from "sap/m/OverflowToolbarMenuButton";
39
+ import { OverflowToolbarPriority } from "sap/m/library";
37
40
  import BindingInfo from "sap/ui/base/BindingInfo";
41
+ import type Control from "sap/ui/core/Control";
38
42
  import type { $ControlSettings } from "sap/ui/core/Control";
39
43
  import MsTeamsOptions from "./share/MsTeamsOptions";
40
44
  import ShareAPI from "./share/ShareAPI";
@@ -99,6 +103,9 @@ export default class Share extends BuildingBlock<ShareAPI> {
99
103
  @property({ type: "string" })
100
104
  public shareAPIId?: string;
101
105
 
106
+ @implementInterface("sap.m.IOverflowToolbarContent")
107
+ __implements__sap_m_IOverflowToolbarContent = true;
108
+
102
109
  /**
103
110
  * Supported Share options {@link sap.fe.macros.share.ShareOptions}.
104
111
  * @public
@@ -110,6 +117,12 @@ export default class Share extends BuildingBlock<ShareAPI> {
110
117
  })
111
118
  public shareOptions?: ShareOptions;
112
119
 
120
+ @property({
121
+ type: "string",
122
+ defaultValue: OverflowToolbarPriority.High
123
+ })
124
+ priority?: string;
125
+
113
126
  /**
114
127
  * Supported Microsoft Teams options.
115
128
  */
@@ -927,6 +940,34 @@ export default class Share extends BuildingBlock<ShareAPI> {
927
940
  this.isInitialized = this._initializeMenuItems(this.getPageController().getView(), appComponent).catch((error) => {
928
941
  Log.error(error as string);
929
942
  });
943
+
944
+ this.setLayoutData(
945
+ new OverflowToolbarLayoutData({
946
+ priority: this.priority
947
+ })
948
+ );
930
949
  return menuButton;
931
950
  }
951
+
952
+ /**
953
+ * Returns properties for the interface IOverflowToolbarContent.
954
+ * @returns Returns the configuration of IOverflowToolbarContent
955
+ */
956
+ getOverflowToolbarConfig(): object {
957
+ return {
958
+ canOverflow: true,
959
+ onBeforeEnterOverflow: function (oControl: Share): void {
960
+ (oControl?.getContent()?.getContent() as OverflowToolbarMenuButton).getText = function (): string {
961
+ const resourceModel = getResourceModel(oControl as Control);
962
+ return resourceModel.getText("M_COMMON_SAPFE_ACTION_SHARE");
963
+ };
964
+ },
965
+ onAfterExitOverflow: function (oControl: Share): void {
966
+ (oControl?.getContent()?.getContent() as OverflowToolbarMenuButton).getText = function (): string {
967
+ return "";
968
+ };
969
+ },
970
+ priority: this.priority
971
+ };
972
+ }
932
973
  }
@@ -0,0 +1,226 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/CriticalityFormatters", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/macros/field/FieldTemplating", "sap/m/ObjectStatus", "sap/fe/base/jsx-runtime/jsx"], function (ClassSupport, BuildingBlock, StableIdHelper, TypeGuards, CriticalityFormatters, DataModelPathHelper, FieldTemplating, MObjectStatus, _jsx) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;
9
+ var _exports = {};
10
+ var getVisibleExpression = FieldTemplating.getVisibleExpression;
11
+ var getTextBinding = FieldTemplating.getTextBinding;
12
+ var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
13
+ var buildExpressionForCriticalityIcon = CriticalityFormatters.buildExpressionForCriticalityIcon;
14
+ var buildExpressionForCriticalityColor = CriticalityFormatters.buildExpressionForCriticalityColor;
15
+ var isProperty = TypeGuards.isProperty;
16
+ var generate = StableIdHelper.generate;
17
+ var property = ClassSupport.property;
18
+ var implementInterface = ClassSupport.implementInterface;
19
+ var event = ClassSupport.event;
20
+ var defineUI5Class = ClassSupport.defineUI5Class;
21
+ function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
22
+ function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
23
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
24
+ function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
25
+ function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
26
+ /**
27
+ * Building block for displaying object status with criticality in inverted mode.
28
+ */
29
+ let Status = (_dec = defineUI5Class("sap.fe.macros.Status"), _dec2 = implementInterface("sap.ui.core.IFormContent"), _dec3 = property({
30
+ type: "string",
31
+ required: true
32
+ }), _dec4 = property({
33
+ type: "string"
34
+ }), _dec5 = property({
35
+ type: "string",
36
+ allowedValues: ["Inline", "Overlay"]
37
+ }), _dec6 = property({
38
+ type: "boolean"
39
+ }), _dec7 = property({
40
+ type: "boolean"
41
+ }), _dec8 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
42
+ /**
43
+ * Internal property to store the data model path
44
+ */
45
+
46
+ /**
47
+ * Constructor for the Status building block.
48
+ * @param properties The properties object containing Status-specific settings and base control settings
49
+ * @param [others] Additional control settings that may be applied to the building block
50
+ */
51
+ function Status(properties, others) {
52
+ var _this;
53
+ _this = _BuildingBlock.call(this, properties, others) || this;
54
+ _initializerDefineProperty(_this, "__implements__sap_ui_core_IFormContent", _descriptor, _this);
55
+ /**
56
+ * Metadata path to the DataField annotation or property.
57
+ * @public
58
+ */
59
+ _initializerDefineProperty(_this, "metaPath", _descriptor2, _this);
60
+ /**
61
+ * Context path for the binding context.
62
+ * @public
63
+ */
64
+ _initializerDefineProperty(_this, "contextPath", _descriptor3, _this);
65
+ /**
66
+ * When the Status is clickable, it defines the size of the reactive area of the clickable element:
67
+ *
68
+ * - ReactiveAreaMode.Inline - The Status is displayed as part of a sentence.
69
+ * - ReactiveAreaMode.Overlay - The Status is displayed as an overlay on top of other interactive parts of the page.
70
+ * Note: It is designed to make the clickable element easier to activate and helps meet the WCAG 2.2 Target Size requirement. It is applicable only for the SAP Horizon themes. Note: The size of the reactive area is sufficiently large to help users avoid accidentally selecting (clicking or tapping) unintended UI elements. UI elements positioned over other parts of the page may need an invisible active touch area. This ensures that no elements beneath are activated accidentally when the user tries to interact with the overlay element.
71
+ * @public
72
+ */
73
+ _initializerDefineProperty(_this, "reactiveAreaMode", _descriptor4, _this);
74
+ /**
75
+ * Indicates whether the ObjectStatus should be displayed in large design mode.
76
+ * @public
77
+ */
78
+ _initializerDefineProperty(_this, "largeDesign", _descriptor5, _this);
79
+ _initializerDefineProperty(_this, "hideIcon", _descriptor6, _this);
80
+ /**
81
+ * Press event fired when the ObjectStatus is clicked.
82
+ * @param event The press event
83
+ * @public
84
+ */
85
+ _initializerDefineProperty(_this, "press", _descriptor7, _this);
86
+ return _this;
87
+ }
88
+
89
+ /**
90
+ * Handler for the onMetadataAvailable event.
91
+ */
92
+ _exports = Status;
93
+ _inheritsLoose(Status, _BuildingBlock);
94
+ var _proto = Status.prototype;
95
+ _proto.onMetadataAvailable = function onMetadataAvailable() {
96
+ this.getTemplatingObjects();
97
+ if (!this.dataModelPath && !this.valueDataModelPath) {
98
+ // there cannot be a static value and no datafield or datapoint
99
+ return;
100
+ }
101
+ if (!this.content) {
102
+ this.content = this.createContent();
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Function to get the templating objects and prepare data model paths.
108
+ */;
109
+ _proto.getTemplatingObjects = function getTemplatingObjects() {
110
+ // Try to get as DataField first, then as DataPoint, then as Property
111
+ const internalDataModelPath = this.getDataModelObjectForMetaPath(this.metaPath, this.contextPath);
112
+ const targetObject = internalDataModelPath?.targetObject;
113
+ if (!internalDataModelPath) {
114
+ return;
115
+ }
116
+ if (isProperty(targetObject)) {
117
+ if (targetObject?.annotations?.UI?.DataFieldDefault !== undefined) {
118
+ this.dataModelPath = this.getDataModelObjectForMetaPath(`${this.metaPath}@${"com.sap.vocabularies.UI.v1.DataFieldDefault"}`, this.contextPath);
119
+ }
120
+ this.valueDataModelPath = internalDataModelPath;
121
+ } else {
122
+ this.dataModelPath = internalDataModelPath;
123
+ if (this.dataModelPath?.targetObject?.Value?.path) {
124
+ this.valueDataModelPath = enhanceDataModelPath(internalDataModelPath, this.dataModelPath.targetObject.Value.path);
125
+ }
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Gets the criticality expression for the ObjectStatus.
131
+ * @returns The compiled binding expression for criticality color, or undefined if no criticality is available
132
+ */;
133
+ _proto.getCriticalityExpression = function getCriticalityExpression() {
134
+ return this.dataModelPath === undefined ? undefined : buildExpressionForCriticalityColor(this.dataModelPath, this.dataModelPath);
135
+ }
136
+
137
+ /**
138
+ * Gets the criticality icon expression for the ObjectStatus.
139
+ * @returns The compiled binding expression for criticality icon, or undefined if no criticality is available
140
+ */;
141
+ _proto.getCriticalityIconExpression = function getCriticalityIconExpression() {
142
+ return this.dataModelPath === undefined ? undefined : buildExpressionForCriticalityIcon(this.dataModelPath, this.dataModelPath);
143
+ }
144
+
145
+ /**
146
+ * Gets the text binding expression for the ObjectStatus.
147
+ * @returns The compiled binding expression for the ObjectStatus text content
148
+ */;
149
+ _proto.getObjectStatusTextBinding = function getObjectStatusTextBinding() {
150
+ const propertyOrDataFieldDataModelObjectPath = this.valueDataModelPath ?? this.dataModelPath;
151
+ return getTextBinding(propertyOrDataFieldDataModelObjectPath, {});
152
+ }
153
+
154
+ /**
155
+ * Creates the ObjectStatus control content.
156
+ * @returns The configured ObjectStatus control ready for rendering
157
+ */;
158
+ _proto.createContent = function createContent() {
159
+ const dataFieldOrPropertyDataModelObjectPath = this.dataModelPath ?? this.valueDataModelPath;
160
+ const visible = getVisibleExpression(dataFieldOrPropertyDataModelObjectPath);
161
+ const criticalityExpression = this.getCriticalityExpression();
162
+ const criticalityIconExpression = this.getCriticalityIconExpression();
163
+ const textBinding = this.getObjectStatusTextBinding();
164
+ const isActive = !!this.press;
165
+ return _jsx(MObjectStatus, {
166
+ id: generate([this.getId(), "ObjectStatus"]),
167
+ inverted: true,
168
+ class: this.largeDesign ? "sapMObjectStatusLarge sapMObjectStatusLongText" : undefined,
169
+ state: criticalityExpression,
170
+ icon: this.hideIcon ? undefined : criticalityIconExpression,
171
+ text: textBinding,
172
+ visible: visible,
173
+ active: isActive,
174
+ reactiveAreaMode: this.reactiveAreaMode,
175
+ press: pressEvent => {
176
+ this.fireEvent("press", pressEvent);
177
+ }
178
+ });
179
+ };
180
+ return Status;
181
+ }(BuildingBlock), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IFormContent", [_dec2], {
182
+ configurable: true,
183
+ enumerable: true,
184
+ writable: true,
185
+ initializer: function () {
186
+ return true;
187
+ }
188
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "metaPath", [_dec3], {
189
+ configurable: true,
190
+ enumerable: true,
191
+ writable: true,
192
+ initializer: null
193
+ }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "contextPath", [_dec4], {
194
+ configurable: true,
195
+ enumerable: true,
196
+ writable: true,
197
+ initializer: null
198
+ }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "reactiveAreaMode", [_dec5], {
199
+ configurable: true,
200
+ enumerable: true,
201
+ writable: true,
202
+ initializer: null
203
+ }), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "largeDesign", [_dec6], {
204
+ configurable: true,
205
+ enumerable: true,
206
+ writable: true,
207
+ initializer: function () {
208
+ return false;
209
+ }
210
+ }), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "hideIcon", [_dec7], {
211
+ configurable: true,
212
+ enumerable: true,
213
+ writable: true,
214
+ initializer: function () {
215
+ return false;
216
+ }
217
+ }), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "press", [_dec8], {
218
+ configurable: true,
219
+ enumerable: true,
220
+ writable: true,
221
+ initializer: null
222
+ }), _class2)) || _class);
223
+ _exports = Status;
224
+ return _exports;
225
+ }, false);
226
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGF0dXMiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwicmVxdWlyZWQiLCJfZGVjNCIsIl9kZWM1IiwiYWxsb3dlZFZhbHVlcyIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImV2ZW50IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsImdldFRlbXBsYXRpbmdPYmplY3RzIiwiZGF0YU1vZGVsUGF0aCIsInZhbHVlRGF0YU1vZGVsUGF0aCIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwiaW50ZXJuYWxEYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRQYXRoIiwidGFyZ2V0T2JqZWN0IiwiaXNQcm9wZXJ0eSIsImFubm90YXRpb25zIiwiVUkiLCJEYXRhRmllbGREZWZhdWx0IiwidW5kZWZpbmVkIiwiVmFsdWUiLCJwYXRoIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJnZXRDcml0aWNhbGl0eUV4cHJlc3Npb24iLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yIiwiZ2V0Q3JpdGljYWxpdHlJY29uRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5SWNvbiIsImdldE9iamVjdFN0YXR1c1RleHRCaW5kaW5nIiwicHJvcGVydHlPckRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRUZXh0QmluZGluZyIsImRhdGFGaWVsZE9yUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaWJsZSIsImdldFZpc2libGVFeHByZXNzaW9uIiwiY3JpdGljYWxpdHlFeHByZXNzaW9uIiwiY3JpdGljYWxpdHlJY29uRXhwcmVzc2lvbiIsInRleHRCaW5kaW5nIiwiaXNBY3RpdmUiLCJwcmVzcyIsIl9qc3giLCJNT2JqZWN0U3RhdHVzIiwiaWQiLCJnZW5lcmF0ZSIsImdldElkIiwiaW52ZXJ0ZWQiLCJjbGFzcyIsImxhcmdlRGVzaWduIiwic3RhdGUiLCJpY29uIiwiaGlkZUljb24iLCJ0ZXh0IiwiYWN0aXZlIiwicmVhY3RpdmVBcmVhTW9kZSIsInByZXNzRXZlbnQiLCJmaXJlRXZlbnQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdGF0dXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkLCBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yLCBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Dcml0aWNhbGl0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcsIGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IE9iamVjdFN0YXR1cyRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IE1PYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm1Db250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgZGlzcGxheWluZyBvYmplY3Qgc3RhdHVzIHdpdGggY3JpdGljYWxpdHkgaW4gaW52ZXJ0ZWQgbW9kZS5cbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5TdGF0dXNcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXR1cyBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8TU9iamVjdFN0YXR1cz4gaW1wbGVtZW50cyBJRm9ybUNvbnRlbnQge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfSUZvcm1Db250ZW50ID0gdHJ1ZTtcblxuXHQvKipcblx0ICogTWV0YWRhdGEgcGF0aCB0byB0aGUgRGF0YUZpZWxkIGFubm90YXRpb24gb3IgcHJvcGVydHkuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRwdWJsaWMgbWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENvbnRleHQgcGF0aCBmb3IgdGhlIGJpbmRpbmcgY29udGV4dC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHQvKipcblx0ICogIFdoZW4gdGhlIFN0YXR1cyBpcyBjbGlja2FibGUsIGl0IGRlZmluZXMgdGhlIHNpemUgb2YgdGhlIHJlYWN0aXZlIGFyZWEgb2YgdGhlIGNsaWNrYWJsZSBlbGVtZW50OlxuXHQgKlxuXHQgKiAtIFJlYWN0aXZlQXJlYU1vZGUuSW5saW5lIC0gVGhlIFN0YXR1cyBpcyBkaXNwbGF5ZWQgYXMgcGFydCBvZiBhIHNlbnRlbmNlLlxuXHQgKiAtIFJlYWN0aXZlQXJlYU1vZGUuT3ZlcmxheSAtIFRoZSBTdGF0dXMgaXMgZGlzcGxheWVkIGFzIGFuIG92ZXJsYXkgb24gdG9wIG9mIG90aGVyIGludGVyYWN0aXZlIHBhcnRzIG9mIHRoZSBwYWdlLlxuXHQgKiBOb3RlOiBJdCBpcyBkZXNpZ25lZCB0byBtYWtlIHRoZSBjbGlja2FibGUgZWxlbWVudCBlYXNpZXIgdG8gYWN0aXZhdGUgYW5kIGhlbHBzIG1lZXQgdGhlIFdDQUcgMi4yIFRhcmdldCBTaXplIHJlcXVpcmVtZW50LiBJdCBpcyBhcHBsaWNhYmxlIG9ubHkgZm9yIHRoZSBTQVAgSG9yaXpvbiB0aGVtZXMuIE5vdGU6IFRoZSBzaXplIG9mIHRoZSByZWFjdGl2ZSBhcmVhIGlzIHN1ZmZpY2llbnRseSBsYXJnZSB0byBoZWxwIHVzZXJzIGF2b2lkIGFjY2lkZW50YWxseSBzZWxlY3RpbmcgKGNsaWNraW5nIG9yIHRhcHBpbmcpIHVuaW50ZW5kZWQgVUkgZWxlbWVudHMuIFVJIGVsZW1lbnRzIHBvc2l0aW9uZWQgb3ZlciBvdGhlciBwYXJ0cyBvZiB0aGUgcGFnZSBtYXkgbmVlZCBhbiBpbnZpc2libGUgYWN0aXZlIHRvdWNoIGFyZWEuIFRoaXMgZW5zdXJlcyB0aGF0IG5vIGVsZW1lbnRzIGJlbmVhdGggYXJlIGFjdGl2YXRlZCBhY2NpZGVudGFsbHkgd2hlbiB0aGUgdXNlciB0cmllcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBvdmVybGF5IGVsZW1lbnQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGFsbG93ZWRWYWx1ZXM6IFtcIklubGluZVwiLCBcIk92ZXJsYXlcIl0gfSlcblx0cHVibGljIHJlYWN0aXZlQXJlYU1vZGU/OiBcIklubGluZVwiIHwgXCJPdmVybGF5XCI7XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBPYmplY3RTdGF0dXMgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBsYXJnZSBkZXNpZ24gbW9kZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cHVibGljIGxhcmdlRGVzaWduID0gZmFsc2U7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cHVibGljIGhpZGVJY29uID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFByZXNzIGV2ZW50IGZpcmVkIHdoZW4gdGhlIE9iamVjdFN0YXR1cyBpcyBjbGlja2VkLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHByZXNzIGV2ZW50XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHB1YmxpYyBwcmVzcz86IChldmVudDogT2JqZWN0U3RhdHVzJFByZXNzRXZlbnQpID0+IHZvaWQ7XG5cblx0LyoqXG5cdCAqIEludGVybmFsIHByb3BlcnR5IHRvIHN0b3JlIHRoZSBkYXRhIG1vZGVsIHBhdGhcblx0ICovXG5cdHByaXZhdGUgZGF0YU1vZGVsUGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZT47XG5cblx0cHJpdmF0ZSB2YWx1ZURhdGFNb2RlbFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PjtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3IgZm9yIHRoZSBTdGF0dXMgYnVpbGRpbmcgYmxvY2suXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9iamVjdCBjb250YWluaW5nIFN0YXR1cy1zcGVjaWZpYyBzZXR0aW5ncyBhbmQgYmFzZSBjb250cm9sIHNldHRpbmdzXG5cdCAqIEBwYXJhbSBbb3RoZXJzXSBBZGRpdGlvbmFsIGNvbnRyb2wgc2V0dGluZ3MgdGhhdCBtYXkgYmUgYXBwbGllZCB0byB0aGUgYnVpbGRpbmcgYmxvY2tcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8U3RhdHVzPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIG9uTWV0YWRhdGFBdmFpbGFibGUgZXZlbnQuXG5cdCAqL1xuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0VGVtcGxhdGluZ09iamVjdHMoKTtcblx0XHRpZiAoIXRoaXMuZGF0YU1vZGVsUGF0aCAmJiAhdGhpcy52YWx1ZURhdGFNb2RlbFBhdGgpIHtcblx0XHRcdC8vIHRoZXJlIGNhbm5vdCBiZSBhIHN0YXRpYyB2YWx1ZSBhbmQgbm8gZGF0YWZpZWxkIG9yIGRhdGFwb2ludFxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuY29udGVudCkge1xuXHRcdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgdGVtcGxhdGluZyBvYmplY3RzIGFuZCBwcmVwYXJlIGRhdGEgbW9kZWwgcGF0aHMuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRlbXBsYXRpbmdPYmplY3RzKCk6IHZvaWQge1xuXHRcdC8vIFRyeSB0byBnZXQgYXMgRGF0YUZpZWxkIGZpcnN0LCB0aGVuIGFzIERhdGFQb2ludCwgdGhlbiBhcyBQcm9wZXJ0eVxuXHRcdGNvbnN0IGludGVybmFsRGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pihcblx0XHRcdHRoaXMubWV0YVBhdGgsXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0KTtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSBpbnRlcm5hbERhdGFNb2RlbFBhdGg/LnRhcmdldE9iamVjdDtcblxuXHRcdGlmICghaW50ZXJuYWxEYXRhTW9kZWxQYXRoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChpc1Byb3BlcnR5KHRhcmdldE9iamVjdCkpIHtcblx0XHRcdGlmICh0YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuZGF0YU1vZGVsUGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8RGF0YUZpZWxkPihcblx0XHRcdFx0XHRgJHt0aGlzLm1ldGFQYXRofUAke1VJQW5ub3RhdGlvblRlcm1zLkRhdGFGaWVsZERlZmF1bHR9YCxcblx0XHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnZhbHVlRGF0YU1vZGVsUGF0aCA9IGludGVybmFsRGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5kYXRhTW9kZWxQYXRoID0gaW50ZXJuYWxEYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZT47XG5cdFx0XHRpZiAodGhpcy5kYXRhTW9kZWxQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlPy5wYXRoKSB7XG5cdFx0XHRcdHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGludGVybmFsRGF0YU1vZGVsUGF0aCwgdGhpcy5kYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS5wYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3JpdGljYWxpdHkgZXhwcmVzc2lvbiBmb3IgdGhlIE9iamVjdFN0YXR1cy5cblx0ICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgY3JpdGljYWxpdHkgY29sb3IsIG9yIHVuZGVmaW5lZCBpZiBubyBjcml0aWNhbGl0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdHByaXZhdGUgZ2V0Q3JpdGljYWxpdHlFeHByZXNzaW9uKCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRhTW9kZWxQYXRoID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yKHRoaXMuZGF0YU1vZGVsUGF0aCwgdGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjcml0aWNhbGl0eSBpY29uIGV4cHJlc3Npb24gZm9yIHRoZSBPYmplY3RTdGF0dXMuXG5cdCAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIGNyaXRpY2FsaXR5IGljb24sIG9yIHVuZGVmaW5lZCBpZiBubyBjcml0aWNhbGl0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdHByaXZhdGUgZ2V0Q3JpdGljYWxpdHlJY29uRXhwcmVzc2lvbigpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YU1vZGVsUGF0aCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uKHRoaXMuZGF0YU1vZGVsUGF0aCwgdGhpcy5kYXRhTW9kZWxQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0ZXh0IGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIE9iamVjdFN0YXR1cy5cblx0ICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIE9iamVjdFN0YXR1cyB0ZXh0IGNvbnRlbnRcblx0ICovXG5cdHByaXZhdGUgZ2V0T2JqZWN0U3RhdHVzVGV4dEJpbmRpbmcoKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IHByb3BlcnR5T3JEYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gKHRoaXMudmFsdWVEYXRhTW9kZWxQYXRoID8/IHRoaXMuZGF0YU1vZGVsUGF0aCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxcblx0XHRcdFByb3BlcnR5IHwgRGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZVxuXHRcdD47XG5cdFx0cmV0dXJuIGdldFRleHRCaW5kaW5nKHByb3BlcnR5T3JEYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoLCB7fSkgYXMgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgT2JqZWN0U3RhdHVzIGNvbnRyb2wgY29udGVudC5cblx0ICogQHJldHVybnMgVGhlIGNvbmZpZ3VyZWQgT2JqZWN0U3RhdHVzIGNvbnRyb2wgcmVhZHkgZm9yIHJlbmRlcmluZ1xuXHQgKi9cblx0Y3JlYXRlQ29udGVudCgpOiBNT2JqZWN0U3RhdHVzIHtcblx0XHRjb25zdCBkYXRhRmllbGRPclByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA9ICh0aGlzLmRhdGFNb2RlbFBhdGggPz8gdGhpcy52YWx1ZURhdGFNb2RlbFBhdGgpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8XG5cdFx0XHRQcm9wZXJ0eSB8IERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGVcblx0XHQ+O1xuXHRcdGNvbnN0IHZpc2libGUgPSBnZXRWaXNpYmxlRXhwcmVzc2lvbihkYXRhRmllbGRPclByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdFx0Y29uc3QgY3JpdGljYWxpdHlFeHByZXNzaW9uID0gdGhpcy5nZXRDcml0aWNhbGl0eUV4cHJlc3Npb24oKTtcblx0XHRjb25zdCBjcml0aWNhbGl0eUljb25FeHByZXNzaW9uID0gdGhpcy5nZXRDcml0aWNhbGl0eUljb25FeHByZXNzaW9uKCk7XG5cdFx0Y29uc3QgdGV4dEJpbmRpbmcgPSB0aGlzLmdldE9iamVjdFN0YXR1c1RleHRCaW5kaW5nKCk7XG5cdFx0Y29uc3QgaXNBY3RpdmUgPSAhIXRoaXMucHJlc3M7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1PYmplY3RTdGF0dXNcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmdldElkKCksIFwiT2JqZWN0U3RhdHVzXCJdKX1cblx0XHRcdFx0aW52ZXJ0ZWQ9e3RydWV9XG5cdFx0XHRcdGNsYXNzPXt0aGlzLmxhcmdlRGVzaWduID8gXCJzYXBNT2JqZWN0U3RhdHVzTGFyZ2Ugc2FwTU9iamVjdFN0YXR1c0xvbmdUZXh0XCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHN0YXRlPXtjcml0aWNhbGl0eUV4cHJlc3Npb259XG5cdFx0XHRcdGljb249e3RoaXMuaGlkZUljb24gPyB1bmRlZmluZWQgOiBjcml0aWNhbGl0eUljb25FeHByZXNzaW9ufVxuXHRcdFx0XHR0ZXh0PXt0ZXh0QmluZGluZ31cblx0XHRcdFx0dmlzaWJsZT17dmlzaWJsZX1cblx0XHRcdFx0YWN0aXZlPXtpc0FjdGl2ZX1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17dGhpcy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRwcmVzcz17KHByZXNzRXZlbnQ6IE9iamVjdFN0YXR1cyRQcmVzc0V2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJwcmVzc1wiLCBwcmVzc0V2ZW50KTtcblx0XHRcdFx0fX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxNQUFNLElBQUFDLElBQUEsR0FEMUJDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFBQyxLQUFBLEdBRXJDQyxrQkFBa0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBTzlDQyxRQUFRLENBQUM7SUFDVEMs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
@@ -0,0 +1,192 @@
1
+ import type { Property } from "@sap-ux/vocabularies-types";
2
+ import type { DataField, DataPointType } from "@sap-ux/vocabularies-types/vocabularies/UI";
3
+ import { UIAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/UI";
4
+ import type { CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolkit";
5
+ import { defineUI5Class, event, implementInterface, property, type PropertiesOf } from "sap/fe/base/ClassSupport";
6
+ import BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
7
+ import { generate } from "sap/fe/core/helpers/StableIdHelper";
8
+ import { isProperty } from "sap/fe/core/helpers/TypeGuards";
9
+ import { buildExpressionForCriticalityColor, buildExpressionForCriticalityIcon } from "sap/fe/core/templating/CriticalityFormatters";
10
+ import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
11
+ import { enhanceDataModelPath } from "sap/fe/core/templating/DataModelPathHelper";
12
+ import { getTextBinding, getVisibleExpression } from "sap/fe/macros/field/FieldTemplating";
13
+ import type { ObjectStatus$PressEvent } from "sap/m/ObjectStatus";
14
+ import MObjectStatus from "sap/m/ObjectStatus";
15
+ import type { $ControlSettings } from "sap/ui/core/Control";
16
+ import type { IFormContent } from "sap/ui/core/library";
17
+
18
+ /**
19
+ * Building block for displaying object status with criticality in inverted mode.
20
+ */
21
+ @defineUI5Class("sap.fe.macros.Status")
22
+ export default class Status extends BuildingBlock<MObjectStatus> implements IFormContent {
23
+ @implementInterface("sap.ui.core.IFormContent")
24
+ __implements__sap_ui_core_IFormContent = true;
25
+
26
+ /**
27
+ * Metadata path to the DataField annotation or property.
28
+ * @public
29
+ */
30
+ @property({
31
+ type: "string",
32
+ required: true
33
+ })
34
+ public metaPath!: string;
35
+
36
+ /**
37
+ * Context path for the binding context.
38
+ * @public
39
+ */
40
+ @property({
41
+ type: "string"
42
+ })
43
+ public contextPath?: string;
44
+
45
+ /**
46
+ * When the Status is clickable, it defines the size of the reactive area of the clickable element:
47
+ *
48
+ * - ReactiveAreaMode.Inline - The Status is displayed as part of a sentence.
49
+ * - ReactiveAreaMode.Overlay - The Status is displayed as an overlay on top of other interactive parts of the page.
50
+ * Note: It is designed to make the clickable element easier to activate and helps meet the WCAG 2.2 Target Size requirement. It is applicable only for the SAP Horizon themes. Note: The size of the reactive area is sufficiently large to help users avoid accidentally selecting (clicking or tapping) unintended UI elements. UI elements positioned over other parts of the page may need an invisible active touch area. This ensures that no elements beneath are activated accidentally when the user tries to interact with the overlay element.
51
+ * @public
52
+ */
53
+ @property({ type: "string", allowedValues: ["Inline", "Overlay"] })
54
+ public reactiveAreaMode?: "Inline" | "Overlay";
55
+
56
+ /**
57
+ * Indicates whether the ObjectStatus should be displayed in large design mode.
58
+ * @public
59
+ */
60
+ @property({ type: "boolean" })
61
+ public largeDesign = false;
62
+
63
+ @property({ type: "boolean" })
64
+ public hideIcon = false;
65
+
66
+ /**
67
+ * Press event fired when the ObjectStatus is clicked.
68
+ * @param event The press event
69
+ * @public
70
+ */
71
+ @event()
72
+ public press?: (event: ObjectStatus$PressEvent) => void;
73
+
74
+ /**
75
+ * Internal property to store the data model path
76
+ */
77
+ private dataModelPath?: DataModelObjectPath<DataField | DataPointType>;
78
+
79
+ private valueDataModelPath?: DataModelObjectPath<Property>;
80
+
81
+ /**
82
+ * Constructor for the Status building block.
83
+ * @param properties The properties object containing Status-specific settings and base control settings
84
+ * @param [others] Additional control settings that may be applied to the building block
85
+ */
86
+ constructor(properties: $ControlSettings & PropertiesOf<Status>, others?: $ControlSettings) {
87
+ super(properties, others);
88
+ }
89
+
90
+ /**
91
+ * Handler for the onMetadataAvailable event.
92
+ */
93
+ onMetadataAvailable(): void {
94
+ this.getTemplatingObjects();
95
+ if (!this.dataModelPath && !this.valueDataModelPath) {
96
+ // there cannot be a static value and no datafield or datapoint
97
+ return;
98
+ }
99
+ if (!this.content) {
100
+ this.content = this.createContent();
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Function to get the templating objects and prepare data model paths.
106
+ */
107
+ private getTemplatingObjects(): void {
108
+ // Try to get as DataField first, then as DataPoint, then as Property
109
+ const internalDataModelPath = this.getDataModelObjectForMetaPath<DataField | DataPointType | Property>(
110
+ this.metaPath,
111
+ this.contextPath
112
+ );
113
+ const targetObject = internalDataModelPath?.targetObject;
114
+
115
+ if (!internalDataModelPath) {
116
+ return;
117
+ }
118
+ if (isProperty(targetObject)) {
119
+ if (targetObject?.annotations?.UI?.DataFieldDefault !== undefined) {
120
+ this.dataModelPath = this.getDataModelObjectForMetaPath<DataField>(
121
+ `${this.metaPath}@${UIAnnotationTerms.DataFieldDefault}`,
122
+ this.contextPath
123
+ );
124
+ }
125
+ this.valueDataModelPath = internalDataModelPath as DataModelObjectPath<Property>;
126
+ } else {
127
+ this.dataModelPath = internalDataModelPath as DataModelObjectPath<DataField | DataPointType>;
128
+ if (this.dataModelPath?.targetObject?.Value?.path) {
129
+ this.valueDataModelPath = enhanceDataModelPath<Property>(internalDataModelPath, this.dataModelPath.targetObject.Value.path);
130
+ }
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Gets the criticality expression for the ObjectStatus.
136
+ * @returns The compiled binding expression for criticality color, or undefined if no criticality is available
137
+ */
138
+ private getCriticalityExpression(): CompiledBindingToolkitExpression | undefined {
139
+ return this.dataModelPath === undefined ? undefined : buildExpressionForCriticalityColor(this.dataModelPath, this.dataModelPath);
140
+ }
141
+
142
+ /**
143
+ * Gets the criticality icon expression for the ObjectStatus.
144
+ * @returns The compiled binding expression for criticality icon, or undefined if no criticality is available
145
+ */
146
+ private getCriticalityIconExpression(): CompiledBindingToolkitExpression | undefined {
147
+ return this.dataModelPath === undefined ? undefined : buildExpressionForCriticalityIcon(this.dataModelPath, this.dataModelPath);
148
+ }
149
+
150
+ /**
151
+ * Gets the text binding expression for the ObjectStatus.
152
+ * @returns The compiled binding expression for the ObjectStatus text content
153
+ */
154
+ private getObjectStatusTextBinding(): CompiledBindingToolkitExpression {
155
+ const propertyOrDataFieldDataModelObjectPath = (this.valueDataModelPath ?? this.dataModelPath) as DataModelObjectPath<
156
+ Property | DataField | DataPointType
157
+ >;
158
+ return getTextBinding(propertyOrDataFieldDataModelObjectPath, {}) as CompiledBindingToolkitExpression;
159
+ }
160
+
161
+ /**
162
+ * Creates the ObjectStatus control content.
163
+ * @returns The configured ObjectStatus control ready for rendering
164
+ */
165
+ createContent(): MObjectStatus {
166
+ const dataFieldOrPropertyDataModelObjectPath = (this.dataModelPath ?? this.valueDataModelPath) as DataModelObjectPath<
167
+ Property | DataField | DataPointType
168
+ >;
169
+ const visible = getVisibleExpression(dataFieldOrPropertyDataModelObjectPath);
170
+ const criticalityExpression = this.getCriticalityExpression();
171
+ const criticalityIconExpression = this.getCriticalityIconExpression();
172
+ const textBinding = this.getObjectStatusTextBinding();
173
+ const isActive = !!this.press;
174
+
175
+ return (
176
+ <MObjectStatus
177
+ id={generate([this.getId(), "ObjectStatus"])}
178
+ inverted={true}
179
+ class={this.largeDesign ? "sapMObjectStatusLarge sapMObjectStatusLongText" : undefined}
180
+ state={criticalityExpression}
181
+ icon={this.hideIcon ? undefined : criticalityIconExpression}
182
+ text={textBinding}
183
+ visible={visible}
184
+ active={isActive}
185
+ reactiveAreaMode={this.reactiveAreaMode}
186
+ press={(pressEvent: ObjectStatus$PressEvent): void => {
187
+ this.fireEvent("press", pressEvent);
188
+ }}
189
+ />
190
+ );
191
+ }
192
+ }