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,10 +1,12 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
1
|
+
import { LitElement, nothing } from 'lit';
|
|
2
2
|
import type { IgcMessage } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* A chat message component for displaying individual messages in `<igc-chat>`.
|
|
5
5
|
*
|
|
6
6
|
* @element igc-chat-message
|
|
7
7
|
*
|
|
8
|
+
* @fires igcMessageReact - Fired when a message is reacted to.
|
|
9
|
+
*
|
|
8
10
|
* This component renders a single chat message including:
|
|
9
11
|
* - Message text (sanitized)
|
|
10
12
|
* - Attachments (if any)
|
|
@@ -17,38 +19,41 @@ import type { IgcMessage } from './types.js';
|
|
|
17
19
|
* and can be rendered with a markdown renderer if provided.
|
|
18
20
|
*/
|
|
19
21
|
export default class IgcChatMessageComponent extends LitElement {
|
|
20
|
-
/** Tag name of the custom element. */
|
|
21
22
|
static readonly tagName = "igc-chat-message";
|
|
22
|
-
/** Styles applied to the component. */
|
|
23
23
|
static styles: import("lit").CSSResult[];
|
|
24
|
+
static register(): void;
|
|
24
25
|
/**
|
|
25
26
|
* Injected chat state context. Provides message data, user info, and options.
|
|
26
|
-
* @private
|
|
27
27
|
*/
|
|
28
|
-
private
|
|
29
|
-
|
|
30
|
-
* Registers this component and its dependencies.
|
|
31
|
-
* This is used internally to set up the component definitions.
|
|
32
|
-
*/
|
|
33
|
-
static register(): void;
|
|
28
|
+
private readonly _state;
|
|
29
|
+
private readonly _defaults;
|
|
34
30
|
/**
|
|
35
31
|
* The chat message to render.
|
|
36
32
|
*/
|
|
37
|
-
message
|
|
33
|
+
message?: IgcMessage;
|
|
34
|
+
constructor();
|
|
35
|
+
protected firstUpdated(): void;
|
|
36
|
+
private _getRenderer;
|
|
37
|
+
private _handleMessageActionClick;
|
|
38
|
+
private _renderHeader;
|
|
39
|
+
private _renderContent;
|
|
40
|
+
private _renderActions;
|
|
41
|
+
private _renderActionButton;
|
|
42
|
+
private _renderAttachments;
|
|
38
43
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* @
|
|
42
|
-
* @
|
|
44
|
+
* Default message template used when no custom template is provided.
|
|
45
|
+
* Renders the message text, sanitized for security.
|
|
46
|
+
* @param message The chat message to render
|
|
47
|
+
* @returns TemplateResult containing the rendered message
|
|
43
48
|
*/
|
|
44
|
-
private
|
|
49
|
+
private _renderMessage;
|
|
45
50
|
/**
|
|
46
51
|
* Renders the chat message template.
|
|
47
52
|
* - Applies 'sent' CSS class if the message sender matches current user.
|
|
48
53
|
* - Uses markdown rendering if configured.
|
|
49
54
|
* - Renders attachments and custom templates if provided.
|
|
50
55
|
*/
|
|
51
|
-
protected render(): import("lit-html").TemplateResult<1>;
|
|
56
|
+
protected render(): typeof nothing | import("lit-html").TemplateResult<1>;
|
|
52
57
|
}
|
|
53
58
|
declare global {
|
|
54
59
|
interface HTMLElementTagNameMap {
|
|
@@ -5,44 +5,155 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { consume } from '@lit/context';
|
|
8
|
-
import DOMPurify from 'dompurify';
|
|
9
8
|
import { html, LitElement, nothing } from 'lit';
|
|
10
9
|
import { property } from 'lit/decorators.js';
|
|
10
|
+
import { until } from 'lit/directives/until.js';
|
|
11
|
+
import { addThemingController } from '../../theming/theming-controller.js';
|
|
11
12
|
import IgcAvatarComponent from '../avatar/avatar.js';
|
|
12
13
|
import { chatContext } from '../common/context.js';
|
|
13
14
|
import { registerComponent } from '../common/definitions/register.js';
|
|
14
|
-
import {
|
|
15
|
+
import { partMap } from '../common/part-map.js';
|
|
16
|
+
import { isEmpty } from '../common/util.js';
|
|
17
|
+
import IgcTooltipComponent from '../tooltip/tooltip.js';
|
|
15
18
|
import IgcMessageAttachmentsComponent from './message-attachments.js';
|
|
16
19
|
import { styles } from './themes/message.base.css.js';
|
|
17
|
-
import {
|
|
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, showChatActionsTooltip } 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';
|
|
18
27
|
class IgcChatMessageComponent extends LitElement {
|
|
19
28
|
static register() {
|
|
20
|
-
registerComponent(IgcChatMessageComponent, IgcMessageAttachmentsComponent, IgcAvatarComponent);
|
|
29
|
+
registerComponent(IgcChatMessageComponent, IgcMessageAttachmentsComponent, IgcAvatarComponent, IgcTooltipComponent);
|
|
21
30
|
}
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
this._defaults = Object.freeze({
|
|
34
|
+
message: () => this._renderMessage(),
|
|
35
|
+
messageHeader: () => this._renderHeader(),
|
|
36
|
+
messageContent: () => this._renderContent(),
|
|
37
|
+
messageAttachments: () => this._renderAttachments(),
|
|
38
|
+
messageActions: () => this._renderActions(),
|
|
39
|
+
});
|
|
40
|
+
addThemingController(this, all);
|
|
24
41
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
42
|
+
firstUpdated() {
|
|
43
|
+
chatMessageAdoptPageStyles(this);
|
|
44
|
+
}
|
|
45
|
+
_getRenderer(name) {
|
|
46
|
+
return this._state.options?.renderers
|
|
47
|
+
? (this._state.options.renderers[name] ?? this._defaults[name])
|
|
48
|
+
: this._defaults[name];
|
|
49
|
+
}
|
|
50
|
+
_handleMessageActionClick(event) {
|
|
51
|
+
const targetButton = event.target;
|
|
52
|
+
const button = targetButton.closest('igc-icon-button');
|
|
53
|
+
if (!button)
|
|
54
|
+
return;
|
|
55
|
+
let reaction = button.getAttribute('name');
|
|
56
|
+
if (this.message) {
|
|
57
|
+
if (reaction === LIKE_INACTIVE) {
|
|
58
|
+
reaction = LIKE_ACTIVE;
|
|
59
|
+
this.message.reactions = [reaction];
|
|
60
|
+
}
|
|
61
|
+
else if (reaction === DISLIKE_INACTIVE) {
|
|
62
|
+
reaction = DISLIKE_ACTIVE;
|
|
63
|
+
this.message.reactions = [reaction];
|
|
64
|
+
}
|
|
65
|
+
else if (reaction === this.message.reactions?.[0]) {
|
|
66
|
+
reaction = null;
|
|
67
|
+
this.message.reactions = [];
|
|
68
|
+
}
|
|
69
|
+
this.requestUpdate();
|
|
70
|
+
}
|
|
71
|
+
this._state.emitEvent('igcMessageReact', {
|
|
72
|
+
detail: { message: this.message, reaction },
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
_renderHeader() {
|
|
76
|
+
return nothing;
|
|
77
|
+
}
|
|
78
|
+
_renderContent() {
|
|
79
|
+
return this.message?.text
|
|
80
|
+
? html `<pre part="plain-text">${this.message.text}</pre>`
|
|
81
|
+
: nothing;
|
|
82
|
+
}
|
|
83
|
+
_renderActions() {
|
|
84
|
+
const isSent = this.message?.sender === this._state.currentUserId;
|
|
85
|
+
const hasText = this.message?.text.trim();
|
|
86
|
+
const isTyping = this._state._isTyping;
|
|
87
|
+
const isLastMessage = this.message === this._state.messages.at(-1);
|
|
88
|
+
const resourceStrings = this._state.resourceStrings;
|
|
89
|
+
if (isSent || !hasText || (isLastMessage && isTyping)) {
|
|
90
|
+
return nothing;
|
|
91
|
+
}
|
|
92
|
+
return html `
|
|
93
|
+
<div @click=${this._handleMessageActionClick}>
|
|
94
|
+
${this._renderActionButton('copy_content', resourceStrings.reactionCopy)}
|
|
95
|
+
${this._renderActionButton(this.message?.reactions?.includes(LIKE_ACTIVE)
|
|
96
|
+
? LIKE_ACTIVE
|
|
97
|
+
: LIKE_INACTIVE, resourceStrings.reactionLike)}
|
|
98
|
+
${this._renderActionButton(this.message?.reactions?.includes(DISLIKE_ACTIVE)
|
|
99
|
+
? DISLIKE_ACTIVE
|
|
100
|
+
: DISLIKE_INACTIVE, resourceStrings.reactionDislike)}
|
|
101
|
+
${this._renderActionButton('regenerate', resourceStrings.reactionRegenerate)}
|
|
102
|
+
</div>
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
_renderActionButton(name, tooltipMessage) {
|
|
29
106
|
return html `
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
107
|
+
<igc-icon-button
|
|
108
|
+
id=${`${name}-button`}
|
|
109
|
+
name=${name}
|
|
110
|
+
variant="flat"
|
|
111
|
+
@pointerenter=${({ target }) => showChatActionsTooltip(target, tooltipMessage)}
|
|
112
|
+
@focus=${({ target }) => showChatActionsTooltip(target, tooltipMessage)}
|
|
113
|
+
></igc-icon-button>
|
|
114
|
+
`;
|
|
115
|
+
}
|
|
116
|
+
_renderAttachments() {
|
|
117
|
+
return isEmpty(this.message?.attachments ?? [])
|
|
118
|
+
? nothing
|
|
119
|
+
: html `
|
|
120
|
+
<igc-message-attachments
|
|
121
|
+
.message=${this.message}
|
|
122
|
+
></igc-message-attachments>
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
_renderMessage() {
|
|
126
|
+
return this.message
|
|
127
|
+
? html `${this._renderHeader()}${this._renderContent()}${this._renderAttachments()}${this._renderActions()}`
|
|
128
|
+
: nothing;
|
|
129
|
+
}
|
|
130
|
+
render() {
|
|
131
|
+
if (!this.message) {
|
|
132
|
+
return nothing;
|
|
133
|
+
}
|
|
134
|
+
const parts = {
|
|
135
|
+
'message-container': true,
|
|
136
|
+
sent: this._state.isCurrentUserMessage(this.message),
|
|
137
|
+
};
|
|
138
|
+
const options = this._state.options;
|
|
139
|
+
const ctx = {
|
|
140
|
+
param: this.message,
|
|
141
|
+
defaults: this._defaults,
|
|
142
|
+
options,
|
|
143
|
+
};
|
|
144
|
+
if (options?.renderers?.message) {
|
|
145
|
+
return html `
|
|
146
|
+
<div part=${partMap(parts)}>
|
|
147
|
+
${until(options.renderers.message(ctx))}
|
|
45
148
|
</div>
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
return html `
|
|
152
|
+
<div part=${partMap(parts)}>
|
|
153
|
+
${until(this._getRenderer('messageHeader')(ctx))}
|
|
154
|
+
${until(this._getRenderer('messageContent')(ctx))}
|
|
155
|
+
${until(this._getRenderer('messageAttachments')(ctx))}
|
|
156
|
+
${until(this._getRenderer('messageActions')(ctx))}
|
|
46
157
|
</div>
|
|
47
158
|
`;
|
|
48
159
|
}
|
|
@@ -52,7 +163,7 @@ IgcChatMessageComponent.styles = [styles, shared];
|
|
|
52
163
|
export default IgcChatMessageComponent;
|
|
53
164
|
__decorate([
|
|
54
165
|
consume({ context: chatContext, subscribe: true })
|
|
55
|
-
], IgcChatMessageComponent.prototype, "
|
|
166
|
+
], IgcChatMessageComponent.prototype, "_state", void 0);
|
|
56
167
|
__decorate([
|
|
57
168
|
property({ attribute: false })
|
|
58
169
|
], IgcChatMessageComponent.prototype, "message", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-message.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,kBAAkB,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,8BAA8B,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,4CAA4C,CAAC;AAmB9E,MAAqB,uBAAwB,SAAQ,UAAU;IAmBtD,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CACf,uBAAuB,EACvB,8BAA8B,EAC9B,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAcO,mBAAmB,CAAC,IAAY;QACtC,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAQkB,MAAM;QACvB,MAAM,aAAa,GAAG,qBAAqB,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACnH,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CACnD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAChC,CAAC;QACF,MAAM,QAAQ,GACZ,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,IAAI,cAAc,CAAC;QAE/D,OAAO,IAAI,CAAA;kBACG,aAAa;;YAEnB,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,IAAI,IAAI,CAAC,OAAO;YACpE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;YACjE,CAAC,CAAC,IAAI,CAAA,GAAG,oBAAoB;gBACzB,CAAC,CAAC,IAAI,CAAA,QAAQ,QAAQ,CAAC,oBAAoB,CAAC,QAAQ;gBACpD,CAAC,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACjE,CAAC,CAAC,IAAI,CAAA,qCAAqC,IAAI,CAAC,OAAO;yCAC1B;YAC7B,CAAC,CAAC,OAAO;YACT,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB;YAC7D,IAAI,CAAC,OAAO;YACV,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,sBAAsB,CACtD,IAAI,CAAC,OAAO,CACb;YACH,CAAC,CAAC,OAAO;;;KAGhB,CAAC;IACJ,CAAC;;AA5EsB,+BAAO,GAAG,kBAAkB,CAAC;AAG7B,8BAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;eAL9B,uBAAuB;AAYlC;IADP,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;2DACpB;AAmBxB;IADN,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wDACQ","sourcesContent":["import { consume } from '@lit/context';\nimport DOMPurify from 'dompurify';\nimport { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport IgcAvatarComponent from '../avatar/avatar.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport type { ChatState } from './chat-state.js';\nimport { renderMarkdown } from './markdown-util.js';\nimport IgcMessageAttachmentsComponent from './message-attachments.js';\nimport { styles } from './themes/message.base.css.js';\nimport { styles as shared } from './themes/shared/chat-message.common.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n * A chat message component for displaying individual messages in `<igc-chat>`.\n *\n * @element igc-chat-message\n *\n * This component renders a single chat message including:\n * - Message text (sanitized)\n * - Attachments (if any)\n * - Custom templates for message content and actions (if provided via chat options)\n *\n * It distinguishes sent messages from received messages by comparing\n * the message sender with the current user ID from chat state.\n *\n * The message text is sanitized with DOMPurify before rendering,\n * and can be rendered with a markdown renderer if provided.\n */\nexport default class IgcChatMessageComponent extends LitElement {\n /** Tag name of the custom element. */\n public static readonly tagName = 'igc-chat-message';\n\n /** Styles applied to the component. */\n public static override styles = [styles, shared];\n\n /**\n * Injected chat state context. Provides message data, user info, and options.\n * @private\n */\n @consume({ context: chatContext, subscribe: true })\n private _chatState?: ChatState;\n\n /**\n * Registers this component and its dependencies.\n * This is used internally to set up the component definitions.\n */\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatMessageComponent,\n IgcMessageAttachmentsComponent,\n IgcAvatarComponent\n );\n }\n\n /**\n * The chat message to render.\n */\n @property({ attribute: false })\n public message: IgcMessage | undefined;\n\n /**\n * Sanitizes message text to prevent XSS or invalid HTML.\n * @param text The raw message text\n * @returns Sanitized text safe for HTML rendering\n * @private\n */\n private sanitizeMessageText(text: string): string {\n return DOMPurify.sanitize(text);\n }\n\n /**\n * Renders the chat message template.\n * - Applies 'sent' CSS class if the message sender matches current user.\n * - Uses markdown rendering if configured.\n * - Renders attachments and custom templates if provided.\n */\n protected override render() {\n const containerPart = `message-container ${this.message?.sender === this._chatState?.currentUserId ? 'sent' : ''}`;\n const sanitizedMessageText = this.sanitizeMessageText(\n this.message?.text.trim() || ''\n );\n const renderer =\n this._chatState?.options?.markdownRenderer || renderMarkdown;\n\n return html`\n <div part=${containerPart}>\n <div part=\"bubble\">\n ${this._chatState?.options?.templates?.messageTemplate && this.message\n ? this._chatState.options.templates.messageTemplate(this.message)\n : html`${sanitizedMessageText\n ? html`<div>${renderer(sanitizedMessageText)}</div>`\n : nothing}`}\n ${this.message?.attachments && this.message?.attachments.length > 0\n ? html`<igc-message-attachments .message=${this.message}>\n </igc-message-attachments>`\n : nothing}\n ${this._chatState?.options?.templates?.messageActionsTemplate &&\n this.message\n ? this._chatState.options.templates.messageActionsTemplate(\n this.message\n )\n : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message': IgcChatMessageComponent;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chat-message.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { until } from 'lit/directives/until.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcAvatarComponent from '../avatar/avatar.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { partMap } from '../common/part-map.js';\nimport { isEmpty } from '../common/util.js';\nimport IgcTooltipComponent from '../tooltip/tooltip.js';\nimport type { ChatState } from './chat-state.js';\nimport IgcMessageAttachmentsComponent from './message-attachments.js';\nimport { styles } from './themes/message.base.css.js';\nimport { all } from './themes/message.js';\nimport { styles as shared } from './themes/shared/chat-message/chat-message.common.css.js';\nimport type { ChatTemplateRenderer, IgcMessage } from './types.js';\nimport { chatMessageAdoptPageStyles, showChatActionsTooltip } from './utils.js';\n\nconst LIKE_INACTIVE = 'thumb_up_inactive';\nconst LIKE_ACTIVE = 'thumb_up_active';\nconst DISLIKE_INACTIVE = 'thumb_down_inactive';\nconst DISLIKE_ACTIVE = 'thumb_down_active';\n\ntype DefaultMessageRenderers = {\n message: ChatTemplateRenderer<IgcMessage>;\n messageHeader: ChatTemplateRenderer<IgcMessage>;\n messageContent: ChatTemplateRenderer<IgcMessage>;\n messageAttachments: ChatTemplateRenderer<IgcMessage>;\n messageActions: ChatTemplateRenderer<IgcMessage>;\n};\n\n/**\n * A chat message component for displaying individual messages in `<igc-chat>`.\n *\n * @element igc-chat-message\n *\n * @fires igcMessageReact - Fired when a message is reacted to.\n *\n * This component renders a single chat message including:\n * - Message text (sanitized)\n * - Attachments (if any)\n * - Custom templates for message content and actions (if provided via chat options)\n *\n * It distinguishes sent messages from received messages by comparing\n * the message sender with the current user ID from chat state.\n *\n * The message text is sanitized with DOMPurify before rendering,\n * and can be rendered with a markdown renderer if provided.\n */\nexport default class IgcChatMessageComponent extends LitElement {\n public static readonly tagName = 'igc-chat-message';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcChatMessageComponent,\n IgcMessageAttachmentsComponent,\n IgcAvatarComponent,\n IgcTooltipComponent\n );\n }\n\n /**\n * Injected chat state context. Provides message data, user info, and options.\n */\n @consume({ context: chatContext, subscribe: true })\n private readonly _state!: ChatState;\n\n private readonly _defaults = Object.freeze<DefaultMessageRenderers>({\n message: () => this._renderMessage(),\n messageHeader: () => this._renderHeader(),\n messageContent: () => this._renderContent(),\n messageAttachments: () => this._renderAttachments(),\n messageActions: () => this._renderActions(),\n });\n\n /**\n * The chat message to render.\n */\n @property({ attribute: false })\n public message?: IgcMessage;\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n protected override firstUpdated(): void {\n chatMessageAdoptPageStyles(this);\n }\n\n private _getRenderer(name: keyof DefaultMessageRenderers) {\n return this._state.options?.renderers\n ? (this._state.options.renderers[name] ?? this._defaults[name])\n : this._defaults[name];\n }\n\n private _handleMessageActionClick(event: PointerEvent): void {\n const targetButton = event.target as HTMLElement;\n const button = targetButton.closest('igc-icon-button');\n if (!button) return;\n\n let reaction = button.getAttribute('name');\n if (this.message) {\n if (reaction === LIKE_INACTIVE) {\n reaction = LIKE_ACTIVE;\n this.message.reactions = [reaction];\n } else if (reaction === DISLIKE_INACTIVE) {\n reaction = DISLIKE_ACTIVE;\n this.message.reactions = [reaction];\n } else if (reaction === this.message.reactions?.[0]) {\n reaction = null;\n this.message.reactions = [];\n }\n\n this.requestUpdate();\n }\n\n this._state.emitEvent('igcMessageReact', {\n detail: { message: this.message, reaction },\n });\n }\n\n private _renderHeader() {\n return nothing;\n }\n\n private _renderContent() {\n return this.message?.text\n ? html`<pre part=\"plain-text\">${this.message.text}</pre>`\n : nothing;\n }\n\n private _renderActions() {\n const isSent = this.message?.sender === this._state.currentUserId;\n const hasText = this.message?.text.trim();\n const isTyping = this._state._isTyping;\n const isLastMessage = this.message === this._state.messages.at(-1);\n const resourceStrings = this._state.resourceStrings!;\n\n if (isSent || !hasText || (isLastMessage && isTyping)) {\n return nothing;\n }\n\n return html`\n <div @click=${this._handleMessageActionClick}>\n ${this._renderActionButton(\n 'copy_content',\n resourceStrings.reactionCopy\n )}\n ${this._renderActionButton(\n this.message?.reactions?.includes(LIKE_ACTIVE)\n ? LIKE_ACTIVE\n : LIKE_INACTIVE,\n resourceStrings.reactionLike\n )}\n ${this._renderActionButton(\n this.message?.reactions?.includes(DISLIKE_ACTIVE)\n ? DISLIKE_ACTIVE\n : DISLIKE_INACTIVE,\n resourceStrings.reactionDislike\n )}\n ${this._renderActionButton(\n 'regenerate',\n resourceStrings.reactionRegenerate\n )}\n </div>\n `;\n }\n\n private _renderActionButton(name: string, tooltipMessage: string) {\n return html`\n <igc-icon-button\n id=${`${name}-button`}\n name=${name}\n variant=\"flat\"\n @pointerenter=${({ target }: PointerEvent) =>\n showChatActionsTooltip(target as Element, tooltipMessage)}\n @focus=${({ target }: FocusEvent) =>\n showChatActionsTooltip(target as Element, tooltipMessage)}\n ></igc-icon-button>\n `;\n }\n\n // Default rendering logic for attachments\n private _renderAttachments() {\n return isEmpty(this.message?.attachments ?? [])\n ? nothing\n : html`\n <igc-message-attachments\n .message=${this.message}\n ></igc-message-attachments>\n `;\n }\n\n /**\n * Default message template used when no custom template is provided.\n * Renders the message text, sanitized for security.\n * @param message The chat message to render\n * @returns TemplateResult containing the rendered message\n */\n private _renderMessage() {\n return this.message\n ? html`${this._renderHeader()}${this._renderContent()}${this._renderAttachments()}${this._renderActions()}`\n : nothing;\n }\n\n /**\n * Renders the chat message template.\n * - Applies 'sent' CSS class if the message sender matches current user.\n * - Uses markdown rendering if configured.\n * - Renders attachments and custom templates if provided.\n */\n protected override render() {\n if (!this.message) {\n return nothing;\n }\n\n const parts = {\n 'message-container': true,\n sent: this._state.isCurrentUserMessage(this.message),\n };\n\n const options = this._state.options;\n const ctx = {\n param: this.message,\n defaults: this._defaults,\n options,\n };\n\n if (options?.renderers?.message) {\n return html`\n <div part=${partMap(parts)}>\n ${until(options.renderers.message(ctx))}\n </div>\n `;\n }\n\n return html`\n <div part=${partMap(parts)}>\n ${until(this._getRenderer('messageHeader')(ctx))}\n ${until(this._getRenderer('messageContent')(ctx))}\n ${until(this._getRenderer('messageAttachments')(ctx))}\n ${until(this._getRenderer('messageActions')(ctx))}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message': IgcChatMessageComponent;\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import type IgcTextareaComponent from '../textarea/textarea.js';
|
|
|
2
2
|
import type IgcChatComponent from './chat.js';
|
|
3
3
|
import type { IgcChatComponentEventMap } from './chat.js';
|
|
4
4
|
import type { IgcChatOptions, IgcMessage, IgcMessageAttachment } from './types.js';
|
|
5
|
+
import { type ChatAcceptedFileTypes } from './utils.js';
|
|
5
6
|
/**
|
|
6
7
|
* Internal state manager for the `<igc-chat>` component.
|
|
7
8
|
*
|
|
@@ -9,12 +10,12 @@ import type { IgcChatOptions, IgcMessage, IgcMessageAttachment } from './types.j
|
|
|
9
10
|
*/
|
|
10
11
|
export declare class ChatState {
|
|
11
12
|
private readonly _host;
|
|
13
|
+
private readonly _contextUpdateFn;
|
|
14
|
+
private readonly _userInputContextUpdateFn;
|
|
12
15
|
/** Reference to the text area input component */
|
|
13
16
|
private _textArea;
|
|
14
17
|
/** The current list of messages */
|
|
15
18
|
private _messages;
|
|
16
|
-
/** Sorted copy of messages by timestamp */
|
|
17
|
-
private _sortedMessages;
|
|
18
19
|
/** Chat options/configuration */
|
|
19
20
|
private _options?;
|
|
20
21
|
/** List of current input attachments */
|
|
@@ -25,18 +26,21 @@ export declare class ChatState {
|
|
|
25
26
|
* Cache of accepted file types, organized into extensions, mimeTypes, and wildcardTypes
|
|
26
27
|
*/
|
|
27
28
|
private _acceptedTypesCache;
|
|
29
|
+
/** Default position of the suggestions */
|
|
28
30
|
private _suggestionsPosition;
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
/** Default time in milliseconds before dispatching stop typing event */
|
|
32
|
+
private _stopTypingDelay;
|
|
33
|
+
_isTyping: boolean;
|
|
34
|
+
private _lastTyped;
|
|
35
|
+
resourceStrings: import("../common/i18n/chat.resources.js").IgcChatResourceStrings;
|
|
36
|
+
get acceptedFileTypes(): ChatAcceptedFileTypes | null;
|
|
37
|
+
get disableAutoScroll(): boolean;
|
|
33
38
|
/**
|
|
34
39
|
* Gets the list of chat messages.
|
|
35
40
|
*/
|
|
36
41
|
get messages(): IgcMessage[];
|
|
37
42
|
/**
|
|
38
43
|
* Sets the list of chat messages.
|
|
39
|
-
* Also sorts messages by timestamp and requests host update.
|
|
40
44
|
*/
|
|
41
45
|
set messages(value: IgcMessage[]);
|
|
42
46
|
/**
|
|
@@ -55,6 +59,10 @@ export declare class ChatState {
|
|
|
55
59
|
* Gets the current suggestionsPosition from options or returns the default value 'below-messages'.
|
|
56
60
|
*/
|
|
57
61
|
get suggestionsPosition(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Gets the current stopTypingDelay from options or returns the default value `3000`.
|
|
64
|
+
*/
|
|
65
|
+
get stopTypingDelay(): number;
|
|
58
66
|
/**
|
|
59
67
|
* Gets the text area component.
|
|
60
68
|
*/
|
|
@@ -79,55 +87,39 @@ export declare class ChatState {
|
|
|
79
87
|
* Sets the current input value and requests host update.
|
|
80
88
|
*/
|
|
81
89
|
set inputValue(value: string);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
constructor(chat: IgcChatComponent);
|
|
87
|
-
/**
|
|
88
|
-
* Emits a custom event from the host component.
|
|
89
|
-
* @param name Event name (key of IgcChatComponentEventMap)
|
|
90
|
-
* @param args Event detail or options
|
|
91
|
-
* @returns true if event was not canceled, false otherwise
|
|
92
|
-
*/
|
|
90
|
+
get hasInputValue(): boolean;
|
|
91
|
+
get hasInputAttachments(): boolean;
|
|
92
|
+
constructor(chat: IgcChatComponent, contextUpdateFn: () => unknown, userInputContextUpdateFn: () => unknown);
|
|
93
|
+
isCurrentUserMessage(message?: IgcMessage): boolean;
|
|
93
94
|
emitEvent(name: keyof IgcChatComponentEventMap, args?: any): boolean;
|
|
94
|
-
/**
|
|
95
|
-
* Handles input text changes.
|
|
96
|
-
* Updates internal inputValue and emits 'igcInputChange' event.
|
|
97
|
-
* @param value New input value
|
|
98
|
-
*/
|
|
99
|
-
handleInputChange(value: string): void;
|
|
100
95
|
/**
|
|
101
96
|
* Adds a new chat message.
|
|
102
97
|
* Emits 'igcMessageCreated' event which can be canceled to prevent adding.
|
|
103
98
|
* Clears input value and attachments on success.
|
|
104
99
|
* @param message Partial message object with optional id, sender, timestamp
|
|
105
100
|
*/
|
|
106
|
-
addMessage(message:
|
|
107
|
-
id?: string;
|
|
108
|
-
text: string;
|
|
109
|
-
sender?: string;
|
|
110
|
-
timestamp?: Date;
|
|
111
|
-
attachments?: IgcMessageAttachment[];
|
|
112
|
-
}): void;
|
|
101
|
+
addMessage(message: Partial<IgcMessage>): void;
|
|
113
102
|
/**
|
|
114
103
|
* Adds files as attachments to the input.
|
|
115
104
|
* Emits 'igcAttachmentChange' event which can be canceled to prevent adding.
|
|
116
105
|
* @param files Array of File objects to attach
|
|
117
106
|
*/
|
|
118
107
|
attachFiles(files: File[]): void;
|
|
108
|
+
isImageAttachment(attachment: IgcMessageAttachment): boolean;
|
|
109
|
+
handleKeyDown: (e: KeyboardEvent) => void;
|
|
110
|
+
sendMessage: () => void;
|
|
119
111
|
/**
|
|
120
112
|
* Removes an attachment by index.
|
|
121
113
|
* Emits 'igcAttachmentChange' event which can be canceled to prevent removal.
|
|
122
114
|
* @param index Index of the attachment to remove
|
|
123
115
|
*/
|
|
124
|
-
removeAttachment(index: number)
|
|
116
|
+
removeAttachment: (index: number) => void;
|
|
125
117
|
/**
|
|
126
118
|
* Handles when a suggestion is clicked.
|
|
127
119
|
* Adds the suggestion as a new message and focuses the text area.
|
|
128
120
|
* @param suggestion The suggestion string clicked
|
|
129
121
|
*/
|
|
130
|
-
handleSuggestionClick(suggestion: string)
|
|
122
|
+
handleSuggestionClick: (suggestion: string) => void;
|
|
131
123
|
/**
|
|
132
124
|
* Updates the chat options partially.
|
|
133
125
|
* @param options Partial options to merge with current options
|
|
@@ -138,18 +130,4 @@ export declare class ChatState {
|
|
|
138
130
|
* Parses the acceptedFiles string option into extensions, mimeTypes, and wildcard types.
|
|
139
131
|
*/
|
|
140
132
|
updateAcceptedTypesCache(): void;
|
|
141
|
-
/**
|
|
142
|
-
* Checks if a file's type or extension is accepted by the chat's acceptedFiles setting.
|
|
143
|
-
* @param file File object to check
|
|
144
|
-
* @param type Optional MIME type override if no file provided
|
|
145
|
-
* @returns True if accepted, false otherwise
|
|
146
|
-
*/
|
|
147
|
-
isFileTypeAccepted(file: File, type?: string): boolean;
|
|
148
|
-
/**
|
|
149
|
-
* Checks if a slot is empty.
|
|
150
|
-
* @param name Slot name to check
|
|
151
|
-
* @returns True if the slot has content, false otherwise
|
|
152
|
-
*/
|
|
153
|
-
hasSlotContent(name: string): boolean;
|
|
154
133
|
}
|
|
155
|
-
export declare function createChatState(host: IgcChatComponent): ChatState;
|