Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
e914f23
feat(core/chat-prompt-input): add component
danielleroux May 19, 2026
eb0979e
character limits
danielleroux May 19, 2026
6f13c5f
fix storybook
danielleroux May 19, 2026
1af25d7
add optional attachment pattern
danielleroux May 19, 2026
83a021e
add chat user message
danielleroux May 19, 2026
1225edf
add ai message
danielleroux May 19, 2026
8a1dc4d
add followup slot to prompt input
danielleroux May 19, 2026
4f1551a
rename chat component
danielleroux May 19, 2026
42b68b4
add netlify badge
danielleroux May 19, 2026
ed49619
storybook data change
danielleroux May 19, 2026
aacdc68
adjust some stylings
danielleroux May 26, 2026
8fb0bbb
migrate to stencil render function for storybook
danielleroux May 26, 2026
e22d726
adapt threshold
danielleroux May 26, 2026
0002e55
add state
danielleroux May 26, 2026
7b8419b
refactor chat-attachment
danielleroux May 26, 2026
c4b9e7b
improve overflow handling
danielleroux May 26, 2026
4863d77
use chip for attachments
danielleroux May 27, 2026
e976694
remove hover effect of user message
danielleroux May 27, 2026
c5ee77c
adjust spacing
danielleroux May 27, 2026
f52decf
add visual tests
danielleroux May 27, 2026
264bdd9
Merge remote-tracking branch 'origin/main' into feat/chat-components
danielleroux May 27, 2026
7a814bf
Add simple chat example
danielleroux May 27, 2026
27ecc67
add sdd skill
danielleroux May 27, 2026
0132943
add sdd skill
danielleroux May 27, 2026
7e7849f
add examples
danielleroux May 28, 2026
741c7e8
add examples
danielleroux May 28, 2026
56ca8c9
update snapshots
danielleroux May 28, 2026
7a57b80
Remove slot overflow
danielleroux May 28, 2026
a7a3e98
add custom ix scrollbar
danielleroux May 29, 2026
fe401d5
remove chat-input overflow dropdown
danielleroux May 29, 2026
13f3080
restructure scss to keep :host -> class style
danielleroux May 29, 2026
b7e605b
update snapshot
danielleroux May 29, 2026
d00cc2c
refactor scrollbar
danielleroux May 29, 2026
ff02457
fix scrollbar
danielleroux Jun 1, 2026
a30e668
move skill location into generic agents folder
danielleroux Jun 2, 2026
ba3bc98
Merge remote-tracking branch 'origin/main' into feat/chat-components
danielleroux Jun 2, 2026
06b26e5
fix lock file
danielleroux Jun 2, 2026
fba2276
update build gen
danielleroux Jun 2, 2026
8a58b66
adjust example and remove attachment overflow slot
danielleroux Jun 9, 2026
1a8779c
fix visual-testing
danielleroux Jun 10, 2026
64335f2
Merge branch 'main' into feat/chat-components
danielleroux Jun 10, 2026
6482acd
review comments
danielleroux Jun 10, 2026
3e8f855
Add format message feature
danielleroux Jun 11, 2026
9f0270f
fix aria issues
danielleroux Jun 11, 2026
3f6c0f6
update snaps
danielleroux Jun 11, 2026
4f34ee4
prevent send processing message twice
danielleroux Jun 11, 2026
fb07964
adapt styles from internal revieiw
danielleroux Jun 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
remove chat-input overflow dropdown
  • Loading branch information
danielleroux committed May 29, 2026
commit fe401d578f51e59eaff935ae3c75a8a3eebed654
2 changes: 1 addition & 1 deletion .changeset/chat-input-component.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
'@siemens/ix': minor
---

Add the `ix-chat-input` component for AI prompt entry, including multiline input behavior, responsive attachment overflow support with `ix-chat-prompt-attachment`, action slots, submit handling, processing state, threshold-based character limit guidance, form integration, and disclaimer text.
Add the `ix-chat-input` component for AI prompt entry, including multiline input behavior, attachment support with `ix-chat-prompt-attachment`, action slots, submit handling, processing state, threshold-based character limit guidance, form integration, and disclaimer text.
2 changes: 1 addition & 1 deletion .changeset/chat-user-message-component.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
'@siemens/ix': minor
---

