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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/.ui5-cem-aliases.json +4 -0
  2. package/CHANGELOG.md +569 -0
  3. package/LICENSE.txt +201 -0
  4. package/README.md +11 -10
  5. package/dist/.tsbuildinfo +1 -1
  6. package/dist/Assets-fetch.d.ts +3 -0
  7. package/dist/Assets-fetch.js +6 -0
  8. package/dist/Assets-fetch.js.map +1 -0
  9. package/dist/Assets-node.d.ts +14 -0
  10. package/dist/Assets-node.js +17 -0
  11. package/dist/Assets-node.js.map +1 -0
  12. package/dist/Button.d.ts +41 -2
  13. package/dist/Button.js +59 -4
  14. package/dist/Button.js.map +1 -1
  15. package/dist/ButtonState.d.ts +2 -1
  16. package/dist/ButtonState.js +2 -1
  17. package/dist/ButtonState.js.map +1 -1
  18. package/dist/ButtonTemplate.js +1 -1
  19. package/dist/ButtonTemplate.js.map +1 -1
  20. package/dist/Input.d.ts +146 -0
  21. package/dist/Input.js +291 -0
  22. package/dist/Input.js.map +1 -0
  23. package/dist/InputTemplate.d.ts +10 -0
  24. package/dist/InputTemplate.js +28 -0
  25. package/dist/InputTemplate.js.map +1 -0
  26. package/dist/PromptInput.d.ts +4 -2
  27. package/dist/PromptInput.js +2 -1
  28. package/dist/PromptInput.js.map +1 -1
  29. package/dist/TextArea.d.ts +125 -0
  30. package/dist/TextArea.js +272 -0
  31. package/dist/TextArea.js.map +1 -0
  32. package/dist/TextAreaTemplate.d.ts +2 -0
  33. package/dist/TextAreaTemplate.js +13 -0
  34. package/dist/TextAreaTemplate.js.map +1 -0
  35. package/dist/ToolbarLabel.d.ts +39 -0
  36. package/dist/ToolbarLabel.js +67 -0
  37. package/dist/ToolbarLabel.js.map +1 -0
  38. package/dist/ToolbarLabelTemplate.d.ts +2 -0
  39. package/dist/ToolbarLabelTemplate.js +5 -0
  40. package/dist/ToolbarLabelTemplate.js.map +1 -0
  41. package/dist/Versioning.d.ts +95 -0
  42. package/dist/Versioning.js +187 -0
  43. package/dist/Versioning.js.map +1 -0
  44. package/dist/VersioningTemplate.d.ts +4 -0
  45. package/dist/VersioningTemplate.js +9 -0
  46. package/dist/VersioningTemplate.js.map +1 -0
  47. package/dist/WritingAssistant.d.ts +101 -0
  48. package/dist/WritingAssistant.js +201 -0
  49. package/dist/WritingAssistant.js.map +1 -0
  50. package/dist/WritingAssistantTemplate.d.ts +2 -0
  51. package/dist/WritingAssistantTemplate.js +12 -0
  52. package/dist/WritingAssistantTemplate.js.map +1 -0
  53. package/dist/bundle.esm.js +2 -0
  54. package/dist/bundle.esm.js.map +1 -1
  55. package/dist/css/themes/Button.css +1 -1
  56. package/dist/css/themes/Input.css +1 -0
  57. package/dist/css/themes/PromptInput.css +1 -1
  58. package/dist/css/themes/TextArea.css +1 -0
  59. package/dist/css/themes/Versioning.css +1 -0
  60. package/dist/css/themes/WritingAssistant.css +1 -0
  61. package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -0
  62. package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -0
  63. package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -0
  64. package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -0
  65. package/dist/custom-elements-internal.json +710 -3
  66. package/dist/custom-elements.json +607 -0
  67. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  68. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  69. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  70. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
  71. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  72. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  73. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  74. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  75. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  76. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  77. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  78. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  79. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  80. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  81. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  82. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  83. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  84. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  85. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  86. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  87. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  88. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  89. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  90. package/dist/generated/assets/i18n/messagebundle_id.json +1 -0
  91. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  92. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  93. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  94. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  95. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  96. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  97. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  98. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
  99. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  103. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  104. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  105. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  106. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  107. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  108. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  109. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  110. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  111. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  112. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  113. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  114. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  115. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  116. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  117. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  118. package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
  119. package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
  120. package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
  121. package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
  122. package/dist/generated/i18n/i18n-defaults.d.ts +15 -1
  123. package/dist/generated/i18n/i18n-defaults.js +15 -1
  124. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  125. package/dist/generated/json-imports/Themes-fetch.js +1 -1
  126. package/dist/generated/json-imports/Themes-fetch.js.map +1 -1
  127. package/dist/generated/json-imports/Themes-node.d.ts +1 -0
  128. package/dist/generated/json-imports/Themes-node.js +21 -0
  129. package/dist/generated/json-imports/Themes-node.js.map +1 -0
  130. package/dist/generated/json-imports/Themes.js +1 -1
  131. package/dist/generated/json-imports/Themes.js.map +1 -1
  132. package/dist/generated/json-imports/i18n-fetch.js +3 -1
  133. package/dist/generated/json-imports/i18n-fetch.js.map +1 -1
  134. package/dist/generated/json-imports/i18n-node.d.ts +1 -0
  135. package/dist/generated/json-imports/i18n-node.js +120 -0
  136. package/dist/generated/json-imports/i18n-node.js.map +1 -0
  137. package/dist/generated/json-imports/i18n.js +3 -1
  138. package/dist/generated/json-imports/i18n.js.map +1 -1
  139. package/dist/generated/themes/Button.css.d.ts +1 -1
  140. package/dist/generated/themes/Button.css.js +3 -3
  141. package/dist/generated/themes/Button.css.js.map +1 -1
  142. package/dist/generated/themes/Input.css.d.ts +2 -0
  143. package/dist/generated/themes/Input.css.js +8 -0
  144. package/dist/generated/themes/Input.css.js.map +1 -0
  145. package/dist/generated/themes/PromptInput.css.d.ts +1 -1
  146. package/dist/generated/themes/PromptInput.css.js +3 -3
  147. package/dist/generated/themes/PromptInput.css.js.map +1 -1
  148. package/dist/generated/themes/TextArea.css.d.ts +2 -0
  149. package/dist/generated/themes/TextArea.css.js +8 -0
  150. package/dist/generated/themes/TextArea.css.js.map +1 -0
  151. package/dist/generated/themes/Versioning.css.d.ts +2 -0
  152. package/dist/generated/themes/Versioning.css.js +8 -0
  153. package/dist/generated/themes/Versioning.css.js.map +1 -0
  154. package/dist/generated/themes/WritingAssistant.css.d.ts +2 -0
  155. package/dist/generated/themes/WritingAssistant.css.js +8 -0
  156. package/dist/generated/themes/WritingAssistant.css.js.map +1 -0
  157. package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
  158. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
  159. package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
  160. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
  161. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
  162. package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
  163. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
  164. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
  165. package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
  166. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
  167. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
  168. package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
  169. package/dist/vscode.html-custom-data.json +105 -0
  170. package/dist/web-types.json +309 -1
  171. package/package-scripts.cjs +4 -0
  172. package/package.json +22 -21
  173. package/src/ButtonTemplate.tsx +1 -0
  174. package/src/InputTemplate.tsx +197 -0
  175. package/src/TextArea.css +25 -0
  176. package/src/TextAreaTemplate.tsx +91 -0
  177. package/src/ToolbarLabelTemplate.tsx +9 -0
  178. package/src/VersioningTemplate.tsx +34 -0
  179. package/src/WritingAssistantTemplate.tsx +51 -0
  180. package/src/i18n/messagebundle.properties +43 -1
  181. package/src/i18n/messagebundle_ar.properties +28 -0
  182. package/src/i18n/messagebundle_bg.properties +28 -0
  183. package/src/i18n/messagebundle_ca.properties +28 -0
  184. package/src/i18n/messagebundle_cnr.properties +28 -0
  185. package/src/i18n/messagebundle_cs.properties +28 -0
  186. package/src/i18n/messagebundle_cy.properties +28 -0
  187. package/src/i18n/messagebundle_da.properties +28 -0
  188. package/src/i18n/messagebundle_de.properties +28 -0
  189. package/src/i18n/messagebundle_el.properties +28 -0
  190. package/src/i18n/messagebundle_en.properties +28 -0
  191. package/src/i18n/messagebundle_en_GB.properties +28 -0
  192. package/src/i18n/messagebundle_en_US_sappsd.properties +28 -0
  193. package/src/i18n/messagebundle_en_US_saprigi.properties +28 -0
  194. package/src/i18n/messagebundle_en_US_saptrc.properties +28 -0
  195. package/src/i18n/messagebundle_es.properties +28 -0
  196. package/src/i18n/messagebundle_es_MX.properties +29 -1
  197. package/src/i18n/messagebundle_et.properties +28 -0
  198. package/src/i18n/messagebundle_fi.properties +28 -0
  199. package/src/i18n/messagebundle_fr.properties +28 -0
  200. package/src/i18n/messagebundle_fr_CA.properties +28 -0
  201. package/src/i18n/messagebundle_hi.properties +28 -0
  202. package/src/i18n/messagebundle_hr.properties +30 -2
  203. package/src/i18n/messagebundle_hu.properties +28 -0
  204. package/src/i18n/messagebundle_id.properties +28 -0
  205. package/src/i18n/messagebundle_it.properties +28 -0
  206. package/src/i18n/messagebundle_iw.properties +28 -0
  207. package/src/i18n/messagebundle_ja.properties +28 -0
  208. package/src/i18n/messagebundle_kk.properties +28 -0
  209. package/src/i18n/messagebundle_ko.properties +28 -0
  210. package/src/i18n/messagebundle_lt.properties +28 -0
  211. package/src/i18n/messagebundle_lv.properties +28 -0
  212. package/src/i18n/messagebundle_mk.properties +28 -0
  213. package/src/i18n/messagebundle_ms.properties +28 -0
  214. package/src/i18n/messagebundle_nl.properties +28 -0
  215. package/src/i18n/messagebundle_no.properties +28 -0
  216. package/src/i18n/messagebundle_pl.properties +28 -0
  217. package/src/i18n/messagebundle_pt.properties +28 -0
  218. package/src/i18n/messagebundle_pt_PT.properties +28 -0
  219. package/src/i18n/messagebundle_ro.properties +28 -0
  220. package/src/i18n/messagebundle_ru.properties +28 -0
  221. package/src/i18n/messagebundle_sh.properties +28 -0
  222. package/src/i18n/messagebundle_sk.properties +28 -0
  223. package/src/i18n/messagebundle_sl.properties +28 -0
  224. package/src/i18n/messagebundle_sr.properties +28 -0
  225. package/src/i18n/messagebundle_sv.properties +28 -0
  226. package/src/i18n/messagebundle_th.properties +30 -2
  227. package/src/i18n/messagebundle_tr.properties +28 -0
  228. package/src/i18n/messagebundle_uk.properties +28 -0
  229. package/src/i18n/messagebundle_vi.properties +28 -0
  230. package/src/i18n/messagebundle_zh_CN.properties +28 -0
  231. package/src/i18n/messagebundle_zh_TW.properties +28 -0
  232. package/src/themes/Input.css +83 -0
  233. package/src/themes/PromptInput.css +5 -1
  234. package/src/themes/TextArea.css +45 -0
  235. package/src/themes/Versioning.css +20 -0
  236. package/src/themes/WritingAssistant.css +23 -0
  237. package/src/themes/base/Button-parameters.css +1 -1
  238. package/tsconfig.json +6 -0
  239. package/cypress/specs/Button.cy.tsx +0 -14
  240. package/cypress/support/commands.ts +0 -40
  241. package/cypress/support/component-index.html +0 -12
  242. package/cypress/support/component.ts +0 -36
  243. package/cypress/tsconfig.json +0 -43
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ui5/webcomponents-ai",
3
- "version": "0.0.0-a3b95fa49",
3
+ "version": "0.0.0-a8a75c830",
4
4
  "description": "UI5 Web Components: webcomponents.ai",
