@ui5/webcomponents-ai 2.16.0-rc.2 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +3 -2
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/Assets-fetch.js +1 -1
  5. package/dist/Assets-fetch.js.map +1 -1
  6. package/dist/Assets-node.js +1 -1
  7. package/dist/Assets-node.js.map +1 -1
  8. package/dist/Input.d.ts +139 -0
  9. package/dist/Input.js +290 -0
  10. package/dist/Input.js.map +1 -0
  11. package/dist/InputTemplate.d.ts +10 -0
  12. package/dist/InputTemplate.js +28 -0
  13. package/dist/InputTemplate.js.map +1 -0
  14. package/dist/TextArea.d.ts +20 -19
  15. package/dist/TextArea.js +33 -38
  16. package/dist/TextArea.js.map +1 -1
  17. package/dist/TextAreaTemplate.d.ts +2 -2
  18. package/dist/TextAreaTemplate.js +2 -2
  19. package/dist/TextAreaTemplate.js.map +1 -1
  20. package/dist/Versioning.js +2 -2
  21. package/dist/Versioning.js.map +1 -1
  22. package/dist/WritingAssistant.d.ts +9 -7
  23. package/dist/WritingAssistant.js +18 -11
  24. package/dist/WritingAssistant.js.map +1 -1
  25. package/dist/WritingAssistantTemplate.js +2 -2
  26. package/dist/WritingAssistantTemplate.js.map +1 -1
  27. package/dist/bundle.esm.js +2 -1
  28. package/dist/bundle.esm.js.map +1 -1
  29. package/dist/css/themes/Button.css +1 -1
  30. package/dist/css/themes/Input.css +1 -0
  31. package/dist/css/themes/TextArea.css +1 -0
  32. package/dist/css/themes/WritingAssistant.css +1 -1
  33. package/dist/custom-elements-internal.json +177 -21
  34. package/dist/custom-elements.json +147 -21
  35. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  36. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  37. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  38. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  39. package/dist/generated/i18n/i18n-defaults.d.ts +5 -1
  40. package/dist/generated/i18n/i18n-defaults.js +5 -1
  41. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  42. package/dist/generated/themes/Button.css.d.ts +1 -1
  43. package/dist/generated/themes/Button.css.js +1 -1
  44. package/dist/generated/themes/Button.css.js.map +1 -1
  45. package/dist/generated/themes/Input.css.d.ts +2 -0
  46. package/dist/generated/themes/Input.css.js +8 -0
  47. package/dist/generated/themes/Input.css.js.map +1 -0
  48. package/dist/generated/themes/TextArea.css.d.ts +2 -0
  49. package/dist/generated/themes/{AITextArea.css.js → TextArea.css.js} +2 -2
  50. package/dist/generated/themes/TextArea.css.js.map +1 -0
  51. package/dist/generated/themes/WritingAssistant.css.d.ts +1 -1
  52. package/dist/generated/themes/WritingAssistant.css.js +1 -1
  53. package/dist/generated/themes/WritingAssistant.css.js.map +1 -1
  54. package/dist/vscode.html-custom-data.json +28 -6
  55. package/dist/web-types.json +89 -14
  56. package/package.json +7 -7
  57. package/src/InputTemplate.tsx +197 -0
  58. package/src/TextAreaTemplate.tsx +5 -5
  59. package/src/WritingAssistantTemplate.tsx +5 -5
  60. package/src/i18n/messagebundle.properties +20 -8
  61. package/src/i18n/messagebundle_en_GB.properties +4 -4
  62. package/src/i18n/messagebundle_en_US_sappsd.properties +4 -4
  63. package/src/i18n/messagebundle_en_US_saprigi.properties +4 -4
  64. package/src/i18n/messagebundle_en_US_saptrc.properties +4 -4
  65. package/src/themes/Input.css +83 -0
  66. package/dist/css/themes/AITextArea.css +0 -1
  67. package/dist/generated/themes/AITextArea.css.d.ts +0 -2
  68. package/dist/generated/themes/AITextArea.css.js.map +0 -1
  69. /package/src/themes/{AITextArea.css → TextArea.css} +0 -0
@@ -1,34 +1,33 @@
1
- import TextArea from "@ui5/webcomponents/dist/TextArea.js";
1
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
2
2
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
3
3
  /**
4
4
  * @class
5
5
  *
6
6
  * ### Overview
7
7
  *
8
- * The `ui5-ai-textarea` component extends the standard TextArea with AI Writing Assistant capabilities.
8
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
9
9
  * It provides AI-powered text generation, editing suggestions, and version management functionality.
10
10
  *
11
11
  * ### Structure
12
12
  * The `ui5-ai-textarea` consists of the following elements:
13
13
  * - TextArea: The main text input area with all standard textarea functionality
14
- * - AI Toolbar: Specialized toolbar with AI generation controls
15
- * - Version Navigation: Controls for navigating between AI-generated versions
16
- * - Menu Integration: Support for AI action menu
17
- *
18
- * Single vs multiple result display is determined internally based on totalVersions count.
14
+ * - WritingAssistant: Dedicated toolbar containing:
15
+ * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions
16
+ * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting
19
17
  *
20
18
  * ### ES6 Module Import
21
19
  *
22
- * `import "@sap-webcomponents/ai/dist/TextArea.js";`
20
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
23
21
  *
24
22
  * @constructor
25
- * @extends TextArea
23
+ * @extends BaseTextArea
24
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
26
25
  * @since 2.16.0
27
26
  * @public
28
27
  * @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.
29
28
  */
