@ui5/webcomponents-ai 0.0.0-9261ac932 → 0.0.0-95afb1087

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 (249) hide show
  1. package/.ui5-cem-aliases.json +4 -0
  2. package/CHANGELOG.md +724 -0
  3. package/LICENSE.txt +201 -0
  4. package/README.md +15 -11
  5. package/cypress.config.js +3 -0
  6. package/dist/.tsbuildinfo +1 -0
  7. package/dist/Assets-fetch.d.ts +3 -0
  8. package/dist/Assets-fetch.js +6 -0
  9. package/dist/Assets-fetch.js.map +1 -0
  10. package/dist/Assets-node.d.ts +14 -0
  11. package/dist/Assets-node.js +17 -0
  12. package/dist/Assets-node.js.map +1 -0
  13. package/dist/Button.d.ts +83 -32
  14. package/dist/Button.js +173 -82
  15. package/dist/Button.js.map +1 -1
  16. package/dist/ButtonState.d.ts +10 -3
  17. package/dist/ButtonState.js +16 -3
  18. package/dist/ButtonState.js.map +1 -1
  19. package/dist/ButtonTemplate.d.ts +2 -0
  20. package/dist/ButtonTemplate.js +6 -0
  21. package/dist/ButtonTemplate.js.map +1 -0
  22. package/dist/Input.d.ts +143 -0
  23. package/dist/Input.js +288 -0
  24. package/dist/Input.js.map +1 -0
  25. package/dist/InputTemplate.d.ts +10 -0
  26. package/dist/InputTemplate.js +28 -0
  27. package/dist/InputTemplate.js.map +1 -0
  28. package/dist/PromptInput.d.ts +11 -12
  29. package/dist/PromptInput.js +7 -18
  30. package/dist/PromptInput.js.map +1 -1
  31. package/dist/PromptInputTemplate.d.ts +2 -0
  32. package/dist/PromptInputTemplate.js +12 -0
  33. package/dist/PromptInputTemplate.js.map +1 -0
  34. package/dist/TextArea.d.ts +118 -0
  35. package/dist/TextArea.js +230 -0
  36. package/dist/TextArea.js.map +1 -0
  37. package/dist/TextAreaTemplate.d.ts +2 -0
  38. package/dist/TextAreaTemplate.js +13 -0
  39. package/dist/TextAreaTemplate.js.map +1 -0
  40. package/dist/ToolbarLabel.d.ts +39 -0
  41. package/dist/ToolbarLabel.js +67 -0
  42. package/dist/ToolbarLabel.js.map +1 -0
  43. package/dist/ToolbarLabelTemplate.d.ts +2 -0
  44. package/dist/ToolbarLabelTemplate.js +5 -0
  45. package/dist/ToolbarLabelTemplate.js.map +1 -0
  46. package/dist/Versioning.d.ts +95 -0
  47. package/dist/Versioning.js +187 -0
  48. package/dist/Versioning.js.map +1 -0
  49. package/dist/VersioningTemplate.d.ts +4 -0
  50. package/dist/VersioningTemplate.js +9 -0
  51. package/dist/VersioningTemplate.js.map +1 -0
  52. package/dist/WritingAssistant.d.ts +100 -0
  53. package/dist/WritingAssistant.js +197 -0
  54. package/dist/WritingAssistant.js.map +1 -0
  55. package/dist/WritingAssistantTemplate.d.ts +2 -0
  56. package/dist/WritingAssistantTemplate.js +12 -0
  57. package/dist/WritingAssistantTemplate.js.map +1 -0
  58. package/dist/bundle.esm.js +2 -0
  59. package/dist/bundle.esm.js.map +1 -1
  60. package/dist/css/themes/Button.css +1 -1
  61. package/dist/css/themes/Input.css +1 -0
  62. package/dist/css/themes/PromptInput.css +1 -1
  63. package/dist/css/themes/TextArea.css +1 -0
  64. package/dist/css/themes/Versioning.css +1 -0
  65. package/dist/css/themes/WritingAssistant.css +1 -0
  66. package/dist/custom-elements-internal.json +487 -8
  67. package/dist/custom-elements.json +420 -7
  68. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  69. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  70. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  71. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
  72. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  73. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  74. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  75. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  76. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  77. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  78. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  79. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  80. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  81. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  82. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  83. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  84. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  85. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  86. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  87. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  88. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  89. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  90. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  91. package/dist/generated/assets/i18n/messagebundle_id.json +1 -0
  92. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  93. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  94. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  95. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  96. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  97. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  98. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  99. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  105. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  110. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  111. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  112. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  113. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  115. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  118. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  119. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  120. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  121. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  122. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  123. package/dist/generated/i18n/i18n-defaults.d.ts +15 -1
  124. package/dist/generated/i18n/i18n-defaults.js +15 -1
  125. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  126. package/dist/generated/json-imports/Themes-fetch.js +1 -1
  127. package/dist/generated/json-imports/Themes-fetch.js.map +1 -1
  128. package/dist/generated/json-imports/Themes-node.d.ts +1 -0
  129. package/dist/generated/json-imports/Themes-node.js +21 -0
  130. package/dist/generated/json-imports/Themes-node.js.map +1 -0
  131. package/dist/generated/json-imports/Themes.js +1 -1
  132. package/dist/generated/json-imports/Themes.js.map +1 -1
  133. package/dist/generated/json-imports/i18n-fetch.js +3 -1
  134. package/dist/generated/json-imports/i18n-fetch.js.map +1 -1
  135. package/dist/generated/json-imports/i18n-node.d.ts +1 -0
  136. package/dist/generated/json-imports/i18n-node.js +120 -0
  137. package/dist/generated/json-imports/i18n-node.js.map +1 -0
  138. package/dist/generated/json-imports/i18n.js +3 -1
  139. package/dist/generated/json-imports/i18n.js.map +1 -1
  140. package/dist/generated/themes/Button.css.d.ts +2 -3
  141. package/dist/generated/themes/Button.css.js +4 -5
  142. package/dist/generated/themes/Button.css.js.map +1 -1
  143. package/dist/generated/themes/Input.css.d.ts +2 -0
  144. package/dist/generated/themes/Input.css.js +8 -0
  145. package/dist/generated/themes/Input.css.js.map +1 -0
  146. package/dist/generated/themes/PromptInput.css.d.ts +2 -3
  147. package/dist/generated/themes/PromptInput.css.js +4 -5
  148. package/dist/generated/themes/PromptInput.css.js.map +1 -1
  149. package/dist/generated/themes/TextArea.css.d.ts +2 -0
  150. package/dist/generated/themes/TextArea.css.js +8 -0
  151. package/dist/generated/themes/TextArea.css.js.map +1 -0
  152. package/dist/generated/themes/Versioning.css.d.ts +2 -0
  153. package/dist/generated/themes/Versioning.css.js +8 -0
  154. package/dist/generated/themes/Versioning.css.js.map +1 -0
  155. package/dist/generated/themes/WritingAssistant.css.d.ts +2 -0
  156. package/dist/generated/themes/WritingAssistant.css.js +8 -0
  157. package/dist/generated/themes/WritingAssistant.css.js.map +1 -0
  158. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +2 -3
  159. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -2
  160. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  161. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +2 -3
  162. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -2
  163. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  164. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +2 -3
  165. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -2
  166. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  167. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +2 -3
  168. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -2
  169. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  170. package/dist/vscode.html-custom-data.json +68 -4
  171. package/dist/web-types.json +209 -8
  172. package/package-scripts.cjs +3 -0
  173. package/package.json +23 -18
  174. package/src/ButtonTemplate.tsx +27 -0
  175. package/src/InputTemplate.tsx +197 -0
  176. package/src/PromptInputTemplate.tsx +49 -0
  177. package/src/TextArea.css +45 -0
  178. package/src/TextAreaTemplate.tsx +90 -0
  179. package/src/ToolbarLabelTemplate.tsx +9 -0
  180. package/src/VersioningTemplate.tsx +34 -0
  181. package/src/WritingAssistantTemplate.tsx +49 -0
  182. package/src/i18n/messagebundle.properties +43 -1
  183. package/src/i18n/messagebundle_ar.properties +20 -0
  184. package/src/i18n/messagebundle_bg.properties +20 -0
  185. package/src/i18n/messagebundle_ca.properties +20 -0
  186. package/src/i18n/messagebundle_cnr.properties +20 -0
  187. package/src/i18n/messagebundle_cs.properties +20 -0
  188. package/src/i18n/messagebundle_cy.properties +20 -0
  189. package/src/i18n/messagebundle_da.properties +20 -0
  190. package/src/i18n/messagebundle_de.properties +20 -0
  191. package/src/i18n/messagebundle_el.properties +20 -0
  192. package/src/i18n/messagebundle_en.properties +20 -0
  193. package/src/i18n/messagebundle_en_GB.properties +20 -0
  194. package/src/i18n/messagebundle_en_US_sappsd.properties +28 -0
  195. package/src/i18n/messagebundle_en_US_saprigi.properties +28 -0
  196. package/src/i18n/messagebundle_en_US_saptrc.properties +30 -2
  197. package/src/i18n/messagebundle_es.properties +20 -0
  198. package/src/i18n/messagebundle_es_MX.properties +21 -1
  199. package/src/i18n/messagebundle_et.properties +20 -0
  200. package/src/i18n/messagebundle_fi.properties +20 -0
  201. package/src/i18n/messagebundle_fr.properties +20 -0
  202. package/src/i18n/messagebundle_fr_CA.properties +20 -0
  203. package/src/i18n/messagebundle_hi.properties +20 -0
  204. package/src/i18n/messagebundle_hr.properties +22 -2
  205. package/src/i18n/messagebundle_hu.properties +20 -0
  206. package/src/i18n/messagebundle_id.properties +20 -0
  207. package/src/i18n/messagebundle_it.properties +20 -0
  208. package/src/i18n/messagebundle_iw.properties +20 -0
  209. package/src/i18n/messagebundle_ja.properties +20 -0
  210. package/src/i18n/messagebundle_kk.properties +20 -0
  211. package/src/i18n/messagebundle_ko.properties +20 -0
  212. package/src/i18n/messagebundle_lt.properties +20 -0
  213. package/src/i18n/messagebundle_lv.properties +20 -0
  214. package/src/i18n/messagebundle_mk.properties +20 -0
  215. package/src/i18n/messagebundle_ms.properties +20 -0
  216. package/src/i18n/messagebundle_nl.properties +20 -0
  217. package/src/i18n/messagebundle_no.properties +20 -0
  218. package/src/i18n/messagebundle_pl.properties +20 -0
  219. package/src/i18n/messagebundle_pt.properties +20 -0
  220. package/src/i18n/messagebundle_pt_PT.properties +20 -0
  221. package/src/i18n/messagebundle_ro.properties +20 -0
  222. package/src/i18n/messagebundle_ru.properties +20 -0
  223. package/src/i18n/messagebundle_sh.properties +20 -0
  224. package/src/i18n/messagebundle_sk.properties +20 -0
  225. package/src/i18n/messagebundle_sl.properties +20 -0
  226. package/src/i18n/messagebundle_sr.properties +20 -0
  227. package/src/i18n/messagebundle_sv.properties +20 -0
  228. package/src/i18n/messagebundle_th.properties +22 -2
  229. package/src/i18n/messagebundle_tr.properties +20 -0
  230. package/src/i18n/messagebundle_uk.properties +20 -0
  231. package/src/i18n/messagebundle_vi.properties +20 -0
  232. package/src/i18n/messagebundle_zh_CN.properties +20 -0
  233. package/src/i18n/messagebundle_zh_TW.properties +20 -0
  234. package/src/themes/Button.css +75 -21
  235. package/src/themes/Input.css +83 -0
  236. package/src/themes/PromptInput.css +5 -1
  237. package/src/themes/TextArea.css +45 -0
  238. package/src/themes/Versioning.css +20 -0
  239. package/src/themes/WritingAssistant.css +45 -0
  240. package/tsconfig.json +28 -1
  241. package/dist/generated/templates/ButtonTemplate.lit.d.ts +0 -4
  242. package/dist/generated/templates/ButtonTemplate.lit.js +0 -6
  243. package/dist/generated/templates/ButtonTemplate.lit.js.map +0 -1
  244. package/dist/generated/templates/PromptInputTemplate.lit.d.ts +0 -4
  245. package/dist/generated/templates/PromptInputTemplate.lit.js +0 -8
  246. package/dist/generated/templates/PromptInputTemplate.lit.js.map +0 -1
  247. package/dist/tsconfig.tsbuildinfo +0 -1
  248. package/src/Button.hbs +0 -17
  249. package/src/PromptInput.hbs +0 -36
