@ui5/webcomponents-ai 0.0.0-a3b95fa49 → 0.0.0-a8a75c830

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 (243) hide show
  1. package/.ui5-cem-aliases.json +4 -0
  2. package/CHANGELOG.md +569 -0
  3. package/LICENSE.txt +201 -0
  4. package/README.md +11 -10
  5. package/dist/.tsbuildinfo +1 -1
  6. package/dist/Assets-fetch.d.ts +3 -0
  7. package/dist/Assets-fetch.js +6 -0
  8. package/dist/Assets-fetch.js.map +1 -0
  9. package/dist/Assets-node.d.ts +14 -0
  10. package/dist/Assets-node.js +17 -0
  11. package/dist/Assets-node.js.map +1 -0
  12. package/dist/Button.d.ts +41 -2
  13. package/dist/Button.js +59 -4
  14. package/dist/Button.js.map +1 -1
  15. package/dist/ButtonState.d.ts +2 -1
  16. package/dist/ButtonState.js +2 -1
  17. package/dist/ButtonState.js.map +1 -1
  18. package/dist/ButtonTemplate.js +1 -1
  19. package/dist/ButtonTemplate.js.map +1 -1
  20. package/dist/Input.d.ts +146 -0
  21. package/dist/Input.js +291 -0
  22. package/dist/Input.js.map +1 -0
  23. package/dist/InputTemplate.d.ts +10 -0
  24. package/dist/InputTemplate.js +28 -0
  25. package/dist/InputTemplate.js.map +1 -0
  26. package/dist/PromptInput.d.ts +4 -2
  27. package/dist/PromptInput.js +2 -1
  28. package/dist/PromptInput.js.map +1 -1
  29. package/dist/TextArea.d.ts +125 -0
  30. package/dist/TextArea.js +272 -0
  31. package/dist/TextArea.js.map +1 -0
  32. package/dist/TextAreaTemplate.d.ts +2 -0
  33. package/dist/TextAreaTemplate.js +13 -0
  34. package/dist/TextAreaTemplate.js.map +1 -0
  35. package/dist/ToolbarLabel.d.ts +39 -0
  36. package/dist/ToolbarLabel.js +67 -0
  37. package/dist/ToolbarLabel.js.map +1 -0
  38. package/dist/ToolbarLabelTemplate.d.ts +2 -0
  39. package/dist/ToolbarLabelTemplate.js +5 -0
  40. package/dist/ToolbarLabelTemplate.js.map +1 -0
  41. package/dist/Versioning.d.ts +95 -0
  42. package/dist/Versioning.js +187 -0
  43. package/dist/Versioning.js.map +1 -0
  44. package/dist/VersioningTemplate.d.ts +4 -0
  45. package/dist/VersioningTemplate.js +9 -0
  46. package/dist/VersioningTemplate.js.map +1 -0
  47. package/dist/WritingAssistant.d.ts +101 -0
  48. package/dist/WritingAssistant.js +201 -0
  49. package/dist/WritingAssistant.js.map +1 -0
  50. package/dist/WritingAssistantTemplate.d.ts +2 -0
  51. package/dist/WritingAssistantTemplate.js +12 -0
  52. package/dist/WritingAssistantTemplate.js.map +1 -0
  53. package/dist/bundle.esm.js +2 -0
  54. package/dist/bundle.esm.js.map +1 -1
  55. package/dist/css/themes/Button.css +1 -1
  56. package/dist/css/themes/Input.css +1 -0
  57. package/dist/css/themes/PromptInput.css +1 -1
  58. package/dist/css/themes/TextArea.css +1 -0
  59. package/dist/css/themes/Versioning.css +1 -0
  60. package/dist/css/themes/WritingAssistant.css +1 -0
  61. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -0
  62. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -0
  63. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -0
  64. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -0
  65. package/dist/custom-elements-internal.json +710 -3
  66. package/dist/custom-elements.json +607 -0
  67. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  68. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  69. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  70. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
  71. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  72. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  73. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  74. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  75. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  76. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  77. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  78. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  79. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  80. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  81. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  82. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  83. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  84. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  85. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  86. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  87. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  88. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  89. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  90. package/dist/generated/assets/i18n/messagebundle_id.json +1 -0
  91. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  92. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  93. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  94. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  95. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  96. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  97. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  98. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
  99. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  105. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  110. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  111. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  112. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  113. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  115. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  118. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  119. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  120. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  121. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  122. package/dist/generated/i18n/i18n-defaults.d.ts +15 -1
  123. package/dist/generated/i18n/i18n-defaults.js +15 -1
  124. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  125. package/dist/generated/json-imports/Themes-fetch.js +1 -1
  126. package/dist/generated/json-imports/Themes-fetch.js.map +1 -1
  127. package/dist/generated/json-imports/Themes-node.d.ts +1 -0
  128. package/dist/generated/json-imports/Themes-node.js +21 -0
  129. package/dist/generated/json-imports/Themes-node.js.map +1 -0
  130. package/dist/generated/json-imports/Themes.js +1 -1
  131. package/dist/generated/json-imports/Themes.js.map +1 -1
  132. package/dist/generated/json-imports/i18n-fetch.js +3 -1
  133. package/dist/generated/json-imports/i18n-fetch.js.map +1 -1
  134. package/dist/generated/json-imports/i18n-node.d.ts +1 -0
  135. package/dist/generated/json-imports/i18n-node.js +120 -0
  136. package/dist/generated/json-imports/i18n-node.js.map +1 -0
  137. package/dist/generated/json-imports/i18n.js +3 -1
  138. package/dist/generated/json-imports/i18n.js.map +1 -1
  139. package/dist/generated/themes/Button.css.d.ts +1 -1
  140. package/dist/generated/themes/Button.css.js +3 -3
  141. package/dist/generated/themes/Button.css.js.map +1 -1
  142. package/dist/generated/themes/Input.css.d.ts +2 -0
  143. package/dist/generated/themes/Input.css.js +8 -0
  144. package/dist/generated/themes/Input.css.js.map +1 -0
  145. package/dist/generated/themes/PromptInput.css.d.ts +1 -1
  146. package/dist/generated/themes/PromptInput.css.js +3 -3
  147. package/dist/generated/themes/PromptInput.css.js.map +1 -1
  148. package/dist/generated/themes/TextArea.css.d.ts +2 -0
  149. package/dist/generated/themes/TextArea.css.js +8 -0
  150. package/dist/generated/themes/TextArea.css.js.map +1 -0
  151. package/dist/generated/themes/Versioning.css.d.ts +2 -0
  152. package/dist/generated/themes/Versioning.css.js +8 -0
  153. package/dist/generated/themes/Versioning.css.js.map +1 -0
  154. package/dist/generated/themes/WritingAssistant.css.d.ts +2 -0
  155. package/dist/generated/themes/WritingAssistant.css.js +8 -0
  156. package/dist/generated/themes/WritingAssistant.css.js.map +1 -0
  157. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  158. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  159. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  160. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  161. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  162. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  163. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
  164. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  165. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  166. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
  167. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  168. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  169. package/dist/vscode.html-custom-data.json +105 -0
  170. package/dist/web-types.json +309 -1
  171. package/package-scripts.cjs +4 -0
  172. package/package.json +22 -21
  173. package/src/ButtonTemplate.tsx +1 -0
  174. package/src/InputTemplate.tsx +197 -0
  175. package/src/TextArea.css +25 -0
  176. package/src/TextAreaTemplate.tsx +91 -0
  177. package/src/ToolbarLabelTemplate.tsx +9 -0
  178. package/src/VersioningTemplate.tsx +34 -0
  179. package/src/WritingAssistantTemplate.tsx +51 -0
  180. package/src/i18n/messagebundle.properties +43 -1
  181. package/src/i18n/messagebundle_ar.properties +28 -0
  182. package/src/i18n/messagebundle_bg.properties +28 -0
  183. package/src/i18n/messagebundle_ca.properties +28 -0
  184. package/src/i18n/messagebundle_cnr.properties +28 -0
  185. package/src/i18n/messagebundle_cs.properties +28 -0
  186. package/src/i18n/messagebundle_cy.properties +28 -0
  187. package/src/i18n/messagebundle_da.properties +28 -0
  188. package/src/i18n/messagebundle_de.properties +28 -0
  189. package/src/i18n/messagebundle_el.properties +28 -0
  190. package/src/i18n/messagebundle_en.properties +28 -0
  191. package/src/i18n/messagebundle_en_GB.properties +28 -0
  192. package/src/i18n/messagebundle_en_US_sappsd.properties +28 -0
  193. package/src/i18n/messagebundle_en_US_saprigi.properties +28 -0
  194. package/src/i18n/messagebundle_en_US_saptrc.properties +28 -0
  195. package/src/i18n/messagebundle_es.properties +28 -0
  196. package/src/i18n/messagebundle_es_MX.properties +29 -1
  197. package/src/i18n/messagebundle_et.properties +28 -0
  198. package/src/i18n/messagebundle_fi.properties +28 -0
  199. package/src/i18n/messagebundle_fr.properties +28 -0
  200. package/src/i18n/messagebundle_fr_CA.properties +28 -0
  201. package/src/i18n/messagebundle_hi.properties +28 -0
  202. package/src/i18n/messagebundle_hr.properties +30 -2
  203. package/src/i18n/messagebundle_hu.properties +28 -0
  204. package/src/i18n/messagebundle_id.properties +28 -0
  205. package/src/i18n/messagebundle_it.properties +28 -0
  206. package/src/i18n/messagebundle_iw.properties +28 -0
  207. package/src/i18n/messagebundle_ja.properties +28 -0
  208. package/src/i18n/messagebundle_kk.properties +28 -0
  209. package/src/i18n/messagebundle_ko.properties +28 -0
  210. package/src/i18n/messagebundle_lt.properties +28 -0
  211. package/src/i18n/messagebundle_lv.properties +28 -0
  212. package/src/i18n/messagebundle_mk.properties +28 -0
  213. package/src/i18n/messagebundle_ms.properties +28 -0
  214. package/src/i18n/messagebundle_nl.properties +28 -0
  215. package/src/i18n/messagebundle_no.properties +28 -0
  216. package/src/i18n/messagebundle_pl.properties +28 -0
  217. package/src/i18n/messagebundle_pt.properties +28 -0
  218. package/src/i18n/messagebundle_pt_PT.properties +28 -0
  219. package/src/i18n/messagebundle_ro.properties +28 -0
  220. package/src/i18n/messagebundle_ru.properties +28 -0
  221. package/src/i18n/messagebundle_sh.properties +28 -0
  222. package/src/i18n/messagebundle_sk.properties +28 -0
  223. package/src/i18n/messagebundle_sl.properties +28 -0
  224. package/src/i18n/messagebundle_sr.properties +28 -0
  225. package/src/i18n/messagebundle_sv.properties +28 -0
  226. package/src/i18n/messagebundle_th.properties +30 -2
  227. package/src/i18n/messagebundle_tr.properties +28 -0
  228. package/src/i18n/messagebundle_uk.properties +28 -0
  229. package/src/i18n/messagebundle_vi.properties +28 -0
  230. package/src/i18n/messagebundle_zh_CN.properties +28 -0
  231. package/src/i18n/messagebundle_zh_TW.properties +28 -0
  232. package/src/themes/Input.css +83 -0
  233. package/src/themes/PromptInput.css +5 -1
  234. package/src/themes/TextArea.css +45 -0
  235. package/src/themes/Versioning.css +20 -0
  236. package/src/themes/WritingAssistant.css +23 -0
  237. package/src/themes/base/Button-parameters.css +1 -1
  238. package/tsconfig.json +6 -0
  239. package/cypress/specs/Button.cy.tsx +0 -14
  240. package/cypress/support/commands.ts +0 -40
  241. package/cypress/support/component-index.html +0 -12
  242. package/cypress/support/component.ts +0 -36
  243. package/cypress/tsconfig.json +0 -43
