igniteui-webcomponents 6.3.0-alpha.0 → 6.3.0-beta.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 +1 -4
- 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/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/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/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/calendar/calendar.d.ts +1 -1
- package/components/calendar/days-view/days-view.js +1 -3
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/months-view/months-view.js +1 -3
- 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 +1 -3
- package/components/calendar/years-view/years-view.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.js +0 -3
- 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 +48 -28
- package/components/chat/chat-input.js +184 -199
- package/components/chat/chat-input.js.map +1 -1
- package/components/chat/chat-message.d.ts +22 -17
- package/components/chat/chat-message.js +137 -26
- package/components/chat/chat-message.js.map +1 -1
- package/components/chat/chat-state.d.ts +25 -47
- package/components/chat/chat-state.js +106 -77
- package/components/chat/chat-state.js.map +1 -1
- package/components/chat/chat.d.ts +54 -69
- package/components/chat/chat.js +226 -100
- package/components/chat/chat.js.map +1 -1
- package/components/chat/extras/markdown-renderer.d.ts +23 -0
- package/components/chat/extras/markdown-renderer.js +44 -0
- package/components/chat/extras/markdown-renderer.js.map +1 -0
- package/components/chat/message-attachments.d.ts +23 -12
- package/components/chat/message-attachments.js +87 -83
- package/components/chat/message-attachments.js.map +1 -1
- 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.js +1 -1
- package/components/chat/themes/chat.base.css.js.map +1 -1
- package/components/chat/themes/dark/chat.bootstrap.css.js +1 -1
- package/components/chat/themes/dark/chat.bootstrap.css.js.map +1 -1
- package/components/chat/themes/dark/chat.fluent.css.js +1 -1
- package/components/chat/themes/dark/chat.fluent.css.js.map +1 -1
- package/components/chat/themes/dark/chat.indigo.css.js +1 -1
- package/components/chat/themes/dark/chat.indigo.css.js.map +1 -1
- package/components/chat/themes/input.base.css.js +1 -1
- package/components/chat/themes/input.base.css.js.map +1 -1
- package/components/chat/themes/light/chat.bootstrap.css.js +1 -1
- package/components/chat/themes/light/chat.bootstrap.css.js.map +1 -1
- package/components/chat/themes/light/chat.fluent.css.js +1 -1
- package/components/chat/themes/light/chat.fluent.css.js.map +1 -1
- package/components/chat/themes/light/chat.indigo.css.js +1 -1
- package/components/chat/themes/light/chat.indigo.css.js.map +1 -1
- package/components/chat/themes/light/chat.shared.css.js +1 -1
- package/components/chat/themes/light/chat.shared.css.js.map +1 -1
- package/components/chat/themes/message-attachments.base.css.js +1 -1
- package/components/chat/themes/message-attachments.base.css.js.map +1 -1
- package/components/chat/themes/message.base.css.js +1 -1
- package/components/chat/themes/message.base.css.js.map +1 -1
- 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.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.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.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.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.js +1 -1
- package/components/chat/themes/shared/chat.common.css.js.map +1 -1
- 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.js +1 -1
- package/components/chat/themes/shared/input/input.bootstrap.css.js.map +1 -1
- package/components/chat/themes/shared/input/input.common.css.js +1 -1
- package/components/chat/themes/shared/input/input.common.css.js.map +1 -1
- package/components/chat/themes/shared/input/input.fluent.css.js +1 -1
- package/components/chat/themes/shared/input/input.fluent.css.js.map +1 -1
- package/components/chat/themes/shared/input/input.indigo.css.js +1 -1
- package/components/chat/themes/shared/input/input.indigo.css.js.map +1 -1
- package/components/chat/themes/shared/input/input.material.css.js +1 -1
- package/components/chat/themes/shared/input/input.material.css.js.map +1 -1
- 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.js +9 -6
- package/components/chat/themes/themes.js.map +1 -1
- package/components/chat/types.d.ts +32 -85
- package/components/chat/types.js +1 -7
- package/components/chat/types.js.map +1 -1
- package/components/chat/utils.d.ts +16 -0
- package/components/chat/utils.js +86 -0
- package/components/chat/utils.js.map +1 -0
- package/components/checkbox/checkbox-base.d.ts +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/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/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 +4 -1
- package/components/common/context.js +2 -1
- package/components/common/context.js.map +1 -1
- package/components/common/controllers/key-bindings.js +4 -3
- package/components/common/controllers/key-bindings.js.map +1 -1
- package/components/common/i18n/chat.resources.d.ts +8 -0
- package/components/common/i18n/chat.resources.js +8 -0
- package/components/common/i18n/chat.resources.js.map +1 -0
- 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 +2 -2
- 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 +0 -1
- 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/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 +1 -1
- package/components/date-time-input/date-time-input.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/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 +0 -1
- 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 +12 -15
- 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/icon/icon-references.js +130 -0
- package/components/icon/icon-references.js.map +1 -1
- package/components/icon/internal-icons-lib.js +66 -0
- package/components/icon/internal-icons-lib.js.map +1 -1
- package/components/input/input.d.ts +0 -4
- package/components/input/input.js +9 -11
- 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/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/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/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/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/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/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.js +0 -1
- 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/select/select.js +0 -1
- 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/slider-base.js +0 -1
- package/components/slider/slider-base.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/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/tabs/tabs.js +0 -1
- 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/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/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/tooltip/themes/tooltip.base.css.js +1 -1
- package/components/tooltip/themes/tooltip.base.css.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.js +3 -1
- 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/custom-elements.json +18515 -18333
- 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 +2 -1
- package/index.js +1 -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
- package/components/chat/chat-message-list.d.ts +0 -111
- package/components/chat/chat-message-list.js +0 -178
- package/components/chat/chat-message-list.js.map +0 -1
- package/components/chat/markdown-util.d.ts +0 -2
- package/components/chat/markdown-util.js +0 -22
- package/components/chat/markdown-util.js.map +0 -1
- package/components/chat/themes/message-list.base.css.js +0 -3
- package/components/chat/themes/message-list.base.css.js.map +0 -1
- package/components/chat/themes/shared/chat-message.common.css.js +0 -3
- package/components/chat/themes/shared/chat-message.common.css.js.map +0 -1
- package/components/chat/themes/shared/message-attachments.common.css.js +0 -3
- package/components/chat/themes/shared/message-attachments.common.css.js.map +0 -1
- package/components/chat/themes/shared/message-list.common.css.js +0 -3
- package/components/chat/themes/shared/message-list.common.css.js.map +0 -1
- /package/components/chat/themes/{message-list.base.css.d.ts → shared/chat-message/chat-message.bootstrap.css.d.ts} +0 -0
- /package/components/chat/themes/shared/{chat-message.common.css.d.ts → chat-message/chat-message.common.css.d.ts} +0 -0
- /package/components/chat/themes/shared/{message-attachments.common.css.d.ts → chat-message/chat-message.fluent.css.d.ts} +0 -0
- /package/components/chat/themes/shared/{message-list.common.css.d.ts → chat-message/chat-message.indigo.css.d.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LitElement
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
2
|
/**
|
|
3
3
|
* A web component that provides the input area for the `igc-chat` interface.
|
|
4
4
|
*
|
|
@@ -31,37 +31,57 @@ import { LitElement, type TemplateResult } from 'lit';
|
|
|
31
31
|
export default class IgcChatInputComponent extends LitElement {
|
|
32
32
|
static readonly tagName = "igc-chat-input";
|
|
33
33
|
static styles: import("lit").CSSResult[];
|
|
34
|
-
private _chatState?;
|
|
35
34
|
static register(): void;
|
|
36
|
-
private
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
private
|
|
41
|
-
private
|
|
35
|
+
private readonly _state;
|
|
36
|
+
private readonly _userInputState;
|
|
37
|
+
private readonly _textInputElement;
|
|
38
|
+
protected readonly _fileInput: HTMLInputElement;
|
|
39
|
+
private _parts;
|
|
40
|
+
private get _acceptedTypes();
|
|
41
|
+
private readonly _defaults;
|
|
42
42
|
constructor();
|
|
43
|
-
get defaultAttachmentsArea(): TemplateResult;
|
|
44
|
-
get defaultTextArea(): TemplateResult;
|
|
45
|
-
get defaultFileUploadButton(): TemplateResult;
|
|
46
|
-
get defaultSendButton(): TemplateResult;
|
|
47
|
-
protected renderDefaultFileUploadTemplate(): Generator<TemplateResult<1>, void, unknown>;
|
|
48
43
|
protected firstUpdated(): void;
|
|
49
|
-
|
|
50
|
-
private
|
|
51
|
-
private
|
|
52
|
-
private
|
|
53
|
-
private
|
|
54
|
-
private
|
|
55
|
-
private
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
private
|
|
44
|
+
private _getRenderer;
|
|
45
|
+
private _handleKeydown;
|
|
46
|
+
private _handleFileInputClick;
|
|
47
|
+
private _handleFocusState;
|
|
48
|
+
private _handleDragEnter;
|
|
49
|
+
private _handleDragOver;
|
|
50
|
+
private _handleDragLeave;
|
|
51
|
+
private _handleDrop;
|
|
52
|
+
/**
|
|
53
|
+
* Handles input text changes.
|
|
54
|
+
* Updates internal inputValue and emits 'igcInputChange' event.
|
|
55
|
+
* @param e Input event from the text area
|
|
56
|
+
*/
|
|
57
|
+
private _handleInput;
|
|
58
|
+
private _handleFileUpload;
|
|
59
|
+
/**
|
|
60
|
+
* Default attachments area template used when no custom template is provided.
|
|
61
|
+
* Renders the list of input attachments as chips.
|
|
62
|
+
* @returns TemplateResult containing the attachments area
|
|
63
|
+
*/
|
|
63
64
|
private renderAttachmentsArea;
|
|
64
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Default text area template used when no custom template is provided.
|
|
67
|
+
* Renders a text area for user input.
|
|
68
|
+
* @returns TemplateResult containing the text area
|
|
69
|
+
*/
|
|
70
|
+
private _renderTextArea;
|
|
71
|
+
/**
|
|
72
|
+
* Default file upload button template used when no custom template is provided.
|
|
73
|
+
* Renders a file input for attaching files.
|
|
74
|
+
* @returns TemplateResult containing the file upload button
|
|
75
|
+
*/
|
|
76
|
+
private _renderFileUploadButton;
|
|
77
|
+
/**
|
|
78
|
+
* Default send button template used when no custom template is provided.
|
|
79
|
+
* Renders a send button that submits the current input value and attachments.
|
|
80
|
+
* @returns TemplateResult containing the send button
|
|
81
|
+
*/
|
|
82
|
+
private _renderSendButton;
|
|
83
|
+
private renderActionsArea;
|
|
84
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
65
85
|
}
|
|
66
86
|
declare global {
|
|
67
87
|
interface HTMLElementTagNameMap {
|
|
@@ -7,234 +7,225 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
import { consume } from '@lit/context';
|
|
8
8
|
import { html, LitElement, nothing } from 'lit';
|
|
9
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';
|
|
10
13
|
import { addThemingController } from '../../theming/theming-controller.js';
|
|
11
14
|
import IgcIconButtonComponent from '../button/icon-button.js';
|
|
12
15
|
import IgcChipComponent from '../chip/chip.js';
|
|
13
|
-
import { chatContext } from '../common/context.js';
|
|
14
|
-
import {
|
|
16
|
+
import { chatContext, chatUserInputContext } from '../common/context.js';
|
|
17
|
+
import { enterKey } from '../common/controllers/key-bindings.js';
|
|
15
18
|
import { registerComponent } from '../common/definitions/register.js';
|
|
16
|
-
import
|
|
19
|
+
import { partMap } from '../common/part-map.js';
|
|
20
|
+
import { bindIf, hasFiles, isEmpty } from '../common/util.js';
|
|
17
21
|
import IgcIconComponent from '../icon/icon.js';
|
|
18
|
-
import { registerIconFromText } from '../icon/icon.registry.js';
|
|
19
22
|
import IgcTextareaComponent from '../textarea/textarea.js';
|
|
20
23
|
import { styles } from './themes/input.base.css.js';
|
|
21
24
|
import { all } from './themes/input.js';
|
|
22
25
|
import { styles as shared } from './themes/shared/input/input.common.css.js';
|
|
23
|
-
import {
|
|
26
|
+
import { getChatAcceptedFiles, getIconName } from './utils.js';
|
|
24
27
|
class IgcChatInputComponent extends LitElement {
|
|
25
28
|
static register() {
|
|
26
|
-
registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent,
|
|
29
|
+
registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcIconComponent);
|
|
27
30
|
}
|
|
28
|
-
|
|
29
|
-
this.
|
|
31
|
+
get _acceptedTypes() {
|
|
32
|
+
return this._state.acceptedFileTypes;
|
|
30
33
|
}
|
|
31
34
|
constructor() {
|
|
32
35
|
super();
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
+
this._parts = { 'input-container': true, dragging: false };
|
|
37
|
+
this._defaults = Object.freeze({
|
|
38
|
+
input: () => this._renderTextArea(),
|
|
39
|
+
inputActions: () => this.renderActionsArea(),
|
|
40
|
+
inputAttachments: (ctx) => this.renderAttachmentsArea(ctx.param),
|
|
41
|
+
fileUploadButton: () => this._renderFileUploadButton(),
|
|
42
|
+
sendButton: () => this._renderSendButton(),
|
|
43
|
+
});
|
|
36
44
|
addThemingController(this, all);
|
|
37
|
-
registerIconFromText('attachment', attachmentIcon, 'material');
|
|
38
|
-
registerIconFromText('send-message', sendButtonIcon, 'material');
|
|
39
|
-
}
|
|
40
|
-
get defaultAttachmentsArea() {
|
|
41
|
-
return html `${this._chatState?.inputAttachments?.map((attachment, index) => html `
|
|
42
|
-
<div part="attachment-wrapper" role="listitem">
|
|
43
|
-
<igc-chip removable @igcRemove=${() => this.removeAttachment(index)}>
|
|
44
|
-
<span part="attachment-name">${attachment.name}</span>
|
|
45
|
-
</igc-chip>
|
|
46
|
-
</div>
|
|
47
|
-
`)} `;
|
|
48
|
-
}
|
|
49
|
-
get defaultTextArea() {
|
|
50
|
-
return html ` <igc-textarea
|
|
51
|
-
part="text-input"
|
|
52
|
-
.placeholder=${this.inputPlaceholder}
|
|
53
|
-
resize="auto"
|
|
54
|
-
rows="1"
|
|
55
|
-
.value=${this.inputValue}
|
|
56
|
-
@input=${this.handleInput}
|
|
57
|
-
@keydown=${this.handleKeyDown}
|
|
58
|
-
@focus=${this.handleFocus}
|
|
59
|
-
@blur=${this.handleBlur}
|
|
60
|
-
></igc-textarea>`;
|
|
61
|
-
}
|
|
62
|
-
get defaultFileUploadButton() {
|
|
63
|
-
return html `
|
|
64
|
-
<igc-file-input
|
|
65
|
-
multiple
|
|
66
|
-
.accept=${this._chatState?.options?.acceptedFiles}
|
|
67
|
-
@igcChange=${this.handleFileUpload}
|
|
68
|
-
>
|
|
69
|
-
<igc-icon
|
|
70
|
-
slot="file-selector-text"
|
|
71
|
-
name="attachment"
|
|
72
|
-
collection="material"
|
|
73
|
-
></igc-icon>
|
|
74
|
-
</igc-file-input>
|
|
75
|
-
`;
|
|
76
|
-
}
|
|
77
|
-
get defaultSendButton() {
|
|
78
|
-
return html ` <igc-icon-button
|
|
79
|
-
aria-label="Send message"
|
|
80
|
-
name="send-message"
|
|
81
|
-
collection="material"
|
|
82
|
-
variant="contained"
|
|
83
|
-
part="send-button"
|
|
84
|
-
?disabled=${!this.inputValue.trim() &&
|
|
85
|
-
this._chatState?.inputAttachments.length === 0}
|
|
86
|
-
@click=${this.sendMessage}
|
|
87
|
-
></igc-icon-button>`;
|
|
88
|
-
}
|
|
89
|
-
*renderDefaultFileUploadTemplate() {
|
|
90
|
-
yield html `${this._chatState?.options?.disableAttachments
|
|
91
|
-
? nothing
|
|
92
|
-
: this.defaultFileUploadButton}`;
|
|
93
45
|
}
|
|
94
46
|
firstUpdated() {
|
|
95
|
-
this.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
this._chatState?.handleInputChange(this.inputValue);
|
|
109
|
-
}
|
|
110
|
-
handleKeyDown(e) {
|
|
111
|
-
if (e.key === 'Enter' && !e.shiftKey) {
|
|
112
|
-
e.preventDefault();
|
|
113
|
-
this.sendMessage();
|
|
47
|
+
this._state.updateAcceptedTypesCache();
|
|
48
|
+
this._state.textArea = this._textInputElement;
|
|
49
|
+
}
|
|
50
|
+
_getRenderer(name) {
|
|
51
|
+
return this._state.options?.renderers
|
|
52
|
+
? (this._state.options.renderers[name] ?? this._defaults[name])
|
|
53
|
+
: this._defaults[name];
|
|
54
|
+
}
|
|
55
|
+
_handleKeydown(event) {
|
|
56
|
+
const isSend = event.key === enterKey && !event.shiftKey;
|
|
57
|
+
if (isSend) {
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
this._state.sendMessage();
|
|
114
60
|
}
|
|
115
61
|
else {
|
|
116
|
-
this.
|
|
117
|
-
detail: { isTyping: true },
|
|
118
|
-
});
|
|
119
|
-
setTimeout(() => {
|
|
120
|
-
this._chatState?.emitEvent('igcTypingChange', {
|
|
121
|
-
detail: { isTyping: false },
|
|
122
|
-
});
|
|
123
|
-
}, 3000);
|
|
62
|
+
this._state.handleKeyDown(event);
|
|
124
63
|
}
|
|
125
64
|
}
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
this.
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
handleDragOver(e) {
|
|
150
|
-
e.preventDefault();
|
|
151
|
-
e.stopPropagation();
|
|
152
|
-
}
|
|
153
|
-
handleDragLeave(e) {
|
|
154
|
-
e.preventDefault();
|
|
155
|
-
e.stopPropagation();
|
|
156
|
-
const rect = e.currentTarget.getBoundingClientRect();
|
|
157
|
-
const x = e.clientX;
|
|
158
|
-
const y = e.clientY;
|
|
65
|
+
_handleFileInputClick() {
|
|
66
|
+
this._fileInput.showPicker();
|
|
67
|
+
}
|
|
68
|
+
_handleFocusState(event) {
|
|
69
|
+
this._state.emitEvent(event.type === 'focus' ? 'igcInputFocus' : 'igcInputBlur');
|
|
70
|
+
}
|
|
71
|
+
_handleDragEnter(event) {
|
|
72
|
+
event.preventDefault();
|
|
73
|
+
event.stopPropagation();
|
|
74
|
+
const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
|
|
75
|
+
this._parts = { 'input-container': true, dragging: !isEmpty(validFiles) };
|
|
76
|
+
this._state.emitEvent('igcAttachmentDrag');
|
|
77
|
+
}
|
|
78
|
+
_handleDragOver(event) {
|
|
79
|
+
event.preventDefault();
|
|
80
|
+
event.stopPropagation();
|
|
81
|
+
}
|
|
82
|
+
_handleDragLeave(event) {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
event.stopPropagation();
|
|
85
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
86
|
+
const x = event.clientX;
|
|
87
|
+
const y = event.clientY;
|
|
159
88
|
if (x <= rect.left ||
|
|
160
89
|
x >= rect.right ||
|
|
161
90
|
y <= rect.top ||
|
|
162
91
|
y >= rect.bottom) {
|
|
163
|
-
this.
|
|
92
|
+
this._parts = { 'input-container': true, dragging: false };
|
|
164
93
|
}
|
|
165
94
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
const validFiles = files.filter((file) => this._chatState?.isFileTypeAccepted(file));
|
|
174
|
-
this._chatState?.emitEvent('igcAttachmentDrop');
|
|
175
|
-
this._chatState?.attachFiles(validFiles);
|
|
95
|
+
_handleDrop(event) {
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
event.stopPropagation();
|
|
98
|
+
this._parts = { 'input-container': true, dragging: false };
|
|
99
|
+
const validFiles = getChatAcceptedFiles(event, this._acceptedTypes);
|
|
100
|
+
this._state.emitEvent('igcAttachmentDrop');
|
|
101
|
+
this._state.attachFiles(validFiles);
|
|
176
102
|
this.requestUpdate();
|
|
177
103
|
}
|
|
178
|
-
|
|
179
|
-
if (
|
|
180
|
-
this._chatState?.inputAttachments.length === 0)
|
|
104
|
+
_handleInput({ detail }) {
|
|
105
|
+
if (detail === this._state.inputValue)
|
|
181
106
|
return;
|
|
182
|
-
this.
|
|
183
|
-
|
|
184
|
-
attachments: this._chatState?.inputAttachments,
|
|
185
|
-
});
|
|
186
|
-
this.inputValue = '';
|
|
187
|
-
if (this.textInputElement) {
|
|
188
|
-
this.textInputElement.style.height = 'auto';
|
|
189
|
-
}
|
|
190
|
-
this.updateComplete.then(() => {
|
|
191
|
-
this.textInputElement?.focus();
|
|
192
|
-
});
|
|
107
|
+
this._state.inputValue = detail;
|
|
108
|
+
this._state.emitEvent('igcInputChange', { detail: { value: detail } });
|
|
193
109
|
}
|
|
194
|
-
|
|
195
|
-
const input =
|
|
196
|
-
if (
|
|
197
|
-
|
|
198
|
-
const files = Array.from(input.files);
|
|
199
|
-
this._chatState?.attachFiles(files);
|
|
200
|
-
this.requestUpdate();
|
|
201
|
-
if (this.fileInputElement) {
|
|
202
|
-
this.fileInputElement.value = '';
|
|
110
|
+
_handleFileUpload(event) {
|
|
111
|
+
const input = event.target;
|
|
112
|
+
if (hasFiles(input)) {
|
|
113
|
+
this._state.attachFiles(Array.from(input.files));
|
|
203
114
|
}
|
|
204
115
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
116
|
+
renderAttachmentsArea(attachments) {
|
|
117
|
+
return html `${attachments?.map((attachment, index) => html `
|
|
118
|
+
<div part="attachment-wrapper" role="listitem">
|
|
119
|
+
<igc-chip
|
|
120
|
+
removable
|
|
121
|
+
@igcRemove=${() => this._state.removeAttachment(index)}
|
|
122
|
+
>
|
|
123
|
+
<igc-icon
|
|
124
|
+
slot="prefix"
|
|
125
|
+
name=${getIconName(attachment.file?.type ?? attachment.type)}
|
|
126
|
+
></igc-icon>
|
|
127
|
+
<span part="attachment-name">${attachment.name}</span>
|
|
128
|
+
</igc-chip>
|
|
129
|
+
</div>
|
|
130
|
+
`)} `;
|
|
208
131
|
}
|
|
209
|
-
|
|
210
|
-
return html
|
|
211
|
-
|
|
212
|
-
|
|
132
|
+
_renderTextArea() {
|
|
133
|
+
return html `
|
|
134
|
+
<igc-textarea
|
|
135
|
+
part="text-input"
|
|
136
|
+
placeholder=${ifDefined(this._state.options?.inputPlaceholder)}
|
|
137
|
+
resize="auto"
|
|
138
|
+
rows="1"
|
|
139
|
+
.value=${this._userInputState?.inputValue}
|
|
140
|
+
@igcInput=${this._handleInput}
|
|
141
|
+
@keydown=${this._handleKeydown}
|
|
142
|
+
@focus=${this._handleFocusState}
|
|
143
|
+
@blur=${this._handleFocusState}
|
|
144
|
+
></igc-textarea>
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
_renderFileUploadButton() {
|
|
148
|
+
const accepted = this._state.options?.acceptedFiles;
|
|
149
|
+
const attachmentsDisabled = this._state.options?.disableInputAttachments;
|
|
150
|
+
return html `${cache(attachmentsDisabled
|
|
151
|
+
? nothing
|
|
213
152
|
: html `
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
153
|
+
<label for="input_attachments" part="upload-button">
|
|
154
|
+
<igc-icon-button
|
|
155
|
+
variant="flat"
|
|
156
|
+
name="attach_file"
|
|
157
|
+
@click=${this._handleFileInputClick}
|
|
158
|
+
></igc-icon-button>
|
|
159
|
+
<input
|
|
160
|
+
type="file"
|
|
161
|
+
id="input_attachments"
|
|
162
|
+
name="input_attachments"
|
|
163
|
+
multiple
|
|
164
|
+
accept=${bindIf(accepted, accepted)}
|
|
165
|
+
@change=${this._handleFileUpload}
|
|
166
|
+
/>
|
|
167
|
+
</label>
|
|
168
|
+
`)}`;
|
|
169
|
+
}
|
|
170
|
+
_renderSendButton() {
|
|
171
|
+
const enabled = this._state.hasInputValue || this._state.hasInputAttachments;
|
|
172
|
+
return html `
|
|
173
|
+
<igc-icon-button
|
|
174
|
+
aria-label="Send message"
|
|
175
|
+
name="send_message"
|
|
176
|
+
variant="contained"
|
|
177
|
+
part="send-button"
|
|
178
|
+
?disabled=${!enabled}
|
|
179
|
+
@click=${this._state.sendMessage}
|
|
180
|
+
></igc-icon-button>
|
|
181
|
+
`;
|
|
217
182
|
}
|
|
218
|
-
|
|
219
|
-
return html
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
: this.
|
|
223
|
-
|
|
183
|
+
renderActionsArea() {
|
|
184
|
+
return html ` ${this._getRenderer('fileUploadButton')({
|
|
185
|
+
param: undefined,
|
|
186
|
+
defaults: this._defaults,
|
|
187
|
+
options: this._state.options,
|
|
188
|
+
})}
|
|
189
|
+
${this._getRenderer('sendButton')({
|
|
190
|
+
param: undefined,
|
|
191
|
+
defaults: this._defaults,
|
|
192
|
+
options: this._state.options,
|
|
193
|
+
})}`;
|
|
224
194
|
}
|
|
225
195
|
render() {
|
|
196
|
+
const partialCtx = {
|
|
197
|
+
defaults: this._defaults,
|
|
198
|
+
options: this._state.options,
|
|
199
|
+
};
|
|
226
200
|
return html `
|
|
227
|
-
<div
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
201
|
+
<div
|
|
202
|
+
part=${partMap(this._parts)}
|
|
203
|
+
@dragenter=${this._handleDragEnter}
|
|
204
|
+
@dragover=${this._handleDragOver}
|
|
205
|
+
@dragleave=${this._handleDragLeave}
|
|
206
|
+
@drop=${this._handleDrop}
|
|
207
|
+
>
|
|
208
|
+
${this._state.inputAttachments &&
|
|
209
|
+
this._state.inputAttachments.length > 0
|
|
210
|
+
? html ` <div part="attachments" role="list" aria-label="Attachments">
|
|
211
|
+
${until(this._getRenderer('inputAttachments')({
|
|
212
|
+
...partialCtx,
|
|
213
|
+
param: this._state.inputAttachments,
|
|
214
|
+
}))}
|
|
215
|
+
</div>`
|
|
231
216
|
: nothing}
|
|
232
217
|
<div part="input-wrapper">
|
|
233
|
-
${this.
|
|
234
|
-
|
|
235
|
-
: this.
|
|
218
|
+
${until(this._getRenderer('input')({
|
|
219
|
+
...partialCtx,
|
|
220
|
+
param: this._state.inputValue,
|
|
221
|
+
}))}
|
|
222
|
+
</div>
|
|
223
|
+
<div part="buttons-container">
|
|
224
|
+
${until(this._getRenderer('inputActions')({
|
|
225
|
+
...partialCtx,
|
|
226
|
+
param: undefined,
|
|
227
|
+
}))}
|
|
236
228
|
</div>
|
|
237
|
-
${this.renderActionsArea()}
|
|
238
229
|
</div>
|
|
239
230
|
`;
|
|
240
231
|
}
|
|
@@ -244,23 +235,17 @@ IgcChatInputComponent.styles = [styles, shared];
|
|
|
244
235
|
export default IgcChatInputComponent;
|
|
245
236
|
__decorate([
|
|
246
237
|
consume({ context: chatContext, subscribe: true })
|
|
247
|
-
], IgcChatInputComponent.prototype, "
|
|
238
|
+
], IgcChatInputComponent.prototype, "_state", void 0);
|
|
248
239
|
__decorate([
|
|
249
|
-
|
|
250
|
-
], IgcChatInputComponent.prototype, "
|
|
251
|
-
__decorate([
|
|
252
|
-
query(IgcFileInputComponent.tagName)
|
|
253
|
-
], IgcChatInputComponent.prototype, "fileInputElement", void 0);
|
|
254
|
-
__decorate([
|
|
255
|
-
watch('acceptedFiles', { waitUntilFirstUpdate: true })
|
|
256
|
-
], IgcChatInputComponent.prototype, "acceptedFilesChange", null);
|
|
240
|
+
consume({ context: chatUserInputContext, subscribe: true })
|
|
241
|
+
], IgcChatInputComponent.prototype, "_userInputState", void 0);
|
|
257
242
|
__decorate([
|
|
258
|
-
|
|
259
|
-
], IgcChatInputComponent.prototype, "
|
|
243
|
+
query(IgcTextareaComponent.tagName)
|
|
244
|
+
], IgcChatInputComponent.prototype, "_textInputElement", void 0);
|
|
260
245
|
__decorate([
|
|
261
|
-
|
|
262
|
-
], IgcChatInputComponent.prototype, "
|
|
246
|
+
query('#input_attachments')
|
|
247
|
+
], IgcChatInputComponent.prototype, "_fileInput", void 0);
|
|
263
248
|
__decorate([
|
|
264
249
|
state()
|
|
265
|
-
], IgcChatInputComponent.prototype, "
|
|
250
|
+
], IgcChatInputComponent.prototype, "_parts", void 0);
|
|
266
251
|
//# sourceMappingURL=chat-input.js.map
|
|
@@ -1 +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, type TemplateResult } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext } from '../common/context.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcFileInputComponent from '../file-input/file-input.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { registerIconFromText } from '../icon/icon.registry.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 { attachmentIcon, sendButtonIcon } from './types.js';\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\n public static override styles = [styles, shared];\n\n @consume({ context: chatContext, subscribe: true })\n private _chatState?: ChatState;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcFileInputComponent,\n IgcIconComponent\n );\n }\n\n @query(IgcTextareaComponent.tagName)\n private textInputElement!: IgcTextareaComponent;\n\n @query(IgcFileInputComponent.tagName)\n private fileInputElement!: IgcFileInputComponent;\n\n @watch('acceptedFiles', { waitUntilFirstUpdate: true })\n protected acceptedFilesChange(): void {\n this._chatState?.updateAcceptedTypesCache();\n }\n\n @state()\n private inputValue = '';\n\n @state()\n private inputPlaceholder = '';\n\n @state()\n private containerPart = 'input-container';\n\n constructor() {\n super();\n addThemingController(this, all);\n registerIconFromText('attachment', attachmentIcon, 'material');\n registerIconFromText('send-message', sendButtonIcon, 'material');\n }\n\n public get defaultAttachmentsArea(): TemplateResult {\n return html`${this._chatState?.inputAttachments?.map(\n (attachment, index) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip removable @igcRemove=${() => this.removeAttachment(index)}>\n <span part=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )} `;\n }\n\n public get defaultTextArea(): TemplateResult {\n return html` <igc-textarea\n part=\"text-input\"\n .placeholder=${this.inputPlaceholder}\n resize=\"auto\"\n rows=\"1\"\n .value=${this.inputValue}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n ></igc-textarea>`;\n }\n\n public get defaultFileUploadButton(): TemplateResult {\n return html`\n <igc-file-input\n multiple\n .accept=${this._chatState?.options?.acceptedFiles}\n @igcChange=${this.handleFileUpload}\n >\n <igc-icon\n slot=\"file-selector-text\"\n name=\"attachment\"\n collection=\"material\"\n ></igc-icon>\n </igc-file-input>\n `;\n }\n\n public get defaultSendButton(): TemplateResult {\n return html` <igc-icon-button\n aria-label=\"Send message\"\n name=\"send-message\"\n collection=\"material\"\n variant=\"contained\"\n part=\"send-button\"\n ?disabled=${!this.inputValue.trim() &&\n this._chatState?.inputAttachments.length === 0}\n @click=${this.sendMessage}\n ></igc-icon-button>`;\n }\n\n protected *renderDefaultFileUploadTemplate() {\n yield html`${this._chatState?.options?.disableAttachments\n ? nothing\n : this.defaultFileUploadButton}`;\n }\n\n protected override firstUpdated() {\n this.setupDragAndDrop();\n if (this._chatState) {\n this._chatState.updateAcceptedTypesCache();\n this._chatState.textArea = this.textInputElement;\n }\n }\n\n protected override updated() {\n this.inputValue = this._chatState?.inputValue || '';\n this.inputPlaceholder = this._chatState?.options?.inputPlaceholder || '';\n }\n\n private handleInput(e: Event) {\n const target = e.target as HTMLTextAreaElement;\n this.inputValue = target.value;\n this._chatState?.handleInputChange(this.inputValue);\n // this.adjustTextareaHeight();\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n } else {\n this._chatState?.emitEvent('igcTypingChange', {\n detail: { isTyping: true },\n });\n\n // wait 3 seconds and dispatch a stop-typing event\n setTimeout(() => {\n this._chatState?.emitEvent('igcTypingChange', {\n detail: { isTyping: false },\n });\n }, 3000);\n }\n }\n\n private handleFocus() {\n this._chatState?.emitEvent('igcInputFocus');\n }\n\n private handleBlur() {\n this._chatState?.emitEvent('igcInputBlur');\n }\n\n private setupDragAndDrop() {\n const container = this.shadowRoot?.querySelector(\n `div[part='input-container']`\n ) as HTMLElement;\n if (container) {\n container.addEventListener('dragenter', this.handleDragEnter.bind(this));\n container.addEventListener('dragover', this.handleDragOver.bind(this));\n container.addEventListener('dragleave', this.handleDragLeave.bind(this));\n container.addEventListener('drop', this.handleDrop.bind(this));\n }\n }\n\n private handleDragEnter(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n const files = Array.from(e.dataTransfer?.items || []).filter(\n (item) => item.kind === 'file'\n );\n const hasValidFiles = files.some((item) =>\n this._chatState?.isFileTypeAccepted(item.getAsFile() as File, item.type)\n );\n\n this.containerPart = `input-container ${hasValidFiles ? ' dragging' : ''}`;\n\n this._chatState?.emitEvent('igcAttachmentDrag');\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n private handleDragLeave(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n // Check if we're actually leaving the container\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const x = e.clientX;\n const y = e.clientY;\n\n if (\n x <= rect.left ||\n x >= rect.right ||\n y <= rect.top ||\n y >= rect.bottom\n ) {\n this.containerPart = 'input-container';\n }\n }\n\n private handleDrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.containerPart = 'input-container';\n\n const files = Array.from(e.dataTransfer?.files || []);\n if (files.length === 0) return;\n\n const validFiles = files.filter((file) =>\n this._chatState?.isFileTypeAccepted(file)\n );\n\n this._chatState?.emitEvent('igcAttachmentDrop');\n\n this._chatState?.attachFiles(validFiles);\n this.requestUpdate();\n }\n\n // private adjustTextareaHeight() {\n // const textarea = this.textInputElement;\n // if (!textarea) return;\n\n // textarea.style.height = 'auto';\n // const newHeight = Math.min(textarea.scrollHeight, 120);\n // textarea.style.height = `${newHeight}px`;\n // }\n\n private sendMessage() {\n if (\n !this.inputValue.trim() &&\n this._chatState?.inputAttachments.length === 0\n )\n return;\n\n this._chatState?.addMessage({\n text: this.inputValue,\n attachments: this._chatState?.inputAttachments,\n });\n this.inputValue = '';\n\n if (this.textInputElement) {\n this.textInputElement.style.height = 'auto';\n }\n\n this.updateComplete.then(() => {\n this.textInputElement?.focus();\n });\n }\n\n private handleFileUpload(e: Event) {\n const input = (e.target as any).input as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n this._chatState?.attachFiles(files);\n this.requestUpdate();\n\n if (this.fileInputElement) {\n this.fileInputElement.value = '';\n }\n }\n\n private removeAttachment(index: number) {\n this._chatState?.removeAttachment(index);\n this.requestUpdate();\n }\n\n private renderActionsArea() {\n return html`<div part=\"buttons-container\">\n ${this._chatState?.options?.templates?.textAreaActionsTemplate\n ? this._chatState?.options?.templates?.textAreaActionsTemplate\n : html`\n ${this.renderDefaultFileUploadTemplate()} ${this.defaultSendButton}\n `}\n </div>`;\n }\n\n private renderAttachmentsArea() {\n return html`<div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${this._chatState?.options?.templates?.textAreaAttachmentsTemplate\n ? this._chatState.options.templates.textAreaAttachmentsTemplate(\n this._chatState?.inputAttachments\n )\n : this.defaultAttachmentsArea}\n </div>`;\n }\n\n protected override render() {\n return html`\n <div part=\"${this.containerPart}\">\n ${this._chatState?.inputAttachments &&\n this._chatState?.inputAttachments.length > 0\n ? this.renderAttachmentsArea()\n : nothing}\n <div part=\"input-wrapper\">\n ${this._chatState?.options?.templates?.textInputTemplate\n ? this._chatState.options.templates.textInputTemplate(\n this._chatState?.inputValue\n )\n : this.defaultTextArea}\n </div>\n ${this.renderActionsArea()}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
|
|
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 { ChatTemplateRenderer, IgcMessageAttachment } from './types.js';\nimport { getChatAcceptedFiles, getIconName } from './utils.js';\n\ntype DefaultInputRenderers = {\n input: ChatTemplateRenderer<string>;\n inputActions: ChatTemplateRenderer<void>;\n inputAttachments: ChatTemplateRenderer<IgcMessageAttachment[]>;\n fileUploadButton: ChatTemplateRenderer<void>;\n sendButton: ChatTemplateRenderer<void>;\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 @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 private readonly _defaults: Readonly<DefaultInputRenderers> = Object.freeze({\n input: () => this._renderTextArea(),\n inputActions: () => this.renderActionsArea(),\n inputAttachments: (ctx) => this.renderAttachmentsArea(ctx.param),\n fileUploadButton: () => this._renderFileUploadButton(),\n sendButton: () => this._renderSendButton(),\n });\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override firstUpdated() {\n this._state.updateAcceptedTypesCache();\n this._state.textArea = this._textInputElement;\n }\n\n private _getRenderer(\n name: keyof DefaultInputRenderers\n ): ChatTemplateRenderer<any> {\n return this._state.options?.renderers\n ? (this._state.options.renderers[name] ?? this._defaults[name])\n : this._defaults[name];\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n const isSend = event.key === enterKey && !event.shiftKey;\n\n if (isSend) {\n event.preventDefault();\n this._state.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) return;\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: IgcMessageAttachment[]) {\n return html`${attachments?.map(\n (attachment, index) => html`\n <div part=\"attachment-wrapper\" role=\"listitem\">\n <igc-chip\n removable\n @igcRemove=${() => this._state.removeAttachment(index)}\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 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 variant=\"flat\"\n name=\"attach_file\"\n @click=${this._handleFileInputClick}\n ></igc-icon-button>\n <input\n type=\"file\"\n id=\"input_attachments\"\n name=\"input_attachments\"\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._state.sendMessage}\n ></igc-icon-button>\n `;\n }\n\n private renderActionsArea() {\n return html` ${this._getRenderer('fileUploadButton')({\n param: undefined,\n defaults: this._defaults,\n options: this._state.options,\n })}\n ${this._getRenderer('sendButton')({\n param: undefined,\n defaults: this._defaults,\n options: this._state.options,\n })}`;\n }\n\n protected override render() {\n const partialCtx = {\n defaults: this._defaults,\n options: this._state.options,\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.inputAttachments &&\n this._state.inputAttachments.length > 0\n ? html` <div part=\"attachments\" role=\"list\" aria-label=\"Attachments\">\n ${until(\n this._getRenderer('inputAttachments')({\n ...partialCtx,\n param: this._state.inputAttachments,\n })\n )}\n </div>`\n : nothing}\n <div part=\"input-wrapper\">\n ${until(\n this._getRenderer('input')({\n ...partialCtx,\n param: this._state.inputValue,\n })\n )}\n </div>\n <div part=\"buttons-container\">\n ${until(\n this._getRenderer('inputActions')({\n ...partialCtx,\n param: undefined,\n })\n )}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
|