@ui5/webcomponents-ai 0.0.0-1c3388f4d → 0.0.0-2c875c3d3

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 (191) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/LICENSE.txt +201 -0
  3. package/README.md +10 -8
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/Assets-fetch.js +1 -1
  6. package/dist/Assets-fetch.js.map +1 -1
  7. package/dist/Assets-node.js +1 -1
  8. package/dist/Assets-node.js.map +1 -1
  9. package/dist/Button.d.ts +5 -2
  10. package/dist/Button.js +8 -4
  11. package/dist/Button.js.map +1 -1
  12. package/dist/Input.d.ts +143 -0
  13. package/dist/Input.js +288 -0
  14. package/dist/Input.js.map +1 -0
  15. package/dist/InputTemplate.d.ts +10 -0
  16. package/dist/InputTemplate.js +28 -0
  17. package/dist/InputTemplate.js.map +1 -0
  18. package/dist/TextArea.d.ts +118 -0
  19. package/dist/TextArea.js +230 -0
  20. package/dist/TextArea.js.map +1 -0
  21. package/dist/TextAreaTemplate.d.ts +2 -0
  22. package/dist/TextAreaTemplate.js +13 -0
  23. package/dist/TextAreaTemplate.js.map +1 -0
  24. package/dist/ToolbarLabel.d.ts +39 -0
  25. package/dist/ToolbarLabel.js +67 -0
  26. package/dist/ToolbarLabel.js.map +1 -0
  27. package/dist/ToolbarLabelTemplate.d.ts +2 -0
  28. package/dist/ToolbarLabelTemplate.js +5 -0
  29. package/dist/ToolbarLabelTemplate.js.map +1 -0
  30. package/dist/Versioning.d.ts +95 -0
  31. package/dist/Versioning.js +187 -0
  32. package/dist/Versioning.js.map +1 -0
  33. package/dist/VersioningTemplate.d.ts +4 -0
  34. package/dist/VersioningTemplate.js +9 -0
  35. package/dist/VersioningTemplate.js.map +1 -0
  36. package/dist/WritingAssistant.d.ts +100 -0
  37. package/dist/WritingAssistant.js +197 -0
  38. package/dist/WritingAssistant.js.map +1 -0
  39. package/dist/WritingAssistantTemplate.d.ts +2 -0
  40. package/dist/WritingAssistantTemplate.js +12 -0
  41. package/dist/WritingAssistantTemplate.js.map +1 -0
  42. package/dist/bundle.esm.js +2 -0
  43. package/dist/bundle.esm.js.map +1 -1
  44. package/dist/css/themes/Button.css +1 -1
  45. package/dist/css/themes/Input.css +1 -0
  46. package/dist/css/themes/PromptInput.css +1 -1
  47. package/dist/css/themes/TextArea.css +1 -0
  48. package/dist/css/themes/Versioning.css +1 -0
  49. package/dist/css/themes/WritingAssistant.css +1 -0
  50. package/dist/custom-elements-internal.json +390 -2
  51. package/dist/custom-elements.json +332 -2
  52. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
  53. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
  54. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -1
  55. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -1
  56. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
  57. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -1
  58. package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
  59. package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
  60. package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
  61. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  62. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -1
  63. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -1
  64. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -1
  65. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -1
  66. package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
  67. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -1
  68. package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
  69. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
  70. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
  71. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -1
  72. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -1
  73. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
  74. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
  75. package/dist/generated/assets/i18n/messagebundle_id.json +1 -1
  76. package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
  77. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -1
  78. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
  79. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -1
  80. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
  81. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
  82. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
  83. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -1
  84. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -1
  85. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
  86. package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
  87. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
  88. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
  89. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
  90. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
  91. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
  92. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -1
  93. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
  94. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
  95. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
  96. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
  97. package/dist/generated/assets/i18n/messagebundle_th.json +1 -1
  98. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
  99. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
  100. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -1
  101. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
  102. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
  103. package/dist/generated/i18n/i18n-defaults.d.ts +14 -1
  104. package/dist/generated/i18n/i18n-defaults.js +14 -1
  105. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  106. package/dist/generated/themes/Button.css.d.ts +1 -1
  107. package/dist/generated/themes/Button.css.js +1 -1
  108. package/dist/generated/themes/Button.css.js.map +1 -1
  109. package/dist/generated/themes/Input.css.d.ts +2 -0
  110. package/dist/generated/themes/Input.css.js +8 -0
  111. package/dist/generated/themes/Input.css.js.map +1 -0
  112. package/dist/generated/themes/PromptInput.css.d.ts +1 -1
  113. package/dist/generated/themes/PromptInput.css.js +1 -1
  114. package/dist/generated/themes/PromptInput.css.js.map +1 -1
  115. package/dist/generated/themes/TextArea.css.d.ts +2 -0
  116. package/dist/generated/themes/TextArea.css.js +8 -0
  117. package/dist/generated/themes/TextArea.css.js.map +1 -0
  118. package/dist/generated/themes/Versioning.css.d.ts +2 -0
  119. package/dist/generated/themes/Versioning.css.js +8 -0
  120. package/dist/generated/themes/Versioning.css.js.map +1 -0
  121. package/dist/generated/themes/WritingAssistant.css.d.ts +2 -0
  122. package/dist/generated/themes/WritingAssistant.css.js +8 -0
  123. package/dist/generated/themes/WritingAssistant.css.js.map +1 -0
  124. package/dist/vscode.html-custom-data.json +50 -1
  125. package/dist/web-types.json +163 -3
  126. package/package-scripts.cjs +0 -1
  127. package/package.json +24 -21
  128. package/src/InputTemplate.tsx +197 -0
  129. package/src/TextArea.css +45 -0
  130. package/src/TextAreaTemplate.tsx +90 -0
  131. package/src/ToolbarLabelTemplate.tsx +9 -0
  132. package/src/VersioningTemplate.tsx +34 -0
  133. package/src/WritingAssistantTemplate.tsx +49 -0
  134. package/src/i18n/messagebundle.properties +38 -0
  135. package/src/i18n/messagebundle_ar.properties +20 -0
  136. package/src/i18n/messagebundle_bg.properties +20 -0
  137. package/src/i18n/messagebundle_ca.properties +20 -0
  138. package/src/i18n/messagebundle_cnr.properties +20 -0
  139. package/src/i18n/messagebundle_cs.properties +20 -0
  140. package/src/i18n/messagebundle_cy.properties +20 -0
  141. package/src/i18n/messagebundle_da.properties +20 -0
  142. package/src/i18n/messagebundle_de.properties +17 -0
  143. package/src/i18n/messagebundle_el.properties +20 -0
  144. package/src/i18n/messagebundle_en.properties +17 -0
  145. package/src/i18n/messagebundle_en_GB.properties +20 -0
  146. package/src/i18n/messagebundle_en_US_sappsd.properties +17 -0
  147. package/src/i18n/messagebundle_en_US_saprigi.properties +17 -0
  148. package/src/i18n/messagebundle_en_US_saptrc.properties +17 -0
  149. package/src/i18n/messagebundle_es.properties +20 -0
  150. package/src/i18n/messagebundle_es_MX.properties +21 -1
  151. package/src/i18n/messagebundle_et.properties +20 -0
  152. package/src/i18n/messagebundle_fi.properties +20 -0
  153. package/src/i18n/messagebundle_fr.properties +20 -0
  154. package/src/i18n/messagebundle_fr_CA.properties +20 -0
  155. package/src/i18n/messagebundle_hi.properties +20 -0
  156. package/src/i18n/messagebundle_hr.properties +22 -2
  157. package/src/i18n/messagebundle_hu.properties +20 -0
  158. package/src/i18n/messagebundle_id.properties +20 -0
  159. package/src/i18n/messagebundle_it.properties +20 -0
  160. package/src/i18n/messagebundle_iw.properties +20 -0
  161. package/src/i18n/messagebundle_ja.properties +20 -0
  162. package/src/i18n/messagebundle_kk.properties +20 -0
  163. package/src/i18n/messagebundle_ko.properties +20 -0
  164. package/src/i18n/messagebundle_lt.properties +20 -0
  165. package/src/i18n/messagebundle_lv.properties +20 -0
  166. package/src/i18n/messagebundle_mk.properties +20 -0
  167. package/src/i18n/messagebundle_ms.properties +20 -0
  168. package/src/i18n/messagebundle_nl.properties +20 -0
  169. package/src/i18n/messagebundle_no.properties +20 -0
  170. package/src/i18n/messagebundle_pl.properties +20 -0
  171. package/src/i18n/messagebundle_pt.properties +20 -0
  172. package/src/i18n/messagebundle_pt_PT.properties +20 -0
  173. package/src/i18n/messagebundle_ro.properties +20 -0
  174. package/src/i18n/messagebundle_ru.properties +20 -0
  175. package/src/i18n/messagebundle_sh.properties +20 -0
  176. package/src/i18n/messagebundle_sk.properties +20 -0
  177. package/src/i18n/messagebundle_sl.properties +20 -0
  178. package/src/i18n/messagebundle_sr.properties +20 -0
  179. package/src/i18n/messagebundle_sv.properties +20 -0
  180. package/src/i18n/messagebundle_th.properties +22 -2
  181. package/src/i18n/messagebundle_tr.properties +20 -0
  182. package/src/i18n/messagebundle_uk.properties +20 -0
  183. package/src/i18n/messagebundle_vi.properties +20 -0
  184. package/src/i18n/messagebundle_zh_CN.properties +20 -0
  185. package/src/i18n/messagebundle_zh_TW.properties +20 -0
  186. package/src/themes/Input.css +83 -0
  187. package/src/themes/PromptInput.css +5 -1
  188. package/src/themes/TextArea.css +45 -0
  189. package/src/themes/Versioning.css +20 -0
  190. package/src/themes/WritingAssistant.css +45 -0
  191. package/tsconfig.json +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../src/Input.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport {\n\tisEscape,\n\tisF4Shift,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport BaseInput from \"@ui5/webcomponents/dist/Input.js\";\nimport type Menu from \"@ui5/webcomponents/dist/Menu.js\";\nimport type { MenuItemClickEventDetail } from \"@ui5/webcomponents/dist/Menu.js\";\nimport type Button from \"./Button.js\";\n\n// styles\nimport AIInputCss from \"./generated/themes/Input.css.js\";\nimport InputCss from \"@ui5/webcomponents/dist/generated/themes/Input.css.js\";\nimport ResponsivePopoverCommonCss from \"@ui5/webcomponents/dist/generated/themes/ResponsivePopoverCommon.css.js\";\nimport ValueStateMessageCss from \"@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js\";\n\n// templates\nimport InputTemplate from \"./InputTemplate.js\";\nimport {\n\tINPUT_VERSIONING_NEXT_BUTTON_TOOLTIP,\n\tINPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP,\n\tINPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP,\n\tWRITING_ASSISTANT_GENERATING_ANNOUNCEMENT,\n} from \"./generated/i18n/i18n-defaults.js\";\n\ntype InputVersionChangeEventDetail = {\n\tbackwards: boolean,\n};\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-input` component extends the standard `ui5-input` with **AI Writing Assistant** capabilities.\n *\n * ### Structure\n *\n * The `ui5-ai-input` consists of the following main parts:\n *\n * - **Input Field** – Inherits all standard Input behaviors.\n * - **AI Action Button** – Appears when focused or loading, providing access to AI-related actions or stopping generation.\n *\n * The component automatically determines which elements to render based on its internal state:\n * - The AI Button is only shown when there are available `actions`.\n * - The version navigation appears only when `totalVersions > 1`.\n *\n * ### Keyboard Support\n *\n * - **Shift + F4** — Opens the AI menu.\n * - **Ctrl + Shift + Z / Y** — Navigates backward/forward between AI-generated versions.\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/Input.js\";`\n *\n * @constructor\n * @extends BaseInput\n * @since 2.16.0\n * @experimental The **@ui5/webcomponents-ai** package is under active development and considered experimental. Component APIs are subject to change.\n * @public\n */\n@customElement({\n\ttag: \"ui5-ai-input\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: InputTemplate,\n\tstyles: [\n\t\tAIInputCss,\n\t\tInputCss,\n\t\tResponsivePopoverCommonCss,\n\t\tValueStateMessageCss,\n\t],\n})\n\n/**\n * Fired when the user selects the AI button.\n * @public\n */\n@event(\"button-click\", {\n\tcancelable: true,\n})\n\n/** Fired when an item from the AI actions menu is clicked.\n * @public\n */\n@event(\"item-click\")\n\n/**\n * Fired when the user selects the \"Stop\" button to stop ongoing AI text generation.\n * @public\n */\n@event(\"stop-generation\")\n\n/**\n * Fired when the user selects the version navigation buttons.\n *\n * @param {boolean} backwards - Indicates if navigation is backwards (true) or forwards (false, default)\n * @public\n */\n@event(\"version-change\")\n\nclass Input extends BaseInput {\n\teventDetails!: BaseInput[\"eventDetails\"] & {\n\t\t\"version-change\": InputVersionChangeEventDetail;\n\t\t\"stop-generation\": void;\n\t\t\"button-click\": void;\n\t\t\"item-click\": MenuItemClickEventDetail;\n\t};\n\n\t/**\n\t * Indicates the index of the currently displayed version.\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcurrentVersion = 0;\n\n\t/**\n\t * Indicates the total number of result versions available.\n\t *\n\t * When not set or set to 0, the versioning will be hidden.\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 0;\n\n\t/**\n\t * Defines whether the AI Writing Assistant is currently loading.\n\t *\n\t * When `true`, indicates that an AI action is in progress.\n\t *\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tloading: boolean = false;\n\n\t/**\n\t * Indicates if the menu is open.\n\t * @default 0\n\t * @private\n\t */\n\t@property({ type: Boolean })\n\t_isMenuOpen: boolean = false;\n\n\t/**\n\t * Defines the items of the menu for the component.\n\t * @public\n\t */\n\t@slot({\n\t\ttype: HTMLElement,\n\t\tinvalidateOnChildChange: true,\n\t})\n\tactions!: Array<HTMLElement>;\n\n\t_previousCurrentStep = 0;\n\t_previousTotalSteps = 0;\n\tisFocused: boolean = false;\n\n\t_onfocusin(e: FocusEvent): void {\n\t\tsuper._onfocusin(e);\n\t\tthis.isFocused = true;\n\t}\n\n\t_onfocusout(e: FocusEvent): void {\n\t\tsuper._onfocusout(e);\n\t\tthis.isFocused = false;\n\t}\n\n\t/**\n\t * Manages the focus when the navigation buttons become disabled/enabled.\n\t * Automatically moves the focus to the available button when the user reaches the boundaries.\n\t * @private\n\t */\n\t_manageVersionButtonsFocus() {\n\t\tconst previousButton = this.shadowRoot?.getElementById(\"arrow-left\") as Button;\n\t\tconst nextButton = this.shadowRoot?.getElementById(\"arrow-right\") as Button;\n\t\tconst isPreviousDisabled = this.currentVersion <= 1;\n\t\tconst isNextDisabled = this.currentVersion >= this.totalVersions;\n\n\t\tif (isPreviousDisabled && previousButton) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tnextButton.focus();\n\t\t\t}, 0);\n\t\t} else if (isNextDisabled && nextButton) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tpreviousButton.focus();\n\t\t\t}, 0);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the click event for the AI generate Button.\n\t * Fires the appropriate event based on the AI Button state.\n\t * @private\n\t */\n\t_handleAIButtonClick(e: Event) {\n\t\tconst target = e.target as HTMLElement & { icon?: string };\n\t\tif (target?.icon === \"stop\") {\n\t\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t\t} else {\n\t\t\tconst opener = this.shadowRoot?.querySelector(\".ui5-input-ai-button\") as HTMLElement;\n\t\t\tthis.fireDecoratorEvent(\"button-click\");\n\t\t\tthis.menu.opener = opener;\n\t\t\tthis.menu.open = true;\n\t\t\tthis.menu.horizontalAlign = \"End\";\n\t\t}\n\t}\n\n\t/**\n\t * Handles the escape event for the AI generate Button.\n\t * @private\n\t */\n\t_handleAIButtonKeydown = (e: KeyboardEvent) => {\n\t\tif (isEscape(e) && this.loading) {\n\t\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t\t}\n\t}\n\n\t/**\n\t * Handles the version change event from the versioning component.\n\t *\n\t * @param {CustomEvent} e - The version change event\n\t */\n\t_handleVersionChange(e: CustomEvent<{ backwards: boolean }>) {\n\t\tthis.fireDecoratorEvent(\"version-change\", {\n\t\t\tbackwards: e.detail.backwards,\n\t\t});\n\t\tthis._manageVersionButtonsFocus();\n\t}\n\n\t/**\n\t * Handles the click event for the \"Previous Version\" button.\n\t * Updates the current version index and syncs content.\n\t * @private\n\t */\n\t_handlePreviousButtonClick(): void {\n\t\tthis._handleVersionChange(new CustomEvent(\"version-change\", { detail: { backwards: true } }));\n\t}\n\n\t/**\n\t * Handles the click event for the \"Next Version\" button.\n\t * Updates the current version index and syncs content.\n\t * @private\n\t */\n\t_handleNextButtonClick(): void {\n\t\tthis._handleVersionChange(new CustomEvent(\"version-change\", { detail: { backwards: false } }));\n\t}\n\n\t_onMenuIconClick(e: CustomEvent<MenuItemClickEventDetail>): void {\n\t\tthis.fireDecoratorEvent(\"item-click\", e.detail);\n\t}\n\n\t/**\n\t * Handles keydown events for keyboard shortcuts.\n\t * @private\n\t */\n\t_onkeydown(e: KeyboardEvent): void {\n\t\tsuper._onkeydown(e);\n\t\tconst menuButton = this.shadowRoot?.getElementById(\"ai-menu-btn\") as HTMLElement;\n\n\t\tif (isF4Shift(e)) {\n\t\t\tmenuButton?.focus();\n\n\t\t\tthis.menu.opener = menuButton;\n\t\t\tthis.menu.open = true;\n\t\t\tthis.menu.horizontalAlign = \"End\";\n\t\t}\n\t\tconst goPreviousStep = e.key === \"Z\" && e.shiftKey && e.ctrlKey;\n\t\tconst goNextStep = e.key === \"Y\" && e.shiftKey && e.ctrlKey;\n\n\t\tif (goPreviousStep) {\n\t\t\te.preventDefault();\n\t\t\tthis._handlePreviousButtonClick();\n\t\t} else if (goNextStep) {\n\t\t\te.preventDefault();\n\t\t\tthis._handleNextButtonClick();\n\t\t}\n\t}\n\n\t/**\n\t * Handles visibility of the Writing Assistant Button.\n\t * If there are no items, the Writing Assistant Button would not be rendered.\n\t */\n\tget hasActions() {\n\t\treturn !!this?.menu?.getSlottedNodes(\"items\").length;\n\t}\n\n\tget ariaLabel() {\n\t\treturn this.accessibleName || !this.loading ? Input.i18nBundle.getText(INPUT_WRITING_ASSISTANT_BUTTON_TOOLTIP) : Input.i18nBundle.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT);\n\t}\n\n\tget stopGeneratingTooltip() {\n\t\treturn Input.i18nBundle.getText(WRITING_ASSISTANT_GENERATING_ANNOUNCEMENT);\n\t}\n\n\tget nextButtonAccessibleName() {\n\t\treturn Input.i18nBundle.getText(INPUT_VERSIONING_NEXT_BUTTON_TOOLTIP);\n\t}\n\n\tget previousButtonAccessibleName() {\n\t\treturn Input.i18nBundle.getText(INPUT_VERSIONING_PREVIOUS_BUTTON_TOOLTIP);\n\t}\n\n\tget menu() {\n\t\treturn this.shadowRoot?.querySelector(\"[ui5-menu]\") as Menu;\n\t}\n}\n\nInput.define();\n\nexport type { InputVersionChangeEventDetail, MenuItemClickEventDetail as InputItemClickEventDetail };\nexport default Input;\n"]}