5
5
  "ui5": {
6
6
  "webComponentsPackage": true
@@ -8,8 +8,7 @@
8
8
  "type": "module",
9
9
  "author": "SAP SE (https://www.sap.com)",
10
10
  "license": "Apache-2.0",
11
- "private": false,
12
- "customElements": "./dist/custom-elements.json",
11
+ "customElements": "dist/custom-elements.json",
13
12
  "keywords": [
14
13
  "openui5",
15
14
  "sapui5",
@@ -18,23 +17,22 @@
18
17
  "scripts": {
19
18
  "clean": "wc-dev clean",
20
19
  "lint": "wc-dev lint",
21
- "lint:scope": "nps scope.lint",
20
+ "lint:scope": "wc-dev scope.lint",
22
21
  "start": "wc-dev start",
23
22
  "build": "wc-dev build",
24
23
  "watch": "wc-dev watch",
25
- "generate": "nps generate",
26
- "generateAPI": "nps generateAPI",
27
- "bundle": "nps build.bundle",
28
- "test": "nps test-cy-ci",
29
- "test:cypress": "nps test-cy-ci",
24
+ "generate": "wc-dev generate",
25
+ "generateAPI": "wc-dev generateAPI",
26
+ "bundle": "wc-dev build.bundle",
27
+ "test": "yarn test:cypress",
28
+ "test:cypress": "wc-dev test-cy-ci",
30
29
  "test:cypress:single": "npx cypress run --component --browser chrome --spec",
31
- "test:cypress:open": "nps test-cy-open",
30
+ "test:cypress:open": "wc-dev test-cy-open",
32
31
  "test:ssr": "node -e \"import('./test/ssr/component-imports.js')\"",
33
32
  "create-ui5-element": "wc-create-ui5-element",
34
33
  "prepublishOnly": "tsc -b"
35
34
  },
36
35
  "exports": {
37
- "./.port": "./.port",
38
36
  "./src/*": "./src/*",
39
37
  "./dist/*": "./dist/*",
40
38
  "./package.json": "./package.json",
@@ -44,18 +42,21 @@
44
42
  },
45
43
  "repository": {
46
44
  "type": "git",
47
- "url": "https://github.com/SAP/ui5-webcomponents.git",
45
+ "url": "https://github.com/UI5/webcomponents.git",
48
46
  "directory": "packages/ai"
49
47
  },
50
48
  "dependencies": {
51
- "@ui5/webcomponents": "0.0.0-a3b95fa49",
52
- "@ui5/webcomponents-base": "0.0.0-a3b95fa49",
53
- "@ui5/webcomponents-icons": "0.0.0-a3b95fa49",
54
- "@ui5/webcomponents-theming": "0.0.0-a3b95fa49"
49
+ "@ui5/webcomponents": "0.0.0-a8a75c830",
50
+ "@ui5/webcomponents-base": "0.0.0-a8a75c830",
51
+ "@ui5/webcomponents-icons": "0.0.0-a8a75c830",
52
+ "@ui5/webcomponents-theming": "0.0.0-a8a75c830"
55
53
  },
56
54
  "devDependencies": {
57
- "@ui5/cypress-internal": "0.0.0",
58
- "@ui5/webcomponents-tools": "0.0.0-a3b95fa49",
59
- "chromedriver": "^133.0.0"
60
- }
61
- }
55
+ "@custom-elements-manifest/analyzer": "^0.10.10",
56
+ "@ui5/cypress-internal": "0.1.0",
57
+ "@ui5/webcomponents-tools": "0.0.0-a8a75c830",
58
+ "cypress": "15.9.0",
59
+ "vite": "5.4.21"
60
+ },
61
+ "gitHead": "b606663e2feb753ddf5fc58c3b90dc15fb490364"
62
+ }
@@ -12,6 +12,7 @@ export default function ButtonTemplate(this: Button) {
12
12
  _hideArrowButton={this._hideArrowButton}
13
13
  onClick={this._onClick}
14
14
  onArrowClick={this._onArrowClick}
15
+ accessibilityAttributes={this._computedAccessibilityAttributes}
15
16
  >
16
17
  {this._hasText && (
17
18
  <div class="ui5-ai-button-text">{this._stateText}</div>
@@ -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.value}
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,25 @@
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--with-border {
24
+ border-top: 1px solid var(--sapPageFooter_BorderColor);
25
+ }
@@ -0,0 +1,91 @@
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
+ focused={this.focused}
62
+ onButtonClick={this._handleAIButtonClick}
63
+ onStopGeneration={this.handleStopGeneration}
64
+ onVersionChange={this._handleVersionChange}
65
+ />
66
+ </slot>
67
+ </div>
68
+ </div>
69
+
70
+ {this.showExceededText &&
71
+ <span class="ui5-textarea-exceeded-text">{this._exceededTextProps.exceededText}</span>
72
+ }
73
+
74
+ {this.hasValueState &&
75
+ <span id={`${this._id}-valueStateDesc`} class="ui5-hidden-text">{this.ariaValueStateHiddenText}</span>
76
+ }
77
+ </div>
78
+
79
+ {TextAreaPopoverTemplate.call(this)}
80
+
81
+ {/* ARIA live region for screen readers */}
82
+ <div aria-live="polite" aria-atomic="true" class="ui5-hidden-text">
83
+ {this.loading ? this.promptDescription : ""}
84
+ </div>
85
+
86
+ <div id="ai-menu-wrapper">
87
+ <slot name="menu"></slot>
88
+ </div>
89
+ </div>
90
+ );
91
+ }
@@ -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,51 @@
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
+ {this.focused && (
37
+ <ToolbarButton
38
+ id="ai-menu-btn"
39
+ design="Transparent"
40
+ icon={this.loading ? "stop" : "ai"}
41
+ data-state={this.loading ? "generating" : "generate"}
42
+ onClick={this.handleButtonClick}
43
+ tooltip={this.loading ? this._stopTooltip : this._buttonTooltip}
44
+ accessibilityAttributes={{ hasPopup: this.loading ? "false" : "menu" }}
45
+ accessibleName={this._buttonAccessibleName}
46
+ overflowPriority="NeverOverflow"
47
+ />
48
+ )}
49
+ </Toolbar>
50
+ );
51
+ }
@@ -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
+ #XTOL: Tooltip for the Previous Version button
47
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Previous Version (Ctrl + Shift + Z)
48
+
49
+ #XTOL: Tooltip for the Next Version button
50
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Next Version (Ctrl + Shift + Y)
@@ -2,3 +2,31 @@
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
+ INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP=الإصدار التالي (Ctrl + Shift + Y)
11
+
12
+ INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP=الإصدار السابق (Ctrl + Shift + Z)
13
+
14
+ INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP=مساعد الكتابة بالذكاء الاصطناعي (Shift + ‏F4)
15
+
16
+ VERSIONING_PREVIOUS_BUTTON_TEXT=الإصدار السابق
17
+
18
+ VERSIONING_NEXT_BUTTON_TEXT=الإصدار التالي
19
+
20
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=إيقاف الإنشاء (ESC)
21
+
22
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=شريط أدوات مساعد الكتابة
23
+
24
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=مساعد الكتابة
25
+
26
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=مساعد الكتابة (Shift + F4)
27
+
28
+ WRITING_ASSISTANT_STOP_TOOLTIP=إيقاف الإنشاء (ESC)
29
+
30
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=الإصدار السابق (Ctrl + Shift + Z)
31
+
32
+ VERSIONING_NEXT_BUTTON_TOOLTIP=الإصدار التالي (Ctrl + Shift + Y)
@@ -2,3 +2,31 @@
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
+ INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP=Следваща версия (Ctrl + Shift + Y)
11
+
12
+ INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Предходна версия (Ctrl + Shift + Z)
13
+
14
+ INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP=AI асистент за писане (Shift + F4)
15
+
16
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Предишна версия
17
+
18
+ VERSIONING_NEXT_BUTTON_TEXT=Следваща версия
19
+
20
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Спиране на генерирането (ESC)
21
+
22
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Лента с инструменти на асистента за писане
23
+
24
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Асистент писане
25
+
26
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Асистент за писане (Shift + F4)
27
+
28
+ WRITING_ASSISTANT_STOP_TOOLTIP=Спиране на генерирането (Esc)
29
+
30
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Предходна версия (Ctrl + Shift + Z)
31
+
32
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Следваща версия (Ctrl + Shift + Y)
@@ -2,3 +2,31 @@
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
+ INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP=Següent versió (Ctrl + Majús + Y)
11
+
12
+ INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Versió anterior (Ctrl + Majús + Z)
13
+
14
+ INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP=Assistent de redacció amb IA (Majús + F4)
15
+
16
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Versió anterior
17
+
18
+ VERSIONING_NEXT_BUTTON_TEXT=Versió següent
19
+
20
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Aturar la generació (ESC)
21
+
22
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Barra d''eines de l''assistent de redacció
23
+
24
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Assistent de redacció
25
+
26
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Assistent de redacció (Majús + F4)
27
+
28
+ WRITING_ASSISTANT_STOP_TOOLTIP=Aturar la generació (Esc)
29
+
30
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Versió anterior (Control + Majús + Z)
31
+
32
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Versió següent (Control + Majús + Y)
@@ -2,3 +2,31 @@
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
+ INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP=Sljedeća verzija (Ctrl + Shift + Y)
11
+
12
+ INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Prethodna verzija (Ctrl + Shift + Z)
13
+
14
+ INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP=Pomoćnik pri pisanju uz upotrebu vještačke inteligencije (Shift + F4)
15
+
16
+ VERSIONING_PREVIOUS_BUTTON_TEXT=Prethodna verzija
17
+
18
+ VERSIONING_NEXT_BUTTON_TEXT=Sljedeća verzija
19
+
20
+ WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT=Zaustavi generisanje (ESC)
21
+
22
+ WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME=Traka sa alatkama pomoćnika pri pisanju
23
+
24
+ WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME=Pomoćnik pri pisanju
25
+
26
+ WRITING_ASSISTANT_BUTTON_TOOLTIP=Pomoćnik pri pisanju (Shift + F4)
27
+
28
+ WRITING_ASSISTANT_STOP_TOOLTIP=Zaustavi generisanje (Esc)
29
+
30
+ VERSIONING_PREVIOUS_BUTTON_TOOLTIP=Prethodna verzija (Ctrl + Shift + Z)
31
+
32
+ VERSIONING_NEXT_BUTTON_TOOLTIP=Sljedeća verzija (Ctrl + Shift + Y)