@fundamental-ngx/ui5-webcomponents-ai 0.61.2-rc.9 → 0.61.3
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.
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-button-state.mjs +106 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-button-state.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-button.mjs +172 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-button.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-input.mjs +341 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-input.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-prompt-input.mjs +207 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-prompt-input.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-text-area.mjs +298 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-text-area.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-theming.mjs +23 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-theming.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-toolbar-label.mjs +114 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-toolbar-label.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-versioning.mjs +142 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-versioning.mjs.map +1 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-writing-assistant.mjs +124 -0
- package/fesm2022/fundamental-ngx-ui5-webcomponents-ai-writing-assistant.mjs.map +1 -0
- package/package.json +41 -5
- package/types/fundamental-ngx-ui5-webcomponents-ai-button-state.d.ts +50 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-button.d.ts +100 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-input.d.ts +218 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-prompt-input.d.ts +128 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-text-area.d.ts +188 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-theming.d.ts +11 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-toolbar-label.d.ts +58 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-versioning.d.ts +71 -0
- package/types/fundamental-ngx-ui5-webcomponents-ai-writing-assistant.d.ts +54 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, inject, ElementRef, Injector, runInInjectionContext, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import '@ui5/webcomponents-ai/dist/ButtonState.js';
|
|
4
|
+
import { ContentDensityObserver, contentDensityObserverProviders, ContentDensityMode } from '@fundamental-ngx/core/content-density';
|
|
5
|
+
|
|
6
|
+
class ButtonState {
|
|
7
|
+
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* Defines the icon to be displayed as graphical element within the component after the text.
|
|
10
|
+
The SAP-icons font provides numerous options.
|
|
11
|
+
|
|
12
|
+
**Example:**
|
|
13
|
+
|
|
14
|
+
See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
|
|
15
|
+
*/
|
|
16
|
+
this.endIcon = input(...(ngDevMode ? [undefined, { debugName: "endIcon" }] : []));
|
|
17
|
+
/**
|
|
18
|
+
* Defines the icon to be displayed as graphical element within the component before the text.
|
|
19
|
+
The SAP-icons font provides numerous options.
|
|
20
|
+
|
|
21
|
+
**Example:**
|
|
22
|
+
|
|
23
|
+
See all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).
|
|
24
|
+
*/
|
|
25
|
+
this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
|
|
26
|
+
/**
|
|
27
|
+
* Defines the name of the button state.
|
|
28
|
+
*/
|
|
29
|
+
this.name = input(...(ngDevMode ? [undefined, { debugName: "name" }] : []));
|
|
30
|
+
/**
|
|
31
|
+
* Defines if the component is in split button mode.
|
|
32
|
+
*/
|
|
33
|
+
this.showArrowButton = input(false, { ...(ngDevMode ? { debugName: "showArrowButton" } : {}), transform: booleanAttribute });
|
|
34
|
+
/**
|
|
35
|
+
* Defines the text of the button in this state.
|
|
36
|
+
*/
|
|
37
|
+
this.text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : [])); // className is now passed
|
|
38
|
+
this.elementRef = inject(ElementRef);
|
|
39
|
+
this.injector = inject(Injector);
|
|
40
|
+
/**
|
|
41
|
+
* Content density observer is injected to activate automatic CSS class and
|
|
42
|
+
* UI5 attribute application. The observer self-initializes, no explicit subscribe() needed.
|
|
43
|
+
* @private
|
|
44
|
+
*/
|
|
45
|
+
this._contentDensityObserver = inject(ContentDensityObserver);
|
|
46
|
+
}
|
|
47
|
+
get element() {
|
|
48
|
+
return this.elementRef.nativeElement;
|
|
49
|
+
}
|
|
50
|
+
ngAfterViewInit() {
|
|
51
|
+
const wcElement = this.element;
|
|
52
|
+
const inputsToSync = [
|
|
53
|
+
'endIcon',
|
|
54
|
+
'icon',
|
|
55
|
+
'name',
|
|
56
|
+
'showArrowButton',
|
|
57
|
+
'text',
|
|
58
|
+
];
|
|
59
|
+
// Synchronize inputs (properties)
|
|
60
|
+
for (const inputName of inputsToSync) {
|
|
61
|
+
// Find the corresponding camelCase signal property on the Angular component
|
|
62
|
+
const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
|
|
63
|
+
// Use the Injector to run the effect in the correct context
|
|
64
|
+
if (this[signalName] && typeof this[signalName] === 'function') {
|
|
65
|
+
runInInjectionContext(this.injector, () => {
|
|
66
|
+
effect(() => {
|
|
67
|
+
// Read the signal value
|
|
68
|
+
const value = this[signalName]();
|
|
69
|
+
if (wcElement) {
|
|
70
|
+
// Write the value to the Web Component's property
|
|
71
|
+
wcElement[inputName] = value;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ButtonState, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
79
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.0", type: ButtonState, isStandalone: true, selector: "ui5-ai-button-state, [ui5-ai-button-state]", inputs: { endIcon: { classPropertyName: "endIcon", publicName: "endIcon", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, showArrowButton: { classPropertyName: "showArrowButton", publicName: "showArrowButton", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
80
|
+
contentDensityObserverProviders({
|
|
81
|
+
supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY]
|
|
82
|
+
})
|
|
83
|
+
], exportAs: ["ui5ButtonState"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
84
|
+
}
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: ButtonState, decorators: [{
|
|
86
|
+
type: Component,
|
|
87
|
+
args: [{
|
|
88
|
+
standalone: true,
|
|
89
|
+
selector: 'ui5-ai-button-state, [ui5-ai-button-state]',
|
|
90
|
+
template: '<ng-content></ng-content>',
|
|
91
|
+
exportAs: 'ui5ButtonState',
|
|
92
|
+
providers: [
|
|
93
|
+
contentDensityObserverProviders({
|
|
94
|
+
supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY]
|
|
95
|
+
})
|
|
96
|
+
],
|
|
97
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
98
|
+
}]
|
|
99
|
+
}], propDecorators: { endIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "endIcon", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], showArrowButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showArrowButton", required: false }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }] } });
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Generated bundle index. Do not edit.
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
export { ButtonState };
|
|
106
|
+
//# sourceMappingURL=fundamental-ngx-ui5-webcomponents-ai-button-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-ui5-webcomponents-ai-button-state.mjs","sources":["../../../../libs/ui5-webcomponents-ai/button-state/index.ts","../../../../libs/ui5-webcomponents-ai/button-state/fundamental-ngx-ui5-webcomponents-ai-button-state.ts"],"sourcesContent":["\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n output,\n AfterViewInit,\n effect,\n runInInjectionContext,\n inject,\n Injector,\n booleanAttribute,\n computed,\n signal\n} from '@angular/core';\nimport '@ui5/webcomponents-ai/dist/ButtonState.js';\nimport { default as _ButtonState } from '@ui5/webcomponents-ai/dist/ButtonState.js';\nimport { UI5CustomEvent } from '@ui5/webcomponents-base';\nimport {\n ContentDensityObserver,\n contentDensityObserverProviders,\n ContentDensityMode\n} from '@fundamental-ngx/core/content-density';\n\n\n\n@Component({\n standalone: true,\n selector: 'ui5-ai-button-state, [ui5-ai-button-state]',\n template: '<ng-content></ng-content>',\n exportAs: 'ui5ButtonState',\n providers: [\n contentDensityObserverProviders({\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY]\n })\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonState implements AfterViewInit {\n\n /**\n * Defines the icon to be displayed as graphical element within the component after the text.\nThe SAP-icons font provides numerous options.\n\n**Example:**\n\nSee all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).\n */\n endIcon = input<typeof _ButtonState.prototype.endIcon | undefined>();\n\n /**\n * Defines the icon to be displayed as graphical element within the component before the text.\nThe SAP-icons font provides numerous options.\n\n**Example:**\n\nSee all the available icons in the [Icon Explorer](https://sdk.openui5.org/test-resources/sap/m/demokit/iconExplorer/webapp/index.html).\n */\n icon = input<typeof _ButtonState.prototype.icon | undefined>();\n\n /**\n * Defines the name of the button state.\n */\n name = input<typeof _ButtonState.prototype.name | undefined>();\n\n /**\n * Defines if the component is in split button mode.\n */\n showArrowButton = input(false, { transform: booleanAttribute });\n\n /**\n * Defines the text of the button in this state.\n */\n text = input<typeof _ButtonState.prototype.text | undefined>(); // className is now passed\n\n\n\n\n\n public elementRef: ElementRef<_ButtonState> = inject(ElementRef);\n public injector = inject(Injector);\n\n /**\n * Content density observer is injected to activate automatic CSS class and\n * UI5 attribute application. The observer self-initializes, no explicit subscribe() needed.\n * @private\n */\n private readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n get element(): _ButtonState {\n return this.elementRef.nativeElement;\n }\n\n ngAfterViewInit(): void {\n const wcElement = this.element;\n \n const inputsToSync = [\n 'endIcon',\n 'icon',\n 'name',\n 'showArrowButton',\n 'text',\n ];\n \n // Synchronize inputs (properties)\n for (const inputName of inputsToSync) {\n // Find the corresponding camelCase signal property on the Angular component\n const signalName = inputName.replace(/-./g, (x: string) => x[1].toUpperCase());\n\n // Use the Injector to run the effect in the correct context\n if (this[signalName] && typeof this[signalName] === 'function') {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n // Read the signal value\n const value = this[signalName]();\n if (wcElement) {\n // Write the value to the Web Component's property\n wcElement[inputName] = value;\n }\n });\n });\n }\n }\n \n \n \n\n }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, output, inject, ElementRef, Injector, runInInjectionContext, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import '@ui5/webcomponents-ai/dist/Button.js';
|
|
4
|
+
import { ContentDensityObserver, contentDensityObserverProviders, ContentDensityMode } from '@fundamental-ngx/core/content-density';
|
|
5
|
+
|
|
6
|
+
class Button {
|
|
7
|
+
constructor() {
|
|
8
|
+
/**
|
|
9
|
+
* Defines the additional accessibility attributes that will be applied to the component.
|
|
10
|
+
|
|
11
|
+
This property allows for fine-tuned control of ARIA attributes for screen reader support.
|
|
12
|
+
It accepts an object with the following optional fields:
|
|
13
|
+
|
|
14
|
+
- **root**: Accessibility attributes that will be applied to the root element.
|
|
15
|
+
- **hasPopup**: Indicates the availability and type of interactive popup element (such as a menu or dialog).
|
|
16
|
+
Accepts string values: `"dialog"`, `"grid"`, `"listbox"`, `"menu"`, or `"tree"`.
|
|
17
|
+
- **roleDescription**: Defines a human-readable description for the button's role.
|
|
18
|
+
Accepts any string value.
|
|
19
|
+
- **title**: Specifies a tooltip or description for screen readers.
|
|
20
|
+
Accepts any string value.
|
|
21
|
+
- **ariaKeyShortcuts**: Defines keyboard shortcuts that activate or focus the button.
|
|
22
|
+
|
|
23
|
+
- **arrowButton**: Accessibility attributes that will be applied to the arrow (split) button element.
|
|
24
|
+
- **hasPopup**: Indicates the type of popup triggered by the arrow button.
|
|
25
|
+
Accepts string values: `"dialog"`, `"grid"`, `"listbox"`, `"menu"`, or `"tree"`.
|
|
26
|
+
- **expanded**: Indicates whether the popup controlled by the arrow button is currently expanded.
|
|
27
|
+
Accepts boolean values: `true` or `false`.
|
|
28
|
+
*/
|
|
29
|
+
this.accessibilityAttributes = input({}, ...(ngDevMode ? [{ debugName: "accessibilityAttributes" }] : []));
|
|
30
|
+
/**
|
|
31
|
+
* Defines the active state of the arrow button in split mode.
|
|
32
|
+
Set to true when the button is in split mode and a menu with additional options
|
|
33
|
+
is opened by the arrow button. Set back to false when the menu is closed.
|
|
34
|
+
*/
|
|
35
|
+
this.arrowButtonPressed = input(false, { ...(ngDevMode ? { debugName: "arrowButtonPressed" } : {}), transform: booleanAttribute });
|
|
36
|
+
/**
|
|
37
|
+
* Defines the component design.
|
|
38
|
+
*/
|
|
39
|
+
this.design = input("Default", ...(ngDevMode ? [{ debugName: "design" }] : []));
|
|
40
|
+
/**
|
|
41
|
+
* Defines whether the component is disabled.
|
|
42
|
+
A disabled component can't be pressed or
|
|
43
|
+
focused, and it is not in the tab chain.
|
|
44
|
+
*/
|
|
45
|
+
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
|
|
46
|
+
/**
|
|
47
|
+
* Defines the current state of the component.
|
|
48
|
+
*/
|
|
49
|
+
this.state = input(...(ngDevMode ? [undefined, { debugName: "state" }] : [])); // className is now passed
|
|
50
|
+
/**
|
|
51
|
+
* Fired when the component is in split mode and after the arrow button
|
|
52
|
+
is activated either by clicking or tapping it or by using the [Arrow Up] / [Arrow Down],
|
|
53
|
+
[Alt] + [Arrow Up]/ [Arrow Down], or [F4] keyboard keys.
|
|
54
|
+
*/
|
|
55
|
+
this.ui5ArrowButtonClick = output();
|
|
56
|
+
/**
|
|
57
|
+
* Fired when the component is activated either with a
|
|
58
|
+
mouse/tap or by using the Enter or Space key.
|
|
59
|
+
*/
|
|
60
|
+
this.ui5Click = output();
|
|
61
|
+
/**
|
|
62
|
+
* Available slots for content projection in this component.
|
|
63
|
+
*
|
|
64
|
+
* Slots allow you to insert custom content into predefined areas of the web component.
|
|
65
|
+
* Use the `slot` attribute on child elements to target specific slots.
|
|
66
|
+
*
|
|
67
|
+
* - **(default)**: Defines the available states of the component.
|
|
68
|
+
**Note:** Although this slot accepts HTML Elements, it is strongly recommended that
|
|
69
|
+
you only use `ui5-ai-button-state` components in order to preserve the intended design.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```html
|
|
73
|
+
* <ui5-ai-button>
|
|
74
|
+
* <div slot="header">Custom header content</div>
|
|
75
|
+
* <p>Default slot content</p>
|
|
76
|
+
* </ui5-ai-button>
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @readonly
|
|
80
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_templates_and_slots | MDN Web Components Slots}
|
|
81
|
+
*/
|
|
82
|
+
this.slots = [
|
|
83
|
+
{
|
|
84
|
+
"name": "default",
|
|
85
|
+
"description": "Defines the available states of the component.\n**Note:** Although this slot accepts HTML Elements, it is strongly recommended that\nyou only use `ui5-ai-button-state` components in order to preserve the intended design."
|
|
86
|
+
}
|
|
87
|
+
];
|
|
88
|
+
this.elementRef = inject(ElementRef);
|
|
89
|
+
this.injector = inject(Injector);
|
|
90
|
+
/**
|
|
91
|
+
* Content density observer is injected to activate automatic CSS class and
|
|
92
|
+
* UI5 attribute application. The observer self-initializes, no explicit subscribe() needed.
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
this._contentDensityObserver = inject(ContentDensityObserver);
|
|
96
|
+
}
|
|
97
|
+
get element() {
|
|
98
|
+
return this.elementRef.nativeElement;
|
|
99
|
+
}
|
|
100
|
+
ngAfterViewInit() {
|
|
101
|
+
const wcElement = this.element;
|
|
102
|
+
const inputsToSync = [
|
|
103
|
+
'accessibilityAttributes',
|
|
104
|
+
'arrowButtonPressed',
|
|
105
|
+
'design',
|
|
106
|
+
'disabled',
|
|
107
|
+
'state',
|
|
108
|
+
];
|
|
109
|
+
// Synchronize inputs (properties)
|
|
110
|
+
for (const inputName of inputsToSync) {
|
|
111
|
+
// Find the corresponding camelCase signal property on the Angular component
|
|
112
|
+
const signalName = inputName.replace(/-./g, (x) => x[1].toUpperCase());
|
|
113
|
+
// Use the Injector to run the effect in the correct context
|
|
114
|
+
if (this[signalName] && typeof this[signalName] === 'function') {
|
|
115
|
+
runInInjectionContext(this.injector, () => {
|
|
116
|
+
effect(() => {
|
|
117
|
+
// Read the signal value
|
|
118
|
+
const value = this[signalName]();
|
|
119
|
+
if (wcElement) {
|
|
120
|
+
// Write the value to the Web Component's property
|
|
121
|
+
wcElement[inputName] = value;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const outputsToSync = [
|
|
128
|
+
'ui5ArrowButtonClick',
|
|
129
|
+
'ui5Click',
|
|
130
|
+
];
|
|
131
|
+
// Synchronize outputs (events)
|
|
132
|
+
for (const outputName of outputsToSync) {
|
|
133
|
+
// Map Angular output name to UI5 web component event name
|
|
134
|
+
const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);
|
|
135
|
+
// Ensure the output property exists and has an emit function before adding listener
|
|
136
|
+
if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {
|
|
137
|
+
// Cast the listener to the correct type to satisfy TypeScript
|
|
138
|
+
wcElement.addEventListener(eventName, (e) => {
|
|
139
|
+
this[outputName].emit(e);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Button, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
145
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.0", type: Button, isStandalone: true, selector: "ui5-ai-button, [ui5-ai-button]", inputs: { accessibilityAttributes: { classPropertyName: "accessibilityAttributes", publicName: "accessibilityAttributes", isSignal: true, isRequired: false, transformFunction: null }, arrowButtonPressed: { classPropertyName: "arrowButtonPressed", publicName: "arrowButtonPressed", isSignal: true, isRequired: false, transformFunction: null }, design: { classPropertyName: "design", publicName: "design", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ui5ArrowButtonClick: "ui5ArrowButtonClick", ui5Click: "ui5Click" }, providers: [
|
|
146
|
+
contentDensityObserverProviders({
|
|
147
|
+
supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY]
|
|
148
|
+
})
|
|
149
|
+
], exportAs: ["ui5Button"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
150
|
+
}
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: Button, decorators: [{
|
|
152
|
+
type: Component,
|
|
153
|
+
args: [{
|
|
154
|
+
standalone: true,
|
|
155
|
+
selector: 'ui5-ai-button, [ui5-ai-button]',
|
|
156
|
+
template: '<ng-content></ng-content>',
|
|
157
|
+
exportAs: 'ui5Button',
|
|
158
|
+
providers: [
|
|
159
|
+
contentDensityObserverProviders({
|
|
160
|
+
supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY]
|
|
161
|
+
})
|
|
162
|
+
],
|
|
163
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
164
|
+
}]
|
|
165
|
+
}], propDecorators: { accessibilityAttributes: [{ type: i0.Input, args: [{ isSignal: true, alias: "accessibilityAttributes", required: false }] }], arrowButtonPressed: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowButtonPressed", required: false }] }], design: [{ type: i0.Input, args: [{ isSignal: true, alias: "design", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], ui5ArrowButtonClick: [{ type: i0.Output, args: ["ui5ArrowButtonClick"] }], ui5Click: [{ type: i0.Output, args: ["ui5Click"] }] } });
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Generated bundle index. Do not edit.
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
export { Button };
|
|
172
|
+
//# sourceMappingURL=fundamental-ngx-ui5-webcomponents-ai-button.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-ui5-webcomponents-ai-button.mjs","sources":["../../../../libs/ui5-webcomponents-ai/button/index.ts","../../../../libs/ui5-webcomponents-ai/button/fundamental-ngx-ui5-webcomponents-ai-button.ts"],"sourcesContent":["\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n output,\n AfterViewInit,\n effect,\n runInInjectionContext,\n inject,\n Injector,\n booleanAttribute,\n computed,\n signal\n} from '@angular/core';\nimport '@ui5/webcomponents-ai/dist/Button.js';\nimport { default as _Button } from '@ui5/webcomponents-ai/dist/Button.js';\nimport { UI5CustomEvent } from '@ui5/webcomponents-base';\nimport {\n ContentDensityObserver,\n contentDensityObserverProviders,\n ContentDensityMode\n} from '@fundamental-ngx/core/content-density';\n\nimport { AIButtonAccessibilityAttributes } from '@ui5/webcomponents-ai/dist/Button.js';\nimport { default as ButtonDesign } from '@ui5/webcomponents/dist/types/ButtonDesign.js';\n\n@Component({\n standalone: true,\n selector: 'ui5-ai-button, [ui5-ai-button]',\n template: '<ng-content></ng-content>',\n exportAs: 'ui5Button',\n providers: [\n contentDensityObserverProviders({\n supportedContentDensity: [ContentDensityMode.COMPACT, ContentDensityMode.COZY]\n })\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Button implements AfterViewInit {\n\n /**\n * Defines the additional accessibility attributes that will be applied to the component.\n\nThis property allows for fine-tuned control of ARIA attributes for screen reader support.\nIt accepts an object with the following optional fields:\n\n- **root**: Accessibility attributes that will be applied to the root element.\n - **hasPopup**: Indicates the availability and type of interactive popup element (such as a menu or dialog).\n Accepts string values: `\"dialog\"`, `\"grid\"`, `\"listbox\"`, `\"menu\"`, or `\"tree\"`.\n - **roleDescription**: Defines a human-readable description for the button's role.\n Accepts any string value.\n - **title**: Specifies a tooltip or description for screen readers.\n Accepts any string value.\n- **ariaKeyShortcuts**: Defines keyboard shortcuts that activate or focus the button.\n\n- **arrowButton**: Accessibility attributes that will be applied to the arrow (split) button element.\n - **hasPopup**: Indicates the type of popup triggered by the arrow button.\n Accepts string values: `\"dialog\"`, `\"grid\"`, `\"listbox\"`, `\"menu\"`, or `\"tree\"`.\n - **expanded**: Indicates whether the popup controlled by the arrow button is currently expanded.\n Accepts boolean values: `true` or `false`.\n */\n accessibilityAttributes = input<typeof _Button.prototype.accessibilityAttributes | undefined>({});\n\n /**\n * Defines the active state of the arrow button in split mode.\nSet to true when the button is in split mode and a menu with additional options\nis opened by the arrow button. Set back to false when the menu is closed.\n */\n arrowButtonPressed = input(false, { transform: booleanAttribute });\n\n /**\n * Defines the component design.\n */\n design = input<typeof _Button.prototype.design | undefined>(\"Default\");\n\n /**\n * Defines whether the component is disabled.\nA disabled component can't be pressed or\nfocused, and it is not in the tab chain.\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Defines the current state of the component.\n */\n state = input<typeof _Button.prototype.state | undefined>(); // className is now passed\n\n\n\n /**\n * Fired when the component is in split mode and after the arrow button\nis activated either by clicking or tapping it or by using the [Arrow Up] / [Arrow Down],\n[Alt] + [Arrow Up]/ [Arrow Down], or [F4] keyboard keys.\n */\n ui5ArrowButtonClick = output<UI5CustomEvent<_Button, 'arrow-button-click'>>();\n\n /**\n * Fired when the component is activated either with a\nmouse/tap or by using the Enter or Space key.\n */\n ui5Click = output<UI5CustomEvent<_Button, 'click'>>();\n\n /**\n * Available slots for content projection in this component.\n *\n * Slots allow you to insert custom content into predefined areas of the web component.\n * Use the `slot` attribute on child elements to target specific slots.\n *\n * - **(default)**: Defines the available states of the component.\n**Note:** Although this slot accepts HTML Elements, it is strongly recommended that\nyou only use `ui5-ai-button-state` components in order to preserve the intended design.\n *\n * @example\n * ```html\n * <ui5-ai-button>\n * <div slot=\"header\">Custom header content</div>\n * <p>Default slot content</p>\n * </ui5-ai-button>\n * ```\n *\n * @readonly\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_templates_and_slots | MDN Web Components Slots}\n */\n readonly slots = [\n {\n \"name\": \"default\",\n \"description\": \"Defines the available states of the component.\\n**Note:** Although this slot accepts HTML Elements, it is strongly recommended that\\nyou only use `ui5-ai-button-state` components in order to preserve the intended design.\"\n }\n ];\n\n\n public elementRef: ElementRef<_Button> = inject(ElementRef);\n public injector = inject(Injector);\n\n /**\n * Content density observer is injected to activate automatic CSS class and\n * UI5 attribute application. The observer self-initializes, no explicit subscribe() needed.\n * @private\n */\n private readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n get element(): _Button {\n return this.elementRef.nativeElement;\n }\n\n ngAfterViewInit(): void {\n const wcElement = this.element;\n \n const inputsToSync = [\n 'accessibilityAttributes',\n 'arrowButtonPressed',\n 'design',\n 'disabled',\n 'state',\n ];\n \n // Synchronize inputs (properties)\n for (const inputName of inputsToSync) {\n // Find the corresponding camelCase signal property on the Angular component\n const signalName = inputName.replace(/-./g, (x: string) => x[1].toUpperCase());\n\n // Use the Injector to run the effect in the correct context\n if (this[signalName] && typeof this[signalName] === 'function') {\n runInInjectionContext(this.injector, () => {\n effect(() => {\n // Read the signal value\n const value = this[signalName]();\n if (wcElement) {\n // Write the value to the Web Component's property\n wcElement[inputName] = value;\n }\n });\n });\n }\n }\n \n \n const outputsToSync = [\n 'ui5ArrowButtonClick',\n 'ui5Click',\n ];\n \n // Synchronize outputs (events)\n for (const outputName of outputsToSync) {\n // Map Angular output name to UI5 web component event name\n const eventName = outputName.replace('ui5', '').replace(/([A-Z])/g, '-$1').toLowerCase().substring(1);\n // Ensure the output property exists and has an emit function before adding listener\n if (this[outputName] && typeof this[outputName].emit === 'function' && wcElement.addEventListener) {\n // Cast the listener to the correct type to satisfy TypeScript\n wcElement.addEventListener(eventName, (e) => {\n\n this[outputName].emit(e as CustomEvent<any>);\n });\n }\n }\n \n\n }\n}\n\n// Re-export types for convenience\nexport { AIButtonAccessibilityAttributes } from '@ui5/webcomponents-ai/dist/Button.js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|