@ui5/webcomponents-ai 0.0.0-37338d49d → 0.0.0-47cc17a26

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 (218) hide show
  1. package/CHANGELOG.md +518 -0
  2. package/LICENSE.txt +201 -0
  3. package/README.md +10 -8
  4. package/cypress.config.js +3 -0
  5. package/dist/.tsbuildinfo +1 -0
  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 +40 -3
  13. package/dist/Button.js +66 -12
  14. package/dist/Button.js.map +1 -1
  15. package/dist/ButtonState.d.ts +4 -4
  16. package/dist/ButtonState.js +5 -5
  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 +143 -0
  21. package/dist/Input.js +288 -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 +6 -11
  27. package/dist/PromptInput.js +3 -5
  28. package/dist/PromptInput.js.map +1 -1
  29. package/dist/TextArea.d.ts +118 -0
  30. package/dist/TextArea.js +230 -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 +100 -0
  48. package/dist/WritingAssistant.js +197 -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/custom-elements-internal.json +440 -13
  62. package/dist/custom-elements.json +380 -12
  63. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  64. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  65. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  66. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
  67. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  68. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  69. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  70. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  71. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  72. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  73. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  74. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  75. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  76. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  77. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  78. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  79. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  80. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  81. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  82. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  83. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  84. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  85. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  86. package/dist/generated/assets/i18n/messagebundle_id.json +1 -0
  87. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  88. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  89. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  90. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  91. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  92. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  93. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  94. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
  95. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  96. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  97. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  98. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  99. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  105. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  110. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  111. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  112. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  113. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  114. package/dist/generated/i18n/i18n-defaults.d.ts +15 -1
  115. package/dist/generated/i18n/i18n-defaults.js +15 -1
  116. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  117. package/dist/generated/json-imports/Themes-fetch.js +1 -1
  118. package/dist/generated/json-imports/Themes-fetch.js.map +1 -1
  119. package/dist/generated/json-imports/Themes-node.d.ts +1 -0
  120. package/dist/generated/json-imports/Themes-node.js +21 -0
  121. package/dist/generated/json-imports/Themes-node.js.map +1 -0
  122. package/dist/generated/json-imports/Themes.js +1 -1
  123. package/dist/generated/json-imports/Themes.js.map +1 -1
  124. package/dist/generated/json-imports/i18n-fetch.js +3 -1
  125. package/dist/generated/json-imports/i18n-fetch.js.map +1 -1
  126. package/dist/generated/json-imports/i18n-node.d.ts +1 -0
  127. package/dist/generated/json-imports/i18n-node.js +120 -0
  128. package/dist/generated/json-imports/i18n-node.js.map +1 -0
  129. package/dist/generated/json-imports/i18n.js +3 -1
  130. package/dist/generated/json-imports/i18n.js.map +1 -1
  131. package/dist/generated/themes/Button.css.d.ts +1 -1
  132. package/dist/generated/themes/Button.css.js +3 -3
  133. package/dist/generated/themes/Button.css.js.map +1 -1
  134. package/dist/generated/themes/Input.css.d.ts +2 -0
  135. package/dist/generated/themes/Input.css.js +8 -0
  136. package/dist/generated/themes/Input.css.js.map +1 -0
  137. package/dist/generated/themes/PromptInput.css.d.ts +1 -1
  138. package/dist/generated/themes/PromptInput.css.js +3 -3
  139. package/dist/generated/themes/PromptInput.css.js.map +1 -1
  140. package/dist/generated/themes/TextArea.css.d.ts +2 -0
  141. package/dist/generated/themes/TextArea.css.js +8 -0
  142. package/dist/generated/themes/TextArea.css.js.map +1 -0
  143. package/dist/generated/themes/Versioning.css.d.ts +2 -0
  144. package/dist/generated/themes/Versioning.css.js +8 -0
  145. package/dist/generated/themes/Versioning.css.js.map +1 -0
  146. package/dist/generated/themes/WritingAssistant.css.d.ts +2 -0
  147. package/dist/generated/themes/WritingAssistant.css.js +8 -0
  148. package/dist/generated/themes/WritingAssistant.css.js.map +1 -0
  149. package/dist/vscode.html-custom-data.json +60 -6
  150. package/dist/web-types.json +186 -13
  151. package/package-scripts.cjs +3 -0
  152. package/package.json +25 -18
  153. package/src/ButtonTemplate.tsx +1 -0
  154. package/src/InputTemplate.tsx +197 -0
  155. package/src/TextArea.css +45 -0
  156. package/src/TextAreaTemplate.tsx +90 -0
  157. package/src/ToolbarLabelTemplate.tsx +9 -0
  158. package/src/VersioningTemplate.tsx +34 -0
  159. package/src/WritingAssistantTemplate.tsx +49 -0
  160. package/src/i18n/messagebundle.properties +43 -1
  161. package/src/i18n/messagebundle_ar.properties +20 -0
  162. package/src/i18n/messagebundle_bg.properties +20 -0
  163. package/src/i18n/messagebundle_ca.properties +20 -0
  164. package/src/i18n/messagebundle_cnr.properties +20 -0
  165. package/src/i18n/messagebundle_cs.properties +20 -0
  166. package/src/i18n/messagebundle_cy.properties +20 -0
  167. package/src/i18n/messagebundle_da.properties +20 -0
  168. package/src/i18n/messagebundle_de.properties +20 -0
  169. package/src/i18n/messagebundle_el.properties +20 -0
  170. package/src/i18n/messagebundle_en.properties +20 -0
  171. package/src/i18n/messagebundle_en_GB.properties +20 -0
  172. package/src/i18n/messagebundle_en_US_sappsd.properties +20 -0
  173. package/src/i18n/messagebundle_en_US_saprigi.properties +20 -0
  174. package/src/i18n/messagebundle_en_US_saptrc.properties +20 -0
  175. package/src/i18n/messagebundle_es.properties +20 -0
  176. package/src/i18n/messagebundle_es_MX.properties +21 -1
  177. package/src/i18n/messagebundle_et.properties +20 -0
  178. package/src/i18n/messagebundle_fi.properties +20 -0
  179. package/src/i18n/messagebundle_fr.properties +20 -0
  180. package/src/i18n/messagebundle_fr_CA.properties +20 -0
  181. package/src/i18n/messagebundle_hi.properties +20 -0
  182. package/src/i18n/messagebundle_hr.properties +22 -2
  183. package/src/i18n/messagebundle_hu.properties +20 -0
  184. package/src/i18n/messagebundle_id.properties +20 -0
  185. package/src/i18n/messagebundle_it.properties +20 -0
  186. package/src/i18n/messagebundle_iw.properties +20 -0
  187. package/src/i18n/messagebundle_ja.properties +20 -0
  188. package/src/i18n/messagebundle_kk.properties +20 -0
  189. package/src/i18n/messagebundle_ko.properties +20 -0
  190. package/src/i18n/messagebundle_lt.properties +20 -0
  191. package/src/i18n/messagebundle_lv.properties +20 -0
  192. package/src/i18n/messagebundle_mk.properties +20 -0
  193. package/src/i18n/messagebundle_ms.properties +20 -0
  194. package/src/i18n/messagebundle_nl.properties +20 -0
  195. package/src/i18n/messagebundle_no.properties +20 -0
  196. package/src/i18n/messagebundle_pl.properties +20 -0
  197. package/src/i18n/messagebundle_pt.properties +20 -0
  198. package/src/i18n/messagebundle_pt_PT.properties +20 -0
  199. package/src/i18n/messagebundle_ro.properties +20 -0
  200. package/src/i18n/messagebundle_ru.properties +20 -0
  201. package/src/i18n/messagebundle_sh.properties +20 -0
  202. package/src/i18n/messagebundle_sk.properties +20 -0
  203. package/src/i18n/messagebundle_sl.properties +20 -0
  204. package/src/i18n/messagebundle_sr.properties +20 -0
  205. package/src/i18n/messagebundle_sv.properties +20 -0
  206. package/src/i18n/messagebundle_th.properties +22 -2
  207. package/src/i18n/messagebundle_tr.properties +20 -0
  208. package/src/i18n/messagebundle_uk.properties +20 -0
  209. package/src/i18n/messagebundle_vi.properties +20 -0
  210. package/src/i18n/messagebundle_zh_CN.properties +20 -0
  211. package/src/i18n/messagebundle_zh_TW.properties +20 -0
  212. package/src/themes/Input.css +83 -0
  213. package/src/themes/PromptInput.css +5 -1
  214. package/src/themes/TextArea.css +45 -0
  215. package/src/themes/Versioning.css +20 -0
  216. package/src/themes/WritingAssistant.css +45 -0
  217. package/tsconfig.json +28 -1
  218. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,197 @@