Add the `ix-chat` component for composing chat layouts with messages and a chat input, add the `ix-chat-user-message` component for displaying right-aligned user messages in chat interfaces with optional contextual actions and sent attachments, and add the `ix-chat-ai-message` component for displaying slotted AI-generated responses with optional actions and sources. The existing `ix-chat-prompt-attachment` component now renders with `ix-chip`, supports a compact `sent` variant, supports preview-enabled attachments with `previewSupported`, emits `attachmentClick` only for those preview interactions, and no longer exposes a retry action for failed attachments. `ix-chat-input` can display wrapped attachment overflow with `ix-dropdown-button` and slotted `ix-dropdown-item` entries, and now provides a `follow-up` slot for follow-up prompt actions.
Add the `ix-chat` component for composing chat layouts with messages and a chat input, add the `ix-chat-user-message` component for displaying right-aligned user messages in chat interfaces with optional contextual actions and sent attachments, and add the `ix-chat-ai-message` component for displaying slotted AI-generated responses with optional actions and sources. The existing `ix-chat-prompt-attachment` component now renders with `ix-chip`, supports a compact `sent` variant, supports preview-enabled attachments with `previewSupported`, emits `attachmentClick` only for those preview interactions, and no longer exposes a retry action for failed attachments. `ix-chat-input` can display prompt attachments and now provides a `follow-up` slot for follow-up prompt actions.
11 changes: 3 additions & 8 deletions packages/angular/src/components.ts
Original file line number Diff line number Diff line change
Expand Up @@ -447,16 +447,16 @@ export declare interface IxChatAiMessage extends Components.IxChatAiMessage {}