30
- declare class AITextArea extends TextArea {
31
- eventDetails: TextArea["eventDetails"] & {
29
+ declare class TextArea extends BaseTextArea {
30
+ eventDetails: BaseTextArea["eventDetails"] & {
32
31
  "version-change": {
33
32
  backwards: boolean;
34
33
  };
@@ -43,25 +42,27 @@ declare class AITextArea extends TextArea {
43
42
  */
44
43
  loading: boolean;
45
44
  /**
46
- * Defines the action text of the AI Writing Assistant.
45
+ * Defines the prompt description of the current action.
47
46
  *
48
47
  * @default ""
49
48
  * @public
50
49
  */
51
- actionText: string;
50
+ promptDescription: string;
52
51
  /**
53
- * Indicates the index of the currently displayed result version.
52
+ * Indicates the index of the currently displayed version.
54
53
  *
55
- * The index is **1-based** (i.e. `1` represents the first result).
56
54
  *
57
- * @default 1
55
+ * @default 0
58
56
  * @public
59
57
  */
60
- currentVersionIndex: number;
58
+ currentVersion: number;
61
59
  /**
62
60
  * Indicates the total number of result versions available.
63
61
  *
64
- * @default 1
62
+ * Notes:
63
+ * Versioning is hidden if the value is `0`
64
+ *
65
+ * @default 0
65
66
  * @public
66
67
  */
67
68
  totalVersions: number;
@@ -112,4 +113,4 @@ declare class AITextArea extends TextArea {
112
113
  */
113
114
  handleStopGeneration: () => void;
114
115
  }
115
- export default AITextArea;
116
+ export default TextArea;
package/dist/TextArea.js CHANGED
@@ -4,51 +4,48 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
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
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var AITextArea_1;
7
+ var TextArea_1;
8
8
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
9
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
10
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
11
11
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
12
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
13
- import TextArea from "@ui5/webcomponents/dist/TextArea.js";
14
- import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
13
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
15
14
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
16
15
  import { WRITING_ASSISTANT_LABEL, } from "./generated/i18n/i18n-defaults.js";
17
16
  // Styles
18
- import AITextAreaCss from "./generated/themes/AITextArea.css.js";
17
+ import TextAreaCss from "./generated/themes/TextArea.css.js";
19
18
  import textareaStyles from "@ui5/webcomponents/dist/generated/themes/TextArea.css.js";
20
19
  import valueStateMessageStyles from "@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js";
21
20
  // Templates
22
21
  import TextAreaTemplate from "./TextAreaTemplate.js";
23
- import WritingAssistant from "./WritingAssistant.js";
24
22
  /**
25
23
  * @class
26
24
  *
27
25
  * ### Overview
28
26
  *
29
- * The `ui5-ai-textarea` component extends the standard TextArea with AI Writing Assistant capabilities.
27
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
30
28
  * It provides AI-powered text generation, editing suggestions, and version management functionality.
31
29
  *
32
30
  * ### Structure
33
31
  * The `ui5-ai-textarea` consists of the following elements:
34
32
  * - TextArea: The main text input area with all standard textarea functionality
35
- * - AI Toolbar: Specialized toolbar with AI generation controls
36
- * - Version Navigation: Controls for navigating between AI-generated versions
37
- * - Menu Integration: Support for AI action menu
38
- *
39
- * Single vs multiple result display is determined internally based on totalVersions count.
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
40
36
  *
41
37
  * ### ES6 Module Import
42
38
  *
43
- * `import "@sap-webcomponents/ai/dist/TextArea.js";`
39
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
44
40
  *
45
41
  * @constructor
46
- * @extends TextArea
42
+ * @extends BaseTextArea
43
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
47
44
  * @since 2.16.0
48
45
  * @public
49
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.
50
47
  */
51
- let AITextArea = AITextArea_1 = class AITextArea extends TextArea {
48
+ let TextArea = TextArea_1 = class TextArea extends BaseTextArea {
52
49
  constructor() {
53
50
  super(...arguments);
54
51
  /**
@@ -59,28 +56,30 @@ let AITextArea = AITextArea_1 = class AITextArea extends TextArea {
59
56
  */
60
57
  this.loading = false;
61
58
  /**
62
- * Defines the action text of the AI Writing Assistant.
59
+ * Defines the prompt description of the current action.
63
60
  *
64
61
  * @default ""
65
62
  * @public
66
63
  */
67
- this.actionText = "";
64
+ this.promptDescription = "";
68
65
  /**
69
- * Indicates the index of the currently displayed result version.
66
+ * Indicates the index of the currently displayed version.
70
67
  *
71
- * The index is **1-based** (i.e. `1` represents the first result).
72
68
  *
73
- * @default 1
69
+ * @default 0
74
70
  * @public
75
71
  */
76
- this.currentVersionIndex = 1;
72
+ this.currentVersion = 0;
77
73
  /**
78
74
  * Indicates the total number of result versions available.
79
75
  *
80
- * @default 1
76
+ * Notes:
77
+ * Versioning is hidden if the value is `0`
78
+ *
79
+ * @default 0
81
80
  * @public
82
81
  */
83
- this.totalVersions = 1;
82
+ this.totalVersions = 0;
84
83
  /**
85
84
  * Handles the generate click event from the AI toolbar.
86
85
  * Opens the AI menu and sets the opener element.
@@ -112,7 +111,7 @@ let AITextArea = AITextArea_1 = class AITextArea extends TextArea {
112
111
  };
113
112
  }
114
113
  static async onDefine() {
115
- AITextArea_1.i18nBundle = await getI18nBundle("@ui5/webcomponents-ai");
114
+ TextArea_1.i18nBundle = await getI18nBundle("@ui5/webcomponents-ai");
116
115
  }
117
116
  /**
118
117
  * Handles the click event for the "Previous Version" button.
@@ -180,25 +179,25 @@ let AITextArea = AITextArea_1 = class AITextArea extends TextArea {
180
179
  }
181
180
  }
182
181
  get _ariaLabel() {
183
- return this.accessibleName || AITextArea_1.i18nBundle.getText(WRITING_ASSISTANT_LABEL);
182
+ return this.accessibleName || TextArea_1.i18nBundle.getText(WRITING_ASSISTANT_LABEL);
184
183
  }
185
184
  };
186
185
  __decorate([
187
186
  property({ type: Boolean })
188
- ], AITextArea.prototype, "loading", void 0);
187
+ ], TextArea.prototype, "loading", void 0);
189
188
  __decorate([
190
189
  property()
191
- ], AITextArea.prototype, "actionText", void 0);
190
+ ], TextArea.prototype, "promptDescription", void 0);
192
191
  __decorate([
193
192
  property({ type: Number })
194
- ], AITextArea.prototype, "currentVersionIndex", void 0);
193
+ ], TextArea.prototype, "currentVersion", void 0);
195
194
  __decorate([
196
195
  property({ type: Number })
197
- ], AITextArea.prototype, "totalVersions", void 0);
196
+ ], TextArea.prototype, "totalVersions", void 0);
198
197
  __decorate([
199
198
  slot({ type: HTMLElement })
200
- ], AITextArea.prototype, "menu", void 0);
201
- AITextArea = AITextArea_1 = __decorate([
199
+ ], TextArea.prototype, "menu", void 0);
200
+ TextArea = TextArea_1 = __decorate([
202
201
  customElement({
203
202
  tag: "ui5-ai-textarea",
204
203
  languageAware: true,
@@ -207,11 +206,7 @@ AITextArea = AITextArea_1 = __decorate([
207
206
  styles: [
208
207
  textareaStyles,
209
208
  valueStateMessageStyles,
210
- AITextAreaCss,
211
- ],
212
- dependencies: [
213
- WritingAssistant,
214
- BusyIndicator,
209
+ TextAreaCss,
215
210
  ],
216
211
  })
217
212
  /**
@@ -228,7 +223,7 @@ AITextArea = AITextArea_1 = __decorate([
228
223
  */
229
224
  ,
230
225
  event("stop-generation")
231
- ], AITextArea);
232
- AITextArea.define();
233
- export default AITextArea;
226
+ ], TextArea);
227
+ TextArea.define();
228
+ export default TextArea;
234
229
  //# sourceMappingURL=TextArea.js.map
@@ -1 +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 TextArea from \"@ui5/webcomponents/dist/TextArea.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.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 AITextAreaCss from \"./generated/themes/AITextArea.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\";\nimport WritingAssistant from \"./WritingAssistant.js\";\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-textarea` component extends the standard TextArea with AI 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 * - AI Toolbar: Specialized toolbar with AI generation controls\n * - Version Navigation: Controls for navigating between AI-generated versions\n * - Menu Integration: Support for AI action menu\n *\n * Single vs multiple result display is determined internally based on totalVersions count.\n *\n * ### ES6 Module Import\n *\n * `import \"@sap-webcomponents/ai/dist/TextArea.js\";`\n *\n * @constructor\n * @extends TextArea\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\tAITextAreaCss,\n\t],\n\tdependencies: [\n\t\tWritingAssistant,\n\t\tBusyIndicator,\n\t],\n})\n\n/**\n * Fired when the user clicks on version navigation buttons.\n *\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 AITextArea extends TextArea {\n\teventDetails!: TextArea[\"eventDetails\"] & {\n\t\t\"version-change\": {\n\t\t\tbackwards: boolean;\n\t\t};\n\t\t\"stop-generation\": object;\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 action text of the AI Writing Assistant.\n\t *\n\t * @default \"\"\n\t * @public\n\t */\n\t@property()\n\tactionText = \"\";\n\n\t/**\n\t * Indicates the index of the currently displayed result version.\n\t *\n\t * The index is **1-based** (i.e. `1` represents the first result).\n\t *\n\t * @default 1\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcurrentVersionIndex = 1;\n\n\t/**\n\t * Indicates the total number of result versions available.\n\t *\n\t * @default 1\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 1;\n\n\t@slot({ type: HTMLElement })\n\tmenu!: Array<HTMLElement>;\n\n\tstatic i18nBundle: I18nBundle;\n\n\tstatic async onDefine() {\n\t\tAITextArea.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 || AITextArea.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\nAITextArea.define();\n\nexport default AITextArea;\n"]}
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\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 * @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\": {\n\t\t\tbackwards: boolean;\n\t\t};\n\t\t\"stop-generation\": object;\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 default TextArea;\n"]}
@@ -1,2 +1,2 @@
1
- import type AITextArea from "./TextArea.js";
2
- export default function TextAreaTemplate(this: AITextArea): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
1
+ import type TextArea from "./TextArea.js";
2
+ export default function TextAreaTemplate(this: TextArea): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
@@ -6,8 +6,8 @@ export default function TextAreaTemplate() {
6
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
7
  _jsx("div", { id: `${this._id}-mirror`, class: "ui5-textarea-mirror", "aria-hidden": "true", children: this._mirrorText.map(mirrorText => {
8
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, currentVersionIndex: this.currentVersionIndex, totalVersions: this.totalVersions, actionText: this.actionText, onButtonClick: this._handleAIButtonClick, onStopGeneration: this.handleStopGeneration, onVersionChange: this._handleVersionChange }) }) })] }), this.showExceededText &&
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
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.actionText : "" }), _jsx("div", { id: "ai-menu-wrapper", children: _jsx("slot", { name: "menu" }) })] }));
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
12
  }