1
+ import type Input from "./Input.js";
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
+ import type { JsxTemplateResult } from "@ui5/webcomponents-base";
11
+
12
+ type TemplateHook = () => JsxTemplateResult;
13
+
14
+ export default function InputTemplate(this: Input, hooks?: { preContent: TemplateHook, postContent: TemplateHook }) {
15
+ const preContent = hooks?.preContent || defaultPreContent;
16
+ const postContent = hooks?.postContent || defaultPostContent;
17
+ return (
18
+ <>
19
+ <div
20
+ class={`ui5-ai-input-root ui5-input-focusable-element ${this.loading && "ui5-ai-input-busy"}`}
21
+ onFocusIn={this._onfocusin}
22
+ onFocusOut={this._onfocusout}
23
+ >
24
+ <div class="ui5-input-content">
25
+ <BusyIndicator
26
+ id={`${this._id}-busyIndicator`}
27
+ active={this.loading}
28
+ class="ui5-input-busy-indicator"
29
+ >
30
+
31
+ <div
32
+ class="ui5-input-root"
33
+ part="root"
34
+ >
35
+ <div class="ui5-input-content">
36
+ {preContent.call(this)}
37
+
38
+ <input
39
+ id="inner"
40
+ part="input"
41
+ class="ui5-input-inner"
42
+ style={this.styles.innerInput}
43
+ type={this.inputNativeType}
44
+ inner-input
45
+ inner-input-with-icon={!!this.icon.length}
46
+ disabled={this.disabled}
47
+ readonly={this._readonly || this.loading}
48
+ value={this._innerValue}
49
+ placeholder={this._placeholder}
50
+ maxlength={this.maxlength}
51
+ role={this.accInfo.role}
52
+ enterkeyhint={this.hint}
53
+ aria-controls={this.accInfo.ariaControls}
54
+ aria-invalid={this.accInfo.ariaInvalid}
55
+ aria-haspopup={this.accInfo.ariaHasPopup}
56
+ aria-describedby={this.accInfo.ariaDescribedBy}
57
+ aria-roledescription={this.accInfo.ariaRoledescription}
58
+ aria-autocomplete={this.accInfo.ariaAutoComplete}
59
+ aria-expanded={this.accInfo.ariaExpanded}
60
+ aria-label={this.ariaLabel}
61
+ aria-required={this.required}
62
+ autocomplete="off"
63
+ data-sap-focus-ref
64
+ step={this.nativeInputAttributes.step}
65
+ min={this.nativeInputAttributes.min}
66
+ max={this.nativeInputAttributes.max}
67
+ onInput={this._handleNativeInput}
68
+ onChange={this._handleChange}
69
+ onSelect={this._handleSelect}
70
+ onKeyDown={this._onkeydown}
71
+ onKeyUp={this._onkeyup}
72
+ onClick={this._click}
73
+ onFocusIn={this.innerFocusIn}
74
+ />
75
+
76
+ {this._effectiveShowClearIcon &&
77
+ <div
78
+ tabindex={-1}
79
+ part="clear-icon-wrapper"
80
+ class="ui5-input-clear-icon-wrapper inputIcon"
81
+ onClick={this._clear}
82
+ onMouseDown={this._iconMouseDown}
83
+ >
84
+ <Icon
85
+ part="clear-icon"
86
+ class="ui5-input-clear-icon"
87
+ name={"decline"}
88
+ tabindex={-1}
89
+ accessibleName={this.clearIconAccessibleName}>
90
+ </Icon>
91
+ </div>
92
+ }
93
+
94
+ {this.icon.length > 0 &&
95
+ <div class="ui5-input-icon-root"
96
+ tabindex={-1}
97
+ >
98
+ <slot name="icon"></slot>
99
+ </div>
100
+ }
101
+
102
+ <div class="ui5-input-value-state-icon">
103
+ {this._valueStateInputIcon}
104
+ </div>
105
+ { postContent.call(this) }
106
+
107
+ {this.accInfo.ariaDescription &&
108
+ <span id="descr" class="ui5-hidden-text">{this.accInfo.ariaDescription}</span>
109
+ }
110
+
111
+ {this.accInfo.accessibleDescription &&
112
+ <span id="accessibleDescription" class="ui5-hidden-text">{this.accInfo.accessibleDescription}</span>
113
+ }
114
+
115
+ {this.linksInAriaValueStateHiddenText.length > 0 &&
116
+ <span id="hiddenText-value-state-link-shortcut" class="ui5-hidden-text">{this.valueStateLinksShortcutsTextAcc}</span>
117
+ }
118
+
119
+ {this.hasValueState &&
120
+ <span id="valueStateDesc" class="ui5-hidden-text">{this.ariaValueStateHiddenText}</span>
121
+ }
122
+ </div>
123
+ </div>
124
+
125
+ </BusyIndicator>
126
+ <Button
127
+ id="ai-menu-btn"
128
+ hidden={(!this.isFocused && !this.loading) || !this.hasActions || this.readonly}
129
+ tabIndex={-1}
130
+ class={`ui5-input-ai-button ui5-ai-input-button-wrapper ${this._isMenuOpen && "ui5-input-button-menu-open"} ${this.loading && "ui5-ai-input-loading"}`}
131
+ design="Transparent"
132
+ icon={this.loading ? "stop" : "ai"}
133
+ onClick={this._handleAIButtonClick}
134
+ onKeyDown={this._handleAIButtonKeydown}
135
+ aria-keyshortcuts={ this.loading ? "Esc" : "Shift + F4" }
136
+ tooltip={this.loading ? this.stopGeneratingTooltip : this.ariaLabel}
137
+ accessibilityAttributes={{ hasPopup: this.loading ? "false" : "menu" }}
138
+ />
139
+ <Menu
140
+ onItemClick={this._onMenuIconClick}
141
+ onBeforeOpen={() => { this._isMenuOpen = true; }}
142
+ onBeforeClose={() => { this._isMenuOpen = false; }}
143
+ onClose={() => { if (!this.loading) { this.focus(); } }}
144
+ >
145
+ <slot name="actions"></slot>
146
+ {this.totalVersions > 1 && Versioning.call(this)}
147
+ </Menu>
148
+ </div>
149
+ </div>
150
+ </>
151
+ );
152
+ }
153
+
154
+ function Versioning(this: Input) {
155
+ return (
156
+ <>
157
+ <MenuSeparator />
158
+ <MenuItem
159
+ type="Inactive"
160
+ class="ui5-ai-versioning-menu-footer"
161
+ text={`${this.currentVersion} / ${this.totalVersions}`}
162
+ >
163
+ <Button
164
+ id="arrow-left"
165
+ class="versioning-button"
166
+ slot="endContent"
167
+ design="Transparent"
168
+ icon="navigation-left-arrow"
169
+ tooltip={this.previousButtonAccessibleName}
170
+ accessibleName={this.previousButtonAccessibleName}
171
+ aria-keyshortcut="Shift+Ctrl+Z"
172
+ disabled={this.currentVersion <= 1}
173
+ onClick={this._handlePreviousButtonClick}
174
+ data-ui5-versioning-button="previous"
175
+ >
176
+ </Button>
177
+ <Button
178
+ id="arrow-right"
179
+ class="versioning-button"
180
+ slot="endContent"
181
+ design="Transparent"
182
+ icon="navigation-right-arrow"
183
+ tooltip={this.nextButtonAccessibleName}
184
+ accessibleName={this.nextButtonAccessibleName}
185
+ aria-keyshortcut="Shift+Ctrl+Y"
186
+ disabled={this.currentVersion >= this.totalVersions}
187
+ onClick={this._handleNextButtonClick}
188
+ data-ui5-versioning-button="next"
189
+ />
190
+ </MenuItem>
191
+ </>
192
+ );
193
+ }
194
+
195
+ function defaultPreContent() { }
196
+
197
+ function defaultPostContent() {}
@@ -0,0 +1,45 @@
1
+ .ui5-ai-textarea-root {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ width: 100%;
6
+ height: 100%;
7
+ }
8
+
9
+ .ui5-ai-textarea-root .ui5-textarea-wrapper {
10
+ display: flex;
11
+ flex-direction: column;
12
+ flex: 1;
13
+ position: relative;
14
+ }
15
+
16
+ .ui5-ai-textarea-root [part="footer"] {
17
+ position: relative;
18
+ width: 100%;
19
+ margin-top: auto;
20
+ flex-shrink: 0;
21
+ }
22
+
23
+ .ui5-ai-writing-assistant-footer-bar {
24
+ background: var(--_ui5_texteditor_toolbar_background, var(--sapPageFooter_Background));
25
+ width: 100%;
26
+ box-sizing: border-box;
27
+ box-shadow: none;
28
+ border-bottom: none;
29
+ border-top: none;
30
+ }
31
+
32
+ .ui5-ai-writing-assistant-footer-bar--with-border {
33
+ border-top: 1px solid var(--sapPageFooter_BorderColor);
34
+ }
35
+
36
+ .ui5-ai-writing-assistant-action-label {
37
+ margin-left: 0.5rem;
38
+ color: var(--sapContent_LabelColor);
39
+ font-size: var(--sapFontSmallSize);
40
+ }
41
+
42
+ #ai-menu-wrapper {
43
+ position: relative;
44
+ z-index: 1000;
45
+ }
@@ -0,0 +1,90 @@
1
+ import type TextArea from "./TextArea.js";
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
+
6
+ export default function TextAreaTemplate(this: TextArea) {
7
+ return (
8
+ <div class="ui5-ai-textarea-root">
9
+ <div
10
+ class={this.classes.root}
11
+ onFocusIn={this._onfocusin}
12
+ onFocusOut={this._onfocusout}
13
+ >
14
+ <div class="ui5-textarea-wrapper">
15
+ {this.growing &&
16
+ <div id={`${this._id}-mirror`} class="ui5-textarea-mirror" aria-hidden="true">
17
+ {this._mirrorText.map(mirrorText => {
18
+ return (
19
+ <>
20
+ {mirrorText.text}
21
+ <br />
22
+ </>
23
+ );
24
+ })}
25
+ </div>
26
+ }
27
+ <BusyIndicator
28
+ id={`${this._id}-busyIndicator`}
29
+ active={this.loading}
30
+ class="ui5-textarea-busy-indicator"
31
+ >
32
+ <textarea
33
+ id={`${this._id}-inner`}
34
+ class="ui5-textarea-inner"
35
+ part="textarea"
36
+ placeholder={this.placeholder}
37
+ disabled={this.disabled}
38
+ readonly={this.readonly}
39
+ aria-label={this._ariaLabel}
40
+ aria-describedby={this.ariaDescribedBy}
41
+ aria-invalid={this._ariaInvalid}
42
+ aria-required={this.required}
43
+ maxlength={this._exceededTextProps.calcedMaxLength}
44
+ value={this.value}
45
+ data-sap-focus-ref
46
+ onInput={this._oninput}
47
+ onChange={this._onchange}
48
+ onKeyUp={this._onkeyup}
49
+ onKeyDown={this._onkeydown}
50
+ onSelect={this._onselect}
51
+ onScroll={this._onscroll}>
52
+ </textarea>
53
+ </BusyIndicator>
54
+ <div part="footer">
55
+ <slot name="footer">
56
+ <WritingAssistant
57
+ loading={this.loading}
58
+ currentVersion={this.currentVersion}
59
+ totalVersions={this.totalVersions}
60
+ promptDescription={this.promptDescription}
61
+ onButtonClick={this._handleAIButtonClick}
62
+ onStopGeneration={this.handleStopGeneration}
63
+ onVersionChange={this._handleVersionChange}
64
+ />
65
+ </slot>
66
+ </div>
67
+ </div>
68
+
69
+ {this.showExceededText &&
70
+ <span class="ui5-textarea-exceeded-text">{this._exceededTextProps.exceededText}</span>
71
+ }
72
+
73
+ {this.hasValueState &&
74
+ <span id={`${this._id}-valueStateDesc`} class="ui5-hidden-text">{this.ariaValueStateHiddenText}</span>
75
+ }
76
+ </div>
77
+
78
+ {TextAreaPopoverTemplate.call(this)}
79
+
80
+ {/* ARIA live region for screen readers */}
81
+ <div aria-live="polite" aria-atomic="true" class="ui5-hidden-text">
82
+ {this.loading ? this.promptDescription : ""}
83
+ </div>
84
+
85
+ <div id="ai-menu-wrapper">
86
+ <slot name="menu"></slot>
87
+ </div>
88
+ </div>
89
+ );
90
+ }
@@ -0,0 +1,9 @@
1
+ import type ToolbarLabel from "./ToolbarLabel.js";
2
+
3
+ export default function ToolbarLabelTemplate(this: ToolbarLabel) {
4
+ return (
5
+ <span class="ui5-ai-toolbar-label">
6
+ {this.text}
7
+ </span>
8
+ );
9
+ }
@@ -0,0 +1,34 @@
1
+ import type Versioning from "./Versioning.js";
2
+ import ToolbarLabel from "./ToolbarLabel.js";
3
+ import ToolbarButton from "@ui5/webcomponents/dist/ToolbarButton.js";
4
+ import "@ui5/webcomponents-icons/dist/navigation-left-arrow.js";
5
+ import "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
6
+
7
+ export default function VersioningTemplate(this: Versioning) {
8
+ return (
9
+ <>
10
+ <ToolbarButton
11
+ design="Transparent"
12
+ icon="navigation-left-arrow"
13
+ tooltip={this._previousButtonTooltip}
14
+ accessibleName={this._previousButtonAccessibleName}
15
+ disabled={this.currentStep <= 1}
16
+ onClick={this.handlePreviousVersionClick}
17
+ data-ui5-versioning-button="previous"
18
+ />
19
+ <ToolbarLabel
20
+ text={`${this.currentStep} / ${this.totalSteps}`}
21
+ class="version-step-counter"
22
+ />
23
+ <ToolbarButton
24
+ design="Transparent"
25
+ icon="navigation-right-arrow"
26
+ tooltip={this._nextButtonTooltip}
27
+ accessibleName={this._nextButtonAccessibleName}
28
+ disabled={this.totalSteps <= 0 || this.currentStep >= this.totalSteps}
29
+ onClick={this.handleNextVersionClick}
30
+ data-ui5-versioning-button="next"
31
+ />
32
+ </>
33
+ );
34
+ }
@@ -0,0 +1,49 @@
1
+ import type WritingAssistant from "./WritingAssistant.js";
2
+ import Versioning from "./Versioning.js";
3
+ import ToolbarLabel from "./ToolbarLabel.js";
4
+
5
+ import Toolbar from "@ui5/webcomponents/dist/Toolbar.js";
6
+ import ToolbarSpacer from "@ui5/webcomponents/dist/ToolbarSpacer.js";
7
+ import ToolbarButton from "@ui5/webcomponents/dist/ToolbarButton.js";
8
+
9
+ export default function WritingAssistantTemplate(this: WritingAssistant) {
10
+ const isMultiResults = this.totalVersions > 1;
11
+ const hasResults = (this.totalVersions > 0 && this.promptDescription) || this.loading;
12
+
13
+ return (
14
+ <Toolbar
15
+ accessibleName={this._toolbarAccessibleName}
16
+ aria-roledescription="toolbar"
17
+ class={`ui5-ai-writing-assistant-footer-bar${hasResults ? "--with-border" : ""}`}
18
+ >
19
+ {isMultiResults && !this.loading && (
20
+ <Versioning
21
+ currentStep={this.currentVersion}
22
+ totalSteps={this.totalVersions}
23
+ onVersion-change={this.handleVersionChange}
24
+ />
25
+ )}
26
+
27
+ {hasResults && this.promptDescription && (
28
+ <ToolbarLabel
29
+ text={this.promptDescription}
30
+ class="ui5-ai-writing-assistant-action-label"
31
+ />
32
+ )}
33
+
34
+ <ToolbarSpacer />
35
+
36
+ <ToolbarButton
37
+ id="ai-menu-btn"
38
+ design="Transparent"
39
+ icon={this.loading ? "stop" : "ai"}
40
+ data-state={this.loading ? "generating" : "generate"}
41
+ onClick={this.handleButtonClick}
42
+ tooltip={this.loading ? this._stopTooltip : this._buttonTooltip}
43
+ accessibilityAttributes={{ hasPopup: this.loading ? "false" : "menu" }}
44
+ accessibleName={this._buttonAccessibleName}
45
+ overflowPriority="NeverOverflow"
46
+ />
47
+ </Toolbar>
48
+ );
49
+ }
@@ -5,4 +5,46 @@
5
5
  PROMPT_INPUT_CHARACTERS_LEFT={0} characters remaining