package/dist/Input.js ADDED
@@ -0,0 +1,291 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var Input_1;
8
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
+ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
11
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
12
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
13
+ import { isEscape, isF4Shift, } from "@ui5/webcomponents-base/dist/Keys.js";
14
+ import BaseInput from "@ui5/webcomponents/dist/Input.js";
15
+ // styles
16
+ import AIInputCss from "./generated/themes/Input.css.js";
17
+ import InputCss from "@ui5/webcomponents/dist/generated/themes/Input.css.js";
18
+ import ResponsivePopoverCommonCss from "@ui5/webcomponents/dist/generated/themes/ResponsivePopoverCommon.css.js";
19
+ import ValueStateMessageCss from "@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js";
20
+ // templates
21
+ import InputTemplate from "./InputTemplate.js";
22
+ import { INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP, INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP, INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP, WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT, } from "./generated/i18n/i18n-defaults.js";
23
+ /**
24
+ * @class
25
+ *
26
+ * ### Overview
27
+ *
28
+ * The `ui5-ai-input` component extends the standard `ui5-input` with **AI Writing Assistant** capabilities.
29
+ *
30
+ * ### Structure
31
+ *
32
+ * The `ui5-ai-input` consists of the following main parts:
33
+ *
34
+ * - **Input Field** – Inherits all standard Input behaviors.
35
+ * - **AI Action Button** – Appears when focused or loading, providing access to AI-related actions or stopping generation.
36
+ *
37
+ * The component automatically determines which elements to render based on its internal state:
38
+ * - The AI Button is only shown when there are available `actions`.
39
+ * - The version navigation appears only when `totalVersions > 1`.
40
+ *
41
+ * ### Keyboard Support
42
+ *
43
+ * - **Shift + F4** — Opens the AI menu.
44
+ * - **Ctrl + Shift + Z / Y** — Navigates backward/forward between AI-generated versions.
45
+ *
46
+ * ### ES6 Module Import
47
+ *
48
+ * `import "@ui5/webcomponents-ai/dist/Input.js";`
49
+ *
50
+ * @constructor
51
+ * @extends BaseInput
52
+ * @since 2.16.0
53
+ * @experimental The **@ui5/webcomponents-ai** package is under active development and considered experimental. Component APIs are subject to change.
54
+ * Furthermore, the package supports **Horizon** themes only.
55
+ * @public
56
+ */
57
+ let Input = Input_1 = class Input extends BaseInput {
58
+ constructor() {
59
+ super(...arguments);
60
+ /**
61
+ * Indicates the index of the currently displayed version.
62
+ *
63
+ * @default 0
64
+ * @public
65
+ */
66
+ this.currentVersion = 0;
67
+ /**
68
+ * Indicates the total number of result versions available.
69
+ *
70
+ * When not set or set to 0, the versioning will be hidden.
71
+ *
72
+ * @default 0
73
+ * @public
74
+ */
75
+ this.totalVersions = 0;
76
+ /**
77
+ * Defines whether the AI Writing Assistant is currently loading.
78
+ *
79
+ * When `true`, indicates that an AI action is in progress.
80
+ *
81
+ * @default false
82
+ * @public
83
+ */
84
+ this.loading = false;
85
+ /**
86
+ * Indicates if the menu is open.
87
+ * @default 0
88
+ * @private
89
+ */
90
+ this._isMenuOpen = false;
91
+ this._previousCurrentStep = 0;
92
+ this._previousTotalSteps = 0;
93
+ this.isFocused = false;
94
+ /**
95
+ * Handles the escape event for the AI generate Button.
96
+ * @private
97
+ */
98
+ this._handleAIButtonKeydown = (e) => {
99
+ if (isEscape(e) && this.loading) {
100
+ this.fireDecoratorEvent("stop-generation");
101
+ }
102
+ };
103
+ }
104
+ _onfocusin(e) {
105
+ super._onfocusin(e);
106
+ this.isFocused = true;
107
+ }
108
+ _onfocusout(e) {
109
+ super._onfocusout(e);
110
+ this.isFocused = false;
111
+ }
112
+ /**
113
+ * Manages the focus when the navigation buttons become disabled/enabled.
114
+ * Automatically moves the focus to the available button when the user reaches the boundaries.
115
+ * @private
116
+ */
117
+ _manageVersionButtonsFocus() {
118
+ const previousButton = this.shadowRoot?.getElementById("arrow-left");
119
+ const nextButton = this.shadowRoot?.getElementById("arrow-right");
120
+ const isPreviousDisabled = this.currentVersion <= 1;
121
+ const isNextDisabled = this.currentVersion >= this.totalVersions;
122
+ if (isPreviousDisabled && previousButton) {
123
+ setTimeout(() => {
124
+ nextButton.focus();
125
+ }, 0);
126
+ }
127
+ else if (isNextDisabled && nextButton) {
128
+ setTimeout(() => {
129
+ previousButton.focus();
130
+ }, 0);
131
+ }
132
+ }
133
+ /**
134
+ * Handles the click event for the AI generate Button.
135
+ * Fires the appropriate event based on the AI Button state.
136
+ * @private
137
+ */
138
+ _handleAIButtonClick(e) {
139
+ const target = e.target;
140
+ if (target?.icon === "stop") {
141
+ this.fireDecoratorEvent("stop-generation");
142
+ }
143
+ else {
144
+ const opener = this.shadowRoot?.querySelector(".ui5-input-ai-button");
145
+ this.fireDecoratorEvent("button-click");
146
+ this.menu.opener = opener;
147
+ this.menu.open = true;
148
+ this.menu.horizontalAlign = "End";
149
+ }
150
+ }
151
+ /**
152
+ * Handles the version change event from the versioning component.
153
+ *
154
+ * @param {CustomEvent} e - The version change event
155
+ */
156
+ _handleVersionChange(e) {
157
+ this.fireDecoratorEvent("version-change", {
158
+ backwards: e.detail.backwards,
159
+ });
160
+ this._manageVersionButtonsFocus();
161
+ }
162
+ /**
163
+ * Handles the click event for the "Previous Version" button.
164
+ * Updates the current version index and syncs content.
165
+ * @private
166
+ */
167
+ _handlePreviousButtonClick() {
168
+ this._handleVersionChange(new CustomEvent("version-change", { detail: { backwards: true } }));
169
+ }
170
+ /**
171
+ * Handles the click event for the "Next Version" button.
172
+ * Updates the current version index and syncs content.
173
+ * @private
174
+ */
175
+ _handleNextButtonClick() {
176
+ this._handleVersionChange(new CustomEvent("version-change", { detail: { backwards: false } }));
177
+ }
178
+ _onMenuIconClick(e) {
179
+ this.fireDecoratorEvent("item-click", e.detail);
180
+ }
181
+ /**
182
+ * Handles keydown events for keyboard shortcuts.
183
+ * @private
184
+ */
185
+ _onkeydown(e) {
186
+ super._onkeydown(e);
187
+ const menuButton = this.shadowRoot?.getElementById("ai-menu-btn");
188
+ if (isF4Shift(e)) {
189
+ menuButton?.focus();
190
+ this.menu.opener = menuButton;
191
+ this.menu.open = true;
192
+ this.menu.horizontalAlign = "End";
193
+ }
194
+ const goPreviousStep = e.key === "Z" && e.shiftKey && e.ctrlKey;
195
+ const goNextStep = e.key === "Y" && e.shiftKey && e.ctrlKey;
196
+ if (goPreviousStep) {
197
+ e.preventDefault();
198
+ this._handlePreviousButtonClick();
199
+ }
200
+ else if (goNextStep) {
201
+ e.preventDefault();
202
+ this._handleNextButtonClick();
203
+ }
204
+ }
205
+ /**
206
+ * Handles visibility of the Writing Assistant Button.
207
+ * If there are no items, the Writing Assistant Button would not be rendered.
208
+ */
209
+ get hasActions() {
210
+ return !!this?.menu?.getSlottedNodes("items").length;
211
+ }
212
+ get ariaLabel() {
213
+ return this.accessibleName || !this.loading ? Input_1.i18nBundle.getText(INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP) : Input_1.i18nBundle.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT);
214
+ }
215
+ get stopGeneratingTooltip() {
216
+ return Input_1.i18nBundle.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT);
217
+ }
218
+ get nextButtonAccessibleName() {
219
+ return Input_1.i18nBundle.getText(INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP);
220
+ }
221
+ get previousButtonAccessibleName() {
222
+ return Input_1.i18nBundle.getText(INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP);
223
+ }
224
+ get menu() {
225
+ return this.shadowRoot?.querySelector("[ui5-menu]");
226
+ }
227
+ };
228
+ __decorate([
229
+ property({ type: Number })
230
+ ], Input.prototype, "currentVersion", void 0);
231
+ __decorate([
232
+ property({ type: Number })
233
+ ], Input.prototype, "totalVersions", void 0);
234
+ __decorate([
235
+ property({ type: Boolean })
236
+ ], Input.prototype, "loading", void 0);
237
+ __decorate([
238
+ property({ type: Boolean })
239
+ ], Input.prototype, "_isMenuOpen", void 0);
240
+ __decorate([
241
+ slot({
242
+ type: HTMLElement,
243
+ invalidateOnChildChange: true,
244
+ })
245
+ ], Input.prototype, "actions", void 0);
246
+ Input = Input_1 = __decorate([
247
+ customElement({
248
+ tag: "ui5-ai-input",
249
+ languageAware: true,
250
+ renderer: jsxRenderer,
251
+ template: InputTemplate,
252
+ styles: [
253
+ AIInputCss,
254
+ InputCss,
255
+ ResponsivePopoverCommonCss,
256
+ ValueStateMessageCss,
257
+ ],
258
+ })
259
+ /**
260
+ * Fired when the user selects the AI button.
261
+ * @public
262
+ */
263
+ ,
264
+ event("button-click", {
265
+ cancelable: true,
266
+ })
267
+ /** Fired when an item from the AI actions menu is clicked.
268
+ * @param { HTMLElement } item The currently clicked menu item.
269
+ * @param { string } text The text of the currently clicked menu item.
270
+ * @public
271
+ */
272
+ ,
273
+ event("item-click")
274
+ /**
275
+ * Fired when the user selects the "Stop" button to stop ongoing AI text generation.
276
+ * @public
277
+ */
278
+ ,
279
+ event("stop-generation")
280
+ /**
281
+ * Fired when the user selects the version navigation buttons.
282
+ *
283
+ * @param {boolean} backwards - Indicates if navigation is backwards (true) or forwards (false, default)
284
+ * @public
285
+ */
286
+ ,
287
+ event("version-change")
288
+ ], Input);
289
+ Input.define();
290
+ export default Input;
291
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../src/Input.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport {\n\tisEscape,\n\tisF4Shift,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport BaseInput from \"@ui5/webcomponents/dist/Input.js\";\nimport type Menu from \"@ui5/webcomponents/dist/Menu.js\";\nimport type { MenuItemClickEventDetail } from \"@ui5/webcomponents/dist/Menu.js\";\nimport type Button from \"./Button.js\";\n\n// styles\nimport AIInputCss from \"./generated/themes/Input.css.js\";\nimport InputCss from \"@ui5/webcomponents/dist/generated/themes/Input.css.js\";\nimport ResponsivePopoverCommonCss from \"@ui5/webcomponents/dist/generated/themes/ResponsivePopoverCommon.css.js\";\nimport ValueStateMessageCss from \"@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js\";\n\n// templates\nimport InputTemplate from \"./InputTemplate.js\";\nimport {\n\tINPUT_VERSIONING_NEXT_BUTTON_TOOLTIP,\n\tINPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP,\n\tINPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP,\n\tWRITING_ASSISTANT_GENERATING_ANNOUNCEMENT,\n} from \"./generated/i18n/i18n-defaults.js\";\nimport type { Slot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\n\ntype InputVersionChangeEventDetail = {\n\tbackwards: boolean,\n};\n\ntype InputItemClickEventDetail = MenuItemClickEventDetail;\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-input` component extends the standard `ui5-input` with **AI Writing Assistant** capabilities.\n *\n * ### Structure\n *\n * The `ui5-ai-input` consists of the following main parts:\n *\n * - **Input Field** – Inherits all standard Input behaviors.\n * - **AI Action Button** – Appears when focused or loading, providing access to AI-related actions or stopping generation.\n *\n * The component automatically determines which elements to render based on its internal state:\n * - The AI Button is only shown when there are available `actions`.\n * - The version navigation appears only when `totalVersions > 1`.\n *\n * ### Keyboard Support\n *\n * - **Shift + F4** — Opens the AI menu.\n * - **Ctrl + Shift + Z / Y** — Navigates backward/forward between AI-generated versions.\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/Input.js\";`\n *\n * @constructor\n * @extends BaseInput\n * @since 2.16.0\n * @experimental The **@ui5/webcomponents-ai** package is under active development and considered experimental. Component APIs are subject to change.\n * Furthermore, the package supports **Horizon** themes only.\n * @public\n */\n@customElement({\n\ttag: \"ui5-ai-input\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: InputTemplate,\n\tstyles: [\n\t\tAIInputCss,\n\t\tInputCss,\n\t\tResponsivePopoverCommonCss,\n\t\tValueStateMessageCss,\n\t],\n})\n\n/**\n * Fired when the user selects the AI button.\n * @public\n */\n@event(\"button-click\", {\n\tcancelable: true,\n})\n\n/** Fired when an item from the AI actions menu is clicked.\n * @param { HTMLElement } item The currently clicked menu item.\n * @param { string } text The text of the currently clicked menu item.\n * @public\n */\n@event(\"item-click\")\n\n/**\n * Fired when the user selects the \"Stop\" button to stop ongoing AI text generation.\n * @public\n */\n@event(\"stop-generation\")\n\n/**\n * Fired when the user selects the version navigation buttons.\n *\n * @param {boolean} backwards - Indicates if navigation is backwards (true) or forwards (false, default)\n * @public\n */\n@event(\"version-change\")\n\nclass Input extends BaseInput {\n\teventDetails!: BaseInput[\"eventDetails\"] & {\n\t\t\"version-change\": InputVersionChangeEventDetail;\n\t\t\"stop-generation\": void;\n\t\t\"button-click\": void;\n\t\t\"item-click\": InputItemClickEventDetail;\n\t};\n\n\t/**\n\t * Indicates the index of the currently displayed version.\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcurrentVersion = 0;\n\n\t/**\n\t * Indicates the total number of result versions available.\n\t *\n\t * When not set or set to 0, the versioning will be hidden.\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 0;\n\n\t/**\n\t * Defines whether the AI Writing Assistant is currently loading.\n\t *\n\t * When `true`, indicates that an AI action is in progress.\n\t *\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tloading: boolean = false;\n\n\t/**\n\t * Indicates if the menu is open.\n\t * @default 0\n\t * @private\n\t */\n\t@property({ type: Boolean })\n\t_isMenuOpen: boolean = false;\n\n\t/**\n\t * Defines the items of the menu for the component.\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\tinvalidateOnChildChange: true,\n\t})\n\tactions!: Slot<HTMLElement>;\n\n\t_previousCurrentStep = 0;\n\t_previousTotalSteps = 0;\n\tisFocused: boolean = false;\n\n\t_onfocusin(e: FocusEvent): void {\n\t\tsuper._onfocusin(e);\n\t\tthis.isFocused = true;\n\t}\n\n\t_onfocusout(e: FocusEvent): void {\n\t\tsuper._onfocusout(e);\n\t\tthis.isFocused = false;\n\t}\n\n\t/**\n\t * Manages the focus when the navigation buttons become disabled/enabled.\n\t * Automatically moves the focus to the available button when the user reaches the boundaries.\n\t * @private\n\t */\n\t_manageVersionButtonsFocus() {\n\t\tconst previousButton = this.shadowRoot?.getElementById(\"arrow-left\") as Button;\n\t\tconst nextButton = this.shadowRoot?.getElementById(\"arrow-right\") as Button;\n\t\tconst isPreviousDisabled = this.currentVersion <= 1;\n\t\tconst isNextDisabled = this.currentVersion >= this.totalVersions;\n\n\t\tif (isPreviousDisabled && previousButton) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tnextButton.focus();\n\t\t\t}, 0);\n\t\t} else if (isNextDisabled && nextButton) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tpreviousButton.focus();\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the click event for the AI generate Button.\n\t * Fires the appropriate event based on the AI Button state.\n\t * @private\n\t */\n\t_handleAIButtonClick(e: Event) {\n\t\tconst target = e.target as HTMLElement & { icon?: string };\n\t\tif (target?.icon === \"stop\") {\n\t\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t\t} else {\n\t\t\tconst opener = this.shadowRoot?.querySelector(\".ui5-input-ai-button\") as HTMLElement;\n\t\t\tthis.fireDecoratorEvent(\"button-click\");\n\t\t\tthis.menu.opener = opener;\n\t\t\tthis.menu.open = true;\n\t\t\tthis.menu.horizontalAlign = \"End\";\n\t\t}\n\t}\n\n\t/**\n\t * Handles the escape event for the AI generate Button.\n\t * @private\n\t */\n\t_handleAIButtonKeydown = (e: KeyboardEvent) => {\n\t\tif (isEscape(e) && this.loading) {\n\t\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t\t}\n\t}\n\n\t/**\n\t * Handles the version change event from the versioning component.\n\t *\n\t * @param {CustomEvent} e - The version change event\n\t */\n\t_handleVersionChange(e: CustomEvent<{ backwards: boolean }>) {\n\t\tthis.fireDecoratorEvent(\"version-change\", {\n\t\t\tbackwards: e.detail.backwards,\n\t\t});\n\t\tthis._manageVersionButtonsFocus();\n\t}\n\n\t/**\n\t * Handles the click event for the \"Previous Version\" button.\n\t * Updates the current version index and syncs content.\n\t * @private\n\t */\n\t_handlePreviousButtonClick(): void {\n\t\tthis._handleVersionChange(new CustomEvent(\"version-change\", { detail: { backwards: true } }));\n\t}\n\n\t/**\n\t * Handles the click event for the \"Next Version\" button.\n\t * Updates the current version index and syncs content.\n\t * @private\n\t */\n\t_handleNextButtonClick(): void {\n\t\tthis._handleVersionChange(new CustomEvent(\"version-change\", { detail: { backwards: false } }));\n\t}\n\n\t_onMenuIconClick(e: CustomEvent<InputItemClickEventDetail>): void {\n\t\tthis.fireDecoratorEvent(\"item-click\", e.detail);\n\t}\n\n\t/**\n\t * Handles keydown events for keyboard shortcuts.\n\t * @private\n\t */\n\t_onkeydown(e: KeyboardEvent): void {\n\t\tsuper._onkeydown(e);\n\t\tconst menuButton = this.shadowRoot?.getElementById(\"ai-menu-btn\") as HTMLElement;\n\n\t\tif (isF4Shift(e)) {\n\t\t\tmenuButton?.focus();\n\n\t\t\tthis.menu.opener = menuButton;\n\t\t\tthis.menu.open = true;\n\t\t\tthis.menu.horizontalAlign = \"End\";\n\t\t}\n\t\tconst goPreviousStep = e.key === \"Z\" && e.shiftKey && e.ctrlKey;\n\t\tconst goNextStep = e.key === \"Y\" && e.shiftKey && e.ctrlKey;\n\n\t\tif (goPreviousStep) {\n\t\t\te.preventDefault();\n\t\t\tthis._handlePreviousButtonClick();\n\t\t} else if (goNextStep) {\n\t\t\te.preventDefault();\n\t\t\tthis._handleNextButtonClick();\n\t\t}\n\t}\n\n\t/**\n\t * Handles visibility of the Writing Assistant Button.\n\t * If there are no items, the Writing Assistant Button would not be rendered.\n\t */\n\tget hasActions() {\n\t\treturn !!this?.menu?.getSlottedNodes(\"items\").length;\n\t}\n\n\tget ariaLabel() {\n\t\treturn this.accessibleName || !this.loading ? Input.i18nBundle.getText(INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP) : Input.i18nBundle.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT);\n\t}\n\n\tget stopGeneratingTooltip() {\n\t\treturn Input.i18nBundle.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT);\n\t}\n\n\tget nextButtonAccessibleName() {\n\t\treturn Input.i18nBundle.getText(INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP);\n\t}\n\n\tget previousButtonAccessibleName() {\n\t\treturn Input.i18nBundle.getText(INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP);\n\t}\n\n\tget menu() {\n\t\treturn this.shadowRoot?.querySelector(\"[ui5-menu]\") as Menu;\n\t}\n}\n\nInput.define();\n\nexport type {\n\tInputVersionChangeEventDetail,\n\tInputItemClickEventDetail,\n};\nexport default Input;\n"]}
@@ -0,0 +1,10 @@
1
+ import type Input from "./Input.js";
2
+ import "@ui5/webcomponents-icons/dist/navigation-left-arrow.js";
3
+ import "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
4
+ import type { JsxTemplateResult } from "@ui5/webcomponents-base";
5
+ type TemplateHook = () => JsxTemplateResult;
6
+ export default function InputTemplate(this: Input, hooks?: {
7
+ preContent: TemplateHook;
8
+ postContent: TemplateHook;
9
+ }): import("@ui5/webcomponents-base").JSX.Element;
10
+ export {};
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
3
+ import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
4
+ import MenuItem from "@ui5/webcomponents/dist/MenuItem.js";
5
+ import MenuSeparator from "@ui5/webcomponents/dist/MenuSeparator.js";
6
+ import Button from "@ui5/webcomponents/dist/Button.js";
7
+ import Menu from "@ui5/webcomponents/dist/Menu.js";
8
+ import "@ui5/webcomponents-icons/dist/navigation-left-arrow.js";
9
+ import "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
10
+ export default function InputTemplate(hooks) {
11
+ const preContent = hooks?.preContent || defaultPreContent;
12
+ const postContent = hooks?.postContent || defaultPostContent;
13
+ return (_jsx(_Fragment, { children: _jsx("div", { class: `ui5-ai-input-root ui5-input-focusable-element ${this.loading && "ui5-ai-input-busy"}`, onFocusIn: this._onfocusin, onFocusOut: this._onfocusout, children: _jsxs("div", { class: "ui5-input-content", children: [_jsx(BusyIndicator, { id: `${this._id}-busyIndicator`, active: this.loading, class: "ui5-input-busy-indicator", children: _jsx("div", { class: "ui5-input-root", part: "root", children: _jsxs("div", { class: "ui5-input-content", children: [preContent.call(this), _jsx("input", { id: "inner", part: "input", class: "ui5-input-inner", style: this.styles.innerInput, type: this.inputNativeType, "inner-input": true, "inner-input-with-icon": !!this.icon.length, disabled: this.disabled, readonly: this._readonly || this.loading, value: this.value, placeholder: this._placeholder, maxlength: this.maxlength, role: this.accInfo.role, enterkeyhint: this.hint, "aria-controls": this.accInfo.ariaControls, "aria-invalid": this.accInfo.ariaInvalid, "aria-haspopup": this.accInfo.ariaHasPopup, "aria-describedby": this.accInfo.ariaDescribedBy, "aria-roledescription": this.accInfo.ariaRoledescription, "aria-autocomplete": this.accInfo.ariaAutoComplete, "aria-expanded": this.accInfo.ariaExpanded, "aria-label": this.ariaLabel, "aria-required": this.required, autocomplete: "off", "data-sap-focus-ref": true, step: this.nativeInputAttributes.step, min: this.nativeInputAttributes.min, max: this.nativeInputAttributes.max, onInput: this._handleNativeInput, onChange: this._handleChange, onSelect: this._handleSelect, onKeyDown: this._onkeydown, onKeyUp: this._onkeyup, onClick: this._click, onFocusIn: this.innerFocusIn }), this._effectiveShowClearIcon &&
14
+ _jsx("div", { tabindex: -1, part: "clear-icon-wrapper", class: "ui5-input-clear-icon-wrapper inputIcon", onClick: this._clear, onMouseDown: this._iconMouseDown, children: _jsx(Icon, { part: "clear-icon", class: "ui5-input-clear-icon", name: "decline", tabindex: -1, accessibleName: this.clearIconAccessibleName }) }), this.icon.length > 0 &&
15
+ _jsx("div", { class: "ui5-input-icon-root", tabindex: -1, children: _jsx("slot", { name: "icon" }) }), _jsx("div", { class: "ui5-input-value-state-icon", children: this._valueStateInputIcon }), postContent.call(this), this.accInfo.ariaDescription &&
16
+ _jsx("span", { id: "descr", class: "ui5-hidden-text", children: this.accInfo.ariaDescription }), this.accInfo.accessibleDescription &&
17
+ _jsx("span", { id: "accessibleDescription", class: "ui5-hidden-text", children: this.accInfo.accessibleDescription }), this.linksInAriaValueStateHiddenText.length > 0 &&
18
+ _jsx("span", { id: "hiddenText-value-state-link-shortcut", class: "ui5-hidden-text", children: this.valueStateLinksShortcutsTextAcc }), this.hasValueState &&
19
+ _jsx("span", { id: "valueStateDesc", class: "ui5-hidden-text", children: this.ariaValueStateHiddenText })] }) }) }), _jsx(Button, { id: "ai-menu-btn", hidden: (!this.isFocused && !this.loading) || !this.hasActions || this.readonly, tabIndex: -1, class: `ui5-input-ai-button ui5-ai-input-button-wrapper ${this._isMenuOpen && "ui5-input-button-menu-open"} ${this.loading && "ui5-ai-input-loading"}`, design: "Transparent", icon: this.loading ? "stop" : "ai", onClick: this._handleAIButtonClick, onKeyDown: this._handleAIButtonKeydown, "aria-keyshortcuts": this.loading ? "Esc" : "Shift + F4", tooltip: this.loading ? this.stopGeneratingTooltip : this.ariaLabel, accessibilityAttributes: { hasPopup: this.loading ? "false" : "menu" } }), _jsxs(Menu, { onItemClick: this._onMenuIconClick, onBeforeOpen: () => { this._isMenuOpen = true; }, onBeforeClose: () => { this._isMenuOpen = false; }, onClose: () => { if (!this.loading) {
20
+ this.focus();
21
+ } }, children: [_jsx("slot", { name: "actions" }), this.totalVersions > 1 && Versioning.call(this)] })] }) }) }));
22
+ }
23
+ function Versioning() {
24
+ return (_jsxs(_Fragment, { children: [_jsx(MenuSeparator, {}), _jsxs(MenuItem, { type: "Inactive", class: "ui5-ai-versioning-menu-footer", text: `${this.currentVersion} / ${this.totalVersions}`, children: [_jsx(Button, { id: "arrow-left", class: "versioning-button", slot: "endContent", design: "Transparent", icon: "navigation-left-arrow", tooltip: this.previousButtonAccessibleName, accessibleName: this.previousButtonAccessibleName, "aria-keyshortcut": "Shift+Ctrl+Z", disabled: this.currentVersion <= 1, onClick: this._handlePreviousButtonClick, "data-ui5-versioning-button": "previous" }), _jsx(Button, { id: "arrow-right", class: "versioning-button", slot: "endContent", design: "Transparent", icon: "navigation-right-arrow", tooltip: this.nextButtonAccessibleName, accessibleName: this.nextButtonAccessibleName, "aria-keyshortcut": "Shift+Ctrl+Y", disabled: this.currentVersion >= this.totalVersions, onClick: this._handleNextButtonClick, "data-ui5-versioning-button": "next" })] })] }));
25
+ }
26
+ function defaultPreContent() { }
27
+ function defaultPostContent() { }
28
+ //# sourceMappingURL=InputTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputTemplate.js","sourceRoot":"","sources":["../src/InputTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import type Input from \"./Input.js\";\nimport Icon from \"@ui5/webcomponents/dist/Icon.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport MenuItem from \"@ui5/webcomponents/dist/MenuItem.js\";\nimport MenuSeparator from \"@ui5/webcomponents/dist/MenuSeparator.js\";\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport Menu from \"@ui5/webcomponents/dist/Menu.js\";\nimport \"@ui5/webcomponents-icons/dist/navigation-left-arrow.js\";\nimport \"@ui5/webcomponents-icons/dist/navigation-right-arrow.js\";\nimport type { JsxTemplateResult } from \"@ui5/webcomponents-base\";\n\ntype TemplateHook = () => JsxTemplateResult;\n\nexport default function InputTemplate(this: Input, hooks?: { preContent: TemplateHook, postContent: TemplateHook }) {\n\tconst preContent = hooks?.preContent || defaultPreContent;\n\tconst postContent = hooks?.postContent || defaultPostContent;\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclass={`ui5-ai-input-root ui5-input-focusable-element ${this.loading && \"ui5-ai-input-busy\"}`}\n\t\t\t\tonFocusIn={this._onfocusin}\n\t\t\t\tonFocusOut={this._onfocusout}\n\t\t\t>\n\t\t\t\t<div class=\"ui5-input-content\">\n\t\t\t\t\t<BusyIndicator\n\t\t\t\t\t\tid={`${this._id}-busyIndicator`}\n\t\t\t\t\t\tactive={this.loading}\n\t\t\t\t\t\tclass=\"ui5-input-busy-indicator\"\n\t\t\t\t\t>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"ui5-input-root\"\n\t\t\t\t\t\t\tpart=\"root\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"ui5-input-content\">\n\t\t\t\t\t\t\t\t{preContent.call(this)}\n\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tid=\"inner\"\n\t\t\t\t\t\t\t\t\tpart=\"input\"\n\t\t\t\t\t\t\t\t\tclass=\"ui5-input-inner\"\n\t\t\t\t\t\t\t\t\tstyle={this.styles.innerInput}\n\t\t\t\t\t\t\t\t\ttype={this.inputNativeType}\n\t\t\t\t\t\t\t\t\tinner-input\n\t\t\t\t\t\t\t\t\tinner-input-with-icon={!!this.icon.length}\n\t\t\t\t\t\t\t\t\tdisabled={this.disabled}\n\t\t\t\t\t\t\t\t\treadonly={this._readonly || this.loading}\n\t\t\t\t\t\t\t\t\tvalue={this.value}\n\t\t\t\t\t\t\t\t\tplaceholder={this._placeholder}\n\t\t\t\t\t\t\t\t\tmaxlength={this.maxlength}\n\t\t\t\t\t\t\t\t\trole={this.accInfo.role}\n\t\t\t\t\t\t\t\t\tenterkeyhint={this.hint}\n\t\t\t\t\t\t\t\t\taria-controls={this.accInfo.ariaControls}\n\t\t\t\t\t\t\t\t\taria-invalid={this.accInfo.ariaInvalid}\n\t\t\t\t\t\t\t\t\taria-haspopup={this.accInfo.ariaHasPopup}\n\t\t\t\t\t\t\t\t\taria-describedby={this.accInfo.ariaDescribedBy}\n\t\t\t\t\t\t\t\t\taria-roledescription={this.accInfo.ariaRoledescription}\n\t\t\t\t\t\t\t\t\taria-autocomplete={this.accInfo.ariaAutoComplete}\n\t\t\t\t\t\t\t\t\taria-expanded={this.accInfo.ariaExpanded}\n\t\t\t\t\t\t\t\t\taria-label={this.ariaLabel}\n\t\t\t\t\t\t\t\t\taria-required={this.required}\n\t\t\t\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\t\t\t\tdata-sap-focus-ref\n\t\t\t\t\t\t\t\t\tstep={this.nativeInputAttributes.step}\n\t\t\t\t\t\t\t\t\tmin={this.nativeInputAttributes.min}\n\t\t\t\t\t\t\t\t\tmax={this.nativeInputAttributes.max}\n\t\t\t\t\t\t\t\t\tonInput={this._handleNativeInput}\n\t\t\t\t\t\t\t\t\tonChange={this._handleChange}\n\t\t\t\t\t\t\t\t\tonSelect={this._handleSelect}\n\t\t\t\t\t\t\t\t\tonKeyDown={this._onkeydown}\n\t\t\t\t\t\t\t\t\tonKeyUp={this._onkeyup}\n\t\t\t\t\t\t\t\t\tonClick={this._click}\n\t\t\t\t\t\t\t\t\tonFocusIn={this.innerFocusIn}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{this._effectiveShowClearIcon &&\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t\tpart=\"clear-icon-wrapper\"\n\t\t\t\t\t\t\t\t\t\tclass=\"ui5-input-clear-icon-wrapper inputIcon\"\n\t\t\t\t\t\t\t\t\t\tonClick={this._clear}\n\t\t\t\t\t\t\t\t\t\tonMouseDown={this._iconMouseDown}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\tpart=\"clear-icon\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ui5-input-clear-icon\"\n\t\t\t\t\t\t\t\t\t\t\tname={\"decline\"}\n\t\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t\t\taccessibleName={this.clearIconAccessibleName}>\n\t\t\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.icon.length > 0 &&\n\t\t\t\t\t\t\t\t\t<div class=\"ui5-input-icon-root\"\n\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<slot name=\"icon\"></slot>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t<div class=\"ui5-input-value-state-icon\">\n\t\t\t\t\t\t\t\t\t{this._valueStateInputIcon}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{ postContent.call(this) }\n\n\t\t\t\t\t\t\t\t{this.accInfo.ariaDescription &&\n\t\t\t\t\t\t\t\t\t<span id=\"descr\" class=\"ui5-hidden-text\">{this.accInfo.ariaDescription}</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.accInfo.accessibleDescription &&\n\t\t\t\t\t\t\t\t\t<span id=\"accessibleDescription\" class=\"ui5-hidden-text\">{this.accInfo.accessibleDescription}</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.linksInAriaValueStateHiddenText.length > 0 &&\n\t\t\t\t\t\t\t\t\t<span id=\"hiddenText-value-state-link-shortcut\" class=\"ui5-hidden-text\">{this.valueStateLinksShortcutsTextAcc}</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.hasValueState &&\n\t\t\t\t\t\t\t\t\t<span id=\"valueStateDesc\" class=\"ui5-hidden-text\">{this.ariaValueStateHiddenText}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</BusyIndicator>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tid=\"ai-menu-btn\"\n\t\t\t\t\t\thidden={(!this.isFocused && !this.loading) || !this.hasActions || this.readonly}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tclass={`ui5-input-ai-button ui5-ai-input-button-wrapper ${this._isMenuOpen && \"ui5-input-button-menu-open\"} ${this.loading && \"ui5-ai-input-loading\"}`}\n\t\t\t\t\t\tdesign=\"Transparent\"\n\t\t\t\t\t\ticon={this.loading ? \"stop\" : \"ai\"}\n\t\t\t\t\t\tonClick={this._handleAIButtonClick}\n\t\t\t\t\t\tonKeyDown={this._handleAIButtonKeydown}\n\t\t\t\t\t\taria-keyshortcuts={ this.loading ? \"Esc\" : \"Shift + F4\" }\n\t\t\t\t\t\ttooltip={this.loading ? this.stopGeneratingTooltip : this.ariaLabel}\n\t\t\t\t\t\taccessibilityAttributes={{ hasPopup: this.loading ? \"false\" : \"menu\" }}\n\t\t\t\t\t/>\n\t\t\t\t\t<Menu\n\t\t\t\t\t\tonItemClick={this._onMenuIconClick}\n\t\t\t\t\t\tonBeforeOpen={() => { this._isMenuOpen = true; }}\n\t\t\t\t\t\tonBeforeClose={() => { this._isMenuOpen = false; }}\n\t\t\t\t\t\tonClose={() => { if (!this.loading) { this.focus(); } }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t\t\t{this.totalVersions > 1 && Versioning.call(this)}\n\t\t\t\t\t</Menu>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nfunction Versioning(this: Input) {\n\treturn (\n\t\t<>\n\t\t\t<MenuSeparator />\n\t\t\t<MenuItem\n\t\t\t\ttype=\"Inactive\"\n\t\t\t\tclass=\"ui5-ai-versioning-menu-footer\"\n\t\t\t\ttext={`${this.currentVersion} / ${this.totalVersions}`}\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tid=\"arrow-left\"\n\t\t\t\t\tclass=\"versioning-button\"\n\t\t\t\t\tslot=\"endContent\"\n\t\t\t\t\tdesign=\"Transparent\"\n\t\t\t\t\ticon=\"navigation-left-arrow\"\n\t\t\t\t\ttooltip={this.previousButtonAccessibleName}\n\t\t\t\t\taccessibleName={this.previousButtonAccessibleName}\n\t\t\t\t\taria-keyshortcut=\"Shift+Ctrl+Z\"\n\t\t\t\t\tdisabled={this.currentVersion <= 1}\n\t\t\t\t\tonClick={this._handlePreviousButtonClick}\n\t\t\t\t\tdata-ui5-versioning-button=\"previous\"\n\t\t\t\t>\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tid=\"arrow-right\"\n\t\t\t\t\tclass=\"versioning-button\"\n\t\t\t\t\tslot=\"endContent\"\n\t\t\t\t\tdesign=\"Transparent\"\n\t\t\t\t\ticon=\"navigation-right-arrow\"\n\t\t\t\t\ttooltip={this.nextButtonAccessibleName}\n\t\t\t\t\taccessibleName={this.nextButtonAccessibleName}\n\t\t\t\t\taria-keyshortcut=\"Shift+Ctrl+Y\"\n\t\t\t\t\tdisabled={this.currentVersion >= this.totalVersions}\n\t\t\t\t\tonClick={this._handleNextButtonClick}\n\t\t\t\t\tdata-ui5-versioning-button=\"next\"\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t</>\n\t);\n}\n\nfunction defaultPreContent() { }\n\nfunction defaultPostContent() {}\n"]}
@@ -4,6 +4,7 @@ import type ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
4
4
  import type { IInputSuggestionItem } from "@ui5/webcomponents/dist/Input.js";
5
5
  import type Input from "@ui5/webcomponents/dist/Input.js";
6
6
  import type { UI5CustomEvent } from "@ui5/webcomponents-base/dist/index.js";
7
+ import type { Slot, DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
7
8
  /**
8
9
  * @class
9
10
  * ### Overview
@@ -20,6 +21,7 @@ import type { UI5CustomEvent } from "@ui5/webcomponents-base/dist/index.js";
20
21
  * @public
21
22
  * @extends UI5Element
22
23
  * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
24
+ * Furthermore, the package supports **Horizon** themes only.
23
25
  */
24
26
  declare class PromptInput extends UI5Element {
25
27
  eventDetails: {
@@ -122,7 +124,7 @@ declare class PromptInput extends UI5Element {
122
124
  *
123
125
  * @public
124
126
  */
125
- suggestionItems: Array<IInputSuggestionItem>;
127
+ suggestionItems: DefaultSlot<IInputSuggestionItem>;
126
128
  /**
127
129
  * Defines the value state message that will be displayed as pop up under the component.
128
130
  * The value state message slot should contain only one root element.
@@ -135,7 +137,7 @@ declare class PromptInput extends UI5Element {
135
137
  * @since 2.0.0
136
138
  * @public
137
139
  */
138
- valueStateMessage: Array<HTMLElement>;
140
+ valueStateMessage: Slot<HTMLElement>;
139
141
  static i18nBundle: I18nBundle;
140
142
  _onkeydown(e: KeyboardEvent): void;
141
143
  _onInnerInput(e: UI5CustomEvent<Input, "input">): void;
@@ -9,7 +9,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
9
9
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
10
10
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
11
11
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
- import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
12
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
13
13
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
14
14
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
15
15
  import { isEnter, } from "@ui5/webcomponents-base/dist/Keys.js";
@@ -33,6 +33,7 @@ import PromptInputCss from "./generated/themes/PromptInput.css.js";
33
33
  * @public
34
34
  * @extends UI5Element
35
35
  * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
36
+ * Furthermore, the package supports **Horizon** themes only.
36
37
  */
37
38
  let PromptInput = PromptInput_1 = class PromptInput extends UI5Element {
38
39
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"PromptInput.js","sourceRoot":"","sources":["../src/PromptInput.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport type { IInputSuggestionItem } from \"@ui5/webcomponents/dist/Input.js\";\nimport type Input from \"@ui5/webcomponents/dist/Input.js\";\nimport {\n\tisEnter,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport {\n\tPROMPT_INPUT_CHARACTERS_LEFT,\n\tPROMPT_INPUT_CHARACTERS_EXCEEDED,\n} from \"./generated/i18n/i18n-defaults.js\";\n\nimport PromptInputTemplate from \"./PromptInputTemplate.js\";\n\n// Styles\nimport PromptInputCss from \"./generated/themes/PromptInput.css.js\";\nimport type { UI5CustomEvent } from \"@ui5/webcomponents-base/dist/index.js\";\n\n/**\n * @class\n * ### Overview\n *\n * The `ui5-ai-prompt-input` component allows the user to write custom instructions in natural language, so that AI is guided to generate content tailored to user needs.\n *\n * **Note:** The web component is in an experimental state\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/PromptInput.js\"`\n * @class\n * @constructor\n * @public\n * @extends UI5Element\n * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.\n */\n@customElement({\n\ttag: \"ui5-ai-prompt-input\",\n\trenderer: jsxRenderer,\n\tstyles: PromptInputCss,\n\ttemplate: PromptInputTemplate,\n})\n\n/**\n * Fired when the input operation has finished by pressing Enter\n * or AI button is clicked.\n *\n * @since 2.0.0\n * @public\n */\n@event(\"submit\", {\n\tbubbles: true,\n})\n\n/**\n * Fired when the value of the component changes at each keystroke,\n * and when a suggestion item has been selected.\n *\n * @since 2.0.0\n * @public\n */\n@event(\"input\", {\n\tbubbles: true,\n})\n\n/**\n * Fired when the input operation has finished by pressing Enter\n * or on focusout.\n *\n * @since 2.0.0\n * @public\n */\n@event(\"change\", {\n\tbubbles: true,\n})\nclass PromptInput extends UI5Element {\n\teventDetails!: {\n\t\tsubmit: void;\n\t\tinput: void;\n\t\tchange: void;\n\t}\n\t/**\n\t * Defines the value of the component.\n\t *\n\t * @default \"\"\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tvalue = \"\";\n\n\t/**\n\t * Defines a short hint intended to aid the user with data entry when the\n\t * component has no value.\n\t * @default undefined\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tplaceholder?: string;\n\n\t/**\n\t * Defines the label of the input field.\n\t *\n\t * @default undefined\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tlabel?: string;\n\n\t/**\n\t * Defines whether the clear icon of the input will be shown.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\tshowClearIcon = false;\n\n\t/**\n\t * Determines whether the characters exceeding the maximum allowed character count are visible\n\t * in the component.\n\t *\n\t * If set to `false`, the user is not allowed to enter more characters than what is set in the\n\t * `maxlength` property.\n\t * If set to `true` the characters exceeding the `maxlength` value are selected on\n\t * paste and the counter below the component displays their number.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\tshowExceededText = false;\n\n\t/**\n\t * Defines whether the component is in disabled state.\n\t *\n\t * **Note:** A disabled component is completely noninteractive.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\tdisabled = false;\n\n\t/**\n\t * Defines whether the component is read-only.\n\t *\n\t * **Note:** A read-only component is not editable,\n\t * but still provides visual feedback upon user interaction.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\treadonly = false;\n\n\t/**\n\t * Sets the maximum number of characters available in the input field.\n\t *\n\t * @default undefined\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tmaxlength?: number;\n\n\t/**\n\t * Defines the value state of the component.\n\t * @default \"None\"\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tvalueState: `${ValueState}` = \"None\"\n\n\t/**\n\t * Defines whether the component should show suggestions, if such are present.\n\t *\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tshowSuggestions = false;\n\n\t/**\n\t * Defines the suggestion items.\n\t *\n\t * **Note:** The suggestions would be displayed only if the `showSuggestions`\n\t * property is set to `true`.\n\t *\n\t * **Note:** The `<ui5-suggestion-item>`, `<ui5-suggestion-item-group>` and `ui5-suggestion-item-custom` are recommended to be used as suggestion items.\n\t *\n\t * @public\n\t */\n\t\t@slot({ type: HTMLElement, \"default\": true })\n\t\tsuggestionItems!: Array<IInputSuggestionItem>;\n\n\t/**\n\t * Defines the value state message that will be displayed as pop up under the component.\n\t * The value state message slot should contain only one root element.\n\t *\n\t * **Note:** If not specified, a default text (in the respective language) will be displayed.\n\t *\n\t * **Note:** The `valueStateMessage` would be displayed,\n\t * when the component is in `Information`, `Critical` or `Negative` value state.\n\t *\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\tinvalidateOnChildChange: true,\n\t})\n\tvalueStateMessage!: Array<HTMLElement>;\n\n\t@i18n(\"@ui5/webcomponents-ai\")\n\tstatic i18nBundle: I18nBundle;\n\n\t_onkeydown(e: KeyboardEvent) {\n\t\tif (isEnter(e)) {\n\t\t\tthis.fireDecoratorEvent(\"submit\");\n\t\t}\n\t}\n\n\t_onInnerInput(e: UI5CustomEvent<Input, \"input\">) {\n\t\tthis.value = e.currentTarget.value;\n\n\t\tthis.fireDecoratorEvent(\"input\");\n\t}\n\n\t_onInnerChange() {\n\t\tthis.fireDecoratorEvent(\"change\");\n\t}\n\n\t_onButtonClick() {\n\t\tthis.fireDecoratorEvent(\"submit\");\n\t}\n\n\t_onTypeAhead(e: UI5CustomEvent<Input, \"type-ahead\">): void {\n\t\tthis.value = e.currentTarget.value;\n\t}\n\n\tget _exceededText() {\n\t\tif (this.showExceededText) {\n\t\t\tlet leftCharactersCount;\n\t\t\tconst maxLength = this.maxlength;\n\n\t\t\tif (maxLength !== undefined) {\n\t\t\t\tleftCharactersCount = maxLength - this.value.length;\n\n\t\t\t\tif (leftCharactersCount >= 0) {\n\t\t\t\t\treturn PromptInput.i18nBundle.getText(PROMPT_INPUT_CHARACTERS_LEFT, leftCharactersCount);\n\t\t\t\t}\n\n\t\t\t\treturn PromptInput.i18nBundle.getText(PROMPT_INPUT_CHARACTERS_EXCEEDED, Math.abs(leftCharactersCount));\n\t\t\t}\n\t\t}\n\t}\n\n\tget _maxLenght() {\n\t\treturn this.maxlength || undefined;\n\t}\n\n\tget _submitButtonDisabled() {\n\t\treturn (this.value.length <= 0) || this.disabled || this.readonly;\n\t}\n}\n\nPromptInput.define();\n\nexport default PromptInput;\n"]}
1
+ {"version":3,"file":"PromptInput.js","sourceRoot":"","sources":["../src/PromptInput.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport type { IInputSuggestionItem } from \"@ui5/webcomponents/dist/Input.js\";\nimport type Input from \"@ui5/webcomponents/dist/Input.js\";\nimport {\n\tisEnter,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport {\n\tPROMPT_INPUT_CHARACTERS_LEFT,\n\tPROMPT_INPUT_CHARACTERS_EXCEEDED,\n} from \"./generated/i18n/i18n-defaults.js\";\n\nimport PromptInputTemplate from \"./PromptInputTemplate.js\";\n\n// Styles\nimport PromptInputCss from \"./generated/themes/PromptInput.css.js\";\nimport type { UI5CustomEvent } from \"@ui5/webcomponents-base/dist/index.js\";\nimport type { Slot, DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\n\n/**\n * @class\n * ### Overview\n *\n * The `ui5-ai-prompt-input` component allows the user to write custom instructions in natural language, so that AI is guided to generate content tailored to user needs.\n *\n * **Note:** The web component is in an experimental state\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/PromptInput.js\"`\n * @class\n * @constructor\n * @public\n * @extends UI5Element\n * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.\n * Furthermore, the package supports **Horizon** themes only.\n */\n@customElement({\n\ttag: \"ui5-ai-prompt-input\",\n\trenderer: jsxRenderer,\n\tstyles: PromptInputCss,\n\ttemplate: PromptInputTemplate,\n})\n\n/**\n * Fired when the input operation has finished by pressing Enter\n * or AI button is clicked.\n *\n * @since 2.0.0\n * @public\n */\n@event(\"submit\", {\n\tbubbles: true,\n})\n\n/**\n * Fired when the value of the component changes at each keystroke,\n * and when a suggestion item has been selected.\n *\n * @since 2.0.0\n * @public\n */\n@event(\"input\", {\n\tbubbles: true,\n})\n\n/**\n * Fired when the input operation has finished by pressing Enter\n * or on focusout.\n *\n * @since 2.0.0\n * @public\n */\n@event(\"change\", {\n\tbubbles: true,\n})\nclass PromptInput extends UI5Element {\n\teventDetails!: {\n\t\tsubmit: void;\n\t\tinput: void;\n\t\tchange: void;\n\t}\n\t/**\n\t * Defines the value of the component.\n\t *\n\t * @default \"\"\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tvalue = \"\";\n\n\t/**\n\t * Defines a short hint intended to aid the user with data entry when the\n\t * component has no value.\n\t * @default undefined\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tplaceholder?: string;\n\n\t/**\n\t * Defines the label of the input field.\n\t *\n\t * @default undefined\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tlabel?: string;\n\n\t/**\n\t * Defines whether the clear icon of the input will be shown.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\tshowClearIcon = false;\n\n\t/**\n\t * Determines whether the characters exceeding the maximum allowed character count are visible\n\t * in the component.\n\t *\n\t * If set to `false`, the user is not allowed to enter more characters than what is set in the\n\t * `maxlength` property.\n\t * If set to `true` the characters exceeding the `maxlength` value are selected on\n\t * paste and the counter below the component displays their number.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\tshowExceededText = false;\n\n\t/**\n\t * Defines whether the component is in disabled state.\n\t *\n\t * **Note:** A disabled component is completely noninteractive.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\tdisabled = false;\n\n\t/**\n\t * Defines whether the component is read-only.\n\t *\n\t * **Note:** A read-only component is not editable,\n\t * but still provides visual feedback upon user interaction.\n\t * @default false\n\t * @public\n\t * @since 2.0.0\n\t */\n\t@property({ type: Boolean })\n\treadonly = false;\n\n\t/**\n\t * Sets the maximum number of characters available in the input field.\n\t *\n\t * @default undefined\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tmaxlength?: number;\n\n\t/**\n\t * Defines the value state of the component.\n\t * @default \"None\"\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@property()\n\tvalueState: `${ValueState}` = \"None\"\n\n\t/**\n\t * Defines whether the component should show suggestions, if such are present.\n\t *\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tshowSuggestions = false;\n\n\t/**\n\t * Defines the suggestion items.\n\t *\n\t * **Note:** The suggestions would be displayed only if the `showSuggestions`\n\t * property is set to `true`.\n\t *\n\t * **Note:** The `<ui5-suggestion-item>`, `<ui5-suggestion-item-group>` and `ui5-suggestion-item-custom` are recommended to be used as suggestion items.\n\t *\n\t * @public\n\t */\n\t\t@slot({ type: HTMLElement, \"default\": true })\n\t\tsuggestionItems!: DefaultSlot<IInputSuggestionItem>;\n\n\t/**\n\t * Defines the value state message that will be displayed as pop up under the component.\n\t * The value state message slot should contain only one root element.\n\t *\n\t * **Note:** If not specified, a default text (in the respective language) will be displayed.\n\t *\n\t * **Note:** The `valueStateMessage` would be displayed,\n\t * when the component is in `Information`, `Critical` or `Negative` value state.\n\t *\n\t * @since 2.0.0\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\tinvalidateOnChildChange: true,\n\t})\n\tvalueStateMessage!: Slot<HTMLElement>;\n\n\t@i18n(\"@ui5/webcomponents-ai\")\n\tstatic i18nBundle: I18nBundle;\n\n\t_onkeydown(e: KeyboardEvent) {\n\t\tif (isEnter(e)) {\n\t\t\tthis.fireDecoratorEvent(\"submit\");\n\t\t}\n\t}\n\n\t_onInnerInput(e: UI5CustomEvent<Input, \"input\">) {\n\t\tthis.value = e.currentTarget.value;\n\n\t\tthis.fireDecoratorEvent(\"input\");\n\t}\n\n\t_onInnerChange() {\n\t\tthis.fireDecoratorEvent(\"change\");\n\t}\n\n\t_onButtonClick() {\n\t\tthis.fireDecoratorEvent(\"submit\");\n\t}\n\n\t_onTypeAhead(e: UI5CustomEvent<Input, \"type-ahead\">): void {\n\t\tthis.value = e.currentTarget.value;\n\t}\n\n\tget _exceededText() {\n\t\tif (this.showExceededText) {\n\t\t\tlet leftCharactersCount;\n\t\t\tconst maxLength = this.maxlength;\n\n\t\t\tif (maxLength !== undefined) {\n\t\t\t\tleftCharactersCount = maxLength - this.value.length;\n\n\t\t\t\tif (leftCharactersCount >= 0) {\n\t\t\t\t\treturn PromptInput.i18nBundle.getText(PROMPT_INPUT_CHARACTERS_LEFT, leftCharactersCount);\n\t\t\t\t}\n\n\t\t\t\treturn PromptInput.i18nBundle.getText(PROMPT_INPUT_CHARACTERS_EXCEEDED, Math.abs(leftCharactersCount));\n\t\t\t}\n\t\t}\n\t}\n\n\tget _maxLenght() {\n\t\treturn this.maxlength || undefined;\n\t}\n\n\tget _submitButtonDisabled() {\n\t\treturn (this.value.length <= 0) || this.disabled || this.readonly;\n\t}\n}\n\nPromptInput.define();\n\nexport default PromptInput;\n"]}
@@ -0,0 +1,125 @@
1
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
2
+ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
3
+ import type { Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
4
+ type TextAreaVersionChangeEventDetail = {
5
+ backwards: boolean;
6
+ };
7
+ /**
8
+ * @class
9
+ *
10
+ * ### Overview
11
+ *
12
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
13
+ * It provides AI-powered text generation, editing suggestions, and version management functionality.
14
+ *
15
+ * ### Structure
16
+ * The `ui5-ai-textarea` consists of the following elements:
17
+ * - TextArea: The main text input area with all standard textarea functionality
18
+ * - WritingAssistant: Dedicated toolbar containing:
19
+ * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions
20
+ * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting
21
+ *
22
+ * ### ES6 Module Import
23
+ *
24
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
25
+ *
26
+ * @constructor
27
+ * @extends BaseTextArea
28
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
29
+ * Furthermore, the package supports **Horizon** themes only.
30
+ * @since 2.16.0
31
+ * @public
32
+ * @slot {HTMLElement} menu Defines a slot for `ui5-menu` integration. This slot allows you to pass a `ui5-menu` instance that will be associated with the assistant.
33
+ */
34
+ declare class TextArea extends BaseTextArea {
35
+ eventDetails: BaseTextArea["eventDetails"] & {
36
+ "version-change": TextAreaVersionChangeEventDetail;
37
+ "stop-generation": void;
38
+ };
39
+ private _keydownHandler?;
40
+ private _menuFocusinHandler?;
41
+ private _menuFocusoutHandler?;
42
+ /**
43
+ * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.
44
+ *
45
+ * @default false
46
+ * @public
47
+ */
48
+ loading: boolean;
49
+ /**
50
+ * Defines the prompt description of the current action.
51
+ *
52
+ * @default ""
53
+ * @public
54
+ */
55
+ promptDescription: string;
56
+ /**
57
+ * Indicates the index of the currently displayed version.
58
+ *
59
+ *
60
+ * @default 0
61
+ * @public
62
+ */
63
+ currentVersion: number;
64
+ /**
65
+ * Indicates the total number of result versions available.
66
+ *
67
+ * Notes:
68
+ * Versioning is hidden if the value is `0`
69
+ *
70
+ * @default 0
71
+ * @public
72
+ */
73
+ totalVersions: number;
74
+ focused: boolean;
75
+ menu: Slot<HTMLElement>;
76
+ static i18nBundle: I18nBundle;
77
+ static onDefine(): Promise<void>;
78
+ /**
79
+ * Handles the click event for the "Previous Version" button.
80
+ * Updates the current version index and syncs content.
81
+ */
82
+ _handlePreviousVersionClick(): void;
83
+ /**
84
+ * Handles the click event for the "Next Version" button.
85
+ * Updates the current version index and syncs content.
86
+ */
87
+ _handleNextVersionClick(): void;
88
+ /**
89
+ * Handles the version change event from the writing assistant.
90
+ */
91
+ _handleVersionChange(e: CustomEvent<{
92
+ backwards: boolean;
93
+ }>): void;
94
+ /**
95
+ * Handles keydown events for keyboard shortcuts.
96
+ * @private
97
+ */
98
+ _handleKeydown(keyboardEvent: KeyboardEvent): void;
99
+ /**
100
+ * Overrides the parent's onAfterRendering to add keydown handler.
101
+ * @private
102
+ */
103
+ onAfterRendering(): void;
104
+ _onfocusin(): void;
105
+ _onfocusout(e: FocusEvent): void;
106
+ /**
107
+ * Handles the generate click event from the AI toolbar.
108
+ * Opens the AI menu and sets the opener element.
109
+ *
110
+ * @private
111
+ */
112
+ _handleAIButtonClick: (e: CustomEvent<{
113
+ clickTarget?: HTMLElement;
114
+ }>) => void;
115
+ get _ariaLabel(): string;
116
+ /**
117
+ * Handles the stop generation event from the AI toolbar.
118
+ * Fires the stop-generation event to notify listeners.
119
+ *
120
+ * @private
121
+ */
122
+ handleStopGeneration: () => void;
123
+ }
124
+ export type { TextAreaVersionChangeEventDetail };
125
+ export default TextArea;