@@ -0,0 +1,10 @@
1
+ import type Input from "./Input.js";
2
+ import "@ui5/webcomponents-icons/dist/navigation-left-arrow.js";
3
+ import "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
4
+ import type { JsxTemplateResult } from "@ui5/webcomponents-base";
5
+ type TemplateHook = () => JsxTemplateResult;
6
+ export default function InputTemplate(this: Input, hooks?: {
7
+ preContent: TemplateHook;
8
+ postContent: TemplateHook;
9
+ }): import("@ui5/webcomponents-base").JSX.Element;
10
+ export {};
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import Icon from "@ui5/webcomponents/dist/Icon.js";
3
+ import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
4
+ import MenuItem from "@ui5/webcomponents/dist/MenuItem.js";
5
+ import MenuSeparator from "@ui5/webcomponents/dist/MenuSeparator.js";
6
+ import Button from "@ui5/webcomponents/dist/Button.js";
7
+ import Menu from "@ui5/webcomponents/dist/Menu.js";
8
+ import "@ui5/webcomponents-icons/dist/navigation-left-arrow.js";
9
+ import "@ui5/webcomponents-icons/dist/navigation-right-arrow.js";
10
+ export default function InputTemplate(hooks) {
11
+ const preContent = hooks?.preContent || defaultPreContent;
12
+ const postContent = hooks?.postContent || defaultPostContent;
13
+ return (_jsx(_Fragment, { children: _jsx("div", { class: `ui5-ai-input-root ui5-input-focusable-element ${this.loading && "ui5-ai-input-busy"}`, onFocusIn: this._onfocusin, onFocusOut: this._onfocusout, children: _jsxs("div", { class: "ui5-input-content", children: [_jsx(BusyIndicator, { id: `${this._id}-busyIndicator`, active: this.loading, class: "ui5-input-busy-indicator", children: _jsx("div", { class: "ui5-input-root", part: "root", children: _jsxs("div", { class: "ui5-input-content", children: [preContent.call(this), _jsx("input", { id: "inner", part: "input", class: "ui5-input-inner", style: this.styles.innerInput, type: this.inputNativeType, "inner-input": true, "inner-input-with-icon": !!this.icon.length, disabled: this.disabled, readonly: this._readonly || this.loading, value: this._innerValue, placeholder: this._placeholder, maxlength: this.maxlength, role: this.accInfo.role, enterkeyhint: this.hint, "aria-controls": this.accInfo.ariaControls, "aria-invalid": this.accInfo.ariaInvalid, "aria-haspopup": this.accInfo.ariaHasPopup, "aria-describedby": this.accInfo.ariaDescribedBy, "aria-roledescription": this.accInfo.ariaRoledescription, "aria-autocomplete": this.accInfo.ariaAutoComplete, "aria-expanded": this.accInfo.ariaExpanded, "aria-label": this.ariaLabel, "aria-required": this.required, autocomplete: "off", "data-sap-focus-ref": true, step: this.nativeInputAttributes.step, min: this.nativeInputAttributes.min, max: this.nativeInputAttributes.max, onInput: this._handleNativeInput, onChange: this._handleChange, onSelect: this._handleSelect, onKeyDown: this._onkeydown, onKeyUp: this._onkeyup, onClick: this._click, onFocusIn: this.innerFocusIn }), this._effectiveShowClearIcon &&
14
+ _jsx("div", { tabindex: -1, part: "clear-icon-wrapper", class: "ui5-input-clear-icon-wrapper inputIcon", onClick: this._clear, onMouseDown: this._iconMouseDown, children: _jsx(Icon, { part: "clear-icon", class: "ui5-input-clear-icon", name: "decline", tabindex: -1, accessibleName: this.clearIconAccessibleName }) }), this.icon.length > 0 &&
15
+ _jsx("div", { class: "ui5-input-icon-root", tabindex: -1, children: _jsx("slot", { name: "icon" }) }), _jsx("div", { class: "ui5-input-value-state-icon", children: this._valueStateInputIcon }), postContent.call(this), this.accInfo.ariaDescription &&
16
+ _jsx("span", { id: "descr", class: "ui5-hidden-text", children: this.accInfo.ariaDescription }), this.accInfo.accessibleDescription &&
17
+ _jsx("span", { id: "accessibleDescription", class: "ui5-hidden-text", children: this.accInfo.accessibleDescription }), this.linksInAriaValueStateHiddenText.length > 0 &&
18
+ _jsx("span", { id: "hiddenText-value-state-link-shortcut", class: "ui5-hidden-text", children: this.valueStateLinksShortcutsTextAcc }), this.hasValueState &&
19
+ _jsx("span", { id: "valueStateDesc", class: "ui5-hidden-text", children: this.ariaValueStateHiddenText })] }) }) }), _jsx(Button, { id: "ai-menu-btn", hidden: (!this.isFocused && !this.loading) || !this.hasActions || this.readonly, tabIndex: -1, class: `ui5-input-ai-button ui5-ai-input-button-wrapper ${this._isMenuOpen && "ui5-input-button-menu-open"} ${this.loading && "ui5-ai-input-loading"}`, design: "Transparent", icon: this.loading ? "stop" : "ai", onClick: this._handleAIButtonClick, onKeyDown: this._handleAIButtonKeydown, "aria-keyshortcuts": this.loading ? "Esc" : "Shift + F4", tooltip: this.loading ? this.stopGeneratingTooltip : this.ariaLabel, accessibilityAttributes: { hasPopup: this.loading ? "false" : "menu" } }), _jsxs(Menu, { onItemClick: this._onMenuIconClick, onBeforeOpen: () => { this._isMenuOpen = true; }, onBeforeClose: () => { this._isMenuOpen = false; }, onClose: () => { if (!this.loading) {
20
+ this.focus();
21
+ } }, children: [_jsx("slot", { name: "actions" }), this.totalVersions > 1 && Versioning.call(this)] })] }) }) }));
22
+ }
23
+ function Versioning() {
24
+ return (_jsxs(_Fragment, { children: [_jsx(MenuSeparator, {}), _jsxs(MenuItem, { type: "Inactive", class: "ui5-ai-versioning-menu-footer", text: `${this.currentVersion} / ${this.totalVersions}`, children: [_jsx(Button, { id: "arrow-left", class: "versioning-button", slot: "endContent", design: "Transparent", icon: "navigation-left-arrow", tooltip: this.previousButtonAccessibleName, accessibleName: this.previousButtonAccessibleName, "aria-keyshortcut": "Shift+Ctrl+Z", disabled: this.currentVersion <= 1, onClick: this._handlePreviousButtonClick, "data-ui5-versioning-button": "previous" }), _jsx(Button, { id: "arrow-right", class: "versioning-button", slot: "endContent", design: "Transparent", icon: "navigation-right-arrow", tooltip: this.nextButtonAccessibleName, accessibleName: this.nextButtonAccessibleName, "aria-keyshortcut": "Shift+Ctrl+Y", disabled: this.currentVersion >= this.totalVersions, onClick: this._handleNextButtonClick, "data-ui5-versioning-button": "next" })] })] }));
25
+ }
26
+ function defaultPreContent() { }
27
+ function defaultPostContent() { }
28
+ //# sourceMappingURL=InputTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputTemplate.js","sourceRoot":"","sources":["../src/InputTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import type Input from \"./Input.js\";\nimport Icon from \"@ui5/webcomponents/dist/Icon.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport MenuItem from \"@ui5/webcomponents/dist/MenuItem.js\";\nimport MenuSeparator from \"@ui5/webcomponents/dist/MenuSeparator.js\";\nimport Button from \"@ui5/webcomponents/dist/Button.js\";\nimport Menu from \"@ui5/webcomponents/dist/Menu.js\";\nimport \"@ui5/webcomponents-icons/dist/navigation-left-arrow.js\";\nimport \"@ui5/webcomponents-icons/dist/navigation-right-arrow.js\";\nimport type { JsxTemplateResult } from \"@ui5/webcomponents-base\";\n\ntype TemplateHook = () => JsxTemplateResult;\n\nexport default function InputTemplate(this: Input, hooks?: { preContent: TemplateHook, postContent: TemplateHook }) {\n\tconst preContent = hooks?.preContent || defaultPreContent;\n\tconst postContent = hooks?.postContent || defaultPostContent;\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclass={`ui5-ai-input-root ui5-input-focusable-element ${this.loading && \"ui5-ai-input-busy\"}`}\n\t\t\t\tonFocusIn={this._onfocusin}\n\t\t\t\tonFocusOut={this._onfocusout}\n\t\t\t>\n\t\t\t\t<div class=\"ui5-input-content\">\n\t\t\t\t\t<BusyIndicator\n\t\t\t\t\t\tid={`${this._id}-busyIndicator`}\n\t\t\t\t\t\tactive={this.loading}\n\t\t\t\t\t\tclass=\"ui5-input-busy-indicator\"\n\t\t\t\t\t>\n\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"ui5-input-root\"\n\t\t\t\t\t\t\tpart=\"root\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"ui5-input-content\">\n\t\t\t\t\t\t\t\t{preContent.call(this)}\n\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tid=\"inner\"\n\t\t\t\t\t\t\t\t\tpart=\"input\"\n\t\t\t\t\t\t\t\t\tclass=\"ui5-input-inner\"\n\t\t\t\t\t\t\t\t\tstyle={this.styles.innerInput}\n\t\t\t\t\t\t\t\t\ttype={this.inputNativeType}\n\t\t\t\t\t\t\t\t\tinner-input\n\t\t\t\t\t\t\t\t\tinner-input-with-icon={!!this.icon.length}\n\t\t\t\t\t\t\t\t\tdisabled={this.disabled}\n\t\t\t\t\t\t\t\t\treadonly={this._readonly || this.loading}\n\t\t\t\t\t\t\t\t\tvalue={this._innerValue}\n\t\t\t\t\t\t\t\t\tplaceholder={this._placeholder}\n\t\t\t\t\t\t\t\t\tmaxlength={this.maxlength}\n\t\t\t\t\t\t\t\t\trole={this.accInfo.role}\n\t\t\t\t\t\t\t\t\tenterkeyhint={this.hint}\n\t\t\t\t\t\t\t\t\taria-controls={this.accInfo.ariaControls}\n\t\t\t\t\t\t\t\t\taria-invalid={this.accInfo.ariaInvalid}\n\t\t\t\t\t\t\t\t\taria-haspopup={this.accInfo.ariaHasPopup}\n\t\t\t\t\t\t\t\t\taria-describedby={this.accInfo.ariaDescribedBy}\n\t\t\t\t\t\t\t\t\taria-roledescription={this.accInfo.ariaRoledescription}\n\t\t\t\t\t\t\t\t\taria-autocomplete={this.accInfo.ariaAutoComplete}\n\t\t\t\t\t\t\t\t\taria-expanded={this.accInfo.ariaExpanded}\n\t\t\t\t\t\t\t\t\taria-label={this.ariaLabel}\n\t\t\t\t\t\t\t\t\taria-required={this.required}\n\t\t\t\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\t\t\t\tdata-sap-focus-ref\n\t\t\t\t\t\t\t\t\tstep={this.nativeInputAttributes.step}\n\t\t\t\t\t\t\t\t\tmin={this.nativeInputAttributes.min}\n\t\t\t\t\t\t\t\t\tmax={this.nativeInputAttributes.max}\n\t\t\t\t\t\t\t\t\tonInput={this._handleNativeInput}\n\t\t\t\t\t\t\t\t\tonChange={this._handleChange}\n\t\t\t\t\t\t\t\t\tonSelect={this._handleSelect}\n\t\t\t\t\t\t\t\t\tonKeyDown={this._onkeydown}\n\t\t\t\t\t\t\t\t\tonKeyUp={this._onkeyup}\n\t\t\t\t\t\t\t\t\tonClick={this._click}\n\t\t\t\t\t\t\t\t\tonFocusIn={this.innerFocusIn}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{this._effectiveShowClearIcon &&\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t\tpart=\"clear-icon-wrapper\"\n\t\t\t\t\t\t\t\t\t\tclass=\"ui5-input-clear-icon-wrapper inputIcon\"\n\t\t\t\t\t\t\t\t\t\tonClick={this._clear}\n\t\t\t\t\t\t\t\t\t\tonMouseDown={this._iconMouseDown}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\tpart=\"clear-icon\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ui5-input-clear-icon\"\n\t\t\t\t\t\t\t\t\t\t\tname={\"decline\"}\n\t\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t\t\taccessibleName={this.clearIconAccessibleName}>\n\t\t\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.icon.length > 0 &&\n\t\t\t\t\t\t\t\t\t<div class=\"ui5-input-icon-root\"\n\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<slot name=\"icon\"></slot>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t<div class=\"ui5-input-value-state-icon\">\n\t\t\t\t\t\t\t\t\t{this._valueStateInputIcon}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{ postContent.call(this) }\n\n\t\t\t\t\t\t\t\t{this.accInfo.ariaDescription &&\n\t\t\t\t\t\t\t\t\t<span id=\"descr\" class=\"ui5-hidden-text\">{this.accInfo.ariaDescription}</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.accInfo.accessibleDescription &&\n\t\t\t\t\t\t\t\t\t<span id=\"accessibleDescription\" class=\"ui5-hidden-text\">{this.accInfo.accessibleDescription}</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.linksInAriaValueStateHiddenText.length > 0 &&\n\t\t\t\t\t\t\t\t\t<span id=\"hiddenText-value-state-link-shortcut\" class=\"ui5-hidden-text\">{this.valueStateLinksShortcutsTextAcc}</span>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t{this.hasValueState &&\n\t\t\t\t\t\t\t\t\t<span id=\"valueStateDesc\" class=\"ui5-hidden-text\">{this.ariaValueStateHiddenText}</span>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t</BusyIndicator>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tid=\"ai-menu-btn\"\n\t\t\t\t\t\thidden={(!this.isFocused && !this.loading) || !this.hasActions || this.readonly}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tclass={`ui5-input-ai-button ui5-ai-input-button-wrapper ${this._isMenuOpen && \"ui5-input-button-menu-open\"} ${this.loading && \"ui5-ai-input-loading\"}`}\n\t\t\t\t\t\tdesign=\"Transparent\"\n\t\t\t\t\t\ticon={this.loading ? \"stop\" : \"ai\"}\n\t\t\t\t\t\tonClick={this._handleAIButtonClick}\n\t\t\t\t\t\tonKeyDown={this._handleAIButtonKeydown}\n\t\t\t\t\t\taria-keyshortcuts={ this.loading ? \"Esc\" : \"Shift + F4\" }\n\t\t\t\t\t\ttooltip={this.loading ? this.stopGeneratingTooltip : this.ariaLabel}\n\t\t\t\t\t\taccessibilityAttributes={{ hasPopup: this.loading ? \"false\" : \"menu\" }}\n\t\t\t\t\t/>\n\t\t\t\t\t<Menu\n\t\t\t\t\t\tonItemClick={this._onMenuIconClick}\n\t\t\t\t\t\tonBeforeOpen={() => { this._isMenuOpen = true; }}\n\t\t\t\t\t\tonBeforeClose={() => { this._isMenuOpen = false; }}\n\t\t\t\t\t\tonClose={() => { if (!this.loading) { this.focus(); } }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t\t\t{this.totalVersions > 1 && Versioning.call(this)}\n\t\t\t\t\t</Menu>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nfunction Versioning(this: Input) {\n\treturn (\n\t\t<>\n\t\t\t<MenuSeparator />\n\t\t\t<MenuItem\n\t\t\t\ttype=\"Inactive\"\n\t\t\t\tclass=\"ui5-ai-versioning-menu-footer\"\n\t\t\t\ttext={`${this.currentVersion} / ${this.totalVersions}`}\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tid=\"arrow-left\"\n\t\t\t\t\tclass=\"versioning-button\"\n\t\t\t\t\tslot=\"endContent\"\n\t\t\t\t\tdesign=\"Transparent\"\n\t\t\t\t\ticon=\"navigation-left-arrow\"\n\t\t\t\t\ttooltip={this.previousButtonAccessibleName}\n\t\t\t\t\taccessibleName={this.previousButtonAccessibleName}\n\t\t\t\t\taria-keyshortcut=\"Shift+Ctrl+Z\"\n\t\t\t\t\tdisabled={this.currentVersion <= 1}\n\t\t\t\t\tonClick={this._handlePreviousButtonClick}\n\t\t\t\t\tdata-ui5-versioning-button=\"previous\"\n\t\t\t\t>\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tid=\"arrow-right\"\n\t\t\t\t\tclass=\"versioning-button\"\n\t\t\t\t\tslot=\"endContent\"\n\t\t\t\t\tdesign=\"Transparent\"\n\t\t\t\t\ticon=\"navigation-right-arrow\"\n\t\t\t\t\ttooltip={this.nextButtonAccessibleName}\n\t\t\t\t\taccessibleName={this.nextButtonAccessibleName}\n\t\t\t\t\taria-keyshortcut=\"Shift+Ctrl+Y\"\n\t\t\t\t\tdisabled={this.currentVersion >= this.totalVersions}\n\t\t\t\t\tonClick={this._handleNextButtonClick}\n\t\t\t\t\tdata-ui5-versioning-button=\"next\"\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t</>\n\t);\n}\n\nfunction defaultPreContent() { }\n\nfunction defaultPostContent() {}\n"]}
@@ -0,0 +1,118 @@
1
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
2
+ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
3
+ type TextAreaVersionChangeEventDetail = {
4
+ backwards: boolean;
5
+ };
6
+ /**
7
+ * @class
8
+ *
9
+ * ### Overview
10
+ *
11
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
12
+ * It provides AI-powered text generation, editing suggestions, and version management functionality.
13
+ *
14
+ * ### Structure
15
+ * The `ui5-ai-textarea` consists of the following elements:
16
+ * - TextArea: The main text input area with all standard textarea functionality
17
+ * - WritingAssistant: Dedicated toolbar containing:
18
+ * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions
19
+ * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting
20
+ *
21
+ * ### ES6 Module Import
22
+ *
23
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
24
+ *
25
+ * @constructor
26
+ * @extends BaseTextArea
27
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
28
+ * @since 2.16.0
29
+ * @public
30
+ * @slot {HTMLElement} menu Defines a slot for `ui5-menu` integration. This slot allows you to pass a `ui5-menu` instance that will be associated with the assistant.
31
+ */
32
+ declare class TextArea extends BaseTextArea {
33
+ eventDetails: BaseTextArea["eventDetails"] & {
34
+ "version-change": TextAreaVersionChangeEventDetail;
35
+ "stop-generation": void;
36
+ };
37
+ private _keydownHandler?;
38
+ /**
39
+ * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.
40
+ *
41
+ * @default false
42
+ * @public
43
+ */
44
+ loading: boolean;
45
+ /**
46
+ * Defines the prompt description of the current action.
47
+ *
48
+ * @default ""
49
+ * @public
50
+ */
51
+ promptDescription: string;
52
+ /**
53
+ * Indicates the index of the currently displayed version.
54
+ *
55
+ *
56
+ * @default 0
57
+ * @public
58
+ */
59
+ currentVersion: number;
60
+ /**
61
+ * Indicates the total number of result versions available.
62
+ *
63
+ * Notes:
64
+ * Versioning is hidden if the value is `0`
65
+ *
66
+ * @default 0
67
+ * @public
68
+ */
69
+ totalVersions: number;
70
+ menu: Array<HTMLElement>;
71
+ static i18nBundle: I18nBundle;
72
+ static onDefine(): Promise<void>;
73
+ /**
74
+ * Handles the click event for the "Previous Version" button.
75
+ * Updates the current version index and syncs content.
76
+ */
77
+ _handlePreviousVersionClick(): void;
78
+ /**
79
+ * Handles the click event for the "Next Version" button.
80
+ * Updates the current version index and syncs content.
81
+ */
82
+ _handleNextVersionClick(): void;
83
+ /**
84
+ * Handles the version change event from the writing assistant.
85
+ */
86
+ _handleVersionChange(e: CustomEvent<{
87
+ backwards: boolean;
88
+ }>): void;
89
+ /**
90
+ * Handles keydown events for keyboard shortcuts.
91
+ * @private
92
+ */
93
+ _handleKeydown(keyboardEvent: KeyboardEvent): void;
94
+ /**
95
+ * Overrides the parent's onAfterRendering to add keydown handler.
96
+ * @private
97
+ */
98
+ onAfterRendering(): void;
99
+ /**
100
+ * Handles the generate click event from the AI toolbar.
101
+ * Opens the AI menu and sets the opener element.
102
+ *
103
+ * @private
104
+ */
105
+ _handleAIButtonClick: (e: CustomEvent<{
106
+ clickTarget?: HTMLElement;
107
+ }>) => void;
108
+ get _ariaLabel(): string;
109
+ /**
110
+ * Handles the stop generation event from the AI toolbar.
111
+ * Fires the stop-generation event to notify listeners.
112
+ *
113
+ * @private
114
+ */
115
+ handleStopGeneration: () => void;
116
+ }
117
+ export type { TextAreaVersionChangeEventDetail };
118
+ export default TextArea;
@@ -0,0 +1,230 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var TextArea_1;
8
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
+ import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
11
+ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
13
+ import { BaseTextArea } from "@ui5/webcomponents/dist/TextArea.js";
14
+ import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
15
+ import { WRITING_ASSISTANT_LABEL, } from "./generated/i18n/i18n-defaults.js";
16
+ // Styles
17
+ import TextAreaCss from "./generated/themes/TextArea.css.js";
18
+ import textareaStyles from "@ui5/webcomponents/dist/generated/themes/TextArea.css.js";
19
+ import valueStateMessageStyles from "@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js";
20
+ // Templates
21
+ import TextAreaTemplate from "./TextAreaTemplate.js";
22
+ /**
23
+ * @class
24
+ *
25
+ * ### Overview
26
+ *
27
+ * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.
28
+ * It provides AI-powered text generation, editing suggestions, and version management functionality.
29
+ *
30
+ * ### Structure
31
+ * The `ui5-ai-textarea` consists of the following elements:
32
+ * - TextArea: The main text input area with all standard textarea functionality
33
+ * - WritingAssistant: Dedicated toolbar containing:
34
+ * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions
35
+ * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting
36
+ *
37
+ * ### ES6 Module Import
38
+ *
39
+ * `import "@ui5/webcomponents-ai/dist/TextArea.js";`
40
+ *
41
+ * @constructor
42
+ * @extends BaseTextArea
43
+ * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.
44
+ * @since 2.16.0
45
+ * @public
46
+ * @slot {HTMLElement} menu Defines a slot for `ui5-menu` integration. This slot allows you to pass a `ui5-menu` instance that will be associated with the assistant.
47
+ */
48
+ let TextArea = TextArea_1 = class TextArea extends BaseTextArea {
49
+ constructor() {
50
+ super(...arguments);
51
+ /**
52
+ * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.
53
+ *
54
+ * @default false
55
+ * @public
56
+ */
57
+ this.loading = false;
58
+ /**
59
+ * Defines the prompt description of the current action.
60
+ *
61
+ * @default ""
62
+ * @public
63
+ */
64
+ this.promptDescription = "";
65
+ /**
66
+ * Indicates the index of the currently displayed version.
67
+ *
68
+ *
69
+ * @default 0
70
+ * @public
71
+ */
72
+ this.currentVersion = 0;
73
+ /**
74
+ * Indicates the total number of result versions available.
75
+ *
76
+ * Notes:
77
+ * Versioning is hidden if the value is `0`
78
+ *
79
+ * @default 0
80
+ * @public
81
+ */
82
+ this.totalVersions = 0;
83
+ /**
84
+ * Handles the generate click event from the AI toolbar.
85
+ * Opens the AI menu and sets the opener element.
86
+ *
87
+ * @private
88
+ */
89
+ this._handleAIButtonClick = (e) => {
90
+ const menuNodes = this.getSlottedNodes("menu");
91
+ if (menuNodes.length === 0) {
92
+ return;
93
+ }
94
+ if (!e.detail?.clickTarget) {
95
+ return;
96
+ }
97
+ const menu = menuNodes[0];
98
+ if (menu && typeof menu.open !== "undefined") {
99
+ menu.opener = e.detail.clickTarget;
100
+ menu.open = true;
101
+ }
102
+ };
103
+ /**
104
+ * Handles the stop generation event from the AI toolbar.
105
+ * Fires the stop-generation event to notify listeners.
106
+ *
107
+ * @private
108
+ */
109
+ this.handleStopGeneration = () => {
110
+ this.fireDecoratorEvent("stop-generation");
111
+ };
112
+ }
113
+ static async onDefine() {
114
+ TextArea_1.i18nBundle = await getI18nBundle("@ui5/webcomponents-ai");
115
+ }
116
+ /**
117
+ * Handles the click event for the "Previous Version" button.
118
+ * Updates the current version index and syncs content.
119
+ */
120
+ _handlePreviousVersionClick() {
121
+ this.fireDecoratorEvent("version-change", { backwards: true });
122
+ }
123
+ /**
124
+ * Handles the click event for the "Next Version" button.
125
+ * Updates the current version index and syncs content.
126
+ */
127
+ _handleNextVersionClick() {
128
+ this.fireDecoratorEvent("version-change", { backwards: false });
129
+ }
130
+ /**
131
+ * Handles the version change event from the writing assistant.
132
+ */
133
+ _handleVersionChange(e) {
134
+ if (e.detail.backwards) {
135
+ this._handlePreviousVersionClick();
136
+ }
137
+ else {
138
+ this._handleNextVersionClick();
139
+ }
140
+ }
141
+ /**
142
+ * Handles keydown events for keyboard shortcuts.
143
+ * @private
144
+ */
145
+ _handleKeydown(keyboardEvent) {
146
+ const isCtrlOrCmd = keyboardEvent.ctrlKey || keyboardEvent.metaKey;
147
+ const isShift = keyboardEvent.shiftKey;
148
+ if (isShift && keyboardEvent.key.toLowerCase() === "f4") {
149
+ const toolbar = this.shadowRoot?.querySelector("[ui5-ai-writing-assistant]");
150
+ const aiButton = toolbar?.shadowRoot?.querySelector("#ai-menu-btn");
151
+ if (aiButton) {
152
+ aiButton.focus();
153
+ }
154
+ return;
155
+ }
156
+ if (this.totalVersions > 1) {
157
+ if (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === "z") {
158
+ keyboardEvent.preventDefault();
159
+ this._handlePreviousVersionClick();
160
+ return;
161
+ }
162
+ if (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === "y") {
163
+ keyboardEvent.preventDefault();
164
+ this._handleNextVersionClick();
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * Overrides the parent's onAfterRendering to add keydown handler.
170
+ * @private
171
+ */
172
+ onAfterRendering() {
173
+ super.onAfterRendering();
174
+ // Add keydown event listener to the textarea
175
+ const textarea = this.shadowRoot?.querySelector("textarea");
176
+ if (textarea && !this._keydownHandler) {
177
+ this._keydownHandler = this._handleKeydown.bind(this);
178
+ textarea.addEventListener("keydown", this._keydownHandler);
179
+ }
180
+ }
181
+ get _ariaLabel() {
182
+ return this.accessibleName || TextArea_1.i18nBundle.getText(WRITING_ASSISTANT_LABEL);
183
+ }
184
+ };
185
+ __decorate([
186
+ property({ type: Boolean })
187
+ ], TextArea.prototype, "loading", void 0);
188
+ __decorate([
189
+ property()
190
+ ], TextArea.prototype, "promptDescription", void 0);
191
+ __decorate([
192
+ property({ type: Number })
193
+ ], TextArea.prototype, "currentVersion", void 0);
194
+ __decorate([
195
+ property({ type: Number })
196
+ ], TextArea.prototype, "totalVersions", void 0);
197
+ __decorate([
198
+ slot({ type: HTMLElement })
199
+ ], TextArea.prototype, "menu", void 0);
200
+ TextArea = TextArea_1 = __decorate([
201
+ customElement({
202
+ tag: "ui5-ai-textarea",
203
+ languageAware: true,
204
+ renderer: jsxRenderer,
205
+ template: TextAreaTemplate,
206
+ styles: [
207
+ textareaStyles,
208
+ valueStateMessageStyles,
209
+ TextAreaCss,
210
+ ],
211
+ })
212
+ /**
213
+ * Fired when the user clicks on version navigation buttons.
214
+ *
215
+ * @param {boolean} backwards - Indicates if navigation is backwards (true) or forwards (false, default).
216
+ * @public
217
+ */
218
+ ,
219
+ event("version-change")
220
+ /**
221
+ * Fired when the user requests to stop AI text generation.
222
+ *
223
+ * @public
224
+ */
225
+ ,
226
+ event("stop-generation")
227
+ ], TextArea);
228
+ TextArea.define();
229
+ export default TextArea;
230
+ //# sourceMappingURL=TextArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextArea.js","sourceRoot":"","sources":["../src/TextArea.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,IAAI,MAAM,iDAAiD,CAAC;AACnE,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAC5E,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EACN,uBAAuB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,SAAS;AACT,OAAO,WAAW,MAAM,oCAAoC,CAAC;AAC7D,OAAO,cAAc,MAAM,0DAA0D,CAAC;AACtF,OAAO,uBAAuB,MAAM,mEAAmE,CAAC;AAExG,YAAY;AACZ,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAMrD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA4BH,IAAM,QAAQ,gBAAd,MAAM,QAAS,SAAQ,YAAY;IAAnC;;QASC;;;;;WAKG;QAEH,YAAO,GAAG,KAAK,CAAC;QAEhB;;;;;WAKG;QAEH,sBAAiB,GAAG,EAAE,CAAC;QAEvB;;;;;;WAMG;QAEH,mBAAc,GAAG,CAAC,CAAC;QAEnB;;;;;;;;WAQG;QAEH,kBAAa,GAAG,CAAC,CAAC;QAqFlB;;;;;WAKG;QACH,yBAAoB,GAAG,CAAC,CAA6C,EAAE,EAAE;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;YACR,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;gBAC5B,OAAO;YACR,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAA2D,CAAC;YACpF,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gBACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAClB,CAAC;QACF,CAAC,CAAA;QAKD;;;;;WAKG;QACH,yBAAoB,GAAG,GAAG,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC,CAAA;IACF,CAAC;IAhHA,MAAM,CAAC,KAAK,CAAC,QAAQ;QACpB,UAAQ,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACH,2BAA2B;QAC1B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED;;;OAGG;IACH,uBAAuB;QACtB,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,CAAsC;QAC1D,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAChC,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,aAA4B;QAC1C,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;QACnE,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC;QAEvC,IAAI,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,4BAA4B,CAAgB,CAAC;YAC5F,MAAM,QAAQ,GAAG,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,cAAc,CAAgB,CAAC;YAEnF,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;YACD,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,WAAW,IAAI,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACvE,aAAa,CAAC,cAAc,EAAE,CAAC;gBAC/B,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACnC,OAAO;YACR,CAAC;YAED,IAAI,WAAW,IAAI,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACvE,aAAa,CAAC,cAAc,EAAE,CAAC;gBAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChC,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACf,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAEzB,6CAA6C;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;IAuBD,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,cAAc,IAAI,UAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACpF,CAAC;CAWD,CAAA;AAtJA;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;yCACZ;AAShB;IADC,QAAQ,EAAE;mDACY;AAUvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDACR;AAYnB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACT;AAGlB;IADC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;sCACF;AAlDrB,QAAQ;IA3Bb,aAAa,CAAC;QACd,GAAG,EAAE,iBAAiB;QACtB,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,gBAAgB;QAC1B,MAAM,EAAE;YACP,cAAc;YACd,uBAAuB;YACvB,WAAW;SACX;KACD,CAAC;IAEF;;;;;OAKG;;IACF,KAAK,CAAC,gBAAgB,CAAC;IAExB;;;;OAIG;;IACF,KAAK,CAAC,iBAAiB,CAAC;GAEnB,QAAQ,CAsKb;AAED,QAAQ,CAAC,MAAM,EAAE,CAAC;AAGlB,eAAe,QAAQ,CAAC","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\nimport { BaseTextArea } from \"@ui5/webcomponents/dist/TextArea.js\";\nimport { getI18nBundle } from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport {\n\tWRITING_ASSISTANT_LABEL,\n} from \"./generated/i18n/i18n-defaults.js\";\n// Styles\nimport TextAreaCss from \"./generated/themes/TextArea.css.js\";\nimport textareaStyles from \"@ui5/webcomponents/dist/generated/themes/TextArea.css.js\";\nimport valueStateMessageStyles from \"@ui5/webcomponents/dist/generated/themes/ValueStateMessage.css.js\";\n\n// Templates\nimport TextAreaTemplate from \"./TextAreaTemplate.js\";\n\ntype TextAreaVersionChangeEventDetail = {\n\tbackwards: boolean,\n};\n\n/**\n * @class\n *\n * ### Overview\n *\n * The `ui5-ai-textarea` component extends the standard TextArea with Writing Assistant capabilities.\n * It provides AI-powered text generation, editing suggestions, and version management functionality.\n *\n * ### Structure\n * The `ui5-ai-textarea` consists of the following elements:\n * - TextArea: The main text input area with all standard textarea functionality\n * - WritingAssistant: Dedicated toolbar containing:\n * - Versioning: A component with left/right navigation buttons and a label for browsing AI-generated versions\n * - AI Button: Opens a menu that can be extended with custom AI generation options through slotting\n *\n * ### ES6 Module Import\n *\n * `import \"@ui5/webcomponents-ai/dist/TextArea.js\";`\n *\n * @constructor\n * @extends BaseTextArea\n * @experimental The **@ui5/webcomponents-ai** package is under development and considered experimental - components' APIs are subject to change.\n * @since 2.16.0\n * @public\n * @slot {HTMLElement} menu Defines a slot for `ui5-menu` integration. This slot allows you to pass a `ui5-menu` instance that will be associated with the assistant.\n */\n@customElement({\n\ttag: \"ui5-ai-textarea\",\n\tlanguageAware: true,\n\trenderer: jsxRenderer,\n\ttemplate: TextAreaTemplate,\n\tstyles: [\n\t\ttextareaStyles,\n\t\tvalueStateMessageStyles,\n\t\tTextAreaCss,\n\t],\n})\n\n/**\n * Fired when the user clicks on version navigation buttons.\n *\n * @param {boolean} backwards - Indicates if navigation is backwards (true) or forwards (false, default).\n * @public\n */\n@event(\"version-change\")\n\n/**\n * Fired when the user requests to stop AI text generation.\n *\n * @public\n */\n@event(\"stop-generation\")\n\nclass TextArea extends BaseTextArea {\n\teventDetails!: BaseTextArea[\"eventDetails\"] & {\n\t\t\"version-change\": TextAreaVersionChangeEventDetail;\n\t\t\"stop-generation\": void;\n\t};\n\n\t// Store bound handler for proper cleanup\n\tprivate _keydownHandler?: (event: KeyboardEvent) => void;\n\n\t/**\n\t * Defines whether the `ui5-ai-textarea` is currently in a loading(processing) state.\n\t *\n\t * @default false\n\t * @public\n\t */\n\t@property({ type: Boolean })\n\tloading = false;\n\n\t/**\n\t * Defines the prompt description of the current action.\n\t *\n\t * @default \"\"\n\t * @public\n\t */\n\t@property()\n\tpromptDescription = \"\";\n\n\t/**\n\t * Indicates the index of the currently displayed version.\n\t *\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\tcurrentVersion = 0;\n\n\t/**\n\t * Indicates the total number of result versions available.\n\t *\n\t * Notes:\n\t * Versioning is hidden if the value is `0`\n\t *\n\t * @default 0\n\t * @public\n\t */\n\t@property({ type: Number })\n\ttotalVersions = 0;\n\n\t@slot({ type: HTMLElement })\n\tmenu!: Array<HTMLElement>;\n\n\tstatic i18nBundle: I18nBundle;\n\n\tstatic async onDefine() {\n\t\tTextArea.i18nBundle = await getI18nBundle(\"@ui5/webcomponents-ai\");\n\t}\n\n\t/**\n\t * Handles the click event for the \"Previous Version\" button.\n\t * Updates the current version index and syncs content.\n\t */\n\t_handlePreviousVersionClick(): void {\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: true });\n\t}\n\n\t/**\n\t * Handles the click event for the \"Next Version\" button.\n\t * Updates the current version index and syncs content.\n\t */\n\t_handleNextVersionClick(): void {\n\t\tthis.fireDecoratorEvent(\"version-change\", { backwards: false });\n\t}\n\n\t/**\n\t * Handles the version change event from the writing assistant.\n\t */\n\t_handleVersionChange(e: CustomEvent<{ backwards: boolean }>): void {\n\t\tif (e.detail.backwards) {\n\t\t\tthis._handlePreviousVersionClick();\n\t\t} else {\n\t\t\tthis._handleNextVersionClick();\n\t\t}\n\t}\n\n\t/**\n\t * Handles keydown events for keyboard shortcuts.\n\t * @private\n\t */\n\t_handleKeydown(keyboardEvent: KeyboardEvent) {\n\t\tconst isCtrlOrCmd = keyboardEvent.ctrlKey || keyboardEvent.metaKey;\n\t\tconst isShift = keyboardEvent.shiftKey;\n\n\t\tif (isShift && keyboardEvent.key.toLowerCase() === \"f4\") {\n\t\t\tconst toolbar = this.shadowRoot?.querySelector(\"[ui5-ai-writing-assistant]\") as HTMLElement;\n\t\t\tconst aiButton = toolbar?.shadowRoot?.querySelector(\"#ai-menu-btn\") as HTMLElement;\n\n\t\t\tif (aiButton) {\n\t\t\t\taiButton.focus();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.totalVersions > 1) {\n\t\t\tif (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === \"z\") {\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tthis._handlePreviousVersionClick();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isCtrlOrCmd && isShift && keyboardEvent.key.toLowerCase() === \"y\") {\n\t\t\t\tkeyboardEvent.preventDefault();\n\t\t\t\tthis._handleNextVersionClick();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Overrides the parent's onAfterRendering to add keydown handler.\n\t * @private\n\t */\n\tonAfterRendering() {\n\t\tsuper.onAfterRendering();\n\n\t\t// Add keydown event listener to the textarea\n\t\tconst textarea = this.shadowRoot?.querySelector(\"textarea\");\n\t\tif (textarea && !this._keydownHandler) {\n\t\t\tthis._keydownHandler = this._handleKeydown.bind(this);\n\t\t\ttextarea.addEventListener(\"keydown\", this._keydownHandler);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the generate click event from the AI toolbar.\n\t * Opens the AI menu and sets the opener element.\n\t *\n\t * @private\n\t */\n\t_handleAIButtonClick = (e: CustomEvent<{ clickTarget?: HTMLElement }>) => {\n\t\tconst menuNodes = this.getSlottedNodes(\"menu\");\n\t\tif (menuNodes.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tif (!e.detail?.clickTarget) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst menu = menuNodes[0] as HTMLElement & { opener?: HTMLElement; open?: boolean };\n\t\tif (menu && typeof menu.open !== \"undefined\") {\n\t\t\tmenu.opener = e.detail.clickTarget;\n\t\t\tmenu.open = true;\n\t\t}\n\t}\n\tget _ariaLabel() {\n\t\treturn this.accessibleName || TextArea.i18nBundle.getText(WRITING_ASSISTANT_LABEL);\n\t}\n\n\t/**\n\t * Handles the stop generation event from the AI toolbar.\n\t * Fires the stop-generation event to notify listeners.\n\t *\n\t * @private\n\t */\n\thandleStopGeneration = () => {\n\t\tthis.fireDecoratorEvent(\"stop-generation\");\n\t}\n}\n\nTextArea.define();\n\nexport type { TextAreaVersionChangeEventDetail };\nexport default TextArea;\n"]}
@@ -0,0 +1,2 @@
1
+ import type TextArea from "./TextArea.js";
2
+ export default function TextAreaTemplate(this: TextArea): import("@ui5/webcomponents-base/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "@ui5/webcomponents-base/jsx-runtime";
2
+ import WritingAssistant from "./WritingAssistant.js";
3
+ import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
4
+ import TextAreaPopoverTemplate from "@ui5/webcomponents/dist/TextAreaPopoverTemplate.js";
5
+ export default function TextAreaTemplate() {
6
+ return (_jsxs("div", { class: "ui5-ai-textarea-root", children: [_jsxs("div", { class: this.classes.root, onFocusIn: this._onfocusin, onFocusOut: this._onfocusout, children: [_jsxs("div", { class: "ui5-textarea-wrapper", children: [this.growing &&
7
+ _jsx("div", { id: `${this._id}-mirror`, class: "ui5-textarea-mirror", "aria-hidden": "true", children: this._mirrorText.map(mirrorText => {
8
+ return (_jsxs(_Fragment, { children: [mirrorText.text, _jsx("br", {})] }));
9
+ }) }), _jsx(BusyIndicator, { id: `${this._id}-busyIndicator`, active: this.loading, class: "ui5-textarea-busy-indicator", children: _jsx("textarea", { id: `${this._id}-inner`, class: "ui5-textarea-inner", part: "textarea", placeholder: this.placeholder, disabled: this.disabled, readonly: this.readonly, "aria-label": this._ariaLabel, "aria-describedby": this.ariaDescribedBy, "aria-invalid": this._ariaInvalid, "aria-required": this.required, maxlength: this._exceededTextProps.calcedMaxLength, value: this.value, "data-sap-focus-ref": true, onInput: this._oninput, onChange: this._onchange, onKeyUp: this._onkeyup, onKeyDown: this._onkeydown, onSelect: this._onselect, onScroll: this._onscroll }) }), _jsx("div", { part: "footer", children: _jsx("slot", { name: "footer", children: _jsx(WritingAssistant, { loading: this.loading, currentVersion: this.currentVersion, totalVersions: this.totalVersions, promptDescription: this.promptDescription, onButtonClick: this._handleAIButtonClick, onStopGeneration: this.handleStopGeneration, onVersionChange: this._handleVersionChange }) }) })] }), this.showExceededText &&
10
+ _jsx("span", { class: "ui5-textarea-exceeded-text", children: this._exceededTextProps.exceededText }), this.hasValueState &&
11
+ _jsx("span", { id: `${this._id}-valueStateDesc`, class: "ui5-hidden-text", children: this.ariaValueStateHiddenText })] }), TextAreaPopoverTemplate.call(this), _jsx("div", { "aria-live": "polite", "aria-atomic": "true", class: "ui5-hidden-text", children: this.loading ? this.promptDescription : "" }), _jsx("div", { id: "ai-menu-wrapper", children: _jsx("slot", { name: "menu" }) })] }));
12
+ }
13
+ //# sourceMappingURL=TextAreaTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextAreaTemplate.js","sourceRoot":"","sources":["../src/TextAreaTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,uBAAuB,MAAM,oDAAoD,CAAC;AAEzF,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACvC,OAAO,CACN,eAAK,KAAK,EAAC,sBAAsB,aAChC,eACC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EACxB,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,UAAU,EAAE,IAAI,CAAC,WAAW,aAE5B,eAAK,KAAK,EAAC,sBAAsB,aAC/B,IAAI,CAAC,OAAO;gCACb,cAAK,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,EAAC,qBAAqB,iBAAa,MAAM,YAC3E,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;wCAClC,OAAO,CACN,8BACE,UAAU,CAAC,IAAI,EAChB,cAAM,IACJ,CACH,CAAC;oCACH,CAAC,CAAC,GACG,EAEN,KAAC,aAAa,IACb,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,gBAAgB,EAC/B,MAAM,EAAE,IAAI,CAAC,OAAO,EACpB,KAAK,EAAC,6BAA6B,YAEnC,mBACC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,EACvB,KAAK,EAAC,oBAAoB,EAC1B,IAAI,EAAC,UAAU,EACf,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,gBACX,IAAI,CAAC,UAAU,sBACT,IAAI,CAAC,eAAe,kBACxB,IAAI,CAAC,YAAY,mBAChB,IAAI,CAAC,QAAQ,EAC5B,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAClD,KAAK,EAAE,IAAI,CAAC,KAAK,8BAEjB,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,QAAQ,EAAE,IAAI,CAAC,SAAS,EACxB,OAAO,EAAE,IAAI,CAAC,QAAQ,EACtB,SAAS,EAAE,IAAI,CAAC,UAAU,EAC1B,QAAQ,EAAE,IAAI,CAAC,SAAS,EACxB,QAAQ,EAAE,IAAI,CAAC,SAAS,GACd,GACI,EAChB,cAAK,IAAI,EAAC,QAAQ,YACjB,eAAM,IAAI,EAAC,QAAQ,YAClB,KAAC,gBAAgB,IAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,aAAa,EAAE,IAAI,CAAC,oBAAoB,EACxC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,EAC3C,eAAe,EAAE,IAAI,CAAC,oBAAoB,GACzC,GACI,GACF,IACD,EAEL,IAAI,CAAC,gBAAgB;wBACtB,eAAM,KAAK,EAAC,4BAA4B,YAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,GAAQ,EAGrF,IAAI,CAAC,aAAa;wBACnB,eAAM,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,iBAAiB,EAAE,KAAK,EAAC,iBAAiB,YAAE,IAAI,CAAC,wBAAwB,GAAQ,IAEjG,EAEL,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAGnC,2BAAe,QAAQ,iBAAa,MAAM,EAAC,KAAK,EAAC,iBAAiB,YAChE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,GACtC,EAEN,cAAK,EAAE,EAAC,iBAAiB,YACxB,eAAM,IAAI,EAAC,MAAM,GAAQ,GACpB,IACD,CACN,CAAC;AACH,CAAC","sourcesContent":["import type TextArea from \"./TextArea.js\";\nimport WritingAssistant from \"./WritingAssistant.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport TextAreaPopoverTemplate from \"@ui5/webcomponents/dist/TextAreaPopoverTemplate.js\";\n\nexport default function TextAreaTemplate(this: TextArea) {\n\treturn (\n\t\t<div class=\"ui5-ai-textarea-root\">\n\t\t\t<div\n\t\t\t\tclass={this.classes.root}\n\t\t\t\tonFocusIn={this._onfocusin}\n\t\t\t\tonFocusOut={this._onfocusout}\n\t\t\t>\n\t\t\t\t<div class=\"ui5-textarea-wrapper\">\n\t\t\t\t\t{this.growing &&\n\t\t\t\t\t<div id={`${this._id}-mirror`} class=\"ui5-textarea-mirror\" aria-hidden=\"true\">\n\t\t\t\t\t\t{this._mirrorText.map(mirrorText => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{mirrorText.text}\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<BusyIndicator\n\t\t\t\t\t\tid={`${this._id}-busyIndicator`}\n\t\t\t\t\t\tactive={this.loading}\n\t\t\t\t\t\tclass=\"ui5-textarea-busy-indicator\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tid={`${this._id}-inner`}\n\t\t\t\t\t\t\tclass=\"ui5-textarea-inner\"\n\t\t\t\t\t\t\tpart=\"textarea\"\n\t\t\t\t\t\t\tplaceholder={this.placeholder}\n\t\t\t\t\t\t\tdisabled={this.disabled}\n\t\t\t\t\t\t\treadonly={this.readonly}\n\t\t\t\t\t\t\taria-label={this._ariaLabel}\n\t\t\t\t\t\t\taria-describedby={this.ariaDescribedBy}\n\t\t\t\t\t\t\taria-invalid={this._ariaInvalid}\n\t\t\t\t\t\t\taria-required={this.required}\n\t\t\t\t\t\t\tmaxlength={this._exceededTextProps.calcedMaxLength}\n\t\t\t\t\t\t\tvalue={this.value}\n\t\t\t\t\t\t\tdata-sap-focus-ref\n\t\t\t\t\t\t\tonInput={this._oninput}\n\t\t\t\t\t\t\tonChange={this._onchange}\n\t\t\t\t\t\t\tonKeyUp={this._onkeyup}\n\t\t\t\t\t\t\tonKeyDown={this._onkeydown}\n\t\t\t\t\t\t\tonSelect={this._onselect}\n\t\t\t\t\t\t\tonScroll={this._onscroll}>\n\t\t\t\t\t\t</textarea>\n\t\t\t\t\t</BusyIndicator>\n\t\t\t\t\t<div part=\"footer\">\n\t\t\t\t\t\t<slot name=\"footer\">\n\t\t\t\t\t\t\t<WritingAssistant\n\t\t\t\t\t\t\t\tloading={this.loading}\n\t\t\t\t\t\t\t\tcurrentVersion={this.currentVersion}\n\t\t\t\t\t\t\t\ttotalVersions={this.totalVersions}\n\t\t\t\t\t\t\t\tpromptDescription={this.promptDescription}\n\t\t\t\t\t\t\t\tonButtonClick={this._handleAIButtonClick}\n\t\t\t\t\t\t\t\tonStopGeneration={this.handleStopGeneration}\n\t\t\t\t\t\t\t\tonVersionChange={this._handleVersionChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{this.showExceededText &&\n\t\t\t\t<span class=\"ui5-textarea-exceeded-text\">{this._exceededTextProps.exceededText}</span>\n\t\t\t\t}\n\n\t\t\t\t{this.hasValueState &&\n\t\t\t\t<span id={`${this._id}-valueStateDesc`} class=\"ui5-hidden-text\">{this.ariaValueStateHiddenText}</span>\n\t\t\t\t}\n\t\t\t</div>\n\n\t\t\t{TextAreaPopoverTemplate.call(this)}\n\n\t\t\t{/* ARIA live region for screen readers */}\n\t\t\t<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ui5-hidden-text\">\n\t\t\t\t{this.loading ? this.promptDescription : \"\"}\n\t\t\t</div>\n\n\t\t\t<div id=\"ai-menu-wrapper\">\n\t\t\t\t<slot name=\"menu\"></slot>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import ToolbarItem from "@ui5/webcomponents/dist/ToolbarItem.js";
2
+ /**
3
+ * @class
4
+ *
5
+ * ### Overview
6
+ * The `ui5-ai-toolbar-label` represents a text label,
7
+ * used in the `ui5-toolbar`.
8
+ *
9
+ * ### ES6 Module Import
10
+ * `import "@ui5/webcomponents-ai/dist/ToolbarLabel.js";`
11
+ * @constructor
12
+ * @extends ToolbarItem
13
+ * @private
14
+ * @since 1.0.0-rc.1
15
+ */
16
+ declare class ToolbarLabel extends ToolbarItem {
17
+ /**
18
+ * Defines the text of the label.
19
+ * @default ""
20
+ * @public
21
+ */
22
+ text: string;
23
+ /**
24
+ * @override
25
+ * ToolbarLabel is not interactive.
26
+ */
27
+ get isInteractive(): boolean;
28
+ /**
29
+ * @override
30
+ */
31
+ get classes(): {
32
+ root: {
33
+ "ui5-ai-tb-label": boolean;
34
+ "ui5-tb-popover-item": boolean;
35
+ "ui5-tb-item": boolean;
36
+ };
37
+ };
38
+ }
39
+ export default ToolbarLabel;
@@ -0,0 +1,67 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
8
+ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
10
+ import ToolbarItem from "@ui5/webcomponents/dist/ToolbarItem.js";
11
+ import ToolbarLabelTemplate from "./ToolbarLabelTemplate.js";
12
+ /**
13
+ * @class
14
+ *
15
+ * ### Overview
16
+ * The `ui5-ai-toolbar-label` represents a text label,
17
+ * used in the `ui5-toolbar`.
18
+ *
19
+ * ### ES6 Module Import
20
+ * `import "@ui5/webcomponents-ai/dist/ToolbarLabel.js";`
21
+ * @constructor
22
+ * @extends ToolbarItem
23
+ * @private
24
+ * @since 1.0.0-rc.1
25
+ */
26
+ let ToolbarLabel = class ToolbarLabel extends ToolbarItem {
27
+ constructor() {
28
+ super(...arguments);
29
+ /**
30
+ * Defines the text of the label.
31
+ * @default ""
32
+ * @public
33
+ */
34
+ this.text = "";
35
+ }
36
+ /**
37
+ * @override
38
+ * ToolbarLabel is not interactive.
39
+ */
40
+ get isInteractive() {
41
+ return false;
42
+ }
43
+ /**
44
+ * @override
45
+ */
46
+ get classes() {
47
+ return {
48
+ root: {
49
+ ...super.classes.root,
50
+ "ui5-ai-tb-label": true,
51
+ },
52
+ };
53
+ }
54
+ };
55
+ __decorate([
56
+ property()
57
+ ], ToolbarLabel.prototype, "text", void 0);
58
+ ToolbarLabel = __decorate([
59
+ customElement({
60
+ tag: "ui5-ai-toolbar-label",
61
+ template: ToolbarLabelTemplate,
62
+ renderer: jsxRenderer,
63
+ })
64
+ ], ToolbarLabel);
65
+ ToolbarLabel.define();
66
+ export default ToolbarLabel;
67
+ //# sourceMappingURL=ToolbarLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolbarLabel.js","sourceRoot":"","sources":["../src/ToolbarLabel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAC/E,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAE3E,OAAO,WAAW,MAAM,wCAAwC,CAAC;AACjE,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AAMH,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,WAAW;IAAtC;;QACC;;;;WAIG;QAEH,SAAI,GAAG,EAAE,CAAC;IAqBX,CAAC;IAnBA;;;OAGG;IACH,IAAI,aAAa;QAChB,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACV,OAAO;YACN,IAAI,EAAE;gBACL,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI;gBACrB,iBAAiB,EAAE,IAAI;aACvB;SACD,CAAC;IACH,CAAC;CACD,CAAA;AArBA;IADC,QAAQ,EAAE;0CACD;AAPL,YAAY;IALjB,aAAa,CAAC;QACd,GAAG,EAAE,sBAAsB;QAC3B,QAAQ,EAAE,oBAAoB;QAC9B,QAAQ,EAAE,WAAW;KACrB,CAAC;GACI,YAAY,CA4BjB;AAED,YAAY,CAAC,MAAM,EAAE,CAAC;AAEtB,eAAe,YAAY,CAAC","sourcesContent":["import jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\n\nimport ToolbarItem from \"@ui5/webcomponents/dist/ToolbarItem.js\";\nimport ToolbarLabelTemplate from \"./ToolbarLabelTemplate.js\";\n\n/**\n * @class\n *\n * ### Overview\n * The `ui5-ai-toolbar-label` represents a text label,\n * used in the `ui5-toolbar`.\n *\n * ### ES6 Module Import\n * `import \"@ui5/webcomponents-ai/dist/ToolbarLabel.js\";`\n * @constructor\n * @extends ToolbarItem\n * @private\n * @since 1.0.0-rc.1\n */\n@customElement({\n\ttag: \"ui5-ai-toolbar-label\",\n\ttemplate: ToolbarLabelTemplate,\n\trenderer: jsxRenderer,\n})\nclass ToolbarLabel extends ToolbarItem {\n\t/**\n\t * Defines the text of the label.\n\t * @default \"\"\n\t * @public\n\t */\n\t@property()\n\ttext = \"\";\n\n\t/**\n\t * @override\n\t * ToolbarLabel is not interactive.\n\t */\n\tget isInteractive(): boolean {\n\t\treturn false;\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-tb-label\": true,\n\t\t\t},\n\t\t};\n\t}\n}\n\nToolbarLabel.define();\n\nexport default ToolbarLabel;\n"]}