igniteui-webcomponents 6.2.0 → 6.3.0-RC.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/components/accordion/accordion.js +4 -8
- package/components/accordion/accordion.js.map +1 -1
- package/components/accordion/themes/accordion.base.css.js +1 -1
- package/components/accordion/themes/accordion.base.css.js.map +1 -1
- package/components/avatar/avatar.js +3 -4
- package/components/avatar/avatar.js.map +1 -1
- package/components/badge/badge.js +3 -4
- package/components/badge/badge.js.map +1 -1
- package/components/banner/banner.js +3 -4
- package/components/banner/banner.js.map +1 -1
- package/components/banner/themes/banner.base.css.js +1 -1
- package/components/banner/themes/banner.base.css.js.map +1 -1
- package/components/banner/themes/shared/banner.bootstrap.css.js +1 -1
- package/components/banner/themes/shared/banner.bootstrap.css.js.map +1 -1
- package/components/banner/themes/shared/banner.fluent.css.js +1 -1
- package/components/banner/themes/shared/banner.fluent.css.js.map +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js +1 -1
- package/components/banner/themes/shared/banner.indigo.css.js.map +1 -1
- package/components/banner/themes/shared/banner.material.css.js +1 -1
- package/components/banner/themes/shared/banner.material.css.js.map +1 -1
- package/components/button/button-base.js +1 -1
- package/components/button/button-base.js.map +1 -1
- package/components/button/button.js +3 -4
- package/components/button/button.js.map +1 -1
- package/components/button/icon-button.js +3 -4
- package/components/button/icon-button.js.map +1 -1
- package/components/button/themes/button/button.base.css.js +1 -1
- package/components/button/themes/button/button.base.css.js.map +1 -1
- package/components/button/themes/button/shared/button.common.css.js +1 -1
- package/components/button/themes/button/shared/button.common.css.js.map +1 -1
- package/components/button/themes/button/shared/button.fluent.css.js +1 -1
- package/components/button/themes/button/shared/button.fluent.css.js.map +1 -1
- package/components/button/themes/button/shared/button.indigo.css.js +1 -1
- package/components/button/themes/button/shared/button.indigo.css.js.map +1 -1
- package/components/button/themes/icon-button/icon-button.base.css.js +1 -1
- package/components/button/themes/icon-button/icon-button.base.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.bootstrap.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.bootstrap.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.fluent.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.fluent.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.indigo.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.indigo.css.js.map +1 -1
- package/components/button/themes/icon-button/shared/icon-button.material.css.js +1 -1
- package/components/button/themes/icon-button/shared/icon-button.material.css.js.map +1 -1
- package/components/button-group/button-group.js +3 -4
- package/components/button-group/button-group.js.map +1 -1
- package/components/button-group/themes/shared/button/button.bootstrap.css.js +1 -1
- package/components/button-group/themes/shared/button/button.bootstrap.css.js.map +1 -1
- package/components/button-group/themes/shared/button/button.common.css.js +1 -1
- package/components/button-group/themes/shared/button/button.common.css.js.map +1 -1
- package/components/button-group/themes/shared/button/button.indigo.css.js +1 -1
- package/components/button-group/themes/shared/button/button.indigo.css.js.map +1 -1
- package/components/button-group/toggle-button.js +4 -3
- package/components/button-group/toggle-button.js.map +1 -1
- package/components/calendar/calendar.d.ts +1 -1
- package/components/calendar/calendar.js +3 -4
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.js +5 -6
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/months-view/months-view.js +5 -6
- package/components/calendar/months-view/months-view.js.map +1 -1
- package/components/calendar/themes/calendar.base.css.js +1 -1
- package/components/calendar/themes/calendar.base.css.js.map +1 -1
- package/components/calendar/themes/days-view.base.css.js +1 -1
- package/components/calendar/themes/days-view.base.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/days-view.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js +1 -1
- package/components/calendar/themes/shared/bootstrap/year-month-view.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/shared/fluent/calendar.fluent.css.js +1 -1
- package/components/calendar/themes/shared/fluent/calendar.fluent.css.js.map +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/shared/indigo/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/shared/material/calendar.material.css.js +1 -1
- package/components/calendar/themes/shared/material/calendar.material.css.js.map +1 -1
- package/components/calendar/themes/year-month-view.base.css.js +1 -1
- package/components/calendar/themes/year-month-view.base.css.js.map +1 -1
- package/components/calendar/years-view/years-view.js +5 -6
- package/components/calendar/years-view/years-view.js.map +1 -1
- package/components/card/card.actions.js +3 -4
- package/components/card/card.actions.js.map +1 -1
- package/components/card/card.content.js +3 -4
- package/components/card/card.content.js.map +1 -1
- package/components/card/card.header.js +3 -4
- package/components/card/card.header.js.map +1 -1
- package/components/card/card.js +3 -4
- package/components/card/card.js.map +1 -1
- package/components/card/card.media.js +3 -4
- package/components/card/card.media.js.map +1 -1
- package/components/card/themes/card.actions.base.css.js +1 -1
- package/components/card/themes/card.actions.base.css.js.map +1 -1
- package/components/card/themes/card.content.base.css.js +1 -1
- package/components/card/themes/card.content.base.css.js.map +1 -1
- package/components/card/themes/card.header.base.css.js +1 -1
- package/components/card/themes/card.header.base.css.js.map +1 -1
- package/components/card/themes/shared/actions/card.actions.bootstrap.css.js +1 -1
- package/components/card/themes/shared/actions/card.actions.bootstrap.css.js.map +1 -1
- package/components/card/themes/shared/actions/card.actions.indigo.css.js +1 -1
- package/components/card/themes/shared/actions/card.actions.indigo.css.js.map +1 -1
- package/components/card/themes/shared/container/card.bootstrap.css.js +1 -1
- package/components/card/themes/shared/container/card.bootstrap.css.js.map +1 -1
- package/components/card/themes/shared/container/card.indigo.css.js +1 -1
- package/components/card/themes/shared/container/card.indigo.css.js.map +1 -1
- package/components/card/themes/shared/content/card.content.bootstrap.css.js +1 -1
- package/components/card/themes/shared/content/card.content.bootstrap.css.js.map +1 -1
- package/components/card/themes/shared/header/card.header.fluent.css.js +1 -1
- package/components/card/themes/shared/header/card.header.fluent.css.js.map +1 -1
- package/components/card/themes/shared/header/card.header.indigo.css.js +1 -1
- package/components/card/themes/shared/header/card.header.indigo.css.js.map +1 -1
- package/components/carousel/carousel-indicator-container.js +3 -4
- package/components/carousel/carousel-indicator-container.js.map +1 -1
- package/components/carousel/carousel-indicator.js +3 -4
- package/components/carousel/carousel-indicator.js.map +1 -1
- package/components/carousel/carousel-slide.js +3 -4
- package/components/carousel/carousel-slide.js.map +1 -1
- package/components/carousel/carousel.js +3 -7
- package/components/carousel/carousel.js.map +1 -1
- package/components/carousel/themes/carousel.base.css.js +1 -1
- package/components/carousel/themes/carousel.base.css.js.map +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js +1 -1
- package/components/carousel/themes/shared/carousel.indigo.css.js.map +1 -1
- package/components/chat/chat-input.d.ts +91 -0
- package/components/chat/chat-input.js +263 -0
- package/components/chat/chat-input.js.map +1 -0
- package/components/chat/chat-message.d.ts +48 -0
- package/components/chat/chat-message.js +199 -0
- package/components/chat/chat-message.js.map +1 -0
- package/components/chat/chat-state.d.ts +130 -0
- package/components/chat/chat-state.js +180 -0
- package/components/chat/chat-state.js.map +1 -0
- package/components/chat/chat.d.ts +151 -0
- package/components/chat/chat.js +325 -0
- package/components/chat/chat.js.map +1 -0
- package/components/chat/extras/markdown-renderer.d.ts +26 -0
- package/components/chat/extras/markdown-renderer.js +49 -0
- package/components/chat/extras/markdown-renderer.js.map +1 -0
- package/components/chat/message-attachments.d.ts +56 -0
- package/components/chat/message-attachments.js +132 -0
- package/components/chat/message-attachments.js.map +1 -0
- package/components/chat/themes/attachments.d.ts +2 -0
- package/components/chat/themes/attachments.js +14 -0
- package/components/chat/themes/attachments.js.map +1 -0
- package/components/chat/themes/chat.base.css.d.ts +1 -0
- package/components/chat/themes/chat.base.css.js +3 -0
- package/components/chat/themes/chat.base.css.js.map +1 -0
- package/components/chat/themes/dark/chat.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.bootstrap.css.js +3 -0
- package/components/chat/themes/dark/chat.bootstrap.css.js.map +1 -0
- package/components/chat/themes/dark/chat.fluent.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.fluent.css.js +3 -0
- package/components/chat/themes/dark/chat.fluent.css.js.map +1 -0
- package/components/chat/themes/dark/chat.indigo.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.indigo.css.js +3 -0
- package/components/chat/themes/dark/chat.indigo.css.js.map +1 -0
- package/components/chat/themes/dark/chat.material.css.d.ts +1 -0
- package/components/chat/themes/dark/chat.material.css.js +3 -0
- package/components/chat/themes/dark/chat.material.css.js.map +1 -0
- package/components/chat/themes/input.base.css.d.ts +1 -0
- package/components/chat/themes/input.base.css.js +3 -0
- package/components/chat/themes/input.base.css.js.map +1 -0
- package/components/chat/themes/input.d.ts +2 -0
- package/components/chat/themes/input.js +35 -0
- package/components/chat/themes/input.js.map +1 -0
- package/components/chat/themes/light/chat.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/light/chat.bootstrap.css.js +3 -0
- package/components/chat/themes/light/chat.bootstrap.css.js.map +1 -0
- package/components/chat/themes/light/chat.fluent.css.d.ts +1 -0
- package/components/chat/themes/light/chat.fluent.css.js +3 -0
- package/components/chat/themes/light/chat.fluent.css.js.map +1 -0
- package/components/chat/themes/light/chat.indigo.css.d.ts +1 -0
- package/components/chat/themes/light/chat.indigo.css.js +3 -0
- package/components/chat/themes/light/chat.indigo.css.js.map +1 -0
- package/components/chat/themes/light/chat.material.css.d.ts +1 -0
- package/components/chat/themes/light/chat.material.css.js +3 -0
- package/components/chat/themes/light/chat.material.css.js.map +1 -0
- package/components/chat/themes/light/chat.shared.css.d.ts +1 -0
- package/components/chat/themes/light/chat.shared.css.js +3 -0
- package/components/chat/themes/light/chat.shared.css.js.map +1 -0
- package/components/chat/themes/message-attachments.base.css.d.ts +1 -0
- package/components/chat/themes/message-attachments.base.css.js +3 -0
- package/components/chat/themes/message-attachments.base.css.js.map +1 -0
- package/components/chat/themes/message.base.css.d.ts +1 -0
- package/components/chat/themes/message.base.css.js +3 -0
- package/components/chat/themes/message.base.css.js.map +1 -0
- package/components/chat/themes/message.d.ts +2 -0
- package/components/chat/themes/message.js +28 -0
- package/components/chat/themes/message.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.bootstrap.css.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.common.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.common.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.common.css.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.fluent.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.fluent.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.fluent.css.js.map +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/chat-message/chat-message.indigo.css.js +3 -0
- package/components/chat/themes/shared/chat-message/chat-message.indigo.css.js.map +1 -0
- package/components/chat/themes/shared/chat.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.bootstrap.css.js +3 -0
- package/components/chat/themes/shared/chat.bootstrap.css.js.map +1 -0
- package/components/chat/themes/shared/chat.common.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.common.css.js +3 -0
- package/components/chat/themes/shared/chat.common.css.js.map +1 -0
- package/components/chat/themes/shared/chat.fluent.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.fluent.css.js +3 -0
- package/components/chat/themes/shared/chat.fluent.css.js.map +1 -0
- package/components/chat/themes/shared/chat.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/chat.indigo.css.js +3 -0
- package/components/chat/themes/shared/chat.indigo.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.bootstrap.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.bootstrap.css.js +3 -0
- package/components/chat/themes/shared/input/input.bootstrap.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.common.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.common.css.js +3 -0
- package/components/chat/themes/shared/input/input.common.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.fluent.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.fluent.css.js +3 -0
- package/components/chat/themes/shared/input/input.fluent.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.indigo.css.js +3 -0
- package/components/chat/themes/shared/input/input.indigo.css.js.map +1 -0
- package/components/chat/themes/shared/input/input.material.css.d.ts +1 -0
- package/components/chat/themes/shared/input/input.material.css.js +3 -0
- package/components/chat/themes/shared/input/input.material.css.js.map +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.common.css.d.ts +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js +3 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.common.css.js.map +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.d.ts +1 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js +3 -0
- package/components/chat/themes/shared/message-attachments/message-attachments.indigo.css.js.map +1 -0
- package/components/chat/themes/themes.d.ts +2 -0
- package/components/chat/themes/themes.js +49 -0
- package/components/chat/themes/themes.js.map +1 -0
- package/components/chat/types.d.ts +149 -0
- package/components/chat/types.js +2 -0
- package/components/chat/types.js.map +1 -0
- package/components/chat/utils.d.ts +16 -0
- package/components/chat/utils.js +82 -0
- package/components/chat/utils.js.map +1 -0
- package/components/checkbox/checkbox-base.d.ts +1 -1
- package/components/checkbox/checkbox.js +3 -4
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.js +3 -4
- package/components/checkbox/switch.js.map +1 -1
- package/components/checkbox/themes/checkbox.base.css.js +1 -1
- package/components/checkbox/themes/checkbox.base.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/dark/switch/switch.material.css.js +1 -1
- package/components/checkbox/themes/dark/switch/switch.material.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/light/switch/switch.material.css.js +1 -1
- package/components/checkbox/themes/light/switch/switch.material.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.indigo.css.js.map +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js +1 -1
- package/components/checkbox/themes/shared/checkbox/checkbox.material.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.bootstrap.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.common.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.common.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.fluent.css.js.map +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js +1 -1
- package/components/checkbox/themes/shared/switch/switch.indigo.css.js.map +1 -1
- package/components/checkbox/themes/switch.base.css.js +1 -1
- package/components/checkbox/themes/switch.base.css.js.map +1 -1
- package/components/chip/chip.js +3 -4
- package/components/chip/chip.js.map +1 -1
- package/components/chip/themes/chip.base.css.js +1 -1
- package/components/chip/themes/chip.base.css.js.map +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js +1 -1
- package/components/chip/themes/shared/chip.indigo.css.js.map +1 -1
- package/components/combo/combo-header.js +3 -4
- package/components/combo/combo-header.js.map +1 -1
- package/components/combo/combo-item.js +3 -4
- package/components/combo/combo-item.js.map +1 -1
- package/components/combo/combo-list.js +2 -3
- package/components/combo/combo-list.js.map +1 -1
- package/components/combo/combo.js +4 -3
- package/components/combo/combo.js.map +1 -1
- package/components/combo/controllers/navigation.js +1 -1
- package/components/combo/controllers/navigation.js.map +1 -1
- package/components/combo/themes/combo-item.base.css.js +1 -1
- package/components/combo/themes/combo-item.base.css.js.map +1 -1
- package/components/combo/themes/combo.base.css.js +1 -1
- package/components/combo/themes/combo.base.css.js.map +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js +1 -1
- package/components/combo/themes/shared/combo.bootstrap.css.js.map +1 -1
- package/components/combo/themes/shared/combo.common.css.js +1 -1
- package/components/combo/themes/shared/combo.common.css.js.map +1 -1
- package/components/combo/themes/shared/combo.fluent.css.js +1 -1
- package/components/combo/themes/shared/combo.fluent.css.js.map +1 -1
- package/components/combo/themes/shared/combo.indigo.css.js +1 -1
- package/components/combo/themes/shared/combo.indigo.css.js.map +1 -1
- package/components/combo/themes/shared/combo.material.css.js +1 -1
- package/components/combo/themes/shared/combo.material.css.js.map +1 -1
- package/components/common/context.d.ts +8 -1
- package/components/common/context.js +3 -1
- package/components/common/context.js.map +1 -1
- package/components/common/controllers/focus-ring.js +5 -5
- package/components/common/controllers/focus-ring.js.map +1 -1
- package/components/common/controllers/key-bindings.js +7 -6
- package/components/common/controllers/key-bindings.js.map +1 -1
- package/components/common/definitions/defineAllComponents.js +2 -0
- package/components/common/definitions/defineAllComponents.js.map +1 -1
- package/components/common/i18n/chat.resources.d.ts +11 -0
- package/components/common/i18n/chat.resources.js +11 -0
- package/components/common/i18n/chat.resources.js.map +1 -0
- package/components/common/mixins/forms/associated.js +1 -1
- package/components/common/mixins/forms/associated.js.map +1 -1
- package/components/common/mixins/forms/form-value.js +1 -1
- package/components/common/mixins/forms/form-value.js.map +1 -1
- package/components/common/part-map.d.ts +1 -1
- package/components/common/util.d.ts +22 -0
- package/components/common/util.js +84 -2
- package/components/common/util.js.map +1 -1
- package/components/date-picker/date-picker.js +7 -6
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/date-picker.base.css.js +1 -1
- package/components/date-picker/themes/date-picker.base.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.common.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.common.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/shared/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/shared/date-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js +1 -1
- package/components/date-range-picker/date-range-picker.base.css.js.map +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +1 -1
- package/components/date-range-picker/date-range-picker.js +5 -5
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js +1 -1
- package/components/date-range-picker/predefined-ranges-area.base.css.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.js +3 -4
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.bootstrap.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.common.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.common.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.fluent.css.js.map +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/shared/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-time-input/date-time-input.js +3 -4
- package/components/date-time-input/date-time-input.js.map +1 -1
- package/components/date-time-input/date-util.js +11 -11
- package/components/date-time-input/date-util.js.map +1 -1
- package/components/dialog/dialog.js +3 -4
- package/components/dialog/dialog.js.map +1 -1
- package/components/dialog/themes/dialog.base.css.js +1 -1
- package/components/dialog/themes/dialog.base.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.bootstrap.css.js +1 -1
- package/components/dialog/themes/shared/dialog.bootstrap.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.common.css.js +1 -1
- package/components/dialog/themes/shared/dialog.common.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.fluent.css.js +1 -1
- package/components/dialog/themes/shared/dialog.fluent.css.js.map +1 -1
- package/components/dialog/themes/shared/dialog.indigo.css.js +1 -1
- package/components/dialog/themes/shared/dialog.indigo.css.js.map +1 -1
- package/components/divider/divider.js +3 -4
- package/components/divider/divider.js.map +1 -1
- package/components/dropdown/dropdown-group.js +3 -4
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/dropdown/dropdown-header.js +3 -4
- package/components/dropdown/dropdown-header.js.map +1 -1
- package/components/dropdown/dropdown-item.js +3 -4
- package/components/dropdown/dropdown-item.js.map +1 -1
- package/components/dropdown/dropdown.js +4 -3
- package/components/dropdown/dropdown.js.map +1 -1
- package/components/dropdown/themes/dropdown-group.base.css.js +1 -1
- package/components/dropdown/themes/dropdown-group.base.css.js.map +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js +1 -1
- package/components/dropdown/themes/dropdown-item.base.css.js.map +1 -1
- package/components/dropdown/themes/shared/dropdown.indigo.css.js +1 -1
- package/components/dropdown/themes/shared/dropdown.indigo.css.js.map +1 -1
- package/components/dropdown/themes/shared/group/dropdown-group.fluent.css.js +1 -1
- package/components/dropdown/themes/shared/group/dropdown-group.fluent.css.js.map +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.common.css.js +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.common.css.js.map +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.indigo.css.js +1 -1
- package/components/dropdown/themes/shared/header/dropdown-header.indigo.css.js.map +1 -1
- package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js +1 -1
- package/components/dropdown/themes/shared/item/dropdown-item.indigo.css.js.map +1 -1
- package/components/expansion-panel/expansion-panel.js +3 -5
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/expansion-panel/themes/expansion-panel.base.css.js +1 -1
- package/components/expansion-panel/themes/expansion-panel.base.css.js.map +1 -1
- package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js +1 -1
- package/components/expansion-panel/themes/shared/expansion-panel.indigo.css.js.map +1 -1
- package/components/file-input/file-input.d.ts +0 -4
- package/components/file-input/file-input.js +15 -19
- package/components/file-input/file-input.js.map +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js +1 -1
- package/components/file-input/themes/shared/file-input.bootstrap.css.js.map +1 -1
- package/components/file-input/themes/shared/file-input.material.css.js +1 -1
- package/components/file-input/themes/shared/file-input.material.css.js.map +1 -1
- package/components/focus-trap/focus-trap.js +7 -8
- package/components/focus-trap/focus-trap.js.map +1 -1
- package/components/icon/icon-references.js +208 -0
- package/components/icon/icon-references.js.map +1 -1
- package/components/icon/icon-state.broadcast.js +1 -1
- package/components/icon/icon-state.broadcast.js.map +1 -1
- package/components/icon/icon.js +3 -4
- package/components/icon/icon.js.map +1 -1
- package/components/icon/internal-icons-lib.js +105 -0
- package/components/icon/internal-icons-lib.js.map +1 -1
- package/components/input/input-base.js +4 -3
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +0 -4
- package/components/input/input.js +11 -14
- package/components/input/input.js.map +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js +1 -1
- package/components/input/themes/shared/input.bootstrap.css.js.map +1 -1
- package/components/input/themes/shared/input.common.css.js +1 -1
- package/components/input/themes/shared/input.common.css.js.map +1 -1
- package/components/input/themes/shared/input.fluent.css.js +1 -1
- package/components/input/themes/shared/input.fluent.css.js.map +1 -1
- package/components/input/themes/shared/input.indigo.css.js +1 -1
- package/components/input/themes/shared/input.indigo.css.js.map +1 -1
- package/components/input/themes/shared/input.material.css.js +1 -1
- package/components/input/themes/shared/input.material.css.js.map +1 -1
- package/components/list/list-header.js +3 -4
- package/components/list/list-header.js.map +1 -1
- package/components/list/list-item.js +3 -4
- package/components/list/list-item.js.map +1 -1
- package/components/list/list.js +3 -4
- package/components/list/list.js.map +1 -1
- package/components/list/themes/dark/container/list.indigo.css.js +1 -1
- package/components/list/themes/dark/container/list.indigo.css.js.map +1 -1
- package/components/list/themes/dark/header/list-header.indigo.css.js +1 -1
- package/components/list/themes/dark/header/list-header.indigo.css.js.map +1 -1
- package/components/list/themes/dark/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/dark/item/list-item.indigo.css.js.map +1 -1
- package/components/list/themes/header.base.css.js +1 -1
- package/components/list/themes/header.base.css.js.map +1 -1
- package/components/list/themes/item.base.css.js +1 -1
- package/components/list/themes/item.base.css.js.map +1 -1
- package/components/list/themes/light/container/list.indigo.css.js +1 -1
- package/components/list/themes/light/container/list.indigo.css.js.map +1 -1
- package/components/list/themes/light/header/list-header.indigo.css.js +1 -1
- package/components/list/themes/light/header/list-header.indigo.css.js.map +1 -1
- package/components/list/themes/light/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/light/item/list-item.indigo.css.js.map +1 -1
- package/components/list/themes/shared/header/list-header.indigo.css.js +1 -1
- package/components/list/themes/shared/header/list-header.indigo.css.js.map +1 -1
- package/components/list/themes/shared/item/list-item.indigo.css.js +1 -1
- package/components/list/themes/shared/item/list-item.indigo.css.js.map +1 -1
- package/components/mask-input/mask-input.js +2 -3
- package/components/mask-input/mask-input.js.map +1 -1
- package/components/nav-drawer/nav-drawer-header-item.js +3 -4
- package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer-item.js +3 -4
- package/components/nav-drawer/nav-drawer-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer.js +3 -4
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/container/nav-drawer.material.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/header-item/header-item.material.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.bootstrap.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.fluent.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.fluent.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.indigo.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.indigo.css.js.map +1 -1
- package/components/nav-drawer/themes/shared/item/item.material.css.js +1 -1
- package/components/nav-drawer/themes/shared/item/item.material.css.js.map +1 -1
- package/components/navbar/navbar.js +3 -4
- package/components/navbar/navbar.js.map +1 -1
- package/components/navbar/themes/navbar.base.css.js +1 -1
- package/components/navbar/themes/navbar.base.css.js.map +1 -1
- package/components/navbar/themes/shared/navbar.bootstrap.css.js +1 -1
- package/components/navbar/themes/shared/navbar.bootstrap.css.js.map +1 -1
- package/components/navbar/themes/shared/navbar.indigo.css.js +1 -1
- package/components/navbar/themes/shared/navbar.indigo.css.js.map +1 -1
- package/components/popover/popover.js +9 -10
- package/components/popover/popover.js.map +1 -1
- package/components/progress/circular-gradient.js +2 -3
- package/components/progress/circular-gradient.js.map +1 -1
- package/components/progress/circular-progress.js +3 -4
- package/components/progress/circular-progress.js.map +1 -1
- package/components/progress/linear-progress.js +3 -4
- package/components/progress/linear-progress.js.map +1 -1
- package/components/progress/themes/linear/shared/linear.progress.fluent.css.js +1 -1
- package/components/progress/themes/linear/shared/linear.progress.fluent.css.js.map +1 -1
- package/components/progress/themes/linear/shared/linear.progress.indigo.css.js +1 -1
- package/components/progress/themes/linear/shared/linear.progress.indigo.css.js.map +1 -1
- package/components/radio/radio.js +3 -4
- package/components/radio/radio.js.map +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js +1 -1
- package/components/radio/themes/shared/radio.bootstrap.css.js.map +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js +1 -1
- package/components/radio/themes/shared/radio.fluent.css.js.map +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js +1 -1
- package/components/radio/themes/shared/radio.indigo.css.js.map +1 -1
- package/components/radio/themes/shared/radio.material.css.js +1 -1
- package/components/radio/themes/shared/radio.material.css.js.map +1 -1
- package/components/radio-group/radio-group.js +3 -4
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/radio-group/themes/radio-group.base.css.js +1 -1
- package/components/radio-group/themes/radio-group.base.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.bootstrap.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.bootstrap.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.fluent.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.fluent.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.indigo.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.indigo.css.js.map +1 -1
- package/components/radio-group/themes/shared/radio-group.material.css.js +1 -1
- package/components/radio-group/themes/shared/radio-group.material.css.js.map +1 -1
- package/components/rating/rating-symbol.js +3 -4
- package/components/rating/rating-symbol.js.map +1 -1
- package/components/rating/rating.js +3 -5
- package/components/rating/rating.js.map +1 -1
- package/components/rating/themes/rating.base.css.js +1 -1
- package/components/rating/themes/rating.base.css.js.map +1 -1
- package/components/rating/themes/shared/rating.indigo.css.js +1 -1
- package/components/rating/themes/shared/rating.indigo.css.js.map +1 -1
- package/components/resize-container/resize-container.d.ts +1 -1
- package/components/resize-container/resize-container.js +3 -4
- package/components/resize-container/resize-container.js.map +1 -1
- package/components/ripple/ripple.js +3 -4
- package/components/ripple/ripple.js.map +1 -1
- package/components/select/select-group.js +3 -4
- package/components/select/select-group.js.map +1 -1
- package/components/select/select-header.js +3 -4
- package/components/select/select-header.js.map +1 -1
- package/components/select/select-item.js +3 -4
- package/components/select/select-item.js.map +1 -1
- package/components/select/select.js +4 -4
- package/components/select/select.js.map +1 -1
- package/components/select/themes/dark/select.bootstrap.css.js +1 -1
- package/components/select/themes/dark/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/light/select.bootstrap.css.js +1 -1
- package/components/select/themes/light/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js +1 -1
- package/components/select/themes/shared/select.bootstrap.css.js.map +1 -1
- package/components/select/themes/shared/select.common.css.js +1 -1
- package/components/select/themes/shared/select.common.css.js.map +1 -1
- package/components/select/themes/shared/select.fluent.css.js +1 -1
- package/components/select/themes/shared/select.fluent.css.js.map +1 -1
- package/components/select/themes/shared/select.indigo.css.js +1 -1
- package/components/select/themes/shared/select.indigo.css.js.map +1 -1
- package/components/select/themes/shared/select.material.css.js +1 -1
- package/components/select/themes/shared/select.material.css.js.map +1 -1
- package/components/slider/range-slider.js +2 -3
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.js +1 -2
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider-label.js +7 -8
- package/components/slider/slider-label.js.map +1 -1
- package/components/slider/slider.js +2 -3
- package/components/slider/slider.js.map +1 -1
- package/components/slider/themes/shared/slider.common.css.js +1 -1
- package/components/slider/themes/shared/slider.common.css.js.map +1 -1
- package/components/slider/themes/slider.base.css.js +1 -1
- package/components/slider/themes/slider.base.css.js.map +1 -1
- package/components/snackbar/snackbar.js +3 -4
- package/components/snackbar/snackbar.js.map +1 -1
- package/components/snackbar/themes/shared/snackbar.indigo.css.js +1 -1
- package/components/snackbar/themes/shared/snackbar.indigo.css.js.map +1 -1
- package/components/snackbar/themes/snackbar.base.css.js +1 -1
- package/components/snackbar/themes/snackbar.base.css.js.map +1 -1
- package/components/stepper/step.d.ts +1 -1
- package/components/stepper/step.js +3 -4
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/stepper.js +3 -4
- package/components/stepper/stepper.js.map +1 -1
- package/components/tabs/tab-dom.js +1 -1
- package/components/tabs/tab-dom.js.map +1 -1
- package/components/tabs/tab.js +4 -5
- package/components/tabs/tab.js.map +1 -1
- package/components/tabs/tabs.js +3 -5
- package/components/tabs/tabs.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.bootstrap.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.fluent.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.indigo.css.js.map +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js +1 -1
- package/components/tabs/themes/shared/tab/tab.material.css.js.map +1 -1
- package/components/textarea/textarea.d.ts +1 -1
- package/components/textarea/textarea.js +4 -3
- package/components/textarea/textarea.js.map +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js +1 -1
- package/components/textarea/themes/shared/textarea.bootstrap.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js +1 -1
- package/components/textarea/themes/shared/textarea.common.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js +1 -1
- package/components/textarea/themes/shared/textarea.fluent.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js +1 -1
- package/components/textarea/themes/shared/textarea.indigo.css.js.map +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js +1 -1
- package/components/textarea/themes/shared/textarea.material.css.js.map +1 -1
- package/components/textarea/themes/textarea.base.css.js +1 -1
- package/components/textarea/themes/textarea.base.css.js.map +1 -1
- package/components/tile-manager/resize-state.js +1 -1
- package/components/tile-manager/resize-state.js.map +1 -1
- package/components/tile-manager/themes/tile-manager.base.css.js +1 -1
- package/components/tile-manager/themes/tile-manager.base.css.js.map +1 -1
- package/components/tile-manager/tile-manager.js +4 -3
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.js +3 -4
- package/components/tile-manager/tile.js.map +1 -1
- package/components/toast/themes/shared/toast.bootstrap.css.js +1 -1
- package/components/toast/themes/shared/toast.bootstrap.css.js.map +1 -1
- package/components/toast/themes/shared/toast.common.css.js +1 -1
- package/components/toast/themes/shared/toast.common.css.js.map +1 -1
- package/components/toast/themes/shared/toast.fluent.css.js +1 -1
- package/components/toast/themes/shared/toast.fluent.css.js.map +1 -1
- package/components/toast/themes/toast.base.css.js +1 -1
- package/components/toast/themes/toast.base.css.js.map +1 -1
- package/components/toast/toast.js +3 -4
- package/components/toast/toast.js.map +1 -1
- package/components/tooltip/controller.js +4 -4
- package/components/tooltip/controller.js.map +1 -1
- package/components/tooltip/themes/tooltip.base.css.js +1 -1
- package/components/tooltip/themes/tooltip.base.css.js.map +1 -1
- package/components/tooltip/tooltip.js +3 -4
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/themes/item.base.css.js +1 -1
- package/components/tree/themes/item.base.css.js.map +1 -1
- package/components/tree/themes/shared/item.common.css.js +1 -1
- package/components/tree/themes/shared/item.common.css.js.map +1 -1
- package/components/tree/themes/shared/item.indigo.css.js +1 -1
- package/components/tree/themes/shared/item.indigo.css.js.map +1 -1
- package/components/tree/themes/shared/item.material.css.js +1 -1
- package/components/tree/themes/shared/item.material.css.js.map +1 -1
- package/components/tree/tree-item.js +3 -4
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.js +7 -4
- package/components/tree/tree.js.map +1 -1
- package/components/tree/tree.navigation.js +3 -3
- package/components/tree/tree.navigation.js.map +1 -1
- package/components/tree/tree.selection.js +6 -2
- package/components/tree/tree.selection.js.map +1 -1
- package/components/validation-container/validation-container.js +3 -4
- package/components/validation-container/validation-container.js.map +1 -1
- package/custom-elements.json +38599 -36648
- package/extras/index.d.ts +1 -0
- package/extras/index.js +2 -0
- package/extras/index.js.map +1 -0
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +4 -0
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +6 -2
- package/themes/dark/bootstrap.css +1 -1
- package/themes/dark/fluent.css +1 -1
- package/themes/dark/indigo.css +1 -1
- package/themes/dark/material.css +1 -1
- package/themes/light/bootstrap.css +1 -1
- package/themes/light/fluent.css +1 -1
- package/themes/light/indigo.css +1 -1
- package/themes/light/material.css +1 -1
- package/web-types.json +2 -2
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { ContextProvider } from '@lit/context';
|
|
8
|
+
import { html, LitElement, nothing } from 'lit';
|
|
9
|
+
import { property, query } from 'lit/decorators.js';
|
|
10
|
+
import { cache } from 'lit/directives/cache.js';
|
|
11
|
+
import { repeat } from 'lit/directives/repeat.js';
|
|
12
|
+
import { addThemingController } from '../../theming/theming-controller.js';
|
|
13
|
+
import IgcButtonComponent from '../button/button.js';
|
|
14
|
+
import { chatContext, chatUserInputContext } from '../common/context.js';
|
|
15
|
+
import { addSlotController, setSlots } from '../common/controllers/slot.js';
|
|
16
|
+
import { registerComponent } from '../common/definitions/register.js';
|
|
17
|
+
import { IgcChatResourceStringEN } from '../common/i18n/chat.resources.js';
|
|
18
|
+
import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
|
|
19
|
+
import { isEmpty, last } from '../common/util.js';
|
|
20
|
+
import IgcIconComponent from '../icon/icon.js';
|
|
21
|
+
import IgcListComponent from '../list/list.js';
|
|
22
|
+
import IgcToastComponent from '../toast/toast.js';
|
|
23
|
+
import IgcTooltipComponent from '../tooltip/tooltip.js';
|
|
24
|
+
import IgcChatInputComponent from './chat-input.js';
|
|
25
|
+
import IgcChatMessageComponent from './chat-message.js';
|
|
26
|
+
import { ChatState } from './chat-state.js';
|
|
27
|
+
import { styles } from './themes/chat.base.css.js';
|
|
28
|
+
import { styles as shared } from './themes/shared/chat.common.css.js';
|
|
29
|
+
import { all } from './themes/themes.js';
|
|
30
|
+
const Slots = setSlots('prefix', 'title', 'actions', 'suggestions-header', 'suggestions', 'suggestions-actions', 'suggestion', 'empty-state');
|
|
31
|
+
export default class IgcChatComponent extends EventEmitterMixin(LitElement) {
|
|
32
|
+
static { this.tagName = 'igc-chat'; }
|
|
33
|
+
static { this.styles = [styles, shared]; }
|
|
34
|
+
static register() {
|
|
35
|
+
registerComponent(IgcChatComponent, IgcChatInputComponent, IgcChatMessageComponent, IgcButtonComponent, IgcIconComponent, IgcListComponent, IgcTooltipComponent, IgcToastComponent);
|
|
36
|
+
}
|
|
37
|
+
_updateContext() {
|
|
38
|
+
this._context.setValue(this._state, true);
|
|
39
|
+
}
|
|
40
|
+
_updateUserInputContext() {
|
|
41
|
+
this._userInputContext.setValue(this._state, true);
|
|
42
|
+
}
|
|
43
|
+
set messages(value) {
|
|
44
|
+
this._state.messages = value;
|
|
45
|
+
}
|
|
46
|
+
get messages() {
|
|
47
|
+
return this._state.messages;
|
|
48
|
+
}
|
|
49
|
+
set draftMessage(value) {
|
|
50
|
+
if (this._state && value) {
|
|
51
|
+
this._state.inputValue = value.text;
|
|
52
|
+
this._state.inputAttachments = value.attachments || [];
|
|
53
|
+
this.requestUpdate();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
get draftMessage() {
|
|
57
|
+
return {
|
|
58
|
+
text: this._state.inputValue,
|
|
59
|
+
attachments: this._state.inputAttachments,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
set options(value) {
|
|
63
|
+
this._state.options = value;
|
|
64
|
+
}
|
|
65
|
+
get options() {
|
|
66
|
+
return this._state.options;
|
|
67
|
+
}
|
|
68
|
+
constructor() {
|
|
69
|
+
super();
|
|
70
|
+
this._state = new ChatState(this, this._updateContext, this._updateUserInputContext);
|
|
71
|
+
this._defaults = Object.freeze({
|
|
72
|
+
typingIndicator: () => this._renderLoadingTemplate(),
|
|
73
|
+
suggestionPrefix: () => this._renderSuggestionPrefix(),
|
|
74
|
+
});
|
|
75
|
+
this._slots = addSlotController(this, {
|
|
76
|
+
slots: Slots,
|
|
77
|
+
});
|
|
78
|
+
this._context = new ContextProvider(this, {
|
|
79
|
+
context: chatContext,
|
|
80
|
+
initialValue: this._state,
|
|
81
|
+
});
|
|
82
|
+
this._userInputContext = new ContextProvider(this, {
|
|
83
|
+
context: chatUserInputContext,
|
|
84
|
+
initialValue: this._state,
|
|
85
|
+
});
|
|
86
|
+
this.resourceStrings = IgcChatResourceStringEN;
|
|
87
|
+
addThemingController(this, all);
|
|
88
|
+
}
|
|
89
|
+
_getRenderer(name) {
|
|
90
|
+
return this._state.options?.renderers
|
|
91
|
+
? (this._state.options.renderers[name] ?? this._defaults[name])
|
|
92
|
+
: this._defaults[name];
|
|
93
|
+
}
|
|
94
|
+
_handleSuggestionClick(text) {
|
|
95
|
+
this._state.addMessageWithEvent({ text });
|
|
96
|
+
this._input?.focusInput();
|
|
97
|
+
}
|
|
98
|
+
scrollToMessage(messageId) {
|
|
99
|
+
if (!isEmpty(this.messages)) {
|
|
100
|
+
const message = this.renderRoot.querySelector(`#message-${messageId}`);
|
|
101
|
+
message?.scrollIntoView({ block: 'end', inline: 'end' });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
addMessage(message) {
|
|
105
|
+
this._state.addMessage(message);
|
|
106
|
+
return last(this.messages);
|
|
107
|
+
}
|
|
108
|
+
updateMessage(message, data, scrollIntoView = false) {
|
|
109
|
+
Object.assign(message, data);
|
|
110
|
+
const messageElement = this.renderRoot.querySelector(`#message-${message.id}`);
|
|
111
|
+
if (messageElement) {
|
|
112
|
+
messageElement.requestUpdate();
|
|
113
|
+
if (scrollIntoView) {
|
|
114
|
+
messageElement.updateComplete.then(() => messageElement.scrollIntoView({ block: 'end', inline: 'end' }));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.requestUpdate('messages');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
updated(properties) {
|
|
122
|
+
if ((properties.has('messages') ||
|
|
123
|
+
this._typingIndicator ||
|
|
124
|
+
this._suggestionsContainer) &&
|
|
125
|
+
!this._state.disableAutoScroll) {
|
|
126
|
+
this._scrollToBottom();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
_scrollToBottom() {
|
|
130
|
+
if (isEmpty(this.messages))
|
|
131
|
+
return;
|
|
132
|
+
const lastMessage = this.renderRoot
|
|
133
|
+
.querySelectorAll(IgcChatMessageComponent.tagName)
|
|
134
|
+
.item(this.messages.length - 1);
|
|
135
|
+
const scrollTarget = this._typingIndicator ?? this._suggestionsContainer ?? lastMessage;
|
|
136
|
+
requestAnimationFrame(() => {
|
|
137
|
+
scrollTarget?.scrollIntoView({ block: 'end', inline: 'end' });
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
_renderHeader() {
|
|
141
|
+
const hasContent = this._slots.hasAssignedElements('prefix') ||
|
|
142
|
+
this._slots.hasAssignedElements('title') ||
|
|
143
|
+
this._slots.hasAssignedElements('actions') ||
|
|
144
|
+
this._state.options?.headerText;
|
|
145
|
+
return html `
|
|
146
|
+
<div part="header" ?hidden=${!hasContent}>
|
|
147
|
+
<slot
|
|
148
|
+
name="prefix"
|
|
149
|
+
part="prefix"
|
|
150
|
+
?hidden=${!this._slots.hasAssignedElements('prefix')}
|
|
151
|
+
></slot>
|
|
152
|
+
<slot name="title" part="title"
|
|
153
|
+
>${this._state.options?.headerText}</slot
|
|
154
|
+
>
|
|
155
|
+
<slot name="actions" part="actions"></slot>
|
|
156
|
+
</div>
|
|
157
|
+
`;
|
|
158
|
+
}
|
|
159
|
+
_renderMessages() {
|
|
160
|
+
const ctx = { defaults: this._defaults, instance: this };
|
|
161
|
+
return html `
|
|
162
|
+
<div part="message-list" tabindex="0">
|
|
163
|
+
${repeat(this._state.messages, (message) => message.id, (message) => {
|
|
164
|
+
return html `
|
|
165
|
+
<igc-chat-message
|
|
166
|
+
id=${`message-${message.id}`}
|
|
167
|
+
part="message-item"
|
|
168
|
+
.message=${message}
|
|
169
|
+
exportparts="message-container, message-text, message-attachments, message-actions, sent,
|
|
170
|
+
attachments-container, attachment, attachment-header, attachment-content, attachment-icon, file-name, actions: attachment-actions"
|
|
171
|
+
>
|
|
172
|
+
</igc-chat-message>
|
|
173
|
+
`;
|
|
174
|
+
})}
|
|
175
|
+
${this._state.options?.isTyping
|
|
176
|
+
? html `<div part="typing-indicator">
|
|
177
|
+
${this._getRenderer('typingIndicator')(ctx)}
|
|
178
|
+
</div>`
|
|
179
|
+
: nothing}
|
|
180
|
+
</div>
|
|
181
|
+
`;
|
|
182
|
+
}
|
|
183
|
+
_renderLoadingTemplate() {
|
|
184
|
+
return html `
|
|
185
|
+
<div part="typing-dot"></div>
|
|
186
|
+
<div part="typing-dot"></div>
|
|
187
|
+
<div part="typing-dot"></div>
|
|
188
|
+
<div part="typing-dot"></div>
|
|
189
|
+
`;
|
|
190
|
+
}
|
|
191
|
+
_renderSuggestionPrefix() {
|
|
192
|
+
return html `<igc-icon name="auto_suggest"></igc-icon>`;
|
|
193
|
+
}
|
|
194
|
+
_renderSuggestions() {
|
|
195
|
+
const hasContent = this._slots.hasAssignedElements('suggestions-header');
|
|
196
|
+
const suggestions = this._state.options?.suggestions ?? [];
|
|
197
|
+
const ctx = { instance: this };
|
|
198
|
+
return html `
|
|
199
|
+
<div part="suggestions-container">
|
|
200
|
+
<igc-list>
|
|
201
|
+
<igc-list-header part="suggestions-header">
|
|
202
|
+
<span ?hidden=${hasContent}>
|
|
203
|
+
${this.resourceStrings.suggestionsHeader}
|
|
204
|
+
</span>
|
|
205
|
+
<slot name="suggestions-header"></slot>
|
|
206
|
+
</igc-list-header>
|
|
207
|
+
<slot name="suggestions" part="suggestions">
|
|
208
|
+
${suggestions.map((suggestion) => html `
|
|
209
|
+
<slot name="suggestion" part="suggestion">
|
|
210
|
+
<igc-list-item
|
|
211
|
+
@click=${() => this._handleSuggestionClick(suggestion)}
|
|
212
|
+
>
|
|
213
|
+
<span slot="start">
|
|
214
|
+
${this._getRenderer('suggestionPrefix')(ctx)}
|
|
215
|
+
</span>
|
|
216
|
+
<span slot="title">${suggestion}</span>
|
|
217
|
+
</igc-list-item>
|
|
218
|
+
</slot>
|
|
219
|
+
`)}
|
|
220
|
+
</slot>
|
|
221
|
+
<slot name="suggestions-actions" part="suggestions-actions"></slot>
|
|
222
|
+
</igc-list>
|
|
223
|
+
</div>
|
|
224
|
+
`;
|
|
225
|
+
}
|
|
226
|
+
_renderEmptyState() {
|
|
227
|
+
return html `
|
|
228
|
+
<div part="empty-state">
|
|
229
|
+
<slot name="empty-state"></slot>
|
|
230
|
+
</div>
|
|
231
|
+
`;
|
|
232
|
+
}
|
|
233
|
+
render() {
|
|
234
|
+
const hasMessages = !isEmpty(this.messages);
|
|
235
|
+
const suggestions = isEmpty(this._state.options?.suggestions ?? [])
|
|
236
|
+
? nothing
|
|
237
|
+
: this._renderSuggestions();
|
|
238
|
+
return html `
|
|
239
|
+
<div
|
|
240
|
+
part="chat-container"
|
|
241
|
+
exportparts="
|
|
242
|
+
chat-container,
|
|
243
|
+
header,
|
|
244
|
+
prefix,
|
|
245
|
+
title,
|
|
246
|
+
actions,
|
|
247
|
+
chat-wrapper,
|
|
248
|
+
chat-messages,
|
|
249
|
+
empty-state,
|
|
250
|
+
suggestions-container,
|
|
251
|
+
suggestions-header,
|
|
252
|
+
suggestions,
|
|
253
|
+
suggestions-actions,
|
|
254
|
+
suggestion,
|
|
255
|
+
message-container,
|
|
256
|
+
message-list,
|
|
257
|
+
message-item,
|
|
258
|
+
message,
|
|
259
|
+
message-text,
|
|
260
|
+
message-attachments,
|
|
261
|
+
message-actions,
|
|
262
|
+
typing-indicator,
|
|
263
|
+
attachments-container,
|
|
264
|
+
attachment,
|
|
265
|
+
attachment-header,
|
|
266
|
+
attachment-content,
|
|
267
|
+
attachment-icon,
|
|
268
|
+
file-name,
|
|
269
|
+
attachment-actions,
|
|
270
|
+
sent
|
|
271
|
+
"
|
|
272
|
+
>
|
|
273
|
+
${this._renderHeader()}
|
|
274
|
+
|
|
275
|
+
<div part="chat-wrapper">
|
|
276
|
+
${cache(hasMessages || this._state.options?.isTyping
|
|
277
|
+
? this._renderMessages()
|
|
278
|
+
: this._renderEmptyState())}
|
|
279
|
+
${this._state.suggestionsPosition === 'below-messages'
|
|
280
|
+
? suggestions
|
|
281
|
+
: nothing}
|
|
282
|
+
</div>
|
|
283
|
+
|
|
284
|
+
<igc-chat-input
|
|
285
|
+
exportparts="
|
|
286
|
+
input-container,
|
|
287
|
+
input-wrapper,
|
|
288
|
+
attachments: input-attachments-container,
|
|
289
|
+
attachments-wrapper: input-attachment,
|
|
290
|
+
attachment-name: input-attachment-name,
|
|
291
|
+
text-input,
|
|
292
|
+
buttons-container: input-buttons-container,
|
|
293
|
+
upload-button,
|
|
294
|
+
send-button"
|
|
295
|
+
>
|
|
296
|
+
</igc-chat-input>
|
|
297
|
+
${this._state.suggestionsPosition === 'below-input'
|
|
298
|
+
? suggestions
|
|
299
|
+
: nothing}
|
|
300
|
+
</div>
|
|
301
|
+
`;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
__decorate([
|
|
305
|
+
query(IgcChatInputComponent.tagName)
|
|
306
|
+
], IgcChatComponent.prototype, "_input", void 0);
|
|
307
|
+
__decorate([
|
|
308
|
+
query('[part="typing-indicator"]')
|
|
309
|
+
], IgcChatComponent.prototype, "_typingIndicator", void 0);
|
|
310
|
+
__decorate([
|
|
311
|
+
query('[part="suggestions-container"]')
|
|
312
|
+
], IgcChatComponent.prototype, "_suggestionsContainer", void 0);
|
|
313
|
+
__decorate([
|
|
314
|
+
property({ attribute: false })
|
|
315
|
+
], IgcChatComponent.prototype, "messages", null);
|
|
316
|
+
__decorate([
|
|
317
|
+
property({ attribute: false })
|
|
318
|
+
], IgcChatComponent.prototype, "draftMessage", null);
|
|
319
|
+
__decorate([
|
|
320
|
+
property({ attribute: false })
|
|
321
|
+
], IgcChatComponent.prototype, "options", null);
|
|
322
|
+
__decorate([
|
|
323
|
+
property({ attribute: false })
|
|
324
|
+
], IgcChatComponent.prototype, "resourceStrings", void 0);
|
|
325
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/components/chat/chat.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContextProvider } from '@lit/context';\nimport { html, LitElement, nothing, type PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport { chatContext, chatUserInputContext } from '../common/context.js';\nimport { addSlotController, setSlots } from '../common/controllers/slot.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { IgcChatResourceStringEN } from '../common/i18n/chat.resources.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { isEmpty, last } from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport IgcListComponent from '../list/list.js';\nimport IgcToastComponent from '../toast/toast.js';\nimport IgcTooltipComponent from '../tooltip/tooltip.js';\nimport IgcChatInputComponent from './chat-input.js';\nimport IgcChatMessageComponent from './chat-message.js';\nimport { ChatState } from './chat-state.js';\nimport { styles } from './themes/chat.base.css.js';\nimport { styles as shared } from './themes/shared/chat.common.css.js';\nimport { all } from './themes/themes.js';\nimport type {\n ChatRenderContext,\n ChatTemplateRenderer,\n IgcChatMessage,\n IgcChatMessageAttachment,\n IgcChatOptions,\n} from './types.js';\n\ntype DefaultChatRenderers = {\n typingIndicator: ChatTemplateRenderer<ChatRenderContext>;\n suggestionPrefix: ChatTemplateRenderer<ChatRenderContext>;\n};\n\n/**\n * Defines the custom events dispatched by the `<igc-chat>` component.\n */\nexport interface IgcChatComponentEventMap {\n /**\n * Dispatched when a new chat message is created (sent).\n */\n igcMessageCreated: CustomEvent<IgcChatMessage>;\n\n /**\n * Dispatched when a message is reacted to.\n */\n igcMessageReact: CustomEvent<{ message: IgcChatMessage; reaction: string }>;\n\n /**\n * Dispatched when a chat message attachment is clicked.\n */\n igcAttachmentClick: CustomEvent<IgcChatMessageAttachment>;\n\n /**\n * Dispatched when an attachment is changed (e.g., updated or removed).\n */\n igcAttachmentChange: CustomEvent<IgcChatMessageAttachment>;\n\n /**\n * Dispatched during an attachment drag operation.\n */\n igcAttachmentDrag: CustomEvent<void>;\n\n /**\n * Dispatched when an attachment is dropped (e.g., in a drag-and-drop operation).\n */\n igcAttachmentDrop: CustomEvent<void>;\n\n /**\n * Dispatched when the typing status changes (e.g., user starts or stops typing).\n */\n igcTypingChange: CustomEvent<boolean>;\n\n /**\n * Dispatched when the chat input field gains focus.\n */\n igcInputFocus: CustomEvent<void>;\n\n /**\n * Dispatched when the chat input field loses focus.\n */\n igcInputBlur: CustomEvent<void>;\n\n /**\n * Dispatched when the content of the chat input changes.\n */\n igcInputChange: CustomEvent<string>;\n}\n\nconst Slots = setSlots(\n 'prefix',\n 'title',\n 'actions',\n 'suggestions-header',\n 'suggestions',\n 'suggestions-actions',\n 'suggestion',\n 'empty-state'\n);\n\n/**\n * A chat UI component for displaying messages, attachments, and input interaction.\n *\n * @element igc-chat\n *\n * @fires igcMessageCreated - Dispatched when a new chat message is created (sent).\n * @fires igcMessageReact - Dispatched when a message is reacted to.\n * @fires igcAttachmentClick - Dispatched when a chat message attachment is clicked.\n * @fires igcAttachmentChange - Dispatched when a message attachment is changed (e.g., updated or removed).\n * @fires igcAttachmentDrag - Dispatched during an attachment drag operation.\n * @fires igcAttachmentDrop - Dispatched when an attachment is dropped (e.g., in a drag-and-drop operation).\n * @fires igcTypingChange - Dispatched when the typing status changes (e.g., user starts or stops typing).\n * @fires igcInputFocus - Dispatched when the chat input field gains focus.\n * @fires igcInputBlur - Dispatched when the chat input field loses focus.\n * @fires igcInputChange - Dispatched when the content of the chat input changes.\n *\n * @slot prefix - Slot for injecting content (e.g., avatar or icon) before the chat title.\n * @slot title - Slot for overriding the chat title content.\n * @slot actions - Slot for injecting header actions (e.g., buttons, menus).\n * @slot suggestions-header - Slot for rendering a custom header for the suggestions list.\n * @slot suggestions - Slot for rendering a custom list of quick reply suggestions.\n * @slot suggestions-actions - Slot for rendering additional actions.\n * @slot suggestion - Slot for rendering a single suggestion item.\n * @slot empty-state - Slot shown when there are no messages.\n *\n * @csspart header - Styles the header container.\n * @csspart prefix - Styles the element before the title (e.g., avatar).\n * @csspart title - Styles the chat header title.\n * @csspart suggestions - Styles the suggestion container.\n * @csspart suggestion - Styles each suggestion item.\n */\nexport default class IgcChatComponent extends EventEmitterMixin<\n IgcChatComponentEventMap,\n Constructor<LitElement>\n>(LitElement) {\n public static readonly tagName = 'igc-chat';\n\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcChatComponent,\n IgcChatInputComponent,\n IgcChatMessageComponent,\n IgcButtonComponent,\n IgcIconComponent,\n IgcListComponent,\n IgcTooltipComponent,\n IgcToastComponent\n );\n }\n\n private readonly _state = new ChatState(\n this,\n this._updateContext,\n this._updateUserInputContext\n );\n\n private readonly _defaults = Object.freeze<DefaultChatRenderers>({\n typingIndicator: () => this._renderLoadingTemplate(),\n suggestionPrefix: () => this._renderSuggestionPrefix(),\n });\n\n private readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n private readonly _context = new ContextProvider(this, {\n context: chatContext,\n initialValue: this._state,\n });\n\n private readonly _userInputContext = new ContextProvider(this, {\n context: chatUserInputContext,\n initialValue: this._state,\n });\n\n @query(IgcChatInputComponent.tagName)\n private readonly _input?: IgcChatInputComponent;\n\n @query('[part=\"typing-indicator\"]')\n private readonly _typingIndicator?: HTMLElement;\n\n @query('[part=\"suggestions-container\"]')\n private readonly _suggestionsContainer?: HTMLElement;\n\n private _updateContext(): void {\n this._context.setValue(this._state, true);\n }\n\n private _updateUserInputContext(): void {\n this._userInputContext.setValue(this._state, true);\n }\n\n /**\n * The list of chat messages currently displayed.\n * Use this property to set or update the message history.\n */\n @property({ attribute: false })\n public set messages(value: IgcChatMessage[]) {\n this._state.messages = value;\n }\n\n public get messages(): IgcChatMessage[] {\n return this._state.messages;\n }\n\n /**\n * The chat message currently being composed but not yet sent.\n * Includes the draft text and any attachments.\n */\n @property({ attribute: false })\n public set draftMessage(value: {\n text: string;\n attachments?: IgcChatMessageAttachment[];\n }) {\n if (this._state && value) {\n this._state.inputValue = value.text;\n this._state.inputAttachments = value.attachments || [];\n this.requestUpdate();\n }\n }\n\n public get draftMessage(): {\n text: string;\n attachments?: IgcChatMessageAttachment[];\n } {\n return {\n text: this._state.inputValue,\n attachments: this._state.inputAttachments,\n };\n }\n\n /**\n * Controls the chat behavior and appearance through a configuration object.\n * Use this to toggle UI options, provide suggestions, templates, etc.\n */\n @property({ attribute: false })\n public set options(value: IgcChatOptions) {\n this._state.options = value;\n }\n\n public get options(): IgcChatOptions | undefined {\n return this._state.options;\n }\n\n /**\n * The resource strings of the chat.\n */\n @property({ attribute: false })\n public resourceStrings = IgcChatResourceStringEN;\n\n constructor() {\n super();\n addThemingController(this, all);\n }\n\n private _getRenderer<U extends keyof DefaultChatRenderers>(\n name: U\n ): DefaultChatRenderers[U] {\n return this._state.options?.renderers\n ? (this._state.options.renderers[name] ?? this._defaults[name])\n : this._defaults[name];\n }\n\n private _handleSuggestionClick(text: string): void {\n this._state.addMessageWithEvent({ text });\n this._input?.focusInput();\n }\n\n // REVIEW: Maybe accept an `IgcMessage` type as well?\n /**\n * Scrolls the view to a specific message by id.\n * @param messageId - The id of the message to scroll to\n */\n public scrollToMessage(messageId: string): void {\n if (!isEmpty(this.messages)) {\n const message = this.renderRoot.querySelector(`#message-${messageId}`);\n message?.scrollIntoView({ block: 'end', inline: 'end' });\n }\n }\n\n // REVIEW\n public addMessage(message: Partial<IgcChatMessage>): IgcChatMessage {\n this._state.addMessage(message);\n return last(this.messages);\n }\n\n // REVIEW\n public updateMessage(\n message: IgcChatMessage,\n data: Partial<IgcChatMessage>,\n scrollIntoView = false\n ) {\n Object.assign(message, data);\n const messageElement =\n this.renderRoot.querySelector<IgcChatMessageComponent>(\n `#message-${message.id}`\n );\n\n if (messageElement) {\n messageElement.requestUpdate();\n if (scrollIntoView) {\n messageElement.updateComplete.then(() =>\n messageElement.scrollIntoView({ block: 'end', inline: 'end' })\n );\n }\n } else {\n this.requestUpdate('messages');\n }\n }\n\n protected override updated(properties: PropertyValues<this>): void {\n if (\n (properties.has('messages') ||\n this._typingIndicator ||\n this._suggestionsContainer) &&\n !this._state.disableAutoScroll\n ) {\n this._scrollToBottom();\n }\n }\n\n private _scrollToBottom() {\n if (isEmpty(this.messages)) return;\n\n const lastMessage = this.renderRoot\n .querySelectorAll(IgcChatMessageComponent.tagName)\n .item(this.messages.length - 1);\n\n const scrollTarget =\n this._typingIndicator ?? this._suggestionsContainer ?? lastMessage;\n\n requestAnimationFrame(() => {\n scrollTarget?.scrollIntoView({ block: 'end', inline: 'end' });\n });\n }\n\n private _renderHeader() {\n const hasContent =\n this._slots.hasAssignedElements('prefix') ||\n this._slots.hasAssignedElements('title') ||\n this._slots.hasAssignedElements('actions') ||\n this._state.options?.headerText;\n\n return html`\n <div part=\"header\" ?hidden=${!hasContent}>\n <slot\n name=\"prefix\"\n part=\"prefix\"\n ?hidden=${!this._slots.hasAssignedElements('prefix')}\n ></slot>\n <slot name=\"title\" part=\"title\"\n >${this._state.options?.headerText}</slot\n >\n <slot name=\"actions\" part=\"actions\"></slot>\n </div>\n `;\n }\n\n private _renderMessages() {\n const ctx = { defaults: this._defaults, instance: this };\n\n return html`\n <div part=\"message-list\" tabindex=\"0\">\n ${repeat(\n this._state.messages,\n (message) => message.id,\n (message) => {\n return html`\n <igc-chat-message\n id=${`message-${message.id}`}\n part=\"message-item\"\n .message=${message}\n exportparts=\"message-container, message-text, message-attachments, message-actions, sent,\n attachments-container, attachment, attachment-header, attachment-content, attachment-icon, file-name, actions: attachment-actions\"\n >\n </igc-chat-message>\n `;\n }\n )}\n ${this._state.options?.isTyping\n ? html`<div part=\"typing-indicator\">\n ${this._getRenderer('typingIndicator')(ctx)}\n </div>`\n : nothing}\n </div>\n `;\n }\n\n private _renderLoadingTemplate() {\n return html`\n <div part=\"typing-dot\"></div>\n <div part=\"typing-dot\"></div>\n <div part=\"typing-dot\"></div>\n <div part=\"typing-dot\"></div>\n `;\n }\n\n private _renderSuggestionPrefix() {\n return html`<igc-icon name=\"auto_suggest\"></igc-icon>`;\n }\n\n private _renderSuggestions() {\n const hasContent = this._slots.hasAssignedElements('suggestions-header');\n const suggestions = this._state.options?.suggestions ?? [];\n const ctx = { instance: this };\n\n return html`\n <div part=\"suggestions-container\">\n <igc-list>\n <igc-list-header part=\"suggestions-header\">\n <span ?hidden=${hasContent}>\n ${this.resourceStrings.suggestionsHeader}\n </span>\n <slot name=\"suggestions-header\"></slot>\n </igc-list-header>\n <slot name=\"suggestions\" part=\"suggestions\">\n ${suggestions.map(\n (suggestion) => html`\n <slot name=\"suggestion\" part=\"suggestion\">\n <igc-list-item\n @click=${() => this._handleSuggestionClick(suggestion)}\n >\n <span slot=\"start\">\n ${this._getRenderer('suggestionPrefix')(ctx)}\n </span>\n <span slot=\"title\">${suggestion}</span>\n </igc-list-item>\n </slot>\n `\n )}\n </slot>\n <slot name=\"suggestions-actions\" part=\"suggestions-actions\"></slot>\n </igc-list>\n </div>\n `;\n }\n\n private _renderEmptyState() {\n return html`\n <div part=\"empty-state\">\n <slot name=\"empty-state\"></slot>\n </div>\n `;\n }\n\n protected override render() {\n const hasMessages = !isEmpty(this.messages);\n const suggestions = isEmpty(this._state.options?.suggestions ?? [])\n ? nothing\n : this._renderSuggestions();\n\n return html`\n <div\n part=\"chat-container\"\n exportparts=\"\n chat-container,\n header,\n prefix,\n title,\n actions,\n chat-wrapper,\n chat-messages,\n empty-state,\n suggestions-container,\n suggestions-header,\n suggestions,\n suggestions-actions,\n suggestion,\n message-container,\n message-list,\n message-item,\n message,\n message-text,\n message-attachments,\n message-actions,\n typing-indicator,\n attachments-container,\n attachment,\n attachment-header,\n attachment-content,\n attachment-icon,\n file-name,\n attachment-actions,\n sent\n \"\n >\n ${this._renderHeader()}\n\n <div part=\"chat-wrapper\">\n ${cache(\n hasMessages || this._state.options?.isTyping\n ? this._renderMessages()\n : this._renderEmptyState()\n )}\n ${this._state.suggestionsPosition === 'below-messages'\n ? suggestions\n : nothing}\n </div>\n\n <igc-chat-input\n exportparts=\"\n input-container,\n input-wrapper,\n attachments: input-attachments-container,\n attachments-wrapper: input-attachment,\n attachment-name: input-attachment-name,\n text-input,\n buttons-container: input-buttons-container,\n upload-button,\n send-button\"\n >\n </igc-chat-input>\n ${this._state.suggestionsPosition === 'below-input'\n ? suggestions\n : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat': IgcChatComponent;\n }\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { IgcChatMessage } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options to configure the MarkdownMessageRenderer.
|
|
4
|
+
*/
|
|
5
|
+
export interface MarkdownRendererOptions {
|
|
6
|
+
/**
|
|
7
|
+
* If true, disables syntax highlighting entirely.
|
|
8
|
+
*/
|
|
9
|
+
noHighlighter?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* List of programming languages to support in syntax highlighting.
|
|
12
|
+
*/
|
|
13
|
+
languages?: string[];
|
|
14
|
+
/**
|
|
15
|
+
* The theme used by the syntax highlighter (e.g., 'github-light').
|
|
16
|
+
*/
|
|
17
|
+
theme?: {
|
|
18
|
+
light?: string;
|
|
19
|
+
dark?: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A custom HTML sanitization function. Defaults to DOMPurify.sanitize.
|
|
23
|
+
*/
|
|
24
|
+
sanitizer?: (html: string) => string;
|
|
25
|
+
}
|
|
26
|
+
export declare function createMarkdownRenderer(options?: MarkdownRendererOptions): Promise<(message: IgcChatMessage) => Promise<unknown>>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import DOMPurify from 'dompurify';
|
|
2
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
|
|
3
|
+
import { Marked } from 'marked';
|
|
4
|
+
import markedShiki from 'marked-shiki';
|
|
5
|
+
import { bundledThemes, createHighlighter } from 'shiki/bundle/web';
|
|
6
|
+
const DEFAULT_LANGUAGES = ['javascript', 'typescript', 'html', 'css'];
|
|
7
|
+
const DEFAULT_THEME = {
|
|
8
|
+
light: 'github-light',
|
|
9
|
+
dark: 'github-dark',
|
|
10
|
+
};
|
|
11
|
+
export async function createMarkdownRenderer(options) {
|
|
12
|
+
const sanitizer = options?.sanitizer ?? DOMPurify.sanitize;
|
|
13
|
+
const markdown = new Marked({
|
|
14
|
+
breaks: true,
|
|
15
|
+
gfm: true,
|
|
16
|
+
extensions: [
|
|
17
|
+
{
|
|
18
|
+
name: 'link',
|
|
19
|
+
renderer({ href, title, text }) {
|
|
20
|
+
return `<a href="${href}" target="_blank" rel="noopener noreferrer" ${title ? `title="${title}"` : ''}>${text}</a>`;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
if (!options?.noHighlighter) {
|
|
26
|
+
const themes = options?.theme ?? DEFAULT_THEME;
|
|
27
|
+
const langs = options?.languages ?? DEFAULT_LANGUAGES;
|
|
28
|
+
const highlighter = await createHighlighter({
|
|
29
|
+
langs,
|
|
30
|
+
themes: Object.keys(bundledThemes),
|
|
31
|
+
});
|
|
32
|
+
markdown.use(markedShiki({
|
|
33
|
+
highlight(code, lang, _) {
|
|
34
|
+
try {
|
|
35
|
+
return highlighter.codeToHtml(code, { lang, themes });
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return `<pre><code>${sanitizer(code)}</code></pre>`;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
return async (message) => {
|
|
44
|
+
return message.text
|
|
45
|
+
? unsafeHTML(sanitizer(await markdown.parse(message.text)))
|
|
46
|
+
: '';
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=markdown-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../../../src/components/chat/extras/markdown-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGpE,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,cAAc;IACrB,IAAI,EAAE,aAAa;CACpB,CAAC;AA8BF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAiC;IAEjC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC;IAE3D,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC;QAC1B,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,IAAI;QACT,UAAU,EAAE;YACV;gBACE,IAAI,EAAE,MAAM;gBACZ,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;oBAC5B,OAAO,YAAY,IAAI,+CAA+C,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC;gBACtH,CAAC;aACF;SACF;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,EAAE,SAAS,IAAI,iBAAiB,CAAC;QAEtD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC;YAC1C,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;SACnC,CAAC,CAAC;QAEH,QAAQ,CAAC,GAAG,CACV,WAAW,CAAC;YACV,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,cAAc,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC;gBACtD,CAAC;YACH,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,EAAE,OAAuB,EAAoB,EAAE;QACzD,OAAO,OAAO,CAAC,IAAI;YACjB,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import DOMPurify from 'dompurify';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { Marked } from 'marked';\nimport markedShiki from 'marked-shiki';\nimport { bundledThemes, createHighlighter } from 'shiki/bundle/web';\nimport type { IgcChatMessage } from '../types.js';\n\nconst DEFAULT_LANGUAGES = ['javascript', 'typescript', 'html', 'css'];\nconst DEFAULT_THEME = {\n light: 'github-light',\n dark: 'github-dark',\n};\n\n/**\n * Options to configure the MarkdownMessageRenderer.\n */\nexport interface MarkdownRendererOptions {\n /**\n * If true, disables syntax highlighting entirely.\n */\n noHighlighter?: boolean;\n\n /**\n * List of programming languages to support in syntax highlighting.\n */\n languages?: string[];\n\n /**\n * The theme used by the syntax highlighter (e.g., 'github-light').\n */\n theme?: {\n light?: string;\n dark?: string;\n };\n\n /**\n * A custom HTML sanitization function. Defaults to DOMPurify.sanitize.\n */\n sanitizer?: (html: string) => string;\n}\n\nexport async function createMarkdownRenderer(\n options?: MarkdownRendererOptions\n) {\n const sanitizer = options?.sanitizer ?? DOMPurify.sanitize;\n\n const markdown = new Marked({\n breaks: true,\n gfm: true,\n extensions: [\n {\n name: 'link',\n renderer({ href, title, text }) {\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" ${title ? `title=\"${title}\"` : ''}>${text}</a>`;\n },\n },\n ],\n });\n\n if (!options?.noHighlighter) {\n const themes = options?.theme ?? DEFAULT_THEME;\n const langs = options?.languages ?? DEFAULT_LANGUAGES;\n\n const highlighter = await createHighlighter({\n langs,\n themes: Object.keys(bundledThemes),\n });\n\n markdown.use(\n markedShiki({\n highlight(code, lang, _) {\n try {\n return highlighter.codeToHtml(code, { lang, themes });\n } catch {\n return `<pre><code>${sanitizer(code)}</code></pre>`;\n }\n },\n })\n );\n }\n\n return async (message: IgcChatMessage): Promise<unknown> => {\n return message.text\n ? unsafeHTML(sanitizer(await markdown.parse(message.text)))\n : '';\n };\n}\n"]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import type { IgcChatMessage } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A component that renders message attachments within a chat.
|
|
5
|
+
*
|
|
6
|
+
* Displays attachments such as images or files, supporting custom templates
|
|
7
|
+
* and default rendering using expansion panels.
|
|
8
|
+
*
|
|
9
|
+
* @element igc-message-attachments
|
|
10
|
+
*
|
|
11
|
+
* @csspart attachments-container - Container wrapping all attachments.
|
|
12
|
+
* @csspart attachment - Wrapper for a single attachment.
|
|
13
|
+
* @csspart attachment-header - Wrapper for a single attachment header.
|
|
14
|
+
* @csspart attachments-content - Part representing the attachment preview.
|
|
15
|
+
* @csspart attachment-icon - Icon part representing the attachment type.
|
|
16
|
+
* @csspart file-name - Part representing the attachment's file name.
|
|
17
|
+
* @csspart actions - Container for header action buttons.
|
|
18
|
+
* @csspart image-attachment - Part for the image element inside an image attachment.
|
|
19
|
+
*
|
|
20
|
+
* @fires igcAttachmentClick - Fired when an attachment header is toggled (clicked).
|
|
21
|
+
*/
|
|
22
|
+
export default class IgcMessageAttachmentsComponent extends LitElement {
|
|
23
|
+
static readonly tagName = "igc-message-attachments";
|
|
24
|
+
static styles: import("lit").CSSResult[];
|
|
25
|
+
static register(): void;
|
|
26
|
+
private readonly _defaults;
|
|
27
|
+
private readonly _state;
|
|
28
|
+
/**
|
|
29
|
+
* The array of attachments to render.
|
|
30
|
+
*/
|
|
31
|
+
message?: IgcChatMessage;
|
|
32
|
+
constructor();
|
|
33
|
+
private _getRenderer;
|
|
34
|
+
private _handleHeaderClick;
|
|
35
|
+
/**
|
|
36
|
+
* Default attachment header template used when no custom template is provided.
|
|
37
|
+
* Renders the attachment icon and name.
|
|
38
|
+
* @param attachment The message attachment to render
|
|
39
|
+
* @returns TemplateResult containing the rendered attachment header
|
|
40
|
+
*/
|
|
41
|
+
private renderHeader;
|
|
42
|
+
/**
|
|
43
|
+
* Default attachment content template used when no custom template is provided.
|
|
44
|
+
* Renders the attachment content based on its type.
|
|
45
|
+
* @param attachment The message attachment to render
|
|
46
|
+
* @returns TemplateResult containing the rendered attachment content
|
|
47
|
+
*/
|
|
48
|
+
private _renderContent;
|
|
49
|
+
private _renderAttachment;
|
|
50
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
51
|
+
}
|
|
52
|
+
declare global {
|
|
53
|
+
interface HTMLElementTagNameMap {
|
|
54
|
+
'igc-message-attachments': IgcMessageAttachmentsComponent;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { consume } from '@lit/context';
|
|
8
|
+
import { html, LitElement, nothing } from 'lit';
|
|
9
|
+
import { property } from 'lit/decorators.js';
|
|
10
|
+
import { cache } from 'lit/directives/cache.js';
|
|
11
|
+
import { repeat } from 'lit/directives/repeat.js';
|
|
12
|
+
import { until } from 'lit/directives/until.js';
|
|
13
|
+
import { addThemingController } from '../../theming/theming-controller.js';
|
|
14
|
+
import IgcIconButtonComponent from '../button/icon-button.js';
|
|
15
|
+
import { chatContext } from '../common/context.js';
|
|
16
|
+
import { registerComponent } from '../common/definitions/register.js';
|
|
17
|
+
import { partMap } from '../common/part-map.js';
|
|
18
|
+
import IgcIconComponent from '../icon/icon.js';
|
|
19
|
+
import { all } from './themes/attachments.js';
|
|
20
|
+
import { styles } from './themes/message-attachments.base.css.js';
|
|
21
|
+
import { styles as shared } from './themes/shared/message-attachments/message-attachments.common.css.js';
|
|
22
|
+
import { ChatFileTypeIcons, createAttachmentURL, getFileExtension, isImageAttachment, } from './utils.js';
|
|
23
|
+
export default class IgcMessageAttachmentsComponent extends LitElement {
|
|
24
|
+
static { this.tagName = 'igc-message-attachments'; }
|
|
25
|
+
static { this.styles = [styles, shared]; }
|
|
26
|
+
static register() {
|
|
27
|
+
registerComponent(IgcMessageAttachmentsComponent, IgcIconComponent, IgcIconButtonComponent);
|
|
28
|
+
}
|
|
29
|
+
constructor() {
|
|
30
|
+
super();
|
|
31
|
+
this._defaults = Object.freeze({
|
|
32
|
+
attachment: (ctx) => this._renderAttachment(ctx.attachment),
|
|
33
|
+
attachmentHeader: (ctx) => this.renderHeader(ctx.attachment),
|
|
34
|
+
attachmentContent: (ctx) => this._renderContent(ctx.attachment),
|
|
35
|
+
});
|
|
36
|
+
this._handleHeaderClick = (attachment) => {
|
|
37
|
+
this._state.emitEvent('igcAttachmentClick', { detail: attachment });
|
|
38
|
+
};
|
|
39
|
+
addThemingController(this, all);
|
|
40
|
+
}
|
|
41
|
+
_getRenderer(name) {
|
|
42
|
+
return this._state.options?.renderers
|
|
43
|
+
? (this._state.options.renderers[name] ?? this._defaults[name])
|
|
44
|
+
: this._defaults[name];
|
|
45
|
+
}
|
|
46
|
+
renderHeader(attachment) {
|
|
47
|
+
const isCurrentUser = this._state.isCurrentUserMessage(this.message);
|
|
48
|
+
const iconName = isImageAttachment(attachment)
|
|
49
|
+
? 'attach_image'
|
|
50
|
+
: 'document_thumbnail';
|
|
51
|
+
return html `
|
|
52
|
+
${!isCurrentUser
|
|
53
|
+
? html `<igc-icon name=${iconName} part="attachment-icon"></igc-icon>`
|
|
54
|
+
: nothing}
|
|
55
|
+
<span part="file-name">${attachment.name}</span>
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
_renderContent(attachment) {
|
|
59
|
+
const iconName = ChatFileTypeIcons.get(getFileExtension(attachment.name)) ??
|
|
60
|
+
ChatFileTypeIcons.get('default');
|
|
61
|
+
return isImageAttachment(attachment)
|
|
62
|
+
? html `
|
|
63
|
+
<img
|
|
64
|
+
part="image-attachment"
|
|
65
|
+
src=${createAttachmentURL(attachment)}
|
|
66
|
+
alt=${attachment.name}
|
|
67
|
+
/>
|
|
68
|
+
`
|
|
69
|
+
: html `<igc-icon part="file-attachment" name=${iconName}></igc-icon>`;
|
|
70
|
+
}
|
|
71
|
+
_renderAttachment(attachment) {
|
|
72
|
+
const isCurrentUser = this._state.isCurrentUserMessage(this.message);
|
|
73
|
+
const attachmentParts = {
|
|
74
|
+
attachment: true,
|
|
75
|
+
sent: isCurrentUser,
|
|
76
|
+
};
|
|
77
|
+
const contentParts = {
|
|
78
|
+
'attachment-content': true,
|
|
79
|
+
sent: isCurrentUser,
|
|
80
|
+
};
|
|
81
|
+
const headerParts = {
|
|
82
|
+
'attachment-header': true,
|
|
83
|
+
sent: isCurrentUser,
|
|
84
|
+
};
|
|
85
|
+
const ctx = {
|
|
86
|
+
attachment,
|
|
87
|
+
message: this.message,
|
|
88
|
+
instance: this._state.host,
|
|
89
|
+
};
|
|
90
|
+
const content = html `<div part=${partMap(contentParts)}>
|
|
91
|
+
${until(this._getRenderer('attachmentContent')(ctx))}
|
|
92
|
+
</div>`;
|
|
93
|
+
const header = html ` <div
|
|
94
|
+
part=${partMap(headerParts)}
|
|
95
|
+
role="button"
|
|
96
|
+
@click=${() => this._handleHeaderClick(attachment)}
|
|
97
|
+
>
|
|
98
|
+
<div part="details">
|
|
99
|
+
${until(this._getRenderer('attachmentHeader')(ctx))}
|
|
100
|
+
</div>
|
|
101
|
+
</div>`;
|
|
102
|
+
return html `
|
|
103
|
+
<div part=${partMap(attachmentParts)}>
|
|
104
|
+
${isCurrentUser ? content : nothing} ${header}
|
|
105
|
+
${!isCurrentUser ? content : nothing}
|
|
106
|
+
</div>
|
|
107
|
+
`;
|
|
108
|
+
}
|
|
109
|
+
render() {
|
|
110
|
+
const attachments = this.message?.attachments ?? [];
|
|
111
|
+
return html `${cache(this.message
|
|
112
|
+
? html `
|
|
113
|
+
<div part="attachments-container">
|
|
114
|
+
${repeat(attachments, (attachment) => attachment.id, (attachment) => html `
|
|
115
|
+
${until(this._getRenderer('attachment')({
|
|
116
|
+
attachment,
|
|
117
|
+
message: this.message,
|
|
118
|
+
instance: this._state.host,
|
|
119
|
+
}))}
|
|
120
|
+
`)}
|
|
121
|
+
</div>
|
|
122
|
+
`
|
|
123
|
+
: nothing)}`;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
__decorate([
|
|
127
|
+
consume({ context: chatContext, subscribe: true })
|
|
128
|
+
], IgcMessageAttachmentsComponent.prototype, "_state", void 0);
|
|
129
|
+
__decorate([
|
|
130
|
+
property({ attribute: false })
|
|
131
|
+
], IgcMessageAttachmentsComponent.prototype, "message", void 0);
|
|
132
|
+
//# sourceMappingURL=message-attachments.js.map
|