6
6
 
7
7
  #XTXT: Text for characters over
8
- PROMPT_INPUT_CHARACTERS_EXCEEDED={0} characters over limit
8
+ PROMPT_INPUT_CHARACTERS_EXCEEDED={0} characters over limit
9
+
10
+ #XTXT: Text for
11
+ BUTTON_TOOLTIP_TEXT={0} with Artificial Intelligence
12
+
13
+ #XFLD: Text for the aria-label attribute of the Writing Assistant toolbar
14
+ WRITING_ASSISTANT_LABEL=Writing Assistant Toolbar Shift + F4
15
+
16
+ #XFLD: Next version button accessible name in Input
17
+ INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP=Next Version (Ctrl + Shift + Y)
18
+
19
+ #XFLD: Next version button accessible name in Input
20
+ INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Previous Version (Ctrl + Shift + Z)
21
+
22
+ #XFLD: Tooltip for the Writing Assistant button in Input
23
+ INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP=AI Writing Assistant (Shift + F4)
24
+
25
+ #XFLD: Previous version button accessible name
26
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Previous Version
27
+
28
+ #XFLD: Next version button accessible name
29
+ VERSIONING_NEXT_BUTTON_TEXT=Next Version
30
+
31
+ #XMSG: Announcement message when Writing Assistant starts generating
32
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Stop generating (ESC)
33
+
34
+ #XFLD: Accessible name for the Writing Assistant toolbar
35
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Writing Assistant Toolbar
36
+
37
+ #XFLD: Accessible name for the Writing Assistant button
38
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Writing Assistant
39
+
40
+ #XTOL: Tooltip for the Writing Assistant button
41
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Writing Assistant (Shift + F4)
42
+
43
+ #XTOL: Writing Assistant stop generating button tooltip
44
+ WRITING_ASSISTANT_STOP_TOOLTIP=Stop Generating (Esc)
45
+
46
+ #XFLD: Tooltip for the Previous Version button
47
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Previous Version
48
+
49
+ #XFLD: Tooltip for the Next Version button
50
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Next Version
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT=متبق {0} من الحروف
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED=تم تجاوز الحد بمقدار {0} من الحروف
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} مع الذكاء الاصطناعي
7
+
8
+ WRITING_ASSISTANT_LABEL=شريط أدوات مساعد الكتابة Shift + F4
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=الإصدار السابق
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=الإصدار التالي
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=إيقاف الإنشاء (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=شريط أدوات مساعد الكتابة
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=مساعد الكتابة
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=مساعد الكتابة (Shift + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=الإصدار السابق
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=الإصدار التالي
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT=Остават {0} символа
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED={0} символа над ограничението
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} с изкуствен интелект
7
+
8
+ WRITING_ASSISTANT_LABEL=Лента с инструменти на асистента за писане Shift + F4
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Предишна версия
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Следваща версия
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Спиране на генерирането (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Лента с инструменти на асистента за писане
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Асистент писане
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Асистент за писане (Shift + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Предишна версия
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Следваща версия
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT={0} caràcters restants
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED=S''han excedit {0} caràcters
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} amb intel·ligència artificial
7
+
8
+ WRITING_ASSISTANT_LABEL=Barra d''eines de l''assistent de redacció (Majús + F4)
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Versió anterior
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Versió següent
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Aturar la generació (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Barra d''eines de l''assistent de redacció
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Assistent de redacció
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Assistent de redacció (Majús + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Versió anterior
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Versió següent
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT={0} znakova preostaje
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED={0} znakova prekoračeno
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} sa vještačkom inteligencijom
7
+
8
+ WRITING_ASSISTANT_LABEL=Traka sa alatkama pomoćnika pri pisanju Shift + F4
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Prethodna verzija
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Sljedeća verzija
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Zaustavi generisanje (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Traka sa alatkama pomoćnika pri pisanju
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Pomoćnik pri pisanju
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Pomoćnik pri pisanju (Shift + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Prethodna verzija
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Sljedeća verzija
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT={0} znaky zbývají
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED={0} znaky přes limit
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} s umělou inteligencí
7
+
8
+ WRITING_ASSISTANT_LABEL=Nástrojová lišta asistenta psaní Shift + F4
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Předchozí verze
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Další verze
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Zastavit generování (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Nástrojová lišta asistenta psaní
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Asistent psaní
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Asistent psaní (Shift + F4
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Předchozí verze
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Další verze
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT={0} nod ar ôl
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED={0} nod dros yr uchafswm
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} gyda Deallusrwydd Artiffisial
7
+
8
+ WRITING_ASSISTANT_LABEL=Bar Offer Cynorthwyydd Ysgrifennu Shift + F4
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Fersiwn Flaenorol
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Fersiwn Nesaf
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Stopio cynhyrchu (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Bar Offer Cynorthwyydd Ysgrifennu
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Cynorthwyydd Ysgrifennu
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Cynorthwyydd Ysgrifennu (Shift + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Fersiwn Flaenorol
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Fersiwn Nesaf
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT={0} resterende tegn
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED={0} tegn over grænsen
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} med kunstig intelligens
7
+
8
+ WRITING_ASSISTANT_LABEL=Værktøjslinje for skriveassistent - Skift + F4
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Forrige version
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Næste version
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Stop generering (ESC)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Værktøjslinje for skriveassistent
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Skriveassistent
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Skriveassistent (Skift + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Forrige version
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Næste version
@@ -2,3 +2,23 @@
2
2
  PROMPT_INPUT_CHARACTERS_LEFT={0} Zeichen verbleibend
3
3
 
4
4
  PROMPT_INPUT_CHARACTERS_EXCEEDED={0} Zeichen über Limit
5
+
6
+ BUTTON_TOOLTIP_TEXT={0} mit künstlicher Intelligenz
7
+
8
+ WRITING_ASSISTANT_LABEL=Formulierungsassistenten-Toolbar (Umschalt + F4)
9
+
10
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Vorherige Version
11
+
12
+ VERSIONING_NEXT_BUTTON_TEXT=Nächste Version
13
+
14
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Generierung stoppen (Esc)
15
+
16
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Writing Assistant Toolbar
17
+
18
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Writing Assistant
19
+
20
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Writing Assistant (Shift + F4)
21
+
22
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Vorherige Version
23
+
24
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Nächste Version