igniteui-webcomponents 6.2.0 → 6.3.0-RC.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/components/accordion/accordion.js +4 -8
- package/components/accordion/accordion.js.map +1 -1
- package/components/accordion/themes/accordion.base.css.js +1 -1
- package/components/accordion/themes/accordion.base.css.js.map +1 -1
- package/components/avatar/avatar.js +3 -4
- package/components/avatar/avatar.js.map +1 -1
- package/components/badge/badge.js +3 -4
- package/components/badge/badge.js.map +1 -1
- package/components/banner/banner.js +3 -4
- package/components/banner/banner.js.map +1 -1
- package/components/banner/themes/banner.base.css.js +1 -1
- package/components/banner/themes/banner.base.css.js.map +1 -1
- package/components/banner/themes/shared/banner.bootstrap.css.js +1 -1
- package/components/banner/themes/shared/banner.bootstrap.css.js.map +1 -1
- package/components/banner/themes/shared/banner.fluent.css.js +1 -1
- package/components/banner/themes/shared/banner.fluent.css.js.map +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js.map +1 -1
- package/components/banner/themes/shared/banner.material.css.js +1 -1
- package/components/banner/themes/shared/banner.material.css.js.map +1 -1
- package/components/button/button-base.js +1 -1
- package/components/button/button-base.js.map +1 -1
- package/components/button/button.js +3 -4
- package/components/button/button.js.map +1 -1
- package/components/button/icon-button.js +3 -4
- package/components/button/icon-button.js.map +1 -1
- package/components/button/themes/button/button.base.css.js +1 -1
- package/components/button/themes/button/button.base.css.js.map +1 -1
- package/components/button/themes/button/shared/button.common.css.js +1 -1
- package/components/button/themes/button/shared/button.common.css.js.map +1 -1
- package/components/button/themes/button/shared/button.fluent.css.js +1 -1
- package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
- package/components/button/themes/button/shared/button.indigo.css.js +1 -1
- package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
- package/components/button/themes/icon-button/icon-button.base.css.js +1 -1
- package/components/button/themes/icon-button/icon-button.base.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.bootstrap.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.bootstrap.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.fluent.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.fluent.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.indigo.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.indigo.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.material.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.material.css.js.map +1 -1
- package/components/button-group/button-group.js +3 -4
- package/components/button-group/button-group.js.map +1 -1
- package/components/button-group/themes/shared/button/button.bootstrap.css.js +1 -1
- package/components/button-group/themes/shared/button/button.bootstrap.css.js.map +1 -1
- package/components/button-group/themes/shared/button/button.common.css.js +1 -1
- package/components/button-group/themes/shared/button/button.common.css.js.map +1 -1
- package/components/button-group/themes/shared/button/button.indigo.css.js +1 -1
- package/components/button-group/themes/shared/button/button.indigo.css.js.map +1 -1
- package/components/button-group/toggle-button.js +4 -3
- package/components/button-group/toggle-button.js.map +1 -1
- package/components/calendar/calendar.d.ts +1 -1
- package/components/calendar/calendar.js +3 -4
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.js +5 -6
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/months-view/months-view.js +5 -6
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/calendar/themes/calendar.base.css.js +1 -1
- package/components/calendar/themes/calendar.base.css.js.map +1 -1
- package/components/calendar/themes/days-view.base.css.js +1 -1
- package/components/calendar/themes/days-view.base.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/fluent/calendar.fluent.css.js +1 -1
- package/components/calendar/themes/shared/fluent/calendar.fluent.css.js.map +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/shared/material/calendar.material.css.js +1 -1
- package/components/calendar/themes/shared/material/calendar.material.css.js.map +1 -1
- package/components/calendar/themes/year-month-view.base.css.js +1 -1
- package/components/calendar/themes/year-month-view.base.css.js.map +1 -1
- package/components/calendar/years-view/years-view.js +5 -6
- package/components/calendar/years-view/years-view.js.map +1 -1
- package/components/card/card.actions.js +3 -4
- package/components/card/card.actions.js.map +1 -1
- package/components/card/card.content.js +3 -4
- package/components/card/card.content.js.map +1 -1
- package/components/card/card.header.js +3 -4
- package/components/card/card.header.js.map +1 -1
- package/components/card/card.js +3 -4
- package/components/card/card.js.map +1 -1
- package/components/card/card.media.js +3 -4
- package/components/card/card.media.js.map +1 -1
- package/components/card/themes/card.actions.base.css.js +1 -1
- package/components/card/themes/card.actions.base.css.js.map +1 -1
- package/components/card/themes/card.content.base.css.js +1 -1
- package/components/card/themes/card.content.base.css.js.map +1 -1
- package/components/card/themes/card.header.base.css.js +1 -1
- package/components/card/themes/card.header.base.css.js.map +1 -1
- package/components/card/themes/shared/actions/card.actions.bootstrap.css.js +1 -1
- package/components/card/themes/shared/actions/card.actions.bootstrap.css.js.map +1 -1
- package/components/card/themes/shared/actions/card.actions.indigo.css.js +1 -1
- package/components/card/themes/shared/actions/card.actions.indigo.css.js.map +1 -1
- package/components/card/themes/shared/container/card.bootstrap.css.js +1 -1
- package/components/card/themes/shared/container/card.bootstrap.css.js.map +1 -1
- package/components/card/themes/shared/container/card.indigo.css.js +1 -1
- package/components/card/themes/shared/container/card.indigo.css.js.map +1 -1
- package/components/card/themes/shared/content/card.content.bootstrap.css.js +1 -1
- package/components/card/themes/shared/content/card.content.bootstrap.css.js.map +1 -1
- package/components/card/themes/shared/header/card.header.fluent.css.js +1 -1
- package/components/card/themes/shared/header/card.header.fluent.css.js.map +1 -1
- package/components/card/themes/shared/header/card.header.indigo.css.js +1 -1
- package/components/card/themes/shared/header/card.header.indigo.css.js.map +1 -1
- package/components/carousel/carousel-indicator-container.js +3 -4
- package/components/carousel/carousel-indicator-container.js.map +1 -1
- package/components/carousel/carousel-indicator.js +3 -4
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.js +3 -4
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.js +3 -7
- package/components/carousel/carousel.js.map +1 -1
- package/components/carousel/themes/carousel.base.css.js +1 -1
- package/components/carousel/themes/carousel.base.css.js.map +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js.map +1 -1
- package/components/chat/chat-input.d.ts +91 -0
- package/components/chat/chat-input.js +263 -0
- package/components/chat/chat-input.js.map +1 -0
- package/components/chat/chat-message.d.ts +48 -0
- package/components/chat/chat-message.js +199 -0
- package/components/chat/chat-message.js.map +1 -0
- package/components/chat/chat-state.d.ts +130 -0
- package/components/chat/chat-state.js +180 -0
- package/components/chat/chat-state.js.map +1 -0
- package/components/chat/chat.d.ts +151 -0
- package/components/chat/chat.js +325 -0
- package/components/chat/chat.js.map +1 -0
- package/components/chat/extras/markdown-renderer.d.ts +26 -0
- package/components/chat/extras/markdown-renderer.js +49 -0
- package/components/chat/extras/markdown-renderer.js.map +1 -0
- package/components/chat/message-attachments.d.ts +56 -0
- package/components/chat/message-attachments.js +132 -0
- package/components/chat/message-attachments.js.map +1 -0
- package/components/chat/themes/attachments.d.ts +2 -0
- package/components/chat/themes/attachments.js +14 -0
- package/components/chat/themes/attachments.js.map +1 -0
- package/components/chat/themes/chat.base.css.d.ts +1 -0
- package/components/chat/themes/chat.base.css.js +3 -0
- package/components/chat/themes/chat.base.css.js.map +1 -0
- package/components/chat/themes/dark/chat.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.bootstrap.css.js +3 -0
- package/components/chat/themes/dark/chat.bootstrap.css.js.map +1 -0
- package/components/chat/themes/dark/chat.fluent.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.fluent.css.js +3 -0
- package/components/chat/themes/dark/chat.fluent.css.js.map +1 -0
- package/components/chat/themes/dark/chat.indigo.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.indigo.css.js +3 -0
- package/components/chat/themes/dark/chat.indigo.css.js.map +1 -0
- package/components/chat/themes/dark/chat.material.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.material.css.js +3 -0
- package/components/chat/themes/dark/chat.material.css.js.map +1 -0
- package/components/chat/themes/input.base.css.d.ts +1 -0
- package/components/chat/themes/input.base.css.js +3 -0
- package/components/chat/themes/input.base.css.js.map +1 -0
- package/components/chat/themes/input.d.ts +2 -0
- package/components/chat/themes/input.js +35 -0
- package/components/chat/themes/input.js.map +1 -0
- package/components/chat/themes/light/chat.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/light/chat.bootstrap.css.js +3 -0
- package/components/chat/themes/light/chat.bootstrap.css.js.map +1 -0
- package/components/chat/themes/light/chat.fluent.css.d.ts +1 -0
- package/components/chat/themes/light/chat.fluent.css.js +3 -0
- package/components/chat/themes/light/chat.fluent.css.js.map +1 -0
- package/components/chat/themes/light/chat.indigo.css.d.ts +1 -0
- package/components/chat/themes/light/chat.indigo.css.js +3 -0
- package/components/chat/themes/light/chat.indigo.css.js.map +1 -0
- package/components/chat/themes/light/chat.material.css.d.ts +1 -0
- package/components/chat/themes/light/chat.material.css.js +3 -0
- package/components/chat/themes/light/chat.material.css.js.map +1 -0
- package/components/chat/themes/light/chat.shared.css.d.ts +1 -0
- package/components/chat/themes/light/chat.shared.css.js +3 -0
- package/components/chat/themes/light/chat.shared.css.js.map +1 -0
- package/components/chat/themes/message-attachments.base.css.d.ts +1 -0
- package/components/chat/themes/message-attachments.base.css.js +3 -0
- package/components/chat/themes/message-attachments.base.css.js.map +1 -0
- package/components/chat/themes/message.base.css.d.ts +1 -0
- package/components/chat/themes/message.base.css.js +3 -0
- package/components/chat/themes/message.base.css.js.map +1 -0
- package/components/chat/themes/message.d.ts +2 -0
- package/components/chat/themes/message.js +28 -0
- package/components/chat/themes/message.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.common.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.common.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.common.css.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.fluent.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.fluent.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.fluent.css.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.indigo.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.indigo.css.js.map +1 -0
- package/components/chat/themes/shared/chat.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.bootstrap.css.js +3 -0
- package/components/chat/themes/shared/chat.bootstrap.css.js.map +1 -0
- package/components/chat/themes/shared/chat.common.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.common.css.js +3 -0
- package/components/chat/themes/shared/chat.common.css.js.map +1 -0
- package/components/chat/themes/shared/chat.fluent.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.fluent.css.js +3 -0
- package/components/chat/themes/shared/chat.fluent.css.js.map +1 -0
- package/components/chat/themes/shared/chat.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.indigo.css.js +3 -0
- package/components/chat/themes/shared/chat.indigo.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.bootstrap.css.js +3 -0
- package/components/chat/themes/shared/input/input.bootstrap.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.common.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.common.css.js +3 -0
- package/components/chat/themes/shared/input/input.common.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.fluent.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.fluent.css.js +3 -0
- package/components/chat/themes/shared/input/input.fluent.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.indigo.css.js +3 -0
- package/components/chat/themes/shared/input/input.indigo.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.material.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.material.css.js +3 -0
- package/components/chat/themes/shared/input/input.material.css.js.map +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.common.css.d.ts +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js +3 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js.map +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js +3 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js.map +1 -0
- package/components/chat/themes/themes.d.ts +2 -0
- package/components/chat/themes/themes.js +49 -0
- package/components/chat/themes/themes.js.map +1 -0
- package/components/chat/types.d.ts +149 -0
- package/components/chat/types.js +2 -0
- package/components/chat/types.js.map +1 -0
- package/components/chat/utils.d.ts +16 -0
- package/components/chat/utils.js +82 -0
- package/components/chat/utils.js.map +1 -0
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/checkbox/checkbox.js +3 -4
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.js +3 -4
- package/components/checkbox/switch.js.map +1 -1
- package/components/checkbox/themes/checkbox.base.css.js +1 -1
- package/components/checkbox/themes/checkbox.base.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.material.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.material.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.material.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.material.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.common.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.common.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/switch.base.css.js +1 -1
- package/components/checkbox/themes/switch.base.css.js.map +1 -1
- package/components/chip/chip.js +3 -4
- package/components/chip/chip.js.map +1 -1
- package/components/chip/themes/chip.base.css.js +1 -1
- package/components/chip/themes/chip.base.css.js.map +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
- package/components/combo/combo-header.js +3 -4
- package/components/combo/combo-header.js.map +1 -1
- package/components/combo/combo-item.js +3 -4
- package/components/combo/combo-item.js.map +1 -1
- package/components/combo/combo-list.js +2 -3
- package/components/combo/combo-list.js.map +1 -1
- package/components/combo/combo.js +4 -3
- package/components/combo/combo.js.map +1 -1
- package/components/combo/controllers/navigation.js +1 -1
- package/components/combo/controllers/navigation.js.map +1 -1
- package/components/combo/themes/combo-item.base.css.js +1 -1
- package/components/combo/themes/combo-item.base.css.js.map +1 -1
- package/components/combo/themes/combo.base.css.js +1 -1
- package/components/combo/themes/combo.base.css.js.map +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js.map +1 -1
- package/components/combo/themes/shared/combo.common.css.js +1 -1
- package/components/combo/themes/shared/combo.common.css.js.map +1 -1
- package/components/combo/themes/shared/combo.fluent.css.js +1 -1
- package/components/combo/themes/shared/combo.fluent.css.js.map +1 -1
- package/components/combo/themes/shared/combo.indigo.css.js +1 -1
- package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
- package/components/combo/themes/shared/combo.material.css.js +1 -1
- package/components/combo/themes/shared/combo.material.css.js.map +1 -1
- package/components/common/context.d.ts +8 -1
- package/components/common/context.js +3 -1
- package/components/common/context.js.map +1 -1
- package/components/common/controllers/focus-ring.js +5 -5
- package/components/common/controllers/focus-ring.js.map +1 -1
- package/components/common/controllers/key-bindings.js +7 -6
- package/components/common/controllers/key-bindings.js.map +1 -1
- package/components/common/definitions/defineAllComponents.js +2 -0
- package/components/common/definitions/defineAllComponents.js.map +1 -1
- package/components/common/i18n/chat.resources.d.ts +11 -0
- package/components/common/i18n/chat.resources.js +11 -0
- package/components/common/i18n/chat.resources.js.map +1 -0
- package/components/common/mixins/forms/associated.js +1 -1
- package/components/common/mixins/forms/associated.js.map +1 -1
- package/components/common/mixins/forms/form-value.js +1 -1
- package/components/common/mixins/forms/form-value.js.map +1 -1
- package/components/common/part-map.d.ts +1 -1
- package/components/common/util.d.ts +22 -0
- package/components/common/util.js +84 -2
- package/components/common/util.js.map +1 -1
- package/components/date-picker/date-picker.js +7 -6
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/date-picker.base.css.js +1 -1
- package/components/date-picker/themes/date-picker.base.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +1 -1
- package/components/date-range-picker/date-range-picker.js +5 -5
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.js +3 -4
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-time-input/date-time-input.js +3 -4
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/date-util.js +11 -11
- package/components/date-time-input/date-util.js.map +1 -1
- package/components/dialog/dialog.js +3 -4
- package/components/dialog/dialog.js.map +1 -1
- package/components/dialog/themes/dialog.base.css.js +1 -1
- package/components/dialog/themes/dialog.base.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
- package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.common.css.js +1 -1
- package/components/dialog/themes/shared/dialog.common.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.fluent.css.js +1 -1
- package/components/dialog/themes/shared/dialog.fluent.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
- package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
- package/components/divider/divider.js +3 -4
- package/components/divider/divider.js.map +1 -1
- package/components/dropdown/dropdown-group.js +3 -4
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/dropdown/dropdown-header.js +3 -4
- package/components/dropdown/dropdown-header.js.map +1 -1
- package/components/dropdown/dropdown-item.js +3 -4
- package/components/dropdown/dropdown-item.js.map +1 -1
- package/components/dropdown/dropdown.js +4 -3
- package/components/dropdown/dropdown.js.map +1 -1
- package/components/dropdown/themes/dropdown-group.base.css.js +1 -1
- package/components/dropdown/themes/dropdown-group.base.css.js.map +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js.map +1 -1
- package/components/dropdown/themes/shared/dropdown.indigo.css.js +1 -1
- package/components/dropdown/themes/shared/dropdown.indigo.css.js.map +1 -1
- package/components/dropdown/themes/shared/group/dropdown-group.fluent.css.js +1 -1
- package/components/dropdown/themes/shared/group/dropdown-group.fluent.css.js.map +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.common.css.js +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.common.css.js.map +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.indigo.css.js +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.indigo.css.js.map +1 -1
- package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js +1 -1
- package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js.map +1 -1
- package/components/expansion-panel/expansion-panel.js +3 -5
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/expansion-panel/themes/expansion-panel.base.css.js +1 -1
- package/components/expansion-panel/themes/expansion-panel.base.css.js.map +1 -1
- package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js +1 -1
- package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js.map +1 -1
- package/components/file-input/file-input.d.ts +0 -4
- package/components/file-input/file-input.js +15 -19
- package/components/file-input/file-input.js.map +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
- package/components/file-input/themes/shared/file-input.material.css.js +1 -1
- package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
- package/components/focus-trap/focus-trap.js +7 -8
- package/components/focus-trap/focus-trap.js.map +1 -1
- package/components/icon/icon-references.js +208 -0
- package/components/icon/icon-references.js.map +1 -1
- package/components/icon/icon-state.broadcast.js +1 -1
- package/components/icon/icon-state.broadcast.js.map +1 -1
- package/components/icon/icon.js +3 -4
- package/components/icon/icon.js.map +1 -1
- package/components/icon/internal-icons-lib.js +105 -0
- package/components/icon/internal-icons-lib.js.map +1 -1
- package/components/input/input-base.js +4 -3
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +0 -4
- package/components/input/input.js +11 -14
- package/components/input/input.js.map +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
- package/components/input/themes/shared/input.common.css.js +1 -1
- package/components/input/themes/shared/input.common.css.js.map +1 -1
- package/components/input/themes/shared/input.fluent.css.js +1 -1
- package/components/input/themes/shared/input.fluent.css.js.map +1 -1
- package/components/input/themes/shared/input.indigo.css.js +1 -1
- package/components/input/themes/shared/input.indigo.css.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/list/list-header.js +3 -4
- package/components/list/list-header.js.map +1 -1
- package/components/list/list-item.js +3 -4
- package/components/list/list-item.js.map +1 -1
- package/components/list/list.js +3 -4
- package/components/list/list.js.map +1 -1
- package/components/list/themes/dark/container/list.indigo.css.js +1 -1
- package/components/list/themes/dark/container/list.indigo.css.js.map +1 -1
- package/components/list/themes/dark/header/list-header.indigo.css.js +1 -1
- package/components/list/themes/dark/header/list-header.indigo.css.js.map +1 -1
- package/components/list/themes/dark/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/dark/item/list-item.indigo.css.js.map +1 -1
- package/components/list/themes/header.base.css.js +1 -1
- package/components/list/themes/header.base.css.js.map +1 -1
- package/components/list/themes/item.base.css.js +1 -1
- package/components/list/themes/item.base.css.js.map +1 -1
- package/components/list/themes/light/container/list.indigo.css.js +1 -1
- package/components/list/themes/light/container/list.indigo.css.js.map +1 -1
- package/components/list/themes/light/header/list-header.indigo.css.js +1 -1
- package/components/list/themes/light/header/list-header.indigo.css.js.map +1 -1
- package/components/list/themes/light/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/light/item/list-item.indigo.css.js.map +1 -1
- package/components/list/themes/shared/header/list-header.indigo.css.js +1 -1
- package/components/list/themes/shared/header/list-header.indigo.css.js.map +1 -1
- package/components/list/themes/shared/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/shared/item/list-item.indigo.css.js.map +1 -1
- package/components/mask-input/mask-input.js +2 -3
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/nav-drawer/nav-drawer-header-item.js +3 -4
- package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer-item.js +3 -4
- package/components/nav-drawer/nav-drawer-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer.js +3 -4
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.fluent.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.material.css.js.map +1 -1
- package/components/navbar/navbar.js +3 -4
- package/components/navbar/navbar.js.map +1 -1
- package/components/navbar/themes/navbar.base.css.js +1 -1
- package/components/navbar/themes/navbar.base.css.js.map +1 -1
- package/components/navbar/themes/shared/navbar.bootstrap.css.js +1 -1
- package/components/navbar/themes/shared/navbar.bootstrap.css.js.map +1 -1
- package/components/navbar/themes/shared/navbar.indigo.css.js +1 -1
- package/components/navbar/themes/shared/navbar.indigo.css.js.map +1 -1
- package/components/popover/popover.js +9 -10
- package/components/popover/popover.js.map +1 -1
- package/components/progress/circular-gradient.js +2 -3
- package/components/progress/circular-gradient.js.map +1 -1
- package/components/progress/circular-progress.js +3 -4
- package/components/progress/circular-progress.js.map +1 -1
- package/components/progress/linear-progress.js +3 -4
- package/components/progress/linear-progress.js.map +1 -1
- package/components/progress/themes/linear/shared/linear.progress.fluent.css.js +1 -1
- package/components/progress/themes/linear/shared/linear.progress.fluent.css.js.map +1 -1
- package/components/progress/themes/linear/shared/linear.progress.indigo.css.js +1 -1
- package/components/progress/themes/linear/shared/linear.progress.indigo.css.js.map +1 -1
- package/components/radio/radio.js +3 -4
- package/components/radio/radio.js.map +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
- package/components/radio/themes/shared/radio.material.css.js +1 -1
- package/components/radio/themes/shared/radio.material.css.js.map +1 -1
- package/components/radio-group/radio-group.js +3 -4
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/radio-group/themes/radio-group.base.css.js +1 -1
- package/components/radio-group/themes/radio-group.base.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.bootstrap.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.bootstrap.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.fluent.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.fluent.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.indigo.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.indigo.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.material.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.material.css.js.map +1 -1
- package/components/rating/rating-symbol.js +3 -4
- package/components/rating/rating-symbol.js.map +1 -1
- package/components/rating/rating.js +3 -5
- package/components/rating/rating.js.map +1 -1
- package/components/rating/themes/rating.base.css.js +1 -1
- package/components/rating/themes/rating.base.css.js.map +1 -1
- package/components/rating/themes/shared/rating.indigo.css.js +1 -1
- package/components/rating/themes/shared/rating.indigo.css.js.map +1 -1
- package/components/resize-container/resize-container.d.ts +1 -1
- package/components/resize-container/resize-container.js +3 -4
- package/components/resize-container/resize-container.js.map +1 -1
- package/components/ripple/ripple.js +3 -4
- package/components/ripple/ripple.js.map +1 -1
- package/components/select/select-group.js +3 -4
- package/components/select/select-group.js.map +1 -1
- package/components/select/select-header.js +3 -4
- package/components/select/select-header.js.map +1 -1
- package/components/select/select-item.js +3 -4
- package/components/select/select-item.js.map +1 -1
- package/components/select/select.js +4 -4
- package/components/select/select.js.map +1 -1
- package/components/select/themes/dark/select.bootstrap.css.js +1 -1
- package/components/select/themes/dark/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/light/select.bootstrap.css.js +1 -1
- package/components/select/themes/light/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/shared/select.common.css.js +1 -1
- package/components/select/themes/shared/select.common.css.js.map +1 -1
- package/components/select/themes/shared/select.fluent.css.js +1 -1
- package/components/select/themes/shared/select.fluent.css.js.map +1 -1
- package/components/select/themes/shared/select.indigo.css.js +1 -1
- package/components/select/themes/shared/select.indigo.css.js.map +1 -1
- package/components/select/themes/shared/select.material.css.js +1 -1
- package/components/select/themes/shared/select.material.css.js.map +1 -1
- package/components/slider/range-slider.js +2 -3
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.js +1 -2
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider-label.js +7 -8
- package/components/slider/slider-label.js.map +1 -1
- package/components/slider/slider.js +2 -3
- package/components/slider/slider.js.map +1 -1
- package/components/slider/themes/shared/slider.common.css.js +1 -1
- package/components/slider/themes/shared/slider.common.css.js.map +1 -1
- package/components/slider/themes/slider.base.css.js +1 -1
- package/components/slider/themes/slider.base.css.js.map +1 -1
- package/components/snackbar/snackbar.js +3 -4
- package/components/snackbar/snackbar.js.map +1 -1
- package/components/snackbar/themes/shared/snackbar.indigo.css.js +1 -1
- package/components/snackbar/themes/shared/snackbar.indigo.css.js.map +1 -1
- package/components/snackbar/themes/snackbar.base.css.js +1 -1
- package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
- package/components/stepper/step.d.ts +1 -1
- package/components/stepper/step.js +3 -4
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/stepper.js +3 -4
- package/components/stepper/stepper.js.map +1 -1
- package/components/tabs/tab-dom.js +1 -1
- package/components/tabs/tab-dom.js.map +1 -1
- package/components/tabs/tab.js +4 -5
- package/components/tabs/tab.js.map +1 -1
- package/components/tabs/tabs.js +3 -5
- package/components/tabs/tabs.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
- package/components/textarea/textarea.d.ts +1 -1
- package/components/textarea/textarea.js +4 -3
- package/components/textarea/textarea.js.map +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
- package/components/textarea/themes/textarea.base.css.js +1 -1
- package/components/textarea/themes/textarea.base.css.js.map +1 -1
- package/components/tile-manager/resize-state.js +1 -1
- package/components/tile-manager/resize-state.js.map +1 -1
- package/components/tile-manager/themes/tile-manager.base.css.js +1 -1
- package/components/tile-manager/themes/tile-manager.base.css.js.map +1 -1
- package/components/tile-manager/tile-manager.js +4 -3
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.js +3 -4
- package/components/tile-manager/tile.js.map +1 -1
- package/components/toast/themes/shared/toast.bootstrap.css.js +1 -1
- package/components/toast/themes/shared/toast.bootstrap.css.js.map +1 -1
- package/components/toast/themes/shared/toast.common.css.js +1 -1
- package/components/toast/themes/shared/toast.common.css.js.map +1 -1
- package/components/toast/themes/shared/toast.fluent.css.js +1 -1
- package/components/toast/themes/shared/toast.fluent.css.js.map +1 -1
- package/components/toast/themes/toast.base.css.js +1 -1
- package/components/toast/themes/toast.base.css.js.map +1 -1
- package/components/toast/toast.js +3 -4
- package/components/toast/toast.js.map +1 -1
- package/components/tooltip/controller.js +4 -4
- package/components/tooltip/controller.js.map +1 -1
- package/components/tooltip/themes/tooltip.base.css.js +1 -1
- package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
- package/components/tooltip/tooltip.js +3 -4
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/themes/item.base.css.js +1 -1
- package/components/tree/themes/item.base.css.js.map +1 -1
- package/components/tree/themes/shared/item.common.css.js +1 -1
- package/components/tree/themes/shared/item.common.css.js.map +1 -1
- package/components/tree/themes/shared/item.indigo.css.js +1 -1
- package/components/tree/themes/shared/item.indigo.css.js.map +1 -1
- package/components/tree/themes/shared/item.material.css.js +1 -1
- package/components/tree/themes/shared/item.material.css.js.map +1 -1
- package/components/tree/tree-item.js +3 -4
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.js +7 -4
- package/components/tree/tree.js.map +1 -1
- package/components/tree/tree.navigation.js +3 -3
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/tree/tree.selection.js +6 -2
- package/components/tree/tree.selection.js.map +1 -1
- package/components/validation-container/validation-container.js +3 -4
- package/components/validation-container/validation-container.js.map +1 -1
- package/custom-elements.json +38599 -36648
- package/extras/index.d.ts +1 -0
- package/extras/index.js +2 -0
- package/extras/index.js.map +1 -0
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +4 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +6 -2
- package/themes/dark/bootstrap.css +1 -1
- package/themes/dark/fluent.css +1 -1
- package/themes/dark/indigo.css +1 -1
- package/themes/dark/material.css +1 -1
- package/themes/light/bootstrap.css +1 -1
- package/themes/light/fluent.css +1 -1
- package/themes/light/indigo.css +1 -1
- package/themes/light/material.css +1 -1
- package/web-types.json +2 -2
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* A web component that provides the input area for the `igc-chat` interface.
|
|
4
|
+
*
|
|
5
|
+
* It supports:
|
|
6
|
+
* - Text input with automatic resizing
|
|
7
|
+
* - Sending messages on Enter key (with Shift+Enter for newlines)
|
|
8
|
+
* - File attachments via file picker or drag-and-drop
|
|
9
|
+
* - Customizable templates for send button, attachments, and text input
|
|
10
|
+
* - Emits various chat-related events (typing, input focus/blur, attachment drop, etc.)
|
|
11
|
+
*
|
|
12
|
+
* @element igc-chat-input
|
|
13
|
+
*
|
|
14
|
+
* @slot - Default unnamed slot for rendering inside the component
|
|
15
|
+
* @fires igcTypingChange - Fired when the user starts/stops typing
|
|
16
|
+
* @fires igcInputFocus - Fired when the input area receives focus
|
|
17
|
+
* @fires igcInputBlur - Fired when the input area loses focus
|
|
18
|
+
* @fires igcAttachmentDrag - Fired when dragging a file over the input
|
|
19
|
+
* @fires igcAttachmentDrop - Fired when a file is dropped into the input
|
|
20
|
+
* @fires igcChange - Fired when file input changes (delegated from `<igc-file-input>`)
|
|
21
|
+
*
|
|
22
|
+
* @csspart input-container - Container for the input section
|
|
23
|
+
* @csspart input-wrapper - Wrapper around the text input
|
|
24
|
+
* @csspart text-input - The `<igc-textarea>` component
|
|
25
|
+
* @csspart buttons-container - Container for file upload/send buttons
|
|
26
|
+
* @csspart send-button - The send icon button
|
|
27
|
+
* @csspart attachments - Container for rendering attachments
|
|
28
|
+
* @csspart attachment-wrapper - Wrapper for individual attachment
|
|
29
|
+
* @csspart attachment-name - Display name of an attachment
|
|
30
|
+
*/
|
|
31
|
+
export default class IgcChatInputComponent extends LitElement {
|
|
32
|
+
static readonly tagName = "igc-chat-input";
|
|
33
|
+
static styles: import("lit").CSSResult[];
|
|
34
|
+
static register(): void;
|
|
35
|
+
private readonly _defaults;
|
|
36
|
+
private readonly _state;
|
|
37
|
+
private readonly _userInputState;
|
|
38
|
+
private readonly _textInputElement;
|
|
39
|
+
protected readonly _fileInput: HTMLInputElement;
|
|
40
|
+
private _parts;
|
|
41
|
+
private get _acceptedTypes();
|
|
42
|
+
constructor();
|
|
43
|
+
focusInput(): void;
|
|
44
|
+
private _getRenderer;
|
|
45
|
+
private _sendMessage;
|
|
46
|
+
private _handleKeydown;
|
|
47
|
+
private _handleFileInputClick;
|
|
48
|
+
private _handleFocusState;
|
|
49
|
+
private _handleDragEnter;
|
|
50
|
+
private _handleDragOver;
|
|
51
|
+
private _handleDragLeave;
|
|
52
|
+
private _handleDrop;
|
|
53
|
+
/**
|
|
54
|
+
* Handles input text changes.
|
|
55
|
+
* Updates internal inputValue and emits 'igcInputChange' event.
|
|
56
|
+
* @param e Input event from the text area
|
|
57
|
+
*/
|
|
58
|
+
private _handleInput;
|
|
59
|
+
private _handleFileUpload;
|
|
60
|
+
/**
|
|
61
|
+
* Default attachments area template used when no custom template is provided.
|
|
62
|
+
* Renders the list of input attachments as chips.
|
|
63
|
+
* @returns TemplateResult containing the attachments area
|
|
64
|
+
*/
|
|
65
|
+
private _renderAttachmentsArea;
|
|
66
|
+
/**
|
|
67
|
+
* Default text area template used when no custom template is provided.
|
|
68
|
+
* Renders a text area for user input.
|
|
69
|
+
* @returns TemplateResult containing the text area
|
|
70
|
+
*/
|
|
71
|
+
private _renderTextArea;
|
|
72
|
+
/**
|
|
73
|
+
* Default file upload button template used when no custom template is provided.
|
|
74
|
+
* Renders a file input for attaching files.
|
|
75
|
+
* @returns TemplateResult containing the file upload button
|
|
76
|
+
*/
|
|
77
|
+
private _renderFileUploadButton;
|
|
78
|
+
/**
|
|
79
|
+
* Default send button template used when no custom template is provided.
|
|
80
|
+
* Renders a send button that submits the current input value and attachments.
|
|
81
|
+
* @returns TemplateResult containing the send button
|
|
82
|
+
*/
|
|
83
|
+
private _renderSendButton;
|
|
84
|
+
private _renderActionsArea;
|
|
85
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
86
|
+
}
|
|
87
|
+
declare global {
|
|
88
|
+
interface HTMLElementTagNameMap {
|
|
89
|
+
'igc-chat-input': IgcChatInputComponent;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
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 { consume } from '@lit/context';
|
|
8
|
+
import { html, LitElement, nothing } from 'lit';
|
|
9
|
+
import { query, state } from 'lit/decorators.js';
|
|
10
|
+
import { cache } from 'lit/directives/cache.js';
|
|
11
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
12
|
+
import { until } from 'lit/directives/until.js';
|
|
13
|
+
import { addThemingController } from '../../theming/theming-controller.js';
|
|
14
|
+
import IgcIconButtonComponent from '../button/icon-button.js';
|
|
15
|
+
import IgcChipComponent from '../chip/chip.js';
|
|
16
|
+
import { chatContext, chatUserInputContext } from '../common/context.js';
|
|
17
|
+
import { enterKey } from '../common/controllers/key-bindings.js';
|
|
18
|
+
import { registerComponent } from '../common/definitions/register.js';
|
|
19
|
+
import { partMap } from '../common/part-map.js';
|
|
20
|
+
import { bindIf, hasFiles, isEmpty } from '../common/util.js';
|
|
21
|
+
import IgcIconComponent from '../icon/icon.js';
|
|
22
|
+
import IgcTextareaComponent from '../textarea/textarea.js';
|
|
23
|
+
import { styles } from './themes/input.base.css.js';
|
|
24
|
+
import { all } from './themes/input.js';
|
|
25
|
+
import { styles as shared } from './themes/shared/input/input.common.css.js';
|
|
26
|
+
import { getChatAcceptedFiles, getIconName } from './utils.js';
|
|
27
|
+
export default class IgcChatInputComponent extends LitElement {
|
|
28
|
+
static { this.tagName = 'igc-chat-input'; }
|
|
29
|
+
static { this.styles = [styles, shared]; }
|
|
30
|
+
static register() {
|
|
31
|
+
registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcIconComponent);
|
|
32
|
+
}
|
|
33
|
+
get _acceptedTypes() {
|
|
34
|
+
return this._state.acceptedFileTypes;
|
|
35
|
+
}
|
|
36
|
+
constructor() {
|
|
37
|
+
super();
|
|
38
|
+
this._defaults = Object.freeze({
|
|
39
|
+
fileUploadButton: () => this._renderFileUploadButton(),
|
|
40
|
+
input: () => this._renderTextArea(),
|
|
41
|
+
inputActions: () => this._renderActionsArea(),
|
|
42
|
+
inputActionsEnd: () => nothing,
|
|
43
|
+
inputActionsStart: () => nothing,
|
|
44
|
+
inputAttachments: (ctx) => this._renderAttachmentsArea(ctx.attachments),
|
|
45
|
+
sendButton: () => this._renderSendButton(),
|
|
46
|
+
});
|
|
47
|
+
this._parts = { 'input-container': true, dragging: false };
|
|
48
|
+
addThemingController(this, all);
|
|
49
|
+
}
|
|
50
|
+
focusInput() {
|
|
51
|
+
this._textInputElement.focus();
|
|
52
|
+
}
|
|
53
|
+
_getRenderer(name) {
|
|
54
|
+
return this._state.options?.renderers
|
|
55
|
+
? (this._state.options.renderers[name] ??
|
|
56
|
+
this._defaults[name])
|
|
57
|
+
: this._defaults[name];
|
|
58
|
+
}
|
|
59
|
+
async _sendMessage() {
|
|
60
|
+
if (!this._userInputState.hasInputValue &&
|
|
61
|
+
!this._userInputState.hasInputAttachments) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this._userInputState.addMessageWithEvent({
|
|
65
|
+
text: this._userInputState.inputValue,
|
|
66
|
+
attachments: this._userInputState.inputAttachments,
|
|
67
|
+
});
|
|
68
|
+
this.style.height = 'auto';
|
|
69
|
+
await this._userInputState.host.updateComplete;
|
|
70
|
+
this.focusInput();
|
|
71
|
+
}
|
|
72
|
+
_handleKeydown(event) {
|
|
73
|
+
const isSendRequest = event.key === enterKey.toLowerCase() && !event.shiftKey;
|
|
74
|
+
if (isSendRequest) {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
this._sendMessage();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this._state.handleKeyDown(event);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
_handleFileInputClick() {
|
|
83
|
+
this._fileInput.showPicker();
|
|
84
|
+
}
|
|
85
|
+
_handleFocusState(event) {
|
|
86
|
+
this._state.emitEvent(event.type === 'focus' ? 'igcInputFocus' : 'igcInputBlur');
|
|
87
|
+
}
|
|
88
|
+
_handleDragEnter(event) {
|
|
89
|
+
event.preventDefault();
|
|
90
|
+
event.stopPropagation();
|
|
91
|
+
const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
|
|
92
|
+
this._parts = { 'input-container': true, dragging: !isEmpty(validFiles) };
|
|
93
|
+
this._state.emitEvent('igcAttachmentDrag');
|
|
94
|
+
}
|
|
95
|
+
_handleDragOver(event) {
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
event.stopPropagation();
|
|
98
|
+
}
|
|
99
|
+
_handleDragLeave(event) {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
event.stopPropagation();
|
|
102
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
103
|
+
const x = event.clientX;
|
|
104
|
+
const y = event.clientY;
|
|
105
|
+
if (x <= rect.left ||
|
|
106
|
+
x >= rect.right ||
|
|
107
|
+
y <= rect.top ||
|
|
108
|
+
y >= rect.bottom) {
|
|
109
|
+
this._parts = { 'input-container': true, dragging: false };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
_handleDrop(event) {
|
|
113
|
+
event.preventDefault();
|
|
114
|
+
event.stopPropagation();
|
|
115
|
+
this._parts = { 'input-container': true, dragging: false };
|
|
116
|
+
const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
|
|
117
|
+
this._state.emitEvent('igcAttachmentDrop');
|
|
118
|
+
this._state.attachFiles(validFiles);
|
|
119
|
+
this.requestUpdate();
|
|
120
|
+
}
|
|
121
|
+
_handleInput({ detail }) {
|
|
122
|
+
if (detail === this._state.inputValue) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this._state.inputValue = detail;
|
|
126
|
+
this._state.emitEvent('igcInputChange', { detail: { value: detail } });
|
|
127
|
+
}
|
|
128
|
+
_handleFileUpload(event) {
|
|
129
|
+
const input = event.target;
|
|
130
|
+
if (hasFiles(input)) {
|
|
131
|
+
this._state.attachFiles(Array.from(input.files));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
_renderAttachmentsArea(attachments) {
|
|
135
|
+
return html `${attachments?.map((attachment) => html `
|
|
136
|
+
<div part="attachment-wrapper" role="listitem">
|
|
137
|
+
<igc-chip
|
|
138
|
+
removable
|
|
139
|
+
@igcRemove=${() => this._state.removeAttachment(attachment)}
|
|
140
|
+
>
|
|
141
|
+
<igc-icon
|
|
142
|
+
slot="prefix"
|
|
143
|
+
name=${getIconName(attachment.file?.type ?? attachment.type)}
|
|
144
|
+
></igc-icon>
|
|
145
|
+
<span part="attachment-name">${attachment.name}</span>
|
|
146
|
+
</igc-chip>
|
|
147
|
+
</div>
|
|
148
|
+
`)} `;
|
|
149
|
+
}
|
|
150
|
+
_renderTextArea() {
|
|
151
|
+
return html `
|
|
152
|
+
<igc-textarea
|
|
153
|
+
part="text-input"
|
|
154
|
+
aria-label="Chat text input"
|
|
155
|
+
placeholder=${ifDefined(this._state.options?.inputPlaceholder)}
|
|
156
|
+
resize="auto"
|
|
157
|
+
rows="1"
|
|
158
|
+
.value=${this._userInputState?.inputValue}
|
|
159
|
+
@igcInput=${this._handleInput}
|
|
160
|
+
@keydown=${this._handleKeydown}
|
|
161
|
+
@focus=${this._handleFocusState}
|
|
162
|
+
@blur=${this._handleFocusState}
|
|
163
|
+
></igc-textarea>
|
|
164
|
+
`;
|
|
165
|
+
}
|
|
166
|
+
_renderFileUploadButton() {
|
|
167
|
+
const accepted = this._state.options?.acceptedFiles;
|
|
168
|
+
const attachmentsDisabled = this._state.options?.disableInputAttachments;
|
|
169
|
+
return html `${cache(attachmentsDisabled
|
|
170
|
+
? nothing
|
|
171
|
+
: html `
|
|
172
|
+
<label for="input_attachments" part="upload-button">
|
|
173
|
+
<igc-icon-button
|
|
174
|
+
aria-label="Attach files"
|
|
175
|
+
variant="flat"
|
|
176
|
+
name="attach_file"
|
|
177
|
+
@click=${this._handleFileInputClick}
|
|
178
|
+
></igc-icon-button>
|
|
179
|
+
<input
|
|
180
|
+
type="file"
|
|
181
|
+
id="input_attachments"
|
|
182
|
+
tabindex="-1"
|
|
183
|
+
name="input_attachments"
|
|
184
|
+
aria-label="Upload button"
|
|
185
|
+
multiple
|
|
186
|
+
accept=${bindIf(accepted, accepted)}
|
|
187
|
+
@change=${this._handleFileUpload}
|
|
188
|
+
/>
|
|
189
|
+
</label>
|
|
190
|
+
`)}`;
|
|
191
|
+
}
|
|
192
|
+
_renderSendButton() {
|
|
193
|
+
const enabled = this._state.hasInputValue || this._state.hasInputAttachments;
|
|
194
|
+
return html `
|
|
195
|
+
<igc-icon-button
|
|
196
|
+
aria-label="Send message"
|
|
197
|
+
name="send_message"
|
|
198
|
+
variant="contained"
|
|
199
|
+
part="send-button"
|
|
200
|
+
?disabled=${!enabled}
|
|
201
|
+
@click=${this._sendMessage}
|
|
202
|
+
></igc-icon-button>
|
|
203
|
+
`;
|
|
204
|
+
}
|
|
205
|
+
_renderActionsArea() {
|
|
206
|
+
const ctx = { instance: this._state.host };
|
|
207
|
+
return html `
|
|
208
|
+
${this._getRenderer('fileUploadButton')(ctx)}
|
|
209
|
+
${this._getRenderer('inputActionsStart')(ctx)}
|
|
210
|
+
${this._getRenderer('sendButton')(ctx)}
|
|
211
|
+
${this._getRenderer('inputActionsEnd')(ctx)}
|
|
212
|
+
`;
|
|
213
|
+
}
|
|
214
|
+
render() {
|
|
215
|
+
const ctx = { instance: this._state.host };
|
|
216
|
+
const inputCtx = {
|
|
217
|
+
...ctx,
|
|
218
|
+
attachments: this._state.inputAttachments,
|
|
219
|
+
value: this._state.inputValue,
|
|
220
|
+
};
|
|
221
|
+
return html `
|
|
222
|
+
<div
|
|
223
|
+
part=${partMap(this._parts)}
|
|
224
|
+
@dragenter=${this._handleDragEnter}
|
|
225
|
+
@dragover=${this._handleDragOver}
|
|
226
|
+
@dragleave=${this._handleDragLeave}
|
|
227
|
+
@drop=${this._handleDrop}
|
|
228
|
+
>
|
|
229
|
+
${this._state.hasInputAttachments
|
|
230
|
+
? html `
|
|
231
|
+
<div part="attachments" role="list" aria-label="Attachments">
|
|
232
|
+
${until(this._getRenderer('inputAttachments')(inputCtx))}
|
|
233
|
+
</div>
|
|
234
|
+
`
|
|
235
|
+
: nothing}
|
|
236
|
+
|
|
237
|
+
<div part="input-wrapper">
|
|
238
|
+
${until(this._getRenderer('input')(inputCtx))}
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
<div part="buttons-container">
|
|
242
|
+
${until(this._getRenderer('inputActions')(ctx))}
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
`;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
__decorate([
|
|
249
|
+
consume({ context: chatContext, subscribe: true })
|
|
250
|
+
], IgcChatInputComponent.prototype, "_state", void 0);
|
|
251
|
+
__decorate([
|
|
252
|
+
consume({ context: chatUserInputContext, subscribe: true })
|
|
253
|
+
], IgcChatInputComponent.prototype, "_userInputState", void 0);
|
|
254
|
+
__decorate([
|
|
255
|
+
query(IgcTextareaComponent.tagName)
|
|
256
|
+
], IgcChatInputComponent.prototype, "_textInputElement", void 0);
|
|
257
|
+
__decorate([
|
|
258
|
+
query('#input_attachments')
|
|
259
|
+
], IgcChatInputComponent.prototype, "_fileInput", void 0);
|
|
260
|
+
__decorate([
|
|
261
|
+
state()
|
|
262
|
+
], IgcChatInputComponent.prototype, "_parts", void 0);
|
|
263
|
+
//# sourceMappingURL=chat-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { html, LitElement, nothing } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { until } from 'lit/directives/until.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext, chatUserInputContext } from '../common/context.js';\nimport { enterKey } from '../common/controllers/key-bindings.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { partMap } from '../common/part-map.js';\nimport { bindIf, hasFiles, isEmpty } from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcTextareaComponent from '../textarea/textarea.js';\nimport type { ChatState } from './chat-state.js';\nimport { styles } from './themes/input.base.css.js';\nimport { all } from './themes/input.js';\nimport { styles as shared } from './themes/shared/input/input.common.css.js';\nimport type {\n ChatInputRenderContext,\n ChatRenderContext,\n ChatTemplateRenderer,\n IgcChatMessageAttachment,\n} from './types.js';\nimport { getChatAcceptedFiles, getIconName } from './utils.js';\n\ntype DefaultInputRenderers = {\n input: ChatTemplateRenderer<ChatInputRenderContext>;\n inputActions: ChatTemplateRenderer<ChatRenderContext>;\n inputActionsEnd: ChatTemplateRenderer<ChatRenderContext>;\n inputActionsStart: ChatTemplateRenderer<ChatRenderContext>;\n inputAttachments: ChatTemplateRenderer<ChatInputRenderContext>;\n fileUploadButton: ChatTemplateRenderer<ChatRenderContext>;\n sendButton: ChatTemplateRenderer<ChatRenderContext>;\n};\n/**\n * A web component that provides the input area for the `igc-chat` interface.\n *\n * It supports:\n * - Text input with automatic resizing\n * - Sending messages on Enter key (with Shift+Enter for newlines)\n * - File attachments via file picker or drag-and-drop\n * - Customizable templates for send button, attachments, and text input\n * - Emits various chat-related events (typing, input focus/blur, attachment drop, etc.)\n *\n * @element igc-chat-input\n *\n * @slot - Default unnamed slot for rendering inside the component\n * @fires igcTypingChange - Fired when the user starts/stops typing\n * @fires igcInputFocus - Fired when the input area receives focus\n * @fires igcInputBlur - Fired when the input area loses focus\n * @fires igcAttachmentDrag - Fired when dragging a file over the input\n * @fires igcAttachmentDrop - Fired when a file is dropped into the input\n * @fires igcChange - Fired when file input changes (delegated from `<igc-file-input>`)\n *\n * @csspart input-container - Container for the input section\n * @csspart input-wrapper - Wrapper around the text input\n * @csspart text-input - The `<igc-textarea>` component\n * @csspart buttons-container - Container for file upload/send buttons\n * @csspart send-button - The send icon button\n * @csspart attachments - Container for rendering attachments\n * @csspart attachment-wrapper - Wrapper for individual attachment\n * @csspart attachment-name - Display name of an attachment\n */\nexport default class IgcChatInputComponent extends LitElement {\n public static readonly tagName = 'igc-chat-input';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcIconComponent\n );\n }\n\n private readonly _defaults: Readonly<DefaultInputRenderers> = Object.freeze({\n fileUploadButton: () => this._renderFileUploadButton(),\n input: () => this._renderTextArea(),\n inputActions: () => this._renderActionsArea(),\n inputActionsEnd: () => nothing,\n inputActionsStart: () => nothing,\n inputAttachments: (ctx) => this._renderAttachmentsArea(ctx.attachments),\n sendButton: () => this._renderSendButton(),\n });\n\n @consume({ context: chatContext, subscribe: true })\n private readonly _state!: ChatState;\n\n @consume({ context: chatUserInputContext, subscribe: true })\n private readonly _userInputState!: ChatState;\n\n @query(IgcTextareaComponent.tagName)\n private readonly _textInputElement!: IgcTextareaComponent;\n\n @query('#input_attachments')\n protected readonly _fileInput!: HTMLInputElement;\n\n @state()\n private _parts = { 'input-container': true, dragging: false };\n\n private get _acceptedTypes() {\n return this._state.acceptedFileTypes;\n }\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n public focusInput(): void {\n this._textInputElement.focus();\n }\n\n private _getRenderer<U extends keyof DefaultInputRenderers>(\n name: U\n ): DefaultInputRenderers[U] {\n return this._state.options?.renderers\n ? ((this._state.options.renderers[name] ??\n this._defaults[name]) as DefaultInputRenderers[U])\n : this._defaults[name];\n }\n\n private async _sendMessage(): Promise<void> {\n if (\n !this._userInputState.hasInputValue &&\n !this._userInputState.hasInputAttachments\n ) {\n return;\n }\n\n this._userInputState.addMessageWithEvent({\n text: this._userInputState.inputValue,\n attachments: this._userInputState.inputAttachments,\n });\n\n this.style.height = 'auto';\n\n await this._userInputState.host.updateComplete;\n this.focusInput();\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n const isSendRequest =\n event.key === enterKey.toLowerCase() && !event.shiftKey;\n\n if (isSendRequest) {\n event.preventDefault();\n this._sendMessage();\n } else {\n // TODO:\n this._state.handleKeyDown(event);\n }\n }\n\n private _handleFileInputClick(): void {\n this._fileInput.showPicker();\n }\n\n private _handleFocusState(event: FocusEvent): void {\n this._state.emitEvent(\n event.type === 'focus' ? 'igcInputFocus' : 'igcInputBlur'\n );\n }\n\n private _handleDragEnter(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);\n this._parts = { 'input-container': true, dragging: !isEmpty(validFiles) };\n this._state.emitEvent('igcAttachmentDrag');\n }\n\n private _handleDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n }\n\n private _handleDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n // Check if we're actually leaving the container\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const x = event.clientX;\n const y = event.clientY;\n\n if (\n x <= rect.left ||\n x >= rect.right ||\n y <= rect.top ||\n y >= rect.bottom\n ) {\n this._parts = { 'input-container': true, dragging: false };\n }\n }\n\n private _handleDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this._parts = { 'input-container': true, dragging: false };\n\n const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);\n this._state.emitEvent('igcAttachmentDrop');\n this._state.attachFiles(validFiles);\n this.requestUpdate();\n }\n\n /**\n * Handles input text changes.\n * Updates internal inputValue and emits 'igcInputChange' event.\n * @param e Input event from the text area\n */\n private _handleInput({ detail }: CustomEvent<string>): void {\n if (detail === this._state.inputValue) {\n return;\n }\n\n this._state.inputValue = detail;\n this._state.emitEvent('igcInputChange', { detail: { value: detail } });\n }\n\n private _handleFileUpload(event: Event): void {\n const input = event.target as HTMLInputElement;\n\n if (hasFiles(input)) {\n this._state.attachFiles(Array.from(input.files!));\n }\n }\n /**\n * Default attachments area template used when no custom template is provided.\n * Renders the list of input attachments as chips.\n * @returns TemplateResult containing the attachments area\n */\n private _renderAttachmentsArea(attachments: IgcChatMessageAttachment[]) {\n return html`${attachments?.map(\n (attachment) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip\n removable\n @igcRemove=${() => this._state.removeAttachment(attachment)}\n >\n <igc-icon\n slot=\"prefix\"\n name=${getIconName(attachment.file?.type ?? attachment.type)}\n ></igc-icon>\n <span part=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )} `;\n }\n\n /**\n * Default text area template used when no custom template is provided.\n * Renders a text area for user input.\n * @returns TemplateResult containing the text area\n */\n private _renderTextArea() {\n return html`\n <igc-textarea\n part=\"text-input\"\n aria-label=\"Chat text input\"\n placeholder=${ifDefined(this._state.options?.inputPlaceholder)}\n resize=\"auto\"\n rows=\"1\"\n .value=${this._userInputState?.inputValue}\n @igcInput=${this._handleInput}\n @keydown=${this._handleKeydown}\n @focus=${this._handleFocusState}\n @blur=${this._handleFocusState}\n ></igc-textarea>\n `;\n }\n\n /**\n * Default file upload button template used when no custom template is provided.\n * Renders a file input for attaching files.\n * @returns TemplateResult containing the file upload button\n */\n private _renderFileUploadButton() {\n const accepted = this._state.options?.acceptedFiles;\n const attachmentsDisabled = this._state.options?.disableInputAttachments;\n\n return html`${cache(\n attachmentsDisabled\n ? nothing\n : html`\n <label for=\"input_attachments\" part=\"upload-button\">\n <igc-icon-button\n aria-label=\"Attach files\"\n variant=\"flat\"\n name=\"attach_file\"\n @click=${this._handleFileInputClick}\n ></igc-icon-button>\n <input\n type=\"file\"\n id=\"input_attachments\"\n tabindex=\"-1\"\n name=\"input_attachments\"\n aria-label=\"Upload button\"\n multiple\n accept=${bindIf(accepted, accepted)}\n @change=${this._handleFileUpload}\n />\n </label>\n `\n )}`;\n }\n\n /**\n * Default send button template used when no custom template is provided.\n * Renders a send button that submits the current input value and attachments.\n * @returns TemplateResult containing the send button\n */\n private _renderSendButton() {\n const enabled =\n this._state.hasInputValue || this._state.hasInputAttachments;\n\n return html`\n <igc-icon-button\n aria-label=\"Send message\"\n name=\"send_message\"\n variant=\"contained\"\n part=\"send-button\"\n ?disabled=${!enabled}\n @click=${this._sendMessage}\n ></igc-icon-button>\n `;\n }\n\n private _renderActionsArea() {\n const ctx: ChatRenderContext = { instance: this._state.host };\n\n return html`\n ${this._getRenderer('fileUploadButton')(ctx)}\n ${this._getRenderer('inputActionsStart')(ctx)}\n ${this._getRenderer('sendButton')(ctx)}\n ${this._getRenderer('inputActionsEnd')(ctx)}\n `;\n }\n\n protected override render() {\n const ctx: ChatRenderContext = { instance: this._state.host };\n\n const inputCtx: ChatInputRenderContext = {\n ...ctx,\n attachments: this._state.inputAttachments,\n value: this._state.inputValue,\n };\n\n return html`\n <div\n part=${partMap(this._parts)}\n @dragenter=${this._handleDragEnter}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n @drop=${this._handleDrop}\n >\n ${this._state.hasInputAttachments\n ? html`\n <div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${until(this._getRenderer('inputAttachments')(inputCtx))}\n </div>\n `\n : nothing}\n\n <div part=\"input-wrapper\">\n ${until(this._getRenderer('input')(inputCtx))}\n </div>\n\n <div part=\"buttons-container\">\n ${until(this._getRenderer('inputActions')(ctx))}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import type { IgcChatMessage } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A chat message component for displaying individual messages in `<igc-chat>`.
|
|
5
|
+
*
|
|
6
|
+
* @element igc-chat-message
|
|
7
|
+
*
|
|
8
|
+
* @fires igcMessageReact - Fired when a message is reacted to.
|
|
9
|
+
*
|
|
10
|
+
* This component renders a single chat message including:
|
|
11
|
+
* - Message text (sanitized)
|
|
12
|
+
* - Attachments (if any)
|
|
13
|
+
* - Custom templates for message content and actions (if provided via chat options)
|
|
14
|
+
*
|
|
15
|
+
* It distinguishes sent messages from received messages by comparing
|
|
16
|
+
* the message sender with the current user ID from chat state.
|
|
17
|
+
*
|
|
18
|
+
* The message text is sanitized with DOMPurify before rendering,
|
|
19
|
+
* and can be rendered with a markdown renderer if provided.
|
|
20
|
+
*/
|
|
21
|
+
export default class IgcChatMessageComponent extends LitElement {
|
|
22
|
+
static readonly tagName = "igc-chat-message";
|
|
23
|
+
static styles: import("lit").CSSResult[];
|
|
24
|
+
static register(): void;
|
|
25
|
+
private readonly _defaults;
|
|
26
|
+
private readonly _state;
|
|
27
|
+
/**
|
|
28
|
+
* The chat message to render.
|
|
29
|
+
*/
|
|
30
|
+
message?: IgcChatMessage;
|
|
31
|
+
constructor();
|
|
32
|
+
protected firstUpdated(): void;
|
|
33
|
+
private _getRenderer;
|
|
34
|
+
private _handleCopy;
|
|
35
|
+
private _handleMessageActionClick;
|
|
36
|
+
private _renderHeader;
|
|
37
|
+
private _renderContent;
|
|
38
|
+
private _renderActions;
|
|
39
|
+
private _renderActionButton;
|
|
40
|
+
private _renderAttachments;
|
|
41
|
+
private _renderMessage;
|
|
42
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
43
|
+
}
|
|
44
|
+
declare global {
|
|
45
|
+
interface HTMLElementTagNameMap {
|
|
46
|
+
'igc-chat-message': IgcChatMessageComponent;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
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 { consume } from '@lit/context';
|
|
8
|
+
import { html, LitElement, nothing } from 'lit';
|
|
9
|
+
import { property } from 'lit/decorators.js';
|
|
10
|
+
import { cache } from 'lit/directives/cache.js';
|
|
11
|
+
import { until } from 'lit/directives/until.js';
|
|
12
|
+
import { addThemingController } from '../../theming/theming-controller.js';
|
|
13
|
+
import IgcIconButtonComponent from '../button/icon-button.js';
|
|
14
|
+
import { chatContext } from '../common/context.js';
|
|
15
|
+
import { registerComponent } from '../common/definitions/register.js';
|
|
16
|
+
import { partMap } from '../common/part-map.js';
|
|
17
|
+
import { isEmpty } from '../common/util.js';
|
|
18
|
+
import IgcMessageAttachmentsComponent from './message-attachments.js';
|
|
19
|
+
import { styles } from './themes/message.base.css.js';
|
|
20
|
+
import { all } from './themes/message.js';
|
|
21
|
+
import { styles as shared } from './themes/shared/chat-message/chat-message.common.css.js';
|
|
22
|
+
import { chatMessageAdoptPageStyles } from './utils.js';
|
|
23
|
+
const LIKE_INACTIVE = 'thumb_up_inactive';
|
|
24
|
+
const LIKE_ACTIVE = 'thumb_up_active';
|
|
25
|
+
const DISLIKE_INACTIVE = 'thumb_down_inactive';
|
|
26
|
+
const DISLIKE_ACTIVE = 'thumb_down_active';
|
|
27
|
+
const COPY_CONTENT = 'copy_content';
|
|
28
|
+
const REGENERATE = 'regenerate';
|
|
29
|
+
export default class IgcChatMessageComponent extends LitElement {
|
|
30
|
+
static { this.tagName = 'igc-chat-message'; }
|
|
31
|
+
static { this.styles = [styles, shared]; }
|
|
32
|
+
static register() {
|
|
33
|
+
registerComponent(IgcChatMessageComponent, IgcMessageAttachmentsComponent, IgcIconButtonComponent);
|
|
34
|
+
}
|
|
35
|
+
constructor() {
|
|
36
|
+
super();
|
|
37
|
+
this._defaults = Object.freeze({
|
|
38
|
+
message: () => this._renderMessage(),
|
|
39
|
+
messageHeader: () => this._renderHeader(),
|
|
40
|
+
messageContent: () => this._renderContent(),
|
|
41
|
+
messageAttachments: () => this._renderAttachments(),
|
|
42
|
+
messageActions: () => this._renderActions(),
|
|
43
|
+
});
|
|
44
|
+
addThemingController(this, all);
|
|
45
|
+
}
|
|
46
|
+
firstUpdated() {
|
|
47
|
+
chatMessageAdoptPageStyles(this);
|
|
48
|
+
}
|
|
49
|
+
_getRenderer(name) {
|
|
50
|
+
return this._state.options?.renderers
|
|
51
|
+
? (this._state.options.renderers[name] ?? this._defaults[name])
|
|
52
|
+
: this._defaults[name];
|
|
53
|
+
}
|
|
54
|
+
async _handleCopy() {
|
|
55
|
+
if (!this.message)
|
|
56
|
+
return;
|
|
57
|
+
let clipboardText = this.message.text;
|
|
58
|
+
const resourceStrings = this._state.resourceStrings;
|
|
59
|
+
if (this.message.attachments && !isEmpty(this.message.attachments)) {
|
|
60
|
+
const attachmentList = this.message.attachments
|
|
61
|
+
.map((att) => `${att.name ?? resourceStrings.attachmentLabel}: ${att.url ?? ''}`)
|
|
62
|
+
.join('\n');
|
|
63
|
+
clipboardText += `${clipboardText ? '\n\n' : ''}${resourceStrings.attachmentsListLabel}:\n${attachmentList}`;
|
|
64
|
+
}
|
|
65
|
+
if (navigator.clipboard?.writeText) {
|
|
66
|
+
try {
|
|
67
|
+
await navigator.clipboard.writeText(clipboardText);
|
|
68
|
+
this._state.showActionToast(resourceStrings.messageCopied);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
throw new Error(`Failed to copy message via Clipboard API: ${err}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
_handleMessageActionClick(event) {
|
|
76
|
+
const targetButton = event.target;
|
|
77
|
+
const button = targetButton.closest(IgcIconButtonComponent.tagName);
|
|
78
|
+
if (!button || !this.message)
|
|
79
|
+
return;
|
|
80
|
+
let reaction = button.name;
|
|
81
|
+
switch (reaction) {
|
|
82
|
+
case LIKE_INACTIVE:
|
|
83
|
+
case LIKE_ACTIVE:
|
|
84
|
+
reaction = this.message.reactions?.includes(LIKE_ACTIVE)
|
|
85
|
+
? LIKE_INACTIVE
|
|
86
|
+
: LIKE_ACTIVE;
|
|
87
|
+
break;
|
|
88
|
+
case DISLIKE_INACTIVE:
|
|
89
|
+
case DISLIKE_ACTIVE:
|
|
90
|
+
reaction = this.message.reactions?.includes(DISLIKE_ACTIVE)
|
|
91
|
+
? DISLIKE_INACTIVE
|
|
92
|
+
: DISLIKE_ACTIVE;
|
|
93
|
+
break;
|
|
94
|
+
case COPY_CONTENT:
|
|
95
|
+
reaction = COPY_CONTENT;
|
|
96
|
+
this._handleCopy();
|
|
97
|
+
break;
|
|
98
|
+
case REGENERATE:
|
|
99
|
+
reaction = REGENERATE;
|
|
100
|
+
break;
|
|
101
|
+
default:
|
|
102
|
+
reaction = undefined;
|
|
103
|
+
}
|
|
104
|
+
this.message.reactions = reaction ? [reaction] : [];
|
|
105
|
+
this.requestUpdate();
|
|
106
|
+
this._state.emitEvent('igcMessageReact', {
|
|
107
|
+
detail: { message: this.message, reaction },
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
_renderHeader() {
|
|
111
|
+
return nothing;
|
|
112
|
+
}
|
|
113
|
+
_renderContent() {
|
|
114
|
+
return this.message?.text
|
|
115
|
+
? html `<pre part="plain-text">${this.message.text}</pre>`
|
|
116
|
+
: nothing;
|
|
117
|
+
}
|
|
118
|
+
_renderActions() {
|
|
119
|
+
const isSent = this.message?.sender === this._state.currentUserId;
|
|
120
|
+
const hasText = this.message?.text.trim();
|
|
121
|
+
const hasAttachments = this.message?.attachments && !isEmpty(this.message?.attachments);
|
|
122
|
+
const isTyping = this._state._isTyping;
|
|
123
|
+
const isLastMessage = this.message === this._state.messages.at(-1);
|
|
124
|
+
const resourceStrings = this._state.resourceStrings;
|
|
125
|
+
if (isSent || !(hasText || hasAttachments) || (isLastMessage && isTyping)) {
|
|
126
|
+
return nothing;
|
|
127
|
+
}
|
|
128
|
+
return html `
|
|
129
|
+
<div @click=${this._handleMessageActionClick} part="message-actions">
|
|
130
|
+
${this._renderActionButton(COPY_CONTENT, resourceStrings.reactionCopy)}
|
|
131
|
+
${this._renderActionButton(this.message?.reactions?.includes(LIKE_ACTIVE)
|
|
132
|
+
? LIKE_ACTIVE
|
|
133
|
+
: LIKE_INACTIVE, resourceStrings.reactionLike)}
|
|
134
|
+
${this._renderActionButton(this.message?.reactions?.includes(DISLIKE_ACTIVE)
|
|
135
|
+
? DISLIKE_ACTIVE
|
|
136
|
+
: DISLIKE_INACTIVE, resourceStrings.reactionDislike)}
|
|
137
|
+
${this._renderActionButton(REGENERATE, resourceStrings.reactionRegenerate)}
|
|
138
|
+
</div>
|
|
139
|
+
`;
|
|
140
|
+
}
|
|
141
|
+
_renderActionButton(name, tooltipMessage) {
|
|
142
|
+
return html `
|
|
143
|
+
<igc-icon-button
|
|
144
|
+
id=${`${name}-button`}
|
|
145
|
+
name=${name}
|
|
146
|
+
variant="flat"
|
|
147
|
+
@pointerenter=${({ target }) => this._state.showActionsTooltip(target, tooltipMessage)}
|
|
148
|
+
@focus=${({ target }) => this._state.showActionsTooltip(target, tooltipMessage)}
|
|
149
|
+
></igc-icon-button>
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
_renderAttachments() {
|
|
153
|
+
return isEmpty(this.message?.attachments ?? [])
|
|
154
|
+
? nothing
|
|
155
|
+
: html `
|
|
156
|
+
<igc-message-attachments
|
|
157
|
+
.message=${this.message}
|
|
158
|
+
></igc-message-attachments>
|
|
159
|
+
`;
|
|
160
|
+
}
|
|
161
|
+
_renderMessage() {
|
|
162
|
+
return this.message
|
|
163
|
+
? html `${this._renderHeader()}${this._renderContent()}${this._renderAttachments()}${this._renderActions()}`
|
|
164
|
+
: nothing;
|
|
165
|
+
}
|
|
166
|
+
render() {
|
|
167
|
+
const ctx = {
|
|
168
|
+
message: this.message,
|
|
169
|
+
instance: this._state.host,
|
|
170
|
+
};
|
|
171
|
+
const parts = {
|
|
172
|
+
'message-container': true,
|
|
173
|
+
sent: this._state.isCurrentUserMessage(this.message),
|
|
174
|
+
};
|
|
175
|
+
return html `
|
|
176
|
+
${cache(this.message
|
|
177
|
+
? html `
|
|
178
|
+
<div part=${partMap(parts)}>
|
|
179
|
+
${cache(this._state.options?.renderers?.message
|
|
180
|
+
? html `${until(this._getRenderer('message')(ctx))}`
|
|
181
|
+
: html `
|
|
182
|
+
${until(this._getRenderer('messageHeader')(ctx))}
|
|
183
|
+
${until(this._getRenderer('messageContent')(ctx))}
|
|
184
|
+
${until(this._getRenderer('messageAttachments')(ctx))}
|
|
185
|
+
${until(this._getRenderer('messageActions')(ctx))}
|
|
186
|
+
`)}
|
|
187
|
+
</div>
|
|
188
|
+
`
|
|
189
|
+
: nothing)}
|
|
190
|
+
`;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
__decorate([
|
|
194
|
+
consume({ context: chatContext, subscribe: true })
|
|
195
|
+
], IgcChatMessageComponent.prototype, "_state", void 0);
|
|
196
|
+
__decorate([
|
|
197
|
+
property({ attribute: false })
|
|
198
|
+
], IgcChatMessageComponent.prototype, "message", void 0);
|
|
199
|
+
//# sourceMappingURL=chat-message.js.map
|