13
13
  //# sourceMappingURL=TextAreaTemplate.js.map
@@ -1 +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,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAC7C,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,UAAU,EAAE,IAAI,CAAC,UAAU,EAC3B,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,UAAU,CAAC,CAAC,CAAC,EAAE,GAC/B,EAEN,cAAK,EAAE,EAAC,iBAAiB,YACxB,eAAM,IAAI,EAAC,MAAM,GAAQ,GACpB,IACD,CACN,CAAC;AACH,CAAC","sourcesContent":["import type AITextArea 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: AITextArea) {\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\tcurrentVersionIndex={this.currentVersionIndex}\n\t\t\t\t\t\t\t\ttotalVersions={this.totalVersions}\n\t\t\t\t\t\t\t\tactionText={this.actionText}\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.actionText : \"\"}\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"]}
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"]}
@@ -111,9 +111,9 @@ let Versioning = Versioning_1 = class Versioning extends ToolbarItem {
111
111
  return;
112
112
  }
113
113
  const isPreviousDisabled = this.currentStep <= 1;
114
- const isNextDisabled = this.currentStep === this.totalSteps;
114
+ const isNextDisabled = this.currentStep >= this.totalSteps;
115
115
  const wasPreviousDisabled = this._previousCurrentStep <= 1;
116
- const wasNextDisabled = this._previousCurrentStep === this._previousTotalSteps;
116
+ const wasNextDisabled = this._previousCurrentStep >= this._previousTotalSteps;
117
117
  if (isPreviousDisabled && !wasPreviousDisabled && !isNextDisabled && this._lastClickedButton === LastClickedButton.Previous && nextButton instanceof HTMLElement) {
118
118
  nextButton.focus();
119
119
  this._lastClickedButton = LastClickedButton.None;
@@ -1 +1 @@
1
- {"version":3,"file":"Versioning.js","sourceRoot":"","sources":["../src/Versioning.ts"],"names":[],"mappings":"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","sourcesContent":["import ToolbarItem from \"@ui5/webcomponents/dist/ToolbarItem.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 jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport {\n\tVERSIONING_PREVIOUS_BUTTON_TEXT,\n\tVERSIONING_NEXT_BUTTON_TEXT,\n\tVERSIONING_PREVIOUS_BUTTON_TOOLTIP,\n\tVERSIONING_NEXT_BUTTON_TOOLTIP,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// UI5 Components\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport Label from \"@ui5/webcomponents/dist/Label.js\";\nimport ToolbarButton from \"@ui5/webcomponents/dist/ToolbarButton.js\";\nimport ToolbarLabel from \"./ToolbarLabel.js\";\n\n// Types\nimport VersioningTemplate from \"./VersioningTemplate.js\";\n\n// Styles\nimport VersioningCss from \"./generated/themes/Versioning.css.js\";\n\n// Icons\nimport \"@ui5/webcomponents-icons/dist/navigation-left-arrow.js\";\nimport \"@ui5/webcomponents-icons/dist/navigation-right-arrow.js\";\n\nenum LastClickedButton {\n\tNone = \"\",\n\tPrevious = \"previous\",\n\tNext = \"next\"\n}\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-versioning` component provides navigation controls for AI-generated content versions.\n * It displays the current version index and total versions, with previous/next navigation buttons.\n * This component extends ToolbarItem to participate in toolbar overflow behavior as a single unit.\n *\n * ### Structure\n * The `ui5-ai-versioning` consists of the following elements:\n * - Previous Button: Navigates to the previous version (disabled when at first version)\n * - Version Counter: Shows current version / total versions (e.g., \"2 / 5\")\n * - Next Button: Navigates to the nex\n * t version (disabled when at last version)\n *\n * ### Focus Management\n * The component automatically manages focus when users reach version boundaries,\n * moving focus to the available navigation button when one becomes disabled.\n *\n * ### Responsive Behavior\n * When used in a toolbar, the entire versioning component (buttons + label) will overflow\n * together as a single unit when there is insufficient space.\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/Versioning.js\";`\n *\n * @constructor\n * @extends ToolbarItem\n * @since 2.16.0\n * @private\n */\n@customElement({\n\ttag: \"ui5-ai-versioning\",\n\trenderer: jsxRenderer,\n\tstyles: VersioningCss,\n\ttemplate: VersioningTemplate,\n\tdependencies: [\n\t\tButton,\n\t\tLabel,\n\t\tToolbarButton,\n\t\tToolbarLabel,\n\t],\n})\n\n/**\n * Fired when the user clicks on version navigation buttons.\n *\n * @public\n */\n@event(\"version-change\")\n\nclass Versioning extends ToolbarItem {\n\teventDetails!: ToolbarItem[\"eventDetails\"] & {\n\t\t\"version-change\": {\n\t\t\tbackwards: boolean;\n\t\t};\n\t};\n\n\t/**\n\t * Indicates the index of the currently displayed result version.\n\t *\n\t * This property represents the current position in the version history.\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcurrentStep = 0;\n\n\t/**\n\t * The total number of available result versions.\n\t *\n\t * Note: 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\ttotalSteps = 0;\n\n\t_previousCurrentStep = 0;\n\t_previousTotalSteps = 0;\n\t_lastClickedButton = LastClickedButton.None;\n\n\tstatic i18nBundle: I18nBundle;\n\n\tstatic async onDefine() {\n\t\tVersioning.i18nBundle = await getI18nBundle(\"@ui5/webcomponents-ai\");\n\t}\n\n\tonAfterRendering() {\n\t\tthis._manageFocus();\n\t\tthis._previousCurrentStep = this.currentStep;\n\t\tthis._previousTotalSteps = this.totalSteps;\n\t\tthis._lastClickedButton = LastClickedButton.None;\n\t}\n\n\t/**\n\t * Manages focus when navigation buttons become disabled/enabled.\n\t * Automatically moves focus to available button when user reaches boundaries.\n\t * @private\n\t */\n\t_manageFocus() {\n\t\tif (!this.shadowRoot) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst previousButton = this.shadowRoot.querySelector(\"[data-ui5-versioning-button=\\\"previous\\\"]\");\n\t\tconst nextButton = this.shadowRoot.querySelector(\"[data-ui5-versioning-button=\\\"next\\\"]\");\n\n\t\tif (!previousButton || !nextButton) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isPreviousDisabled = this.currentStep <= 1;\n\t\tconst isNextDisabled = this.currentStep === this.totalSteps;\n\t\tconst wasPreviousDisabled = this._previousCurrentStep <= 1;\n\t\tconst wasNextDisabled = this._previousCurrentStep === this._previousTotalSteps;\n\n\t\tif (isPreviousDisabled && !wasPreviousDisabled && !isNextDisabled && this._lastClickedButton === LastClickedButton.Previous && nextButton instanceof HTMLElement) {\n\t\t\tnextButton.focus();\n\t\t\tthis._lastClickedButton = LastClickedButton.None;\n\t\t} else if (isNextDisabled && !wasNextDisabled && !isPreviousDisabled && this._lastClickedButton === LastClickedButton.Next && previousButton instanceof HTMLElement) {\n\t\t\tpreviousButton.focus();\n\t\t\tthis._lastClickedButton = LastClickedButton.None;\n\t\t}\n\t}\n\n\thandlePreviousVersionClick() {\n\t\tthis._lastClickedButton = LastClickedButton.Previous;\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: true });\n\t}\n\n\thandleNextVersionClick() {\n\t\tthis._lastClickedButton = LastClickedButton.Next;\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: false });\n\t}\n\n\tget _previousButtonAccessibleName() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_PREVIOUS_BUTTON_TEXT);\n\t}\n\n\tget _nextButtonAccessibleName() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_NEXT_BUTTON_TEXT);\n\t}\n\n\tget _previousButtonTooltip() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_PREVIOUS_BUTTON_TOOLTIP);\n\t}\n\n\tget _nextButtonTooltip() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_NEXT_BUTTON_TOOLTIP);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget classes() {\n\t\treturn {\n\t\t\troot: {\n\t\t\t\t...super.classes.root,\n\t\t\t\t\"ui5-ai-versioning\": true,\n\t\t\t},\n\t\t};\n\t}\n}\n\nVersioning.define();\n\nexport default Versioning;\n"]}
1
+ {"version":3,"file":"Versioning.js","sourceRoot":"","sources":["../src/Versioning.ts"],"names":[],"mappings":"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","sourcesContent":["import ToolbarItem from \"@ui5/webcomponents/dist/ToolbarItem.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 jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport {\n\tVERSIONING_PREVIOUS_BUTTON_TEXT,\n\tVERSIONING_NEXT_BUTTON_TEXT,\n\tVERSIONING_PREVIOUS_BUTTON_TOOLTIP,\n\tVERSIONING_NEXT_BUTTON_TOOLTIP,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// UI5 Components\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport Label from \"@ui5/webcomponents/dist/Label.js\";\nimport ToolbarButton from \"@ui5/webcomponents/dist/ToolbarButton.js\";\nimport ToolbarLabel from \"./ToolbarLabel.js\";\n\n// Types\nimport VersioningTemplate from \"./VersioningTemplate.js\";\n\n// Styles\nimport VersioningCss from \"./generated/themes/Versioning.css.js\";\n\n// Icons\nimport \"@ui5/webcomponents-icons/dist/navigation-left-arrow.js\";\nimport \"@ui5/webcomponents-icons/dist/navigation-right-arrow.js\";\n\nenum LastClickedButton {\n\tNone = \"\",\n\tPrevious = \"previous\",\n\tNext = \"next\"\n}\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-versioning` component provides navigation controls for AI-generated content versions.\n * It displays the current version index and total versions, with previous/next navigation buttons.\n * This component extends ToolbarItem to participate in toolbar overflow behavior as a single unit.\n *\n * ### Structure\n * The `ui5-ai-versioning` consists of the following elements:\n * - Previous Button: Navigates to the previous version (disabled when at first version)\n * - Version Counter: Shows current version / total versions (e.g., \"2 / 5\")\n * - Next Button: Navigates to the nex\n * t version (disabled when at last version)\n *\n * ### Focus Management\n * The component automatically manages focus when users reach version boundaries,\n * moving focus to the available navigation button when one becomes disabled.\n *\n * ### Responsive Behavior\n * When used in a toolbar, the entire versioning component (buttons + label) will overflow\n * together as a single unit when there is insufficient space.\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/Versioning.js\";`\n *\n * @constructor\n * @extends ToolbarItem\n * @since 2.16.0\n * @private\n */\n@customElement({\n\ttag: \"ui5-ai-versioning\",\n\trenderer: jsxRenderer,\n\tstyles: VersioningCss,\n\ttemplate: VersioningTemplate,\n\tdependencies: [\n\t\tButton,\n\t\tLabel,\n\t\tToolbarButton,\n\t\tToolbarLabel,\n\t],\n})\n\n/**\n * Fired when the user clicks on version navigation buttons.\n *\n * @public\n */\n@event(\"version-change\")\n\nclass Versioning extends ToolbarItem {\n\teventDetails!: ToolbarItem[\"eventDetails\"] & {\n\t\t\"version-change\": {\n\t\t\tbackwards: boolean;\n\t\t};\n\t};\n\n\t/**\n\t * Indicates the index of the currently displayed result version.\n\t *\n\t * This property represents the current position in the version history.\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcurrentStep = 0;\n\n\t/**\n\t * The total number of available result versions.\n\t *\n\t * Note: 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\ttotalSteps = 0;\n\n\t_previousCurrentStep = 0;\n\t_previousTotalSteps = 0;\n\t_lastClickedButton = LastClickedButton.None;\n\n\tstatic i18nBundle: I18nBundle;\n\n\tstatic async onDefine() {\n\t\tVersioning.i18nBundle = await getI18nBundle(\"@ui5/webcomponents-ai\");\n\t}\n\n\tonAfterRendering() {\n\t\tthis._manageFocus();\n\t\tthis._previousCurrentStep = this.currentStep;\n\t\tthis._previousTotalSteps = this.totalSteps;\n\t\tthis._lastClickedButton = LastClickedButton.None;\n\t}\n\n\t/**\n\t * Manages focus when navigation buttons become disabled/enabled.\n\t * Automatically moves focus to available button when user reaches boundaries.\n\t * @private\n\t */\n\t_manageFocus() {\n\t\tif (!this.shadowRoot) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst previousButton = this.shadowRoot.querySelector(\"[data-ui5-versioning-button=\\\"previous\\\"]\");\n\t\tconst nextButton = this.shadowRoot.querySelector(\"[data-ui5-versioning-button=\\\"next\\\"]\");\n\n\t\tif (!previousButton || !nextButton) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isPreviousDisabled = this.currentStep <= 1;\n\t\tconst isNextDisabled = this.currentStep >= this.totalSteps;\n\t\tconst wasPreviousDisabled = this._previousCurrentStep <= 1;\n\t\tconst wasNextDisabled = this._previousCurrentStep >= this._previousTotalSteps;\n\n\t\tif (isPreviousDisabled && !wasPreviousDisabled && !isNextDisabled && this._lastClickedButton === LastClickedButton.Previous && nextButton instanceof HTMLElement) {\n\t\t\tnextButton.focus();\n\t\t\tthis._lastClickedButton = LastClickedButton.None;\n\t\t} else if (isNextDisabled && !wasNextDisabled && !isPreviousDisabled && this._lastClickedButton === LastClickedButton.Next && previousButton instanceof HTMLElement) {\n\t\t\tpreviousButton.focus();\n\t\t\tthis._lastClickedButton = LastClickedButton.None;\n\t\t}\n\t}\n\n\thandlePreviousVersionClick() {\n\t\tthis._lastClickedButton = LastClickedButton.Previous;\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: true });\n\t}\n\n\thandleNextVersionClick() {\n\t\tthis._lastClickedButton = LastClickedButton.Next;\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: false });\n\t}\n\n\tget _previousButtonAccessibleName() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_PREVIOUS_BUTTON_TEXT);\n\t}\n\n\tget _nextButtonAccessibleName() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_NEXT_BUTTON_TEXT);\n\t}\n\n\tget _previousButtonTooltip() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_PREVIOUS_BUTTON_TOOLTIP);\n\t}\n\n\tget _nextButtonTooltip() {\n\t\treturn Versioning.i18nBundle.getText(VERSIONING_NEXT_BUTTON_TOOLTIP);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tget classes() {\n\t\treturn {\n\t\t\troot: {\n\t\t\t\t...super.classes.root,\n\t\t\t\t\"ui5-ai-versioning\": true,\n\t\t\t},\n\t\t};\n\t}\n}\n\nVersioning.define();\n\nexport default Versioning;\n"]}
@@ -44,7 +44,7 @@ declare class WritingAssistant extends UI5Element {
44
44
  */
45
45
  loading: boolean;
46
46
  /**
47
- * Defines the action text of the AI Writing Assistant.
47
+ * Defines the prompt description of the Writing Assistant.
48
48
  *
49
49
  * This text is displayed in the toolbar to indicate the current or last
50
50
  * performed AI action (e.g., "Generated text", "Simplified text").
@@ -52,29 +52,30 @@ declare class WritingAssistant extends UI5Element {
52
52
  * @default ""
53
53
  * @public
54
54
  */
55
- actionText: string;
55
+ promptDescription: string;
56
56
  /**
57
57
  * Indicates the index of the currently displayed result version.
58
58
  *
59
- * The index is **1-based** (i.e. `1` represents the first result).
59
+ * The index is **0-based** (i.e. `0` represents the first result).
60
60
  * This property is synchronized with the parent AI TextArea component.
61
61
  *
62
- * @default 1
62
+ * @default 0
63
63
  * @public
64
64
  * @since 2.16.0
65
65
  */
66
- currentVersionIndex: number;
66
+ currentVersion: number;
67
67
  /**
68
68
  * Indicates the total number of result versions available.
69
69
  *
70
70
  * This property determines whether version navigation controls are displayed.
71
- * When totalVersions > 1, previous/next buttons become available.
71
+ * When totalVersions > 0, previous/next buttons become available.
72
72
  *
73
- * @default 1
73
+ * @default 0
74
74
  * @public
75
75
  */
76
76
  totalVersions: number;
77
77
  static i18nBundleAi: I18nBundle;
78
+ static onDefine(): Promise<void>;
78
79
  /**
79
80
  * Handles the version change event from the versioning component.
80
81
  */
@@ -94,5 +95,6 @@ declare class WritingAssistant extends UI5Element {
94
95
  get _toolbarAccessibleName(): string;
95
96
  get _buttonAccessibleName(): string;
96
97
  get _buttonTooltip(): string;
98
+ get _stopTooltip(): string;
97
99
  }
98
100
  export default WritingAssistant;
@@ -12,7 +12,8 @@ import { i18n } from "@ui5/webcomponents-base/dist/decorators.js";
12
12
  import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
13
13
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
14
14
  import announce from "@ui5/webcomponents-base/dist/util/InvisibleMessage.js";
15
- import { WRITING_ASSISTANT_LABEL, VERSIONING_PREVIOUS_BUTTON_TEXT, VERSIONING_NEXT_BUTTON_TEXT, WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT, WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME, WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME, WRITING_ASSISTANT_BUTTON_TOOLTIP, } from "./generated/i18n/i18n-defaults.js";
15
+ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
16
+ import { WRITING_ASSISTANT_LABEL, VERSIONING_PREVIOUS_BUTTON_TEXT, VERSIONING_NEXT_BUTTON_TEXT, WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT, WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME, WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME, WRITING_ASSISTANT_BUTTON_TOOLTIP, WRITING_ASSISTANT_STOP_TOOLTIP, } from "./generated/i18n/i18n-defaults.js";
16
17
  // Styles
17
18
  import WritingAssistantCss from "./generated/themes/WritingAssistant.css.js";
18
19
  // Templates
@@ -61,7 +62,7 @@ let WritingAssistant = WritingAssistant_1 = class WritingAssistant extends UI5El
61
62
  */
62
63
  this.loading = false;
63
64
  /**
64
- * Defines the action text of the AI Writing Assistant.
65
+ * Defines the prompt description of the Writing Assistant.
65
66
  *
66
67
  * This text is displayed in the toolbar to indicate the current or last
67
68
  * performed AI action (e.g., "Generated text", "Simplified text").
@@ -69,28 +70,31 @@ let WritingAssistant = WritingAssistant_1 = class WritingAssistant extends UI5El
69
70
  * @default ""
70
71
  * @public
71
72
  */
72
- this.actionText = "";
73
+ this.promptDescription = "";
73
74
  /**
74
75
  * Indicates the index of the currently displayed result version.
75
76
  *
76
- * The index is **1-based** (i.e. `1` represents the first result).
77
+ * The index is **0-based** (i.e. `0` represents the first result).
77
78
  * This property is synchronized with the parent AI TextArea component.
78
79
  *
79
- * @default 1
80
+ * @default 0
80
81
  * @public
81
82
  * @since 2.16.0
82
83
  */
83
- this.currentVersionIndex = 1;
84
+ this.currentVersion = 0;
84
85
  /**
85
86
  * Indicates the total number of result versions available.
86
87
  *
87
88
  * This property determines whether version navigation controls are displayed.
88
- * When totalVersions > 1, previous/next buttons become available.
89
+ * When totalVersions > 0, previous/next buttons become available.
89
90
  *
90
- * @default 1
91
+ * @default 0
91
92
  * @public
92
93
  */
93
- this.totalVersions = 1;
94
+ this.totalVersions = 0;
95
+ }
96
+ static async onDefine() {
97
+ WritingAssistant_1.i18nBundleAi = await getI18nBundle("@ui5/webcomponents-ai");
94
98
  }
95
99
  /**
96
100
  * Handles the version change event from the versioning component.
@@ -132,16 +136,19 @@ let WritingAssistant = WritingAssistant_1 = class WritingAssistant extends UI5El
132
136
  get _buttonTooltip() {
133
137
  return WritingAssistant_1.i18nBundleAi.getText(WRITING_ASSISTANT_BUTTON_TOOLTIP);
134
138
  }
139
+ get _stopTooltip() {
140
+ return WritingAssistant_1.i18nBundleAi.getText(WRITING_ASSISTANT_STOP_TOOLTIP);
141
+ }
135
142
  };
136
143
  __decorate([
137
144
  property({ type: Boolean })
138
145
  ], WritingAssistant.prototype, "loading", void 0);
139
146
  __decorate([
140
147
  property()
141
- ], WritingAssistant.prototype, "actionText", void 0);
148
+ ], WritingAssistant.prototype, "promptDescription", void 0);
142
149
  __decorate([
143
150
  property({ type: Number })
144
- ], WritingAssistant.prototype, "currentVersionIndex", void 0);
151
+ ], WritingAssistant.prototype, "currentVersion", void 0);
145
152
  __decorate([
146
153
  property({ type: Number })
147
154
  ], WritingAssistant.prototype, "totalVersions", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"WritingAssistant.js","sourceRoot":"","sources":["../src/WritingAssistant.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,4CAA4C,CAAC;AAClE,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAC/E,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,QAAQ,MAAM,uDAAuD,CAAC;AAE7E,OAAO,EACN,uBAAuB,EACvB,+BAA+B,EAC/B,2BAA2B,EAC3B,yCAAyC,EACzC,yCAAyC,EACzC,wCAAwC,EACxC,gCAAgC,GAChC,MAAM,mCAAmC,CAAC;AAE3C,SAAS;AACT,OAAO,mBAAmB,MAAM,4CAA4C,CAAC;AAE7E,YAAY;AACZ,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AACrE,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,iBAAiB;AACjB,OAAO,OAAO,MAAM,oCAAoC,CAAC;AACzD,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,aAAa,MAAM,0CAA0C,CAAC;AAErE,QAAQ;AACR,OAAO,qCAAqC,CAAC;AAC7C,OAAO,uCAAuC,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAqCH,IAAM,gBAAgB,wBAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QAWC;;;;;;WAMG;QAEH,YAAO,GAAG,KAAK,CAAC;QAEhB;;;;;;;;WAQG;QAEH,eAAU,GAAG,EAAE,CAAC;QAEhB;;;;;;;;;WASG;QAEH,wBAAmB,GAAG,CAAC,CAAC;QAExB;;;;;;;;WAQG;QAEH,kBAAa,GAAG,CAAC,CAAC;IAkDnB,CAAC;IA7CA;;OAEG;IACH,mBAAmB,CAAC,CAAsC;QACzD,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,CAAQ;QACzB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAwD,CAAC;QAC1E,IAAI,MAAM,EAAE,OAAO,EAAE,KAAK,KAAK,YAAY,EAAE,CAAC;YAC7C,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,QAAQ,CAAC,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,yCAAyC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtG,CAAC;IACF,CAAC;IACD,IAAI,UAAU;QACb,OAAO,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,6BAA6B;QAChC,OAAO,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,yBAAyB;QAC5B,OAAO,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,sBAAsB;QACzB,OAAO,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,qBAAqB;QACxB,OAAO,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,cAAc;QACjB,OAAO,kBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAChF,CAAC;CACD,CAAA;AAvFA;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;iDACZ;AAYhB;IADC,QAAQ,EAAE;oDACK;AAahB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6DACH;AAYxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDACT;AAGX;IADN,IAAI,CAAC,uBAAuB,CAAC;4CACE;AA3D3B,gBAAgB;IApCrB,aAAa,CAAC;QACd,GAAG,EAAE,0BAA0B;QAC/B,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,wBAAwB;QAClC,MAAM,EAAE,CAAC,mBAAmB,CAAC;QAC7B,YAAY,EAAE;YACb,UAAU;YACV,YAAY;YACZ,OAAO;YACP,aAAa;YACb,aAAa;SACb;KACD,CAAC;IAEF;;;;OAIG;;IACF,KAAK,CAAC,gBAAgB,CAAC;IAExB;;;;OAIG;;IACF,KAAK,CAAC,cAAc,CAAC;IAEtB;;;;OAIG;;IACF,KAAK,CAAC,iBAAiB,CAAC;GAEnB,gBAAgB,CA0GrB;AAED,gBAAgB,CAAC,MAAM,EAAE,CAAC;AAE1B,eAAe,gBAAgB,CAAC","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport { i18n } from \"@ui5/webcomponents-base/dist/decorators.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport announce from \"@ui5/webcomponents-base/dist/util/InvisibleMessage.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport {\n\tWRITING_ASSISTANT_LABEL,\n\tVERSIONING_PREVIOUS_BUTTON_TEXT,\n\tVERSIONING_NEXT_BUTTON_TEXT,\n\tWRITING_ASSISTANT_GENERATING_ANNOUNCEMENT,\n\tWRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME,\n\tWRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME,\n\tWRITING_ASSISTANT_BUTTON_TOOLTIP,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport WritingAssistantCss from \"./generated/themes/WritingAssistant.css.js\";\n\n// Templates\nimport WritingAssistantTemplate from \"./WritingAssistantTemplate.js\";\nimport Versioning from \"./Versioning.js\";\nimport ToolbarLabel from \"./ToolbarLabel.js\";\n\n// UI5 Components\nimport Toolbar from \"@ui5/webcomponents/dist/Toolbar.js\";\nimport ToolbarSpacer from \"@ui5/webcomponents/dist/ToolbarSpacer.js\";\nimport ToolbarButton from \"@ui5/webcomponents/dist/ToolbarButton.js\";\n\n// Icons\nimport \"@ui5/webcomponents-icons/dist/ai.js\";\nimport \"@ui5/webcomponents-icons/dist/stop.js\";\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-textarea-toolbar` component provides a specialized toolbar for AI TextArea functionality.\n * It manages different states of the AI assistant and provides version navigation capabilities.\n *\n * ### Structure\n * The `ui5-ai-textarea-toolbar` consists of the following elements:\n * - AI Generate Button: Triggers AI text generation or stops ongoing generation\n * - Version Navigation: Allows navigation between multiple AI-generated results\n * - Action Label: Displays the current AI action being performed\n *\n * ### ES6 Module Import\n *\n * `import \"@sap-webcomponents/ai/dist/WritingAssistant.js\";`\n *\n * @constructor\n * @extends UI5Element\n * @since 2.16.0\n * @private\n */\n@customElement({\n\ttag: \"ui5-ai-writing-assistant\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: WritingAssistantTemplate,\n\tstyles: [WritingAssistantCss],\n\tdependencies: [\n\t\tVersioning,\n\t\tToolbarLabel,\n\t\tToolbar,\n\t\tToolbarSpacer,\n\t\tToolbarButton,\n\t],\n})\n\n/**\n * Fired when the user clicks on version navigation buttons.\n *\n * @public\n */\n@event(\"version-change\")\n\n/**\n * Fired when the user clicks on the AI button.\n *\n * @public\n */\n@event(\"button-click\")\n\n/**\n * Fired when the user clicks on the \"Stop\" button to stop ongoing AI text generation.\n *\n * @public\n */\n@event(\"stop-generation\")\n\nclass WritingAssistant extends UI5Element {\n\teventDetails!: {\n\t\t\"version-change\": {\n\t\t\tbackwards: boolean;\n\t\t};\n\t\t\"button-click\": {\n\t\t\tclickTarget: HTMLElement;\n\t\t};\n\t\t\"stop-generation\": object;\n\t};\n\n\t/**\n\t * Defines whether the Writing Assistant is currently loading.\n\t *\n\t * When `true`, indicates that an AI action is in progress.\n\t *\n\t * @default false\n\t */\n\t@property({ type: Boolean })\n\tloading = false;\n\n\t/**\n\t * Defines the action text of the AI Writing Assistant.\n\t *\n\t * This text is displayed in the toolbar to indicate the current or last\n\t * performed AI action (e.g., \"Generated text\", \"Simplified text\").\n\t *\n\t * @default \"\"\n\t * @public\n\t */\n\t@property()\n\tactionText = \"\";\n\n\t/**\n\t * Indicates the index of the currently displayed result version.\n\t *\n\t * The index is **1-based** (i.e. `1` represents the first result).\n\t * This property is synchronized with the parent AI TextArea component.\n\t *\n\t * @default 1\n\t * @public\n\t * @since 2.16.0\n\t */\n\t@property({ type: Number })\n\tcurrentVersionIndex = 1;\n\n\t/**\n\t * Indicates the total number of result versions available.\n\t *\n\t * This property determines whether version navigation controls are displayed.\n\t * When totalVersions > 1, previous/next buttons become available.\n\t *\n\t * @default 1\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 1;\n\n\t@i18n(\"@ui5/webcomponents-ai\")\n\tstatic i18nBundleAi: I18nBundle;\n\n\t/**\n\t * Handles the version change event from the versioning component.\n\t */\n\thandleVersionChange(e: CustomEvent<{ backwards: boolean }>) {\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: e.detail.backwards });\n\t}\n\n\t/**\n\t * Handles the click event for the AI generate button.\n\t * Toggles between generate and stop states based on current button state.\n\t *\n\t * @public\n\t */\n\thandleButtonClick(e: Event): void {\n\t\tconst target = e.target as HTMLElement & { dataset?: { state?: string } };\n\t\tif (target?.dataset?.state === \"generating\") {\n\t\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t\t} else {\n\t\t\tthis.fireDecoratorEvent(\"button-click\", { clickTarget: target });\n\t\t\tannounce(WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT), \"Polite\");\n\t\t}\n\t}\n\tget _ariaLabel() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_LABEL);\n\t}\n\n\tget _previousButtonAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(VERSIONING_PREVIOUS_BUTTON_TEXT);\n\t}\n\n\tget _nextButtonAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(VERSIONING_NEXT_BUTTON_TEXT);\n\t}\n\n\tget _toolbarAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME);\n\t}\n\n\tget _buttonAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME);\n\t}\n\n\tget _buttonTooltip() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_BUTTON_TOOLTIP);\n\t}\n}\n\nWritingAssistant.define();\n\nexport default WritingAssistant;\n"]}
1
+ {"version":3,"file":"WritingAssistant.js","sourceRoot":"","sources":["../src/WritingAssistant.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport { i18n } from \"@ui5/webcomponents-base/dist/decorators.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport announce from \"@ui5/webcomponents-base/dist/util/InvisibleMessage.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\tVERSIONING_PREVIOUS_BUTTON_TEXT,\n\tVERSIONING_NEXT_BUTTON_TEXT,\n\tWRITING_ASSISTANT_GENERATING_ANNOUNCEMENT,\n\tWRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME,\n\tWRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME,\n\tWRITING_ASSISTANT_BUTTON_TOOLTIP,\n\tWRITING_ASSISTANT_STOP_TOOLTIP,\n} from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport WritingAssistantCss from \"./generated/themes/WritingAssistant.css.js\";\n\n// Templates\nimport WritingAssistantTemplate from \"./WritingAssistantTemplate.js\";\nimport Versioning from \"./Versioning.js\";\nimport ToolbarLabel from \"./ToolbarLabel.js\";\n\n// UI5 Components\nimport Toolbar from \"@ui5/webcomponents/dist/Toolbar.js\";\nimport ToolbarSpacer from \"@ui5/webcomponents/dist/ToolbarSpacer.js\";\nimport ToolbarButton from \"@ui5/webcomponents/dist/ToolbarButton.js\";\n\n// Icons\nimport \"@ui5/webcomponents-icons/dist/ai.js\";\nimport \"@ui5/webcomponents-icons/dist/stop.js\";\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-textarea-toolbar` component provides a specialized toolbar for AI TextArea functionality.\n * It manages different states of the AI assistant and provides version navigation capabilities.\n *\n * ### Structure\n * The `ui5-ai-textarea-toolbar` consists of the following elements:\n * - AI Generate Button: Triggers AI text generation or stops ongoing generation\n * - Version Navigation: Allows navigation between multiple AI-generated results\n * - Action Label: Displays the current AI action being performed\n *\n * ### ES6 Module Import\n *\n * `import \"@sap-webcomponents/ai/dist/WritingAssistant.js\";`\n *\n * @constructor\n * @extends UI5Element\n * @since 2.16.0\n * @private\n */\n@customElement({\n\ttag: \"ui5-ai-writing-assistant\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: WritingAssistantTemplate,\n\tstyles: [WritingAssistantCss],\n\tdependencies: [\n\t\tVersioning,\n\t\tToolbarLabel,\n\t\tToolbar,\n\t\tToolbarSpacer,\n\t\tToolbarButton,\n\t],\n})\n\n/**\n * Fired when the user clicks on version navigation buttons.\n *\n * @public\n */\n@event(\"version-change\")\n\n/**\n * Fired when the user clicks on the AI button.\n *\n * @public\n */\n@event(\"button-click\")\n\n/**\n * Fired when the user clicks on the \"Stop\" button to stop ongoing AI text generation.\n *\n * @public\n */\n@event(\"stop-generation\")\n\nclass WritingAssistant extends UI5Element {\n\teventDetails!: {\n\t\t\"version-change\": {\n\t\t\tbackwards: boolean;\n\t\t};\n\t\t\"button-click\": {\n\t\t\tclickTarget: HTMLElement;\n\t\t};\n\t\t\"stop-generation\": object;\n\t};\n\n\t/**\n\t * Defines whether the Writing Assistant is currently loading.\n\t *\n\t * When `true`, indicates that an AI action is in progress.\n\t *\n\t * @default false\n\t */\n\t@property({ type: Boolean })\n\tloading = false;\n\n\t/**\n\t * Defines the prompt description of the Writing Assistant.\n\t *\n\t * This text is displayed in the toolbar to indicate the current or last\n\t * performed AI action (e.g., \"Generated text\", \"Simplified text\").\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 result version.\n\t *\n\t * The index is **0-based** (i.e. `0` represents the first result).\n\t * This property is synchronized with the parent AI TextArea component.\n\t *\n\t * @default 0\n\t * @public\n\t * @since 2.16.0\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 * This property determines whether version navigation controls are displayed.\n\t * When totalVersions > 0, previous/next buttons become available.\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 0;\n\n\t@i18n(\"@ui5/webcomponents-ai\")\n\tstatic i18nBundleAi: I18nBundle;\n\n\tstatic async onDefine() {\n\t\tWritingAssistant.i18nBundleAi = await getI18nBundle(\"@ui5/webcomponents-ai\");\n\t}\n\n\t/**\n\t * Handles the version change event from the versioning component.\n\t */\n\thandleVersionChange(e: CustomEvent<{ backwards: boolean }>) {\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: e.detail.backwards });\n\t}\n\n\t/**\n\t * Handles the click event for the AI generate button.\n\t * Toggles between generate and stop states based on current button state.\n\t *\n\t * @public\n\t */\n\thandleButtonClick(e: Event): void {\n\t\tconst target = e.target as HTMLElement & { dataset?: { state?: string } };\n\t\tif (target?.dataset?.state === \"generating\") {\n\t\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t\t} else {\n\t\t\tthis.fireDecoratorEvent(\"button-click\", { clickTarget: target });\n\t\t\tannounce(WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT), \"Polite\");\n\t\t}\n\t}\n\tget _ariaLabel() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_LABEL);\n\t}\n\n\tget _previousButtonAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(VERSIONING_PREVIOUS_BUTTON_TEXT);\n\t}\n\n\tget _nextButtonAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(VERSIONING_NEXT_BUTTON_TEXT);\n\t}\n\n\tget _toolbarAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_TOOLBAR_ACCESSIBLE_NAME);\n\t}\n\n\tget _buttonAccessibleName() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_BUTTON_ACCESSIBLE_NAME);\n\t}\n\n\tget _buttonTooltip() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_BUTTON_TOOLTIP);\n\t}\n\n\tget _stopTooltip() {\n\t\treturn WritingAssistant.i18nBundleAi.getText(WRITING_ASSISTANT_STOP_TOOLTIP);\n\t}\n}\n\nWritingAssistant.define();\n\nexport default WritingAssistant;\n"]}