@ProxyCmp({
inputs: ['attachmentLayout', 'attachmentOverflowCount', 'attachmentOverflowLabel', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
inputs: ['attachmentLayout', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
methods: ['getNativeInputElement', 'focusInput']
})
@Component({
selector: 'ix-chat-input',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['attachmentLayout', 'attachmentOverflowCount', 'attachmentOverflowLabel', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
outputs: ['valueChange', 'ixBlur', 'ixChange', 'promptSubmit', 'attachmentOverflowChange'],
inputs: ['attachmentLayout', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
outputs: ['valueChange', 'ixBlur', 'ixChange', 'promptSubmit'],
standalone: false
})
export class IxChatInput {
Expand All @@ -465,7 +465,6 @@ export class IxChatInput {
@Output() ixBlur = new EventEmitter<CustomEvent<void>>();
@Output() ixChange = new EventEmitter<CustomEvent<string>>();
@Output() promptSubmit = new EventEmitter<CustomEvent<string>>();
@Output() attachmentOverflowChange = new EventEmitter<CustomEvent<boolean>>();
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
c.detach();
this.el = r.nativeElement;
Expand All @@ -490,10 +489,6 @@ export declare interface IxChatInput extends Components.IxChatInput {
* Event emitted when the prompt is submitted by the send button or Enter key. @since 5.0.0
*/
promptSubmit: EventEmitter<CustomEvent<string>>;
/**
* Event emitted when the attachment overflow expanded state changes. @since 5.0.0
*/
attachmentOverflowChange: EventEmitter<CustomEvent<boolean>>;
}


Expand Down
11 changes: 3 additions & 8 deletions packages/angular/standalone/src/components.ts
Original file line number Diff line number Diff line change
Expand Up @@ -552,24 +552,23 @@

@ProxyCmp({
defineCustomElementFn: defineIxChatInput,
inputs: ['attachmentLayout', 'attachmentOverflowCount', 'attachmentOverflowLabel', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
inputs: ['attachmentLayout', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
methods: ['getNativeInputElement', 'focusInput']
})
@Component({
selector: 'ix-chat-input',
changeDetection: ChangeDetectionStrategy.OnPush,
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['attachmentLayout', 'attachmentOverflowCount', 'attachmentOverflowLabel', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
outputs: ['valueChange', 'ixBlur', 'ixChange', 'promptSubmit', 'attachmentOverflowChange'],
inputs: ['attachmentLayout', 'characterLimit', 'characterLimitWarningThreshold', 'disabled', 'disclaimer', 'insertLineBreakOnEnter', 'maxLength', 'maxRows', 'minRows', 'name', 'placeholder', 'readonly', 'state', 'textareaLabel', 'value'],
outputs: ['valueChange', 'ixBlur', 'ixChange', 'promptSubmit'],

Check failure on line 564 in packages/angular/standalone/src/components.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use `@Output` rather than the `outputs` metadata property

See more on https://sonarcloud.io/project/issues?id=siemens_ix&issues=AZ5oSA2ARZtnv-7yhWHB&open=AZ5oSA2ARZtnv-7yhWHB&pullRequest=2569
})
export class IxChatInput {
protected el: HTMLIxChatInputElement;
@Output() valueChange = new EventEmitter<CustomEvent<string>>();
@Output() ixBlur = new EventEmitter<CustomEvent<void>>();
@Output() ixChange = new EventEmitter<CustomEvent<string>>();
@Output() promptSubmit = new EventEmitter<CustomEvent<string>>();
@Output() attachmentOverflowChange = new EventEmitter<CustomEvent<boolean>>();
constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {
c.detach();
this.el = r.nativeElement;
Expand All @@ -594,10 +593,6 @@
* Event emitted when the prompt is submitted by the send button or Enter key. @since 5.0.0
*/
promptSubmit: EventEmitter<CustomEvent<string>>;
/**
* Event emitted when the attachment overflow expanded state changes. @since 5.0.0
*/
attachmentOverflowChange: EventEmitter<CustomEvent<boolean>>;
}


Expand All @@ -611,7 +606,7 @@
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['fileName', 'hideRemoveButton', 'icon', 'previewSupported', 'removeAriaLabel', 'status'],
outputs: ['attachmentClick', 'removeClick'],

Check failure on line 609 in packages/angular/standalone/src/components.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use `@Output` rather than the `outputs` metadata property

See more on https://sonarcloud.io/project/issues?id=siemens_ix&issues=AZ5oSA2ARZtnv-7yhWHC&open=AZ5oSA2ARZtnv-7yhWHC&pullRequest=2569
})
export class IxChatPromptAttachment {
protected el: HTMLIxChatPromptAttachmentElement;
Expand Down Expand Up @@ -646,7 +641,7 @@
template: '<ng-content></ng-content>',
// eslint-disable-next-line @angular-eslint/no-inputs-metadata-property
inputs: ['attachmentCount', 'attachmentOverflowLabel', 'message'],
outputs: ['attachmentOverflowChange'],

Check failure on line 644 in packages/angular/standalone/src/components.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use `@Output` rather than the `outputs` metadata property

See more on https://sonarcloud.io/project/issues?id=siemens_ix&issues=AZ5oSA2ARZtnv-7yhWHD&open=AZ5oSA2ARZtnv-7yhWHD&pullRequest=2569
})
export class IxChatUserMessage {
protected el: HTMLIxChatUserMessageElement;
Expand Down
30 changes: 0 additions & 30 deletions packages/core/src/components.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -649,17 +649,6 @@ export namespace Components {
* @default 'wrap'
*/
"attachmentLayout": ChatInputAttachmentLayout;
/**
* Number of attachments represented by the attachment overflow trigger.
* @since 5.0.0
*/
"attachmentOverflowCount"?: number;
/**
* Label displayed after the attachment overflow count.
* @since 5.0.0
* @default 'more'
*/
"attachmentOverflowLabel": string;
/**
* Character limit used for the optional inline character limit message. Falls back to `maxLength` when not set.
* @since 5.0.0
Expand Down Expand Up @@ -5213,7 +5202,6 @@ declare global {
"ixBlur": void;
"ixChange": string;
"promptSubmit": string;
"attachmentOverflowChange": boolean;
}
/**
* @since 5.0.0
Expand Down Expand Up @@ -7267,17 +7255,6 @@ declare namespace LocalJSX {
* @default 'wrap'
*/
"attachmentLayout"?: ChatInputAttachmentLayout;
/**
* Number of attachments represented by the attachment overflow trigger.
* @since 5.0.0
*/
"attachmentOverflowCount"?: number;
/**
* Label displayed after the attachment overflow count.
* @since 5.0.0
* @default 'more'
*/
"attachmentOverflowLabel"?: string;
/**
* Character limit used for the optional inline character limit message. Falls back to `maxLength` when not set.
* @since 5.0.0
Expand Down Expand Up @@ -7333,11 +7310,6 @@ declare namespace LocalJSX {
* @since 5.0.0
*/
"name"?: string;
/**
* Event emitted when the attachment overflow expanded state changes.
* @since 5.0.0
*/
"onAttachmentOverflowChange"?: (event: IxChatInputCustomEvent<boolean>) => void;
/**
* Event emitted when the chat input loses focus.
* @since 5.0.0
Expand Down Expand Up @@ -11787,8 +11759,6 @@ declare namespace LocalJSX {
"characterLimit": number;
"characterLimitWarningThreshold": number;
"attachmentLayout": ChatInputAttachmentLayout;
"attachmentOverflowCount": number;
"attachmentOverflowLabel": string;
"minRows": number;
"maxRows": number;
"insertLineBreakOnEnter": boolean;
Expand Down
31 changes: 5 additions & 26 deletions packages/core/src/components/chat-input/chat-input.scss
Original file line number Diff line number Diff line change
Expand Up @@ -90,38 +90,17 @@

@include scrollbar.scrollbar($include-current: true);
}
.attachments ::slotted(ix-chat-prompt-attachment) {
flex: 0 1 auto;
}

.attachments--scroll ::slotted(ix-chat-prompt-attachment) {
flex: 0 0 auto;
}

.attachment-overflow {
flex: 0 0 5rem;
height: 2rem;
--ix-dropdown-button-border-radius-left: var(--theme-small-border-radius);
--ix-dropdown-button-border-radius-right: var(--theme-small-border-radius);
}

.attachment-overflow-menu-item {
position: relative;
display: flex;
align-items: center;
min-width: 0;
.attachments.has-attachment-scrollbar {
padding-bottom: 0.25rem;
}

.attachment-overflow-menu-item ix-dropdown-item {
flex: 1 1 auto;
min-width: 0;
.attachments ::slotted(ix-chat-prompt-attachment) {
flex: 0 1 auto;
}

.attachment-overflow-remove-button {
.attachments--scroll ::slotted(ix-chat-prompt-attachment) {
flex: 0 0 auto;

position: absolute;
right: 0.5rem;
}

textarea {
Expand Down
Loading
Loading