@@ -1,8 +1,9 @@
1
1
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
2
2
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
3
3
  import type ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
4
- import "@ui5/webcomponents-icons/dist/paper-plane.js";
5
- import type { IInputSuggestionItem, InputEventDetail } from "@ui5/webcomponents/dist/Input.js";
4
+ import type { IInputSuggestionItem } from "@ui5/webcomponents/dist/Input.js";
5
+ import type Input from "@ui5/webcomponents/dist/Input.js";
6
+ import type { UI5CustomEvent } from "@ui5/webcomponents-base/dist/index.js";
6
7
  /**
7
8
  * @class
8
9
  * ### Overview
@@ -13,7 +14,7 @@ import type { IInputSuggestionItem, InputEventDetail } from "@ui5/webcomponents/
13
14
  *
14
15
  * ### ES6 Module Import
15
16
  *
16
- * `import "@ui5/webcomponents-ai/dist/PromptInput.js
17
+ * `import "@ui5/webcomponents-ai/dist/PromptInput.js"`
17
18
  * @class
18
19
  * @constructor
19
20
  * @public
@@ -21,6 +22,11 @@ import type { IInputSuggestionItem, InputEventDetail } from "@ui5/webcomponents/
21
22
  * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
22
23
  */
23
24
  declare class PromptInput extends UI5Element {
25
+ eventDetails: {
26
+ submit: void;
27
+ input: void;
28
+ change: void;
29
+ };
24
30
  /**
25
31
  * Defines the value of the component.
26
32
  *
@@ -102,8 +108,6 @@ declare class PromptInput extends UI5Element {
102
108
  /**
103
109
  * Defines whether the component should show suggestions, if such are present.
104
110
  *
105
- * **Note:** You need to import the `InputSuggestions` module
106
- * from `"@ui5/webcomponents/dist/features/InputSuggestions.js"` to enable this functionality.
107
111
  * @default false
108
112
  * @public
109
113
  */
@@ -116,11 +120,6 @@ declare class PromptInput extends UI5Element {
116
120
  *
117
121
  * **Note:** The `<ui5-suggestion-item>`, `<ui5-suggestion-item-group>` and `ui5-suggestion-item-custom` are recommended to be used as suggestion items.
118
122
  *
119
- * **Note:** Importing the Input Suggestions Support feature:
120
- *
121
- * `import "@ui5/webcomponents/dist/features/InputSuggestions.js";`
122
- *
123
- * automatically imports the `<ui5-suggestion-item>` and `<ui5-suggestion-item-group>` for your convenience.
124
123
  * @public
125
124
  */
126
125
  suggestionItems: Array<IInputSuggestionItem>;
@@ -139,10 +138,10 @@ declare class PromptInput extends UI5Element {
139
138
  valueStateMessage: Array<HTMLElement>;
140
139
  static i18nBundle: I18nBundle;
141
140
  _onkeydown(e: KeyboardEvent): void;
142
- _onInnerInput(e: CustomEvent<InputEventDetail>): void;
141
+ _onInnerInput(e: UI5CustomEvent<Input, "input">): void;
143
142
  _onInnerChange(): void;
144
143
  _onButtonClick(): void;
145
- _onTypeAhead(e: CustomEvent): void;
144
+ _onTypeAhead(e: UI5CustomEvent<Input, "type-ahead">): void;
146
145
  get _exceededText(): string | undefined;
147
146
  get _maxLenght(): number | undefined;
148
147
  get _submitButtonDisabled(): boolean;
@@ -8,17 +8,13 @@ var PromptInput_1;
8
8
  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
- import event from "@ui5/webcomponents-base/dist/decorators/event.js";
11
+ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
12
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
13
13
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
14
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
15
- import "@ui5/webcomponents-icons/dist/paper-plane.js";
16
- import Input from "@ui5/webcomponents/dist/Input.js";
17
- import Label from "@ui5/webcomponents/dist/Label.js";
18
- import Button from "@ui5/webcomponents/dist/Button.js";
14
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
19
15
  import { isEnter, } from "@ui5/webcomponents-base/dist/Keys.js";
20
16
  import { PROMPT_INPUT_CHARACTERS_LEFT, PROMPT_INPUT_CHARACTERS_EXCEEDED, } from "./generated/i18n/i18n-defaults.js";
21
- import PromptInputTemplate from "./generated/templates/PromptInputTemplate.lit.js";
17
+ import PromptInputTemplate from "./PromptInputTemplate.js";
22
18
  // Styles
23
19
  import PromptInputCss from "./generated/themes/PromptInput.css.js";
24
20
  /**
@@ -31,7 +27,7 @@ import PromptInputCss from "./generated/themes/PromptInput.css.js";
31
27
  *
32
28
  * ### ES6 Module Import
33
29
  *
34
- * `import "@ui5/webcomponents-ai/dist/PromptInput.js
30
+ * `import "@ui5/webcomponents-ai/dist/PromptInput.js"`
35
31
  * @class
36
32
  * @constructor
37
33
  * @public
@@ -98,8 +94,6 @@ let PromptInput = PromptInput_1 = class PromptInput extends UI5Element {
98
94
  /**
99
95
  * Defines whether the component should show suggestions, if such are present.
100
96
  *
101
- * **Note:** You need to import the `InputSuggestions` module
102
- * from `"@ui5/webcomponents/dist/features/InputSuggestions.js"` to enable this functionality.
103
97
  * @default false
104
98
  * @public
105
99
  */
@@ -111,7 +105,7 @@ let PromptInput = PromptInput_1 = class PromptInput extends UI5Element {
111
105
  }
112
106
  }
113
107
  _onInnerInput(e) {
114
- this.value = e.target.value;
108
+ this.value = e.currentTarget.value;
115
109
  this.fireDecoratorEvent("input");
116
110
  }
117
111
  _onInnerChange() {
@@ -121,7 +115,7 @@ let PromptInput = PromptInput_1 = class PromptInput extends UI5Element {
121
115
  this.fireDecoratorEvent("submit");
122
116
  }
123
117
  _onTypeAhead(e) {
124
- this.value = e.target.value;
118
+ this.value = e.currentTarget.value;
125
119
  }
126
120
  get _exceededText() {
127
121
  if (this.showExceededText) {
@@ -188,14 +182,9 @@ __decorate([
188
182
  PromptInput = PromptInput_1 = __decorate([
189
183
  customElement({
190
184
  tag: "ui5-ai-prompt-input",
191
- renderer: litRender,
185
+ renderer: jsxRenderer,
192
186
  styles: PromptInputCss,
193
187
  template: PromptInputTemplate,
194
- dependencies: [
195
- Input,
196
- Label,
197
- Button,
198
- ],
199
188
  })
200
189
  /**
201
190
  * Fired when the input operation has finished by pressing Enter
@@ -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.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type ValueState from \"@ui5/webcomponents-base/dist/types/ValueState.js\";\nimport \"@ui5/webcomponents-icons/dist/paper-plane.js\";\nimport type { IInputSuggestionItem, InputEventDetail } from \"@ui5/webcomponents/dist/Input.js\";\nimport Input from \"@ui5/webcomponents/dist/Input.js\";\nimport Label from \"@ui5/webcomponents/dist/Label.js\";\nimport Button from \"@ui5/webcomponents/dist/Button.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 \"./generated/templates/PromptInputTemplate.lit.js\";\n\n// Styles\nimport PromptInputCss from \"./generated/themes/PromptInput.css.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: litRender,\n\tstyles: PromptInputCss,\n\ttemplate: PromptInputTemplate,\n\tdependencies: [\n\t\tInput,\n\t\tLabel,\n\t\tButton,\n\t],\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\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 * **Note:** You need to import the `InputSuggestions` module\n\t * from `\"@ui5/webcomponents/dist/features/InputSuggestions.js\"` to enable this functionality.\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 * **Note:** Importing the Input Suggestions Support feature:\n\t *\n\t * `import \"@ui5/webcomponents/dist/features/InputSuggestions.js\";`\n\t *\n\t * automatically imports the `<ui5-suggestion-item>` and `<ui5-suggestion-item-group>` for your convenience.\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: CustomEvent<InputEventDetail>) {\n\t\tthis.value = (e.target as Input).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: CustomEvent): void {\n\t\tthis.value = (e.target as Input).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.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"]}
@@ -0,0 +1,2 @@
1
+ import type PromptInput from "./PromptInput.js";
2
+ export default function PromptInputTemplate(this: PromptInput): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import Label from "@ui5/webcomponents/dist/Label.js";
3
+ import Input from "@ui5/webcomponents/dist/Input.js";
4
+ import Button from "@ui5/webcomponents/dist/Button.js";
5
+ import paperPlane from "@ui5/webcomponents-icons/dist/paper-plane.js";
6
+ export default function PromptInputTemplate() {
7
+ return (_jsxs("div", { class: "ai-prompt-input-wrapper", children: [this.label &&
8
+ _jsx(Label, { for: "input", children: this.label }), _jsxs("div", { class: "ai-prompt-input-form-wrapper", children: [_jsxs("div", { class: "ai-prompt-inner-input-wrapper", children: [_jsxs(Input, { id: "input", value: this.value, placeholder: this.placeholder, valueState: this.valueState, showClearIcon: this.showClearIcon, disabled: this.disabled, readonly: this.readonly, showSuggestions: this.showSuggestions, onKeyDown: this._onkeydown, onInput: this._onInnerInput, onChange: this._onInnerChange, onTypeAhead: this._onTypeAhead, children: [_jsx("slot", {}), this.valueStateMessage.length > 0 &&
9
+ _jsx("slot", { name: "valueStateMessage", slot: "valueStateMessage" })] }), this.showExceededText &&
10
+ _jsx(Label, { class: "ai-prompt-input-counter", children: this._exceededText })] }), _jsx(Button, { icon: paperPlane, disabled: this._submitButtonDisabled, class: "ai-prompt-input-button", design: "Emphasized", onClick: this._onButtonClick })] })] }));
11
+ }
12
+ //# sourceMappingURL=PromptInputTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptInputTemplate.js","sourceRoot":"","sources":["../src/PromptInputTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,kCAAkC,CAAC;AACrD,OAAO,KAAK,MAAM,kCAAkC,CAAC;AACrD,OAAO,MAAM,MAAM,mCAAmC,CAAC;AACvD,OAAO,UAAU,MAAM,8CAA8C,CAAC;AAEtE,MAAM,CAAC,OAAO,UAAU,mBAAmB;IAC1C,OAAO,CACN,eAAK,KAAK,EAAC,yBAAyB,aAClC,IAAI,CAAC,KAAK;gBACV,KAAC,KAAK,IAAC,GAAG,EAAC,OAAO,YAAE,IAAI,CAAC,KAAK,GAAS,EAGxC,eAAK,KAAK,EAAC,8BAA8B,aACxC,eAAK,KAAK,EAAC,+BAA+B,aACzC,MAAC,KAAK,IACL,EAAE,EAAC,OAAO,EACV,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,eAAe,EAAE,IAAI,CAAC,eAAe,EACrC,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,OAAO,EAAE,IAAI,CAAC,aAAa,EAC3B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAC7B,WAAW,EAAE,IAAI,CAAC,YAAY,aAE9B,gBAAa,EACZ,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;wCACjC,eAAM,IAAI,EAAC,mBAAmB,EAAC,IAAI,EAAC,mBAAmB,GAAQ,IAEzD,EAEP,IAAI,CAAC,gBAAgB;gCACrB,KAAC,KAAK,IAAC,KAAK,EAAC,yBAAyB,YAAE,IAAI,CAAC,aAAa,GAAS,IAE/D,EACN,KAAC,MAAM,IACN,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EACpC,KAAK,EAAC,wBAAwB,EAC9B,MAAM,EAAC,YAAY,EACnB,OAAO,EAAE,IAAI,CAAC,cAAc,GACpB,IACJ,IACD,CAAC,CAAC;AACV,CAAC","sourcesContent":["import type PromptInput from \"./PromptInput.js\";\nimport Label from \"@ui5/webcomponents/dist/Label.js\";\nimport Input from \"@ui5/webcomponents/dist/Input.js\";\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport paperPlane from \"@ui5/webcomponents-icons/dist/paper-plane.js\";\n\nexport default function PromptInputTemplate(this: PromptInput) {\n\treturn (\n\t\t<div class=\"ai-prompt-input-wrapper\">\n\t\t\t{this.label &&\n\t\t\t\t<Label for=\"input\">{this.label}</Label>\n\t\t\t}\n\n\t\t\t<div class=\"ai-prompt-input-form-wrapper\">\n\t\t\t\t<div class=\"ai-prompt-inner-input-wrapper\">\n\t\t\t\t\t<Input\n\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\tvalue={this.value}\n\t\t\t\t\t\tplaceholder={this.placeholder}\n\t\t\t\t\t\tvalueState={this.valueState}\n\t\t\t\t\t\tshowClearIcon={this.showClearIcon}\n\t\t\t\t\t\tdisabled={this.disabled}\n\t\t\t\t\t\treadonly={this.readonly}\n\t\t\t\t\t\tshowSuggestions={this.showSuggestions}\n\t\t\t\t\t\tonKeyDown={this._onkeydown}\n\t\t\t\t\t\tonInput={this._onInnerInput}\n\t\t\t\t\t\tonChange={this._onInnerChange}\n\t\t\t\t\t\tonTypeAhead={this._onTypeAhead}\n\t\t\t\t\t>\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t{this.valueStateMessage.length > 0 &&\n\t\t\t\t\t\t\t<slot name=\"valueStateMessage\" slot=\"valueStateMessage\"></slot>\n\t\t\t\t\t\t}\n\t\t\t\t\t</Input>\n\n\t\t\t\t\t{this.showExceededText &&\n\t\t\t\t\t\t<Label class=\"ai-prompt-input-counter\">{this._exceededText}</Label>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t\t<Button\n\t\t\t\t\ticon={paperPlane}\n\t\t\t\t\tdisabled={this._submitButtonDisabled}\n\t\t\t\t\tclass=\"ai-prompt-input-button\"\n\t\t\t\t\tdesign=\"Emphasized\"\n\t\t\t\t\tonClick={this._onButtonClick}>\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>);\n}\n"]}
@@ -0,0 +1,118 @@
1
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
2
+ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
3
+ type TextAreaVersionChangeEventDetail = {
4
+ backwards: boolean;
5
+ };
6
+ /**
7
+ * @class
8
+ *
9
+ * ### Overview
10
+ *
11
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
12
+ * It provides AI-powered text generation, editing suggestions, and version management functionality.
13
+ *
14
+ * ### Structure
15
+ * The `ui5-ai-textarea` consists of the following elements:
16
+ * - TextArea: The main text input area with all standard textarea functionality
17
+ * - WritingAssistant: Dedicated toolbar containing:
18
+ * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions
19
+ * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting
20
+ *
21
+ * ### ES6 Module Import
22
+ *
23
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
24
+ *
25
+ * @constructor
26
+ * @extends BaseTextArea
27
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
28
+ * @since 2.16.0
29
+ * @public
30
+ * @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.
31
+ */
32
+ declare class TextArea extends BaseTextArea {
33
+ eventDetails: BaseTextArea["eventDetails"] & {
34
+ "version-change": TextAreaVersionChangeEventDetail;
35
+ "stop-generation": void;
36
+ };
37
+ private _keydownHandler?;
38
+ /**
39
+ * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.
40
+ *
41
+ * @default false
42
+ * @public
43
+ */
44
+ loading: boolean;
45
+ /**
46
+ * Defines the prompt description of the current action.
47
+ *
48
+ * @default ""
49
+ * @public
50
+ */
51
+ promptDescription: string;
52
+ /**
53
+ * Indicates the index of the currently displayed version.
54
+ *
55
+ *
56
+ * @default 0
57
+ * @public
58
+ */
59
+ currentVersion: number;
60
+ /**
61
+ * Indicates the total number of result versions available.
62
+ *
63
+ * Notes:
64
+ * Versioning is hidden if the value is `0`
65
+ *
66
+ * @default 0
67
+ * @public
68
+ */
69
+ totalVersions: number;
70
+ menu: Array<HTMLElement>;
71
+ static i18nBundle: I18nBundle;
72
+ static onDefine(): Promise<void>;
73
+ /**
74
+ * Handles the click event for the "Previous Version" button.
75
+ * Updates the current version index and syncs content.
76
+ */
77
+ _handlePreviousVersionClick(): void;
78
+ /**
79
+ * Handles the click event for the "Next Version" button.
80
+ * Updates the current version index and syncs content.
81
+ */
82
+ _handleNextVersionClick(): void;
83
+ /**
84
+ * Handles the version change event from the writing assistant.
85
+ */
86
+ _handleVersionChange(e: CustomEvent<{
87
+ backwards: boolean;
88
+ }>): void;
89
+ /**
90
+ * Handles keydown events for keyboard shortcuts.
91
+ * @private
92
+ */
93
+ _handleKeydown(keyboardEvent: KeyboardEvent): void;
94
+ /**
95
+ * Overrides the parent's onAfterRendering to add keydown handler.
96
+ * @private
97
+ */
98
+ onAfterRendering(): void;
99
+ /**
100
+ * Handles the generate click event from the AI toolbar.
101
+ * Opens the AI menu and sets the opener element.
102
+ *
103
+ * @private
104
+ */
105
+ _handleAIButtonClick: (e: CustomEvent<{
106
+ clickTarget?: HTMLElement;
107
+ }>) => void;
108
+ get _ariaLabel(): string;
109
+ /**
110
+ * Handles the stop generation event from the AI toolbar.
111
+ * Fires the stop-generation event to notify listeners.
112
+ *
113
+ * @private
114
+ */
115
+ handleStopGeneration: () => void;
116
+ }
117
+ export type { TextAreaVersionChangeEventDetail };
118
+ export default TextArea;
@@ -0,0 +1,230 @@
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 TextArea_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 slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
11
+ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
13
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
14
+ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
15
+ import { WRITING_ASSISTANT_LABEL, } from "./generated/i18n/i18n-defaults.js";
16
+ // Styles
17
+ import TextAreaCss from "./generated/themes/TextArea.css.js";
18
+ import textareaStyles from "@ui5/webcomponents/dist/generated/themes/TextArea.css.js";
19
+ import valueStateMessageStyles from "@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js";
20
+ // Templates
21
+ import TextAreaTemplate from "./TextAreaTemplate.js";
22
+ /**
23
+ * @class
24
+ *
25
+ * ### Overview
26
+ *
27
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
28
+ * It provides AI-powered text generation, editing suggestions, and version management functionality.
29
+ *
30
+ * ### Structure
31
+ * The `ui5-ai-textarea` consists of the following elements:
32
+ * - TextArea: The main text input area with all standard textarea functionality
33
+ * - WritingAssistant: Dedicated toolbar containing:
34
+ * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions
35
+ * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting
36
+ *
37
+ * ### ES6 Module Import
38
+ *
39
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
40
+ *
41
+ * @constructor
42
+ * @extends BaseTextArea
43
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
44
+ * @since 2.16.0
45
+ * @public
46
+ * @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.
47
+ */
48
+ let TextArea = TextArea_1 = class TextArea extends BaseTextArea {
49
+ constructor() {
50
+ super(...arguments);
51
+ /**
52
+ * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.
53
+ *
54
+ * @default false
55
+ * @public
56
+ */
57
+ this.loading = false;
58
+ /**
59
+ * Defines the prompt description of the current action.
60
+ *
61
+ * @default ""
62
+ * @public
63
+ */
64
+ this.promptDescription = "";
65
+ /**
66
+ * Indicates the index of the currently displayed version.
67
+ *
68
+ *
69
+ * @default 0
70
+ * @public
71
+ */
72
+ this.currentVersion = 0;
73
+ /**
74
+ * Indicates the total number of result versions available.
75
+ *
76
+ * Notes:
77
+ * Versioning is hidden if the value is `0`
78
+ *
79
+ * @default 0
80
+ * @public
81
+ */
82
+ this.totalVersions = 0;
83
+ /**
84
+ * Handles the generate click event from the AI toolbar.
85
+ * Opens the AI menu and sets the opener element.
86
+ *
87
+ * @private
88
+ */
89
+ this._handleAIButtonClick = (e) => {
90
+ const menuNodes = this.getSlottedNodes("menu");
91
+ if (menuNodes.length === 0) {
92
+ return;
93
+ }
94
+ if (!e.detail?.clickTarget) {
95
+ return;
96
+ }
97
+ const menu = menuNodes[0];
98
+ if (menu && typeof menu.open !== "undefined") {
99
+ menu.opener = e.detail.clickTarget;
100
+ menu.open = true;
101
+ }
102
+ };
103
+ /**
104
+ * Handles the stop generation event from the AI toolbar.
105
+ * Fires the stop-generation event to notify listeners.
106
+ *
107
+ * @private
108
+ */
109
+ this.handleStopGeneration = () => {
110
+ this.fireDecoratorEvent("stop-generation");
111
+ };
112
+ }
113
+ static async onDefine() {
114
+ TextArea_1.i18nBundle = await getI18nBundle("@ui5/webcomponents-ai");
115
+ }
116
+ /**
117
+ * Handles the click event for the "Previous Version" button.
118
+ * Updates the current version index and syncs content.
119
+ */
120
+ _handlePreviousVersionClick() {
121
+ this.fireDecoratorEvent("version-change", { backwards: true });
122
+ }
123
+ /**
124
+ * Handles the click event for the "Next Version" button.
125
+ * Updates the current version index and syncs content.
126
+ */
127
+ _handleNextVersionClick() {
128
+ this.fireDecoratorEvent("version-change", { backwards: false });
129
+ }
130
+ /**
131
+ * Handles the version change event from the writing assistant.
132
+ */
133
+ _handleVersionChange(e) {
134
+ if (e.detail.backwards) {
135
+ this._handlePreviousVersionClick();
136
+ }
137
+ else {
138
+ this._handleNextVersionClick();
139
+ }
140
+ }
141
+ /**
142
+ * Handles keydown events for keyboard shortcuts.
143
+ * @private
144
+ */
145
+ _handleKeydown(keyboardEvent) {
146
+ const isCtrlOrCmd = keyboardEvent.ctrlKey || keyboardEvent.metaKey;
147
+ const isShift = keyboardEvent.shiftKey;
148
+ if (isShift && keyboardEvent.key.toLowerCase() === "f4") {
149
+ const toolbar = this.shadowRoot?.querySelector("[ui5-ai-writing-assistant]");
150
+ const aiButton = toolbar?.shadowRoot?.querySelector("#ai-menu-btn");
151
+ if (aiButton) {
152
+ aiButton.focus();
153
+ }
154
+ return;
155
+ }
156
+ if (this.totalVersions > 1) {
157
+ if (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === "z") {
158
+ keyboardEvent.preventDefault();
159
+ this._handlePreviousVersionClick();
160
+ return;
161
+ }
162
+ if (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === "y") {
163
+ keyboardEvent.preventDefault();
164
+ this._handleNextVersionClick();
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * Overrides the parent's onAfterRendering to add keydown handler.
170
+ * @private
171
+ */
172
+ onAfterRendering() {
173
+ super.onAfterRendering();
174
+ // Add keydown event listener to the textarea
175
+ const textarea = this.shadowRoot?.querySelector("textarea");
176
+ if (textarea && !this._keydownHandler) {
177
+ this._keydownHandler = this._handleKeydown.bind(this);
178
+ textarea.addEventListener("keydown", this._keydownHandler);
179
+ }
180
+ }
181
+ get _ariaLabel() {
182
+ return this.accessibleName || TextArea_1.i18nBundle.getText(WRITING_ASSISTANT_LABEL);
183
+ }
184
+ };
185
+ __decorate([
186
+ property({ type: Boolean })
187
+ ], TextArea.prototype, "loading", void 0);
188
+ __decorate([
189
+ property()
190
+ ], TextArea.prototype, "promptDescription", void 0);
191
+ __decorate([
192
+ property({ type: Number })
193
+ ], TextArea.prototype, "currentVersion", void 0);
194
+ __decorate([
195
+ property({ type: Number })
196
+ ], TextArea.prototype, "totalVersions", void 0);
197
+ __decorate([
198
+ slot({ type: HTMLElement })
199
+ ], TextArea.prototype, "menu", void 0);
200
+ TextArea = TextArea_1 = __decorate([
201
+ customElement({
202
+ tag: "ui5-ai-textarea",
203
+ languageAware: true,
204
+ renderer: jsxRenderer,
205
+ template: TextAreaTemplate,
206
+ styles: [
207
+ textareaStyles,
208
+ valueStateMessageStyles,
209
+ TextAreaCss,
210
+ ],
211
+ })
212
+ /**
213
+ * Fired when the user clicks on version navigation buttons.
214
+ *
215
+ * @param {boolean} backwards - Indicates if navigation is backwards (true) or forwards (false, default).
216
+ * @public
217
+ */
218
+ ,
219
+ event("version-change")
220
+ /**
221
+ * Fired when the user requests to stop AI text generation.
222
+ *
223
+ * @public
224
+ */
225
+ ,
226
+ event("stop-generation")
227
+ ], TextArea);
228
+ TextArea.define();
229
+ export default TextArea;
230
+ //# sourceMappingURL=TextArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea.js","sourceRoot":"","sources":["../src/TextArea.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 slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\nimport { BaseTextArea } from \"@ui5/webcomponents/dist/TextArea.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport {\n\tWRITING_ASSISTANT_LABEL,\n} from \"./generated/i18n/i18n-defaults.js\";\n// Styles\nimport TextAreaCss from \"./generated/themes/TextArea.css.js\";\nimport textareaStyles from \"@ui5/webcomponents/dist/generated/themes/TextArea.css.js\";\nimport valueStateMessageStyles from \"@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js\";\n\n// Templates\nimport TextAreaTemplate from \"./TextAreaTemplate.js\";\n\ntype TextAreaVersionChangeEventDetail = {\n\tbackwards: boolean,\n};\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.\n * It provides AI-powered text generation, editing suggestions, and version management functionality.\n *\n * ### Structure\n * The `ui5-ai-textarea` consists of the following elements:\n * - TextArea: The main text input area with all standard textarea functionality\n * - WritingAssistant: Dedicated toolbar containing:\n * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions\n * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/TextArea.js\";`\n *\n * @constructor\n * @extends BaseTextArea\n * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.\n * @since 2.16.0\n * @public\n * @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.\n */\n@customElement({\n\ttag: \"ui5-ai-textarea\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: TextAreaTemplate,\n\tstyles: [\n\t\ttextareaStyles,\n\t\tvalueStateMessageStyles,\n\t\tTextAreaCss,\n\t],\n})\n\n/**\n * Fired when the user clicks on 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\n/**\n * Fired when the user requests to stop AI text generation.\n *\n * @public\n */\n@event(\"stop-generation\")\n\nclass TextArea extends BaseTextArea {\n\teventDetails!: BaseTextArea[\"eventDetails\"] & {\n\t\t\"version-change\": TextAreaVersionChangeEventDetail;\n\t\t\"stop-generation\": void;\n\t};\n\n\t// Store bound handler for proper cleanup\n\tprivate _keydownHandler?: (event: KeyboardEvent) => void;\n\n\t/**\n\t * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.\n\t *\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tloading = false;\n\n\t/**\n\t * Defines the prompt description of the current action.\n\t *\n\t * @default \"\"\n\t * @public\n\t */\n\t@property()\n\tpromptDescription = \"\";\n\n\t/**\n\t * Indicates the index of the currently displayed version.\n\t *\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 * Notes:\n\t * Versioning is hidden if the value is `0`\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 0;\n\n\t@slot({ type: HTMLElement })\n\tmenu!: Array<HTMLElement>;\n\n\tstatic i18nBundle: I18nBundle;\n\n\tstatic async onDefine() {\n\t\tTextArea.i18nBundle = await getI18nBundle(\"@ui5/webcomponents-ai\");\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 */\n\t_handlePreviousVersionClick(): void {\n\t\tthis.fireDecoratorEvent(\"version-change\", { 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 */\n\t_handleNextVersionClick(): void {\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: false });\n\t}\n\n\t/**\n\t * Handles the version change event from the writing assistant.\n\t */\n\t_handleVersionChange(e: CustomEvent<{ backwards: boolean }>): void {\n\t\tif (e.detail.backwards) {\n\t\t\tthis._handlePreviousVersionClick();\n\t\t} else {\n\t\t\tthis._handleNextVersionClick();\n\t\t}\n\t}\n\n\t/**\n\t * Handles keydown events for keyboard shortcuts.\n\t * @private\n\t */\n\t_handleKeydown(keyboardEvent: KeyboardEvent) {\n\t\tconst isCtrlOrCmd = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\t\tconst isShift = keyboardEvent.shiftKey;\n\n\t\tif (isShift && keyboardEvent.key.toLowerCase() === \"f4\") {\n\t\t\tconst toolbar = this.shadowRoot?.querySelector(\"[ui5-ai-writing-assistant]\") as HTMLElement;\n\t\t\tconst aiButton = toolbar?.shadowRoot?.querySelector(\"#ai-menu-btn\") as HTMLElement;\n\n\t\t\tif (aiButton) {\n\t\t\t\taiButton.focus();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.totalVersions > 1) {\n\t\t\tif (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === \"z\") {\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tthis._handlePreviousVersionClick();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === \"y\") {\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tthis._handleNextVersionClick();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Overrides the parent's onAfterRendering to add keydown handler.\n\t * @private\n\t */\n\tonAfterRendering() {\n\t\tsuper.onAfterRendering();\n\n\t\t// Add keydown event listener to the textarea\n\t\tconst textarea = this.shadowRoot?.querySelector(\"textarea\");\n\t\tif (textarea && !this._keydownHandler) {\n\t\t\tthis._keydownHandler = this._handleKeydown.bind(this);\n\t\t\ttextarea.addEventListener(\"keydown\", this._keydownHandler);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the generate click event from the AI toolbar.\n\t * Opens the AI menu and sets the opener element.\n\t *\n\t * @private\n\t */\n\t_handleAIButtonClick = (e: CustomEvent<{ clickTarget?: HTMLElement }>) => {\n\t\tconst menuNodes = this.getSlottedNodes(\"menu\");\n\t\tif (menuNodes.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tif (!e.detail?.clickTarget) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst menu = menuNodes[0] as HTMLElement & { opener?: HTMLElement; open?: boolean };\n\t\tif (menu && typeof menu.open !== \"undefined\") {\n\t\t\tmenu.opener = e.detail.clickTarget;\n\t\t\tmenu.open = true;\n\t\t}\n\t}\n\tget _ariaLabel() {\n\t\treturn this.accessibleName || TextArea.i18nBundle.getText(WRITING_ASSISTANT_LABEL);\n\t}\n\n\t/**\n\t * Handles the stop generation event from the AI toolbar.\n\t * Fires the stop-generation event to notify listeners.\n\t *\n\t * @private\n\t */\n\thandleStopGeneration = () => {\n\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t}\n}\n\nTextArea.define();\n\nexport type { TextAreaVersionChangeEventDetail };\nexport default TextArea;\n"]}
@@ -0,0 +1,2 @@
1
+ import type TextArea from "./TextArea.js";
2
+ export default function TextAreaTemplate(this: TextArea): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import WritingAssistant from "./WritingAssistant.js";
3
+ import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
4
+ import TextAreaPopoverTemplate from "@ui5/webcomponents/dist/TextAreaPopoverTemplate.js";
5
+ export default function TextAreaTemplate() {
6
+ return (_jsxs("div", { class: "ui5-ai-textarea-root", children: [_jsxs("div", { class: this.classes.root, onFocusIn: this._onfocusin, onFocusOut: this._onfocusout, children: [_jsxs("div", { class: "ui5-textarea-wrapper", children: [this.growing &&
7
+ _jsx("div", { id: `${this._id}-mirror`, class: "ui5-textarea-mirror", "aria-hidden": "true", children: this._mirrorText.map(mirrorText => {
8
+ return (_jsxs(_Fragment, { children: [mirrorText.text, _jsx("br", {})] }));
9
+ }) }), _jsx(BusyIndicator, { id: `${this._id}-busyIndicator`, active: this.loading, class: "ui5-textarea-busy-indicator", children: _jsx("textarea", { id: `${this._id}-inner`, class: "ui5-textarea-inner", part: "textarea", placeholder: this.placeholder, disabled: this.disabled, readonly: this.readonly, "aria-label": this._ariaLabel, "aria-describedby": this.ariaDescribedBy, "aria-invalid": this._ariaInvalid, "aria-required": this.required, maxlength: this._exceededTextProps.calcedMaxLength, value: this.value, "data-sap-focus-ref": true, onInput: this._oninput, onChange: this._onchange, onKeyUp: this._onkeyup, onKeyDown: this._onkeydown, onSelect: this._onselect, onScroll: this._onscroll }) }), _jsx("div", { part: "footer", children: _jsx("slot", { name: "footer", children: _jsx(WritingAssistant, { loading: this.loading, currentVersion: this.currentVersion, totalVersions: this.totalVersions, promptDescription: this.promptDescription, onButtonClick: this._handleAIButtonClick, onStopGeneration: this.handleStopGeneration, onVersionChange: this._handleVersionChange }) }) })] }), this.showExceededText &&
10
+ _jsx("span", { class: "ui5-textarea-exceeded-text", children: this._exceededTextProps.exceededText }), this.hasValueState &&
11
+ _jsx("span", { id: `${this._id}-valueStateDesc`, class: "ui5-hidden-text", children: this.ariaValueStateHiddenText })] }), TextAreaPopoverTemplate.call(this), _jsx("div", { "aria-live": "polite", "aria-atomic": "true", class: "ui5-hidden-text", children: this.loading ? this.promptDescription : "" }), _jsx("div", { id: "ai-menu-wrapper", children: _jsx("slot", { name: "menu" }) })] }));
12
+ }
13
+ //# sourceMappingURL=TextAreaTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextAreaTemplate.js","sourceRoot":"","sources":["../src/TextAreaTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,uBAAuB,MAAM,oDAAoD,CAAC;AAEzF,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACvC,OAAO,CACN,eAAK,KAAK,EAAC,sBAAsB,aAChC,eACC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EACxB,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,UAAU,EAAE,IAAI,CAAC,WAAW,aAE5B,eAAK,KAAK,EAAC,sBAAsB,aAC/B,IAAI,CAAC,OAAO;gCACb,cAAK,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAC,qBAAqB,iBAAa,MAAM,YAC3E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;wCAClC,OAAO,CACN,8BACE,UAAU,CAAC,IAAI,EAChB,cAAM,IACJ,CACH,CAAC;oCACH,CAAC,CAAC,GACG,EAEN,KAAC,aAAa,IACb,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,gBAAgB,EAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,EACpB,KAAK,EAAC,6BAA6B,YAEnC,mBACC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,EACvB,KAAK,EAAC,oBAAoB,EAC1B,IAAI,EAAC,UAAU,EACf,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,gBACX,IAAI,CAAC,UAAU,sBACT,IAAI,CAAC,eAAe,kBACxB,IAAI,CAAC,YAAY,mBAChB,IAAI,CAAC,QAAQ,EAC5B,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAClD,KAAK,EAAE,IAAI,CAAC,KAAK,8BAEjB,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,QAAQ,EAAE,IAAI,CAAC,SAAS,EACxB,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS,EACxB,QAAQ,EAAE,IAAI,CAAC,SAAS,GACd,GACI,EAChB,cAAK,IAAI,EAAC,QAAQ,YACjB,eAAM,IAAI,EAAC,QAAQ,YAClB,KAAC,gBAAgB,IAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,aAAa,EAAE,IAAI,CAAC,oBAAoB,EACxC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAC3C,eAAe,EAAE,IAAI,CAAC,oBAAoB,GACzC,GACI,GACF,IACD,EAEL,IAAI,CAAC,gBAAgB;wBACtB,eAAM,KAAK,EAAC,4BAA4B,YAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAQ,EAGrF,IAAI,CAAC,aAAa;wBACnB,eAAM,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,iBAAiB,EAAE,KAAK,EAAC,iBAAiB,YAAE,IAAI,CAAC,wBAAwB,GAAQ,IAEjG,EAEL,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAGnC,2BAAe,QAAQ,iBAAa,MAAM,EAAC,KAAK,EAAC,iBAAiB,YAChE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,GACtC,EAEN,cAAK,EAAE,EAAC,iBAAiB,YACxB,eAAM,IAAI,EAAC,MAAM,GAAQ,GACpB,IACD,CACN,CAAC;AACH,CAAC","sourcesContent":["import type TextArea from \"./TextArea.js\";\nimport WritingAssistant from \"./WritingAssistant.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport TextAreaPopoverTemplate from \"@ui5/webcomponents/dist/TextAreaPopoverTemplate.js\";\n\nexport default function TextAreaTemplate(this: TextArea) {\n\treturn (\n\t\t<div class=\"ui5-ai-textarea-root\">\n\t\t\t<div\n\t\t\t\tclass={this.classes.root}\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-textarea-wrapper\">\n\t\t\t\t\t{this.growing &&\n\t\t\t\t\t<div id={`${this._id}-mirror`} class=\"ui5-textarea-mirror\" aria-hidden=\"true\">\n\t\t\t\t\t\t{this._mirrorText.map(mirrorText => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{mirrorText.text}\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t\t}\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-textarea-busy-indicator\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tid={`${this._id}-inner`}\n\t\t\t\t\t\t\tclass=\"ui5-textarea-inner\"\n\t\t\t\t\t\t\tpart=\"textarea\"\n\t\t\t\t\t\t\tplaceholder={this.placeholder}\n\t\t\t\t\t\t\tdisabled={this.disabled}\n\t\t\t\t\t\t\treadonly={this.readonly}\n\t\t\t\t\t\t\taria-label={this._ariaLabel}\n\t\t\t\t\t\t\taria-describedby={this.ariaDescribedBy}\n\t\t\t\t\t\t\taria-invalid={this._ariaInvalid}\n\t\t\t\t\t\t\taria-required={this.required}\n\t\t\t\t\t\t\tmaxlength={this._exceededTextProps.calcedMaxLength}\n\t\t\t\t\t\t\tvalue={this.value}\n\t\t\t\t\t\t\tdata-sap-focus-ref\n\t\t\t\t\t\t\tonInput={this._oninput}\n\t\t\t\t\t\t\tonChange={this._onchange}\n\t\t\t\t\t\t\tonKeyUp={this._onkeyup}\n\t\t\t\t\t\t\tonKeyDown={this._onkeydown}\n\t\t\t\t\t\t\tonSelect={this._onselect}\n\t\t\t\t\t\t\tonScroll={this._onscroll}>\n\t\t\t\t\t\t</textarea>\n\t\t\t\t\t</BusyIndicator>\n\t\t\t\t\t<div part=\"footer\">\n\t\t\t\t\t\t<slot name=\"footer\">\n\t\t\t\t\t\t\t<WritingAssistant\n\t\t\t\t\t\t\t\tloading={this.loading}\n\t\t\t\t\t\t\t\tcurrentVersion={this.currentVersion}\n\t\t\t\t\t\t\t\ttotalVersions={this.totalVersions}\n\t\t\t\t\t\t\t\tpromptDescription={this.promptDescription}\n\t\t\t\t\t\t\t\tonButtonClick={this._handleAIButtonClick}\n\t\t\t\t\t\t\t\tonStopGeneration={this.handleStopGeneration}\n\t\t\t\t\t\t\t\tonVersionChange={this._handleVersionChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{this.showExceededText &&\n\t\t\t\t<span class=\"ui5-textarea-exceeded-text\">{this._exceededTextProps.exceededText}</span>\n\t\t\t\t}\n\n\t\t\t\t{this.hasValueState &&\n\t\t\t\t<span id={`${this._id}-valueStateDesc`} class=\"ui5-hidden-text\">{this.ariaValueStateHiddenText}</span>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t{TextAreaPopoverTemplate.call(this)}\n\n\t\t\t{/* ARIA live region for screen readers */}\n\t\t\t<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ui5-hidden-text\">\n\t\t\t\t{this.loading ? this.promptDescription : \"\"}\n\t\t\t</div>\n\n\t\t\t<div id=\"ai-menu-wrapper\">\n\t\t\t\t<slot name=\"menu\"></slot>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}