igniteui-webcomponents 6.1.1-alpha.0 → 6.1.2
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 +31 -0
- package/animations/player.d.ts +1 -1
- package/animations/player.js.map +1 -1
- package/components/avatar/avatar.d.ts +1 -0
- package/components/avatar/avatar.js +9 -12
- package/components/avatar/avatar.js.map +1 -1
- package/components/badge/badge.d.ts +1 -0
- package/components/badge/badge.js +9 -12
- package/components/badge/badge.js.map +1 -1
- package/components/banner/banner.js +6 -9
- package/components/banner/banner.js.map +1 -1
- package/components/button/button.d.ts +1 -0
- package/components/button/button.js +9 -12
- package/components/button/button.js.map +1 -1
- package/components/button/icon-button.d.ts +1 -0
- package/components/button/icon-button.js +9 -12
- package/components/button/icon-button.js.map +1 -1
- package/components/button-group/button-group.js +6 -9
- package/components/button-group/button-group.js.map +1 -1
- package/components/button-group/toggle-button.d.ts +1 -0
- package/components/button-group/toggle-button.js +6 -6
- package/components/button-group/toggle-button.js.map +1 -1
- package/components/calendar/calendar.d.ts +1 -0
- package/components/calendar/calendar.js +11 -17
- package/components/calendar/calendar.js.map +1 -1
- package/components/calendar/days-view/days-view.js +3 -3
- package/components/calendar/days-view/days-view.js.map +1 -1
- package/components/calendar/months-view/months-view.js +3 -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/dark/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/dark/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/dark/calendar.fluent.css.js +1 -1
- package/components/calendar/themes/dark/calendar.fluent.css.js.map +1 -1
- package/components/calendar/themes/dark/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/dark/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/dark/calendar.material.css.js +1 -1
- package/components/calendar/themes/dark/calendar.material.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.bootstrap.css.js +1 -1
- package/components/calendar/themes/light/calendar.bootstrap.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.fluent.css.js +1 -1
- package/components/calendar/themes/light/calendar.fluent.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.indigo.css.js +1 -1
- package/components/calendar/themes/light/calendar.indigo.css.js.map +1 -1
- package/components/calendar/themes/light/calendar.material.css.js +1 -1
- package/components/calendar/themes/light/calendar.material.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/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/years-view/years-view.js +3 -3
- package/components/calendar/years-view/years-view.js.map +1 -1
- package/components/card/card.actions.d.ts +1 -0
- package/components/card/card.actions.js +9 -12
- package/components/card/card.actions.js.map +1 -1
- package/components/card/card.content.d.ts +1 -0
- package/components/card/card.content.js +8 -14
- package/components/card/card.content.js.map +1 -1
- package/components/card/card.d.ts +1 -0
- package/components/card/card.header.d.ts +1 -0
- package/components/card/card.header.js +8 -14
- package/components/card/card.header.js.map +1 -1
- package/components/card/card.js +10 -13
- package/components/card/card.js.map +1 -1
- package/components/carousel/carousel-indicator-container.d.ts +1 -0
- package/components/carousel/carousel-indicator-container.js +8 -17
- package/components/carousel/carousel-indicator-container.js.map +1 -1
- package/components/carousel/carousel.d.ts +4 -6
- package/components/carousel/carousel.js +36 -60
- package/components/carousel/carousel.js.map +1 -1
- package/components/checkbox/checkbox.d.ts +1 -1
- package/components/checkbox/checkbox.js +10 -14
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.d.ts +1 -0
- package/components/checkbox/switch.js +9 -18
- package/components/checkbox/switch.js.map +1 -1
- package/components/chip/chip.js +6 -9
- package/components/chip/chip.js.map +1 -1
- package/components/combo/combo-header.d.ts +1 -0
- package/components/combo/combo-header.js +8 -14
- package/components/combo/combo-header.js.map +1 -1
- package/components/combo/combo-item.d.ts +1 -0
- package/components/combo/combo-item.js +9 -12
- package/components/combo/combo-item.js.map +1 -1
- package/components/combo/combo.js +2 -2
- package/components/combo/combo.js.map +1 -1
- package/components/combo/themes/dark/combo.bootstrap.css.js +1 -1
- package/components/combo/themes/dark/combo.bootstrap.css.js.map +1 -1
- package/components/combo/themes/light/combo.bootstrap.css.js +1 -1
- package/components/combo/themes/light/combo.bootstrap.css.js.map +1 -1
- package/components/combo/themes/light/combo.shared.css.js +1 -1
- package/components/combo/themes/light/combo.shared.css.js.map +1 -1
- package/components/common/context.d.ts +1 -5
- package/components/common/context.js +1 -2
- package/components/common/context.js.map +1 -1
- package/components/common/definitions/defineAllComponents.js +0 -2
- package/components/common/definitions/defineAllComponents.js.map +1 -1
- package/components/common/mixins/alert.d.ts +7 -8
- package/components/common/mixins/alert.js +23 -34
- package/components/common/mixins/alert.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +1 -1
- package/components/date-picker/date-picker.js +7 -9
- package/components/date-picker/date-picker.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.indigo.css.js.map +1 -1
- package/components/date-picker/themes/dark/date-picker.material.css.js +1 -1
- package/components/date-picker/themes/dark/date-picker.material.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.bootstrap.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.bootstrap.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.fluent.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.fluent.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.indigo.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.indigo.css.js.map +1 -1
- package/components/date-picker/themes/light/date-picker.material.css.js +1 -1
- package/components/date-picker/themes/light/date-picker.material.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.d.ts +1 -1
- package/components/date-range-picker/date-range-picker.js +5 -7
- package/components/date-range-picker/date-range-picker.js.map +1 -1
- package/components/date-range-picker/predefined-ranges-area.d.ts +1 -0
- package/components/date-range-picker/predefined-ranges-area.js +9 -12
- package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.bootstrap.css.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.fluent.css.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.indigo.css.js.map +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.material.css.js +1 -1
- package/components/date-range-picker/themes/dark/date-range-picker.material.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/dialog/dialog.d.ts +1 -0
- package/components/dialog/dialog.js +12 -12
- package/components/dialog/dialog.js.map +1 -1
- package/components/divider/divider.d.ts +1 -0
- package/components/divider/divider.js +18 -21
- package/components/divider/divider.js.map +1 -1
- package/components/dropdown/dropdown-group.js +6 -9
- package/components/dropdown/dropdown-group.js.map +1 -1
- package/components/dropdown/dropdown-header.d.ts +1 -0
- package/components/dropdown/dropdown-header.js +8 -14
- package/components/dropdown/dropdown-header.js.map +1 -1
- package/components/dropdown/dropdown-item.d.ts +1 -0
- package/components/dropdown/dropdown-item.js +8 -14
- package/components/dropdown/dropdown-item.js.map +1 -1
- package/components/dropdown/dropdown.js +2 -2
- package/components/dropdown/dropdown.js.map +1 -1
- package/components/dropdown/themes/item.js +7 -0
- package/components/dropdown/themes/item.js.map +1 -1
- package/components/dropdown/themes/shared/item/dropdown-item.bootstrap.css.js +3 -0
- package/components/dropdown/themes/shared/item/dropdown-item.bootstrap.css.js.map +1 -0
- package/components/expansion-panel/expansion-panel.js +7 -10
- package/components/expansion-panel/expansion-panel.js.map +1 -1
- package/components/file-input/file-input.d.ts +1 -1
- package/components/file-input/file-input.js +18 -21
- package/components/file-input/file-input.js.map +1 -1
- package/components/file-input/themes/dark/file-input.bootstrap.css.js +3 -0
- package/components/file-input/themes/dark/file-input.bootstrap.css.js.map +1 -0
- package/components/file-input/themes/dark/file-input.fluent.css.js +3 -0
- package/components/file-input/themes/dark/file-input.fluent.css.js.map +1 -0
- package/components/file-input/themes/dark/file-input.indigo.css.js +3 -0
- package/components/file-input/themes/dark/file-input.indigo.css.js.map +1 -0
- package/components/file-input/themes/dark/file-input.material.css.js +3 -0
- package/components/file-input/themes/dark/file-input.material.css.js.map +1 -0
- package/components/file-input/themes/file-input.base.css.js +1 -1
- package/components/file-input/themes/file-input.base.css.js.map +1 -1
- package/components/file-input/themes/light/file-input.bootstrap.css.d.ts +1 -0
- package/components/file-input/themes/light/file-input.bootstrap.css.js +3 -0
- package/components/file-input/themes/light/file-input.bootstrap.css.js.map +1 -0
- package/components/file-input/themes/light/file-input.fluent.css.d.ts +1 -0
- package/components/file-input/themes/light/file-input.fluent.css.js +3 -0
- package/components/file-input/themes/light/file-input.fluent.css.js.map +1 -0
- package/components/file-input/themes/light/file-input.indigo.css.d.ts +1 -0
- package/components/file-input/themes/light/file-input.indigo.css.js +3 -0
- package/components/file-input/themes/light/file-input.indigo.css.js.map +1 -0
- package/components/file-input/themes/light/file-input.material.css.d.ts +1 -0
- package/components/file-input/themes/light/file-input.material.css.js +3 -0
- package/components/file-input/themes/light/file-input.material.css.js.map +1 -0
- package/components/file-input/themes/light/file-input.shared.css.d.ts +1 -0
- package/components/file-input/themes/light/file-input.shared.css.js +3 -0
- package/components/file-input/themes/light/file-input.shared.css.js.map +1 -0
- 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.indigo.css.js +1 -1
- package/components/file-input/themes/shared/file-input.indigo.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/file-input/themes/themes.js +19 -0
- package/components/file-input/themes/themes.js.map +1 -1
- package/components/icon/icon.d.ts +1 -0
- package/components/icon/icon.js +11 -10
- package/components/icon/icon.js.map +1 -1
- package/components/input/input-base.d.ts +1 -1
- package/components/input/input-base.js +5 -6
- package/components/input/input-base.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.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 +5 -14
- package/components/list/list-header.js.map +1 -1
- package/components/list/list-item.js +6 -9
- package/components/list/list-item.js.map +1 -1
- package/components/list/list.js +5 -14
- package/components/list/list.js.map +1 -1
- package/components/nav-drawer/nav-drawer-header-item.d.ts +1 -0
- package/components/nav-drawer/nav-drawer-header-item.js +8 -14
- package/components/nav-drawer/nav-drawer-header-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer-item.d.ts +1 -0
- package/components/nav-drawer/nav-drawer-item.js +9 -12
- package/components/nav-drawer/nav-drawer-item.js.map +1 -1
- package/components/nav-drawer/nav-drawer.d.ts +1 -0
- package/components/nav-drawer/nav-drawer.js +9 -12
- package/components/nav-drawer/nav-drawer.js.map +1 -1
- package/components/navbar/navbar.d.ts +1 -0
- package/components/navbar/navbar.js +8 -14
- package/components/navbar/navbar.js.map +1 -1
- package/components/progress/circular-progress.d.ts +1 -0
- package/components/progress/circular-progress.js +10 -13
- package/components/progress/circular-progress.js.map +1 -1
- package/components/progress/linear-progress.d.ts +1 -0
- package/components/progress/linear-progress.js +9 -12
- package/components/progress/linear-progress.js.map +1 -1
- package/components/radio/radio.js +7 -10
- package/components/radio/radio.js.map +1 -1
- package/components/radio-group/radio-group.js +6 -9
- package/components/radio-group/radio-group.js.map +1 -1
- package/components/rating/rating.js +6 -9
- package/components/rating/rating.js.map +1 -1
- package/components/resize-container/resize-container.js +6 -9
- package/components/resize-container/resize-container.js.map +1 -1
- package/components/select/select-group.js +6 -9
- package/components/select/select-group.js.map +1 -1
- package/components/select/select-header.d.ts +1 -0
- package/components/select/select-header.js +8 -14
- package/components/select/select-header.js.map +1 -1
- package/components/select/select-item.d.ts +1 -0
- package/components/select/select-item.js +9 -9
- package/components/select/select-item.js.map +1 -1
- package/components/select/select.js +2 -2
- package/components/select/select.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/slider/slider-base.js +2 -2
- package/components/slider/slider-base.js.map +1 -1
- package/components/snackbar/snackbar.d.ts +4 -5
- package/components/snackbar/snackbar.js +14 -17
- package/components/snackbar/snackbar.js.map +1 -1
- package/components/stepper/step.d.ts +1 -0
- package/components/stepper/step.js +9 -12
- package/components/stepper/step.js.map +1 -1
- package/components/stepper/stepper.d.ts +1 -0
- package/components/stepper/stepper.js +18 -12
- package/components/stepper/stepper.js.map +1 -1
- package/components/tabs/tab.d.ts +1 -0
- package/components/tabs/tab.js +10 -13
- package/components/tabs/tab.js.map +1 -1
- package/components/tabs/tabs.js +6 -9
- package/components/tabs/tabs.js.map +1 -1
- package/components/textarea/textarea.d.ts +1 -1
- package/components/textarea/textarea.js +5 -6
- 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/tile-manager/tile-manager.js +2 -2
- package/components/tile-manager/tile-manager.js.map +1 -1
- package/components/tile-manager/tile.d.ts +1 -0
- package/components/tile-manager/tile.js +53 -56
- package/components/tile-manager/tile.js.map +1 -1
- package/components/toast/toast.d.ts +2 -2
- package/components/toast/toast.js +9 -18
- package/components/toast/toast.js.map +1 -1
- package/components/tooltip/tooltip.d.ts +1 -0
- package/components/tooltip/tooltip.js +39 -42
- package/components/tooltip/tooltip.js.map +1 -1
- package/components/tree/tree-item.js +6 -9
- package/components/tree/tree-item.js.map +1 -1
- package/components/tree/tree.js +2 -2
- package/components/tree/tree.js.map +1 -1
- package/components/validation-container/validation-container.d.ts +8 -5
- package/components/validation-container/validation-container.js +59 -49
- package/components/validation-container/validation-container.js.map +1 -1
- package/custom-elements.json +17604 -18460
- package/igniteui-webcomponents.css-data.json +1 -1
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +0 -7
- package/index.js +0 -5
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/theming/config.d.ts +3 -3
- package/theming/config.js +14 -18
- package/theming/config.js.map +1 -1
- package/theming/theming-controller.d.ts +17 -13
- package/theming/theming-controller.js +28 -22
- package/theming/theming-controller.js.map +1 -1
- package/theming/theming-event.d.ts +1 -0
- package/theming/theming-event.js.map +1 -1
- package/theming/types.d.ts +3 -14
- package/theming/types.js.map +1 -1
- package/theming/utils.js +24 -23
- package/theming/utils.js.map +1 -1
- package/web-types.json +2 -2
- package/components/chat/chat-input.d.ts +0 -41
- package/components/chat/chat-input.js +0 -254
- package/components/chat/chat-input.js.map +0 -1
- package/components/chat/chat-message-list.d.ts +0 -24
- package/components/chat/chat-message-list.js +0 -88
- package/components/chat/chat-message-list.js.map +0 -1
- package/components/chat/chat-message.d.ts +0 -21
- package/components/chat/chat-message.js +0 -52
- package/components/chat/chat-message.js.map +0 -1
- package/components/chat/chat.d.ts +0 -41
- package/components/chat/chat.js +0 -98
- package/components/chat/chat.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/message-attachments.d.ts +0 -28
- package/components/chat/message-attachments.js +0 -168
- package/components/chat/message-attachments.js.map +0 -1
- package/components/chat/themes/chat.base.css.js +0 -3
- package/components/chat/themes/chat.base.css.js.map +0 -1
- package/components/chat/themes/input.base.css.js +0 -3
- package/components/chat/themes/input.base.css.js.map +0 -1
- package/components/chat/themes/message-attachments.base.css.js +0 -3
- package/components/chat/themes/message-attachments.base.css.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/message.base.css.js +0 -3
- package/components/chat/themes/message.base.css.js.map +0 -1
- package/components/chat/types.d.ts +0 -46
- package/components/chat/types.js +0 -8
- package/components/chat/types.js.map +0 -1
- package/theming/theming-decorator.d.ts +0 -43
- package/theming/theming-decorator.js +0 -25
- package/theming/theming-decorator.js.map +0 -1
- /package/components/{chat/themes/chat.base.css.d.ts → dropdown/themes/shared/item/dropdown-item.bootstrap.css.d.ts} +0 -0
- /package/components/{chat/themes/input.base.css.d.ts → file-input/themes/dark/file-input.bootstrap.css.d.ts} +0 -0
- /package/components/{chat/themes/message-attachments.base.css.d.ts → file-input/themes/dark/file-input.fluent.css.d.ts} +0 -0
- /package/components/{chat/themes/message-list.base.css.d.ts → file-input/themes/dark/file-input.indigo.css.d.ts} +0 -0
- /package/components/{chat/themes/message.base.css.d.ts → file-input/themes/dark/file-input.material.css.d.ts} +0 -0
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* @element igc-chat-input
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
export default class IgcChatInputComponent extends LitElement {
|
|
8
|
-
/** @private */
|
|
9
|
-
static readonly tagName = "igc-chat-input";
|
|
10
|
-
static styles: import("lit").CSSResult;
|
|
11
|
-
private _chat?;
|
|
12
|
-
static register(): void;
|
|
13
|
-
private textInputElement;
|
|
14
|
-
protected acceptedFilesChange(): void;
|
|
15
|
-
private inputValue;
|
|
16
|
-
private attachments;
|
|
17
|
-
private dragClass;
|
|
18
|
-
private _acceptedTypesCache;
|
|
19
|
-
constructor();
|
|
20
|
-
protected firstUpdated(): void;
|
|
21
|
-
private handleInput;
|
|
22
|
-
private handleKeyDown;
|
|
23
|
-
private setupDragAndDrop;
|
|
24
|
-
private handleDragEnter;
|
|
25
|
-
private handleDragOver;
|
|
26
|
-
private handleDragLeave;
|
|
27
|
-
private handleDrop;
|
|
28
|
-
private adjustTextareaHeight;
|
|
29
|
-
private sendMessage;
|
|
30
|
-
private handleFileUpload;
|
|
31
|
-
private attachFiles;
|
|
32
|
-
private updateAcceptedTypesCache;
|
|
33
|
-
private isFileTypeAccepted;
|
|
34
|
-
private removeAttachment;
|
|
35
|
-
protected render(): import("lit-html").TemplateResult<1>;
|
|
36
|
-
}
|
|
37
|
-
declare global {
|
|
38
|
-
interface HTMLElementTagNameMap {
|
|
39
|
-
'igc-chat-input': IgcChatInputComponent;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,254 +0,0 @@
|
|
|
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 { LitElement, html } from 'lit';
|
|
9
|
-
import { query, state } from 'lit/decorators.js';
|
|
10
|
-
import IgcIconButtonComponent from '../button/icon-button.js';
|
|
11
|
-
import IgcChipComponent from '../chip/chip.js';
|
|
12
|
-
import { chatContext } from '../common/context.js';
|
|
13
|
-
import { watch } from '../common/decorators/watch.js';
|
|
14
|
-
import { registerComponent } from '../common/definitions/register.js';
|
|
15
|
-
import IgcFileInputComponent from '../file-input/file-input.js';
|
|
16
|
-
import IgcIconComponent from '../icon/icon.js';
|
|
17
|
-
import { registerIconFromText } from '../icon/icon.registry.js';
|
|
18
|
-
import IgcTextareaComponent from '../textarea/textarea.js';
|
|
19
|
-
import { styles } from './themes/input.base.css.js';
|
|
20
|
-
import { attachmentIcon, sendButtonIcon, } from './types.js';
|
|
21
|
-
class IgcChatInputComponent extends LitElement {
|
|
22
|
-
static register() {
|
|
23
|
-
registerComponent(IgcChatInputComponent, IgcTextareaComponent, IgcIconButtonComponent, IgcChipComponent, IgcFileInputComponent, IgcIconComponent);
|
|
24
|
-
}
|
|
25
|
-
acceptedFilesChange() {
|
|
26
|
-
this.updateAcceptedTypesCache();
|
|
27
|
-
}
|
|
28
|
-
constructor() {
|
|
29
|
-
super();
|
|
30
|
-
this.inputValue = '';
|
|
31
|
-
this.attachments = [];
|
|
32
|
-
this.dragClass = '';
|
|
33
|
-
this._acceptedTypesCache = null;
|
|
34
|
-
registerIconFromText('attachment', attachmentIcon, 'material');
|
|
35
|
-
registerIconFromText('send-message', sendButtonIcon, 'material');
|
|
36
|
-
}
|
|
37
|
-
firstUpdated() {
|
|
38
|
-
this.setupDragAndDrop();
|
|
39
|
-
this.updateAcceptedTypesCache();
|
|
40
|
-
}
|
|
41
|
-
handleInput(e) {
|
|
42
|
-
const target = e.target;
|
|
43
|
-
this.inputValue = target.value;
|
|
44
|
-
this.adjustTextareaHeight();
|
|
45
|
-
}
|
|
46
|
-
handleKeyDown(e) {
|
|
47
|
-
if (e.key === 'Enter' && !e.shiftKey) {
|
|
48
|
-
e.preventDefault();
|
|
49
|
-
this.sendMessage();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
setupDragAndDrop() {
|
|
53
|
-
const container = this.shadowRoot?.querySelector('.input-container');
|
|
54
|
-
if (container) {
|
|
55
|
-
container.addEventListener('dragenter', this.handleDragEnter.bind(this));
|
|
56
|
-
container.addEventListener('dragover', this.handleDragOver.bind(this));
|
|
57
|
-
container.addEventListener('dragleave', this.handleDragLeave.bind(this));
|
|
58
|
-
container.addEventListener('drop', this.handleDrop.bind(this));
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
handleDragEnter(e) {
|
|
62
|
-
e.preventDefault();
|
|
63
|
-
e.stopPropagation();
|
|
64
|
-
const files = Array.from(e.dataTransfer?.items || []).filter((item) => item.kind === 'file');
|
|
65
|
-
const hasValidFiles = files.some((item) => this.isFileTypeAccepted(item.getAsFile(), item.type));
|
|
66
|
-
this.dragClass = hasValidFiles ? 'dragging' : '';
|
|
67
|
-
}
|
|
68
|
-
handleDragOver(e) {
|
|
69
|
-
e.preventDefault();
|
|
70
|
-
e.stopPropagation();
|
|
71
|
-
}
|
|
72
|
-
handleDragLeave(e) {
|
|
73
|
-
e.preventDefault();
|
|
74
|
-
e.stopPropagation();
|
|
75
|
-
const rect = e.currentTarget.getBoundingClientRect();
|
|
76
|
-
const x = e.clientX;
|
|
77
|
-
const y = e.clientY;
|
|
78
|
-
if (x <= rect.left ||
|
|
79
|
-
x >= rect.right ||
|
|
80
|
-
y <= rect.top ||
|
|
81
|
-
y >= rect.bottom) {
|
|
82
|
-
this.dragClass = '';
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
handleDrop(e) {
|
|
86
|
-
e.preventDefault();
|
|
87
|
-
e.stopPropagation();
|
|
88
|
-
this.dragClass = '';
|
|
89
|
-
const files = Array.from(e.dataTransfer?.files || []);
|
|
90
|
-
if (files.length === 0)
|
|
91
|
-
return;
|
|
92
|
-
const validFiles = files.filter((file) => this.isFileTypeAccepted(file));
|
|
93
|
-
this.attachFiles(validFiles);
|
|
94
|
-
}
|
|
95
|
-
adjustTextareaHeight() {
|
|
96
|
-
const textarea = this.textInputElement;
|
|
97
|
-
if (!textarea)
|
|
98
|
-
return;
|
|
99
|
-
textarea.style.height = 'auto';
|
|
100
|
-
const newHeight = Math.min(textarea.scrollHeight, 120);
|
|
101
|
-
textarea.style.height = `${newHeight}px`;
|
|
102
|
-
}
|
|
103
|
-
sendMessage() {
|
|
104
|
-
if (!this.inputValue.trim() && this.attachments.length === 0)
|
|
105
|
-
return;
|
|
106
|
-
const messageEvent = new CustomEvent('message-created', {
|
|
107
|
-
detail: { text: this.inputValue, attachments: this.attachments },
|
|
108
|
-
});
|
|
109
|
-
this.dispatchEvent(messageEvent);
|
|
110
|
-
this.inputValue = '';
|
|
111
|
-
this.attachments = [];
|
|
112
|
-
if (this.textInputElement) {
|
|
113
|
-
this.textInputElement.style.height = 'auto';
|
|
114
|
-
}
|
|
115
|
-
setTimeout(() => {
|
|
116
|
-
this.textInputElement?.focus();
|
|
117
|
-
}, 0);
|
|
118
|
-
}
|
|
119
|
-
handleFileUpload(e) {
|
|
120
|
-
const input = e.target.input;
|
|
121
|
-
if (!input.files || input.files.length === 0)
|
|
122
|
-
return;
|
|
123
|
-
const files = Array.from(input.files);
|
|
124
|
-
this.attachFiles(files);
|
|
125
|
-
}
|
|
126
|
-
attachFiles(files) {
|
|
127
|
-
const newAttachments = [];
|
|
128
|
-
let count = this.attachments.length;
|
|
129
|
-
files.forEach((file) => {
|
|
130
|
-
const isImage = file.type.startsWith('image/');
|
|
131
|
-
newAttachments.push({
|
|
132
|
-
id: Date.now().toString() + count++,
|
|
133
|
-
url: URL.createObjectURL(file),
|
|
134
|
-
name: file.name,
|
|
135
|
-
file: file,
|
|
136
|
-
thumbnail: isImage ? URL.createObjectURL(file) : undefined,
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
this.attachments = [...this.attachments, ...newAttachments];
|
|
140
|
-
}
|
|
141
|
-
updateAcceptedTypesCache() {
|
|
142
|
-
if (!this._chat?.options?.acceptedFiles) {
|
|
143
|
-
this._acceptedTypesCache = null;
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const types = this._chat?.options?.acceptedFiles
|
|
147
|
-
.split(',')
|
|
148
|
-
.map((type) => type.trim().toLowerCase());
|
|
149
|
-
this._acceptedTypesCache = {
|
|
150
|
-
extensions: new Set(types.filter((t) => t.startsWith('.'))),
|
|
151
|
-
mimeTypes: new Set(types.filter((t) => !t.startsWith('.') && !t.endsWith('/*'))),
|
|
152
|
-
wildcardTypes: new Set(types.filter((t) => t.endsWith('/*')).map((t) => t.slice(0, -2))),
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
isFileTypeAccepted(file, type = '') {
|
|
156
|
-
if (!this._acceptedTypesCache)
|
|
157
|
-
return true;
|
|
158
|
-
if (file === null && type === '')
|
|
159
|
-
return false;
|
|
160
|
-
const fileType = file != null ? file.type.toLowerCase() : type.toLowerCase();
|
|
161
|
-
const fileExtension = file != null
|
|
162
|
-
? `.${file.name.split('.').pop()?.toLowerCase()}`
|
|
163
|
-
: `.${type.split('/').pop()?.toLowerCase()}`;
|
|
164
|
-
if (this._acceptedTypesCache.extensions.has(fileExtension)) {
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
|
-
if (this._acceptedTypesCache.mimeTypes.has(fileType)) {
|
|
168
|
-
return true;
|
|
169
|
-
}
|
|
170
|
-
const [fileBaseType] = fileType.split('/');
|
|
171
|
-
return this._acceptedTypesCache.wildcardTypes.has(fileBaseType);
|
|
172
|
-
}
|
|
173
|
-
removeAttachment(index) {
|
|
174
|
-
this.attachments = this.attachments.filter((_, i) => i !== index);
|
|
175
|
-
}
|
|
176
|
-
render() {
|
|
177
|
-
return html `
|
|
178
|
-
<div class="input-container ${this.dragClass}">
|
|
179
|
-
${this._chat?.options?.disableAttachments
|
|
180
|
-
? ''
|
|
181
|
-
: html `
|
|
182
|
-
<igc-file-input
|
|
183
|
-
multiple
|
|
184
|
-
.accept=${this._chat?.options?.acceptedFiles}
|
|
185
|
-
@igcChange=${this.handleFileUpload}
|
|
186
|
-
>
|
|
187
|
-
<igc-icon
|
|
188
|
-
slot="file-selector-text"
|
|
189
|
-
name="attachment"
|
|
190
|
-
collection="material"
|
|
191
|
-
></igc-icon>
|
|
192
|
-
</igc-file-input>
|
|
193
|
-
`}
|
|
194
|
-
|
|
195
|
-
<div class="input-wrapper">
|
|
196
|
-
<igc-textarea
|
|
197
|
-
class="text-input"
|
|
198
|
-
placeholder="Type a message..."
|
|
199
|
-
rows="1"
|
|
200
|
-
.value=${this.inputValue}
|
|
201
|
-
@input=${this.handleInput}
|
|
202
|
-
@keydown=${this.handleKeyDown}
|
|
203
|
-
></igc-textarea>
|
|
204
|
-
</div>
|
|
205
|
-
|
|
206
|
-
<div class="buttons-container">
|
|
207
|
-
<igc-icon-button
|
|
208
|
-
name="send-message"
|
|
209
|
-
collection="material"
|
|
210
|
-
variant="contained"
|
|
211
|
-
class="small"
|
|
212
|
-
?disabled=${!this.inputValue.trim() &&
|
|
213
|
-
this.attachments.length === 0}
|
|
214
|
-
@click=${this.sendMessage}
|
|
215
|
-
></igc-icon-button>
|
|
216
|
-
</div>
|
|
217
|
-
</div>
|
|
218
|
-
<div>
|
|
219
|
-
${this.attachments?.map((attachment, index) => html `
|
|
220
|
-
<div class="attachment-wrapper">
|
|
221
|
-
<igc-chip
|
|
222
|
-
removable
|
|
223
|
-
@igcRemove=${() => this.removeAttachment(index)}
|
|
224
|
-
>
|
|
225
|
-
<span class="attachment-name">${attachment.name}</span>
|
|
226
|
-
</igc-chip>
|
|
227
|
-
</div>
|
|
228
|
-
`)}
|
|
229
|
-
</div>
|
|
230
|
-
`;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
IgcChatInputComponent.tagName = 'igc-chat-input';
|
|
234
|
-
IgcChatInputComponent.styles = styles;
|
|
235
|
-
export default IgcChatInputComponent;
|
|
236
|
-
__decorate([
|
|
237
|
-
consume({ context: chatContext, subscribe: true })
|
|
238
|
-
], IgcChatInputComponent.prototype, "_chat", void 0);
|
|
239
|
-
__decorate([
|
|
240
|
-
query('textarea')
|
|
241
|
-
], IgcChatInputComponent.prototype, "textInputElement", void 0);
|
|
242
|
-
__decorate([
|
|
243
|
-
watch('acceptedFiles', { waitUntilFirstUpdate: true })
|
|
244
|
-
], IgcChatInputComponent.prototype, "acceptedFilesChange", null);
|
|
245
|
-
__decorate([
|
|
246
|
-
state()
|
|
247
|
-
], IgcChatInputComponent.prototype, "inputValue", void 0);
|
|
248
|
-
__decorate([
|
|
249
|
-
state()
|
|
250
|
-
], IgcChatInputComponent.prototype, "attachments", void 0);
|
|
251
|
-
__decorate([
|
|
252
|
-
state()
|
|
253
|
-
], IgcChatInputComponent.prototype, "dragClass", void 0);
|
|
254
|
-
//# sourceMappingURL=chat-input.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { query, state } from 'lit/decorators.js';\nimport IgcIconButtonComponent from '../button/icon-button.js';\nimport IgcChipComponent from '../chip/chip.js';\nimport { chatContext } from '../common/context.js';\nimport { watch } from '../common/decorators/watch.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcFileInputComponent from '../file-input/file-input.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { registerIconFromText } from '../icon/icon.registry.js';\nimport IgcTextareaComponent from '../textarea/textarea.js';\nimport type IgcChatComponent from './chat.js';\nimport { styles } from './themes/input.base.css.js';\nimport {\n type IgcMessageAttachment,\n attachmentIcon,\n sendButtonIcon,\n} from './types.js';\n\n/**\n *\n * @element igc-chat-input\n *\n */\nexport default class IgcChatInputComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-input';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatInputComponent,\n IgcTextareaComponent,\n IgcIconButtonComponent,\n IgcChipComponent,\n IgcFileInputComponent,\n IgcIconComponent\n );\n }\n\n @query('textarea')\n private textInputElement!: HTMLTextAreaElement;\n\n @watch('acceptedFiles', { waitUntilFirstUpdate: true })\n protected acceptedFilesChange(): void {\n this.updateAcceptedTypesCache();\n }\n\n @state()\n private inputValue = '';\n\n @state()\n private attachments: IgcMessageAttachment[] = [];\n\n @state()\n private dragClass = '';\n\n // Cache for accepted file types\n private _acceptedTypesCache: {\n extensions: Set<string>;\n mimeTypes: Set<string>;\n wildcardTypes: Set<string>;\n } | null = null;\n\n constructor() {\n super();\n registerIconFromText('attachment', attachmentIcon, 'material');\n registerIconFromText('send-message', sendButtonIcon, 'material');\n }\n\n protected override firstUpdated() {\n this.setupDragAndDrop();\n this.updateAcceptedTypesCache();\n }\n\n private handleInput(e: Event) {\n const target = e.target as HTMLTextAreaElement;\n this.inputValue = target.value;\n this.adjustTextareaHeight();\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n }\n }\n\n private setupDragAndDrop() {\n const container = this.shadowRoot?.querySelector(\n '.input-container'\n ) as HTMLElement;\n if (container) {\n container.addEventListener('dragenter', this.handleDragEnter.bind(this));\n container.addEventListener('dragover', this.handleDragOver.bind(this));\n container.addEventListener('dragleave', this.handleDragLeave.bind(this));\n container.addEventListener('drop', this.handleDrop.bind(this));\n }\n }\n\n private handleDragEnter(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n const files = Array.from(e.dataTransfer?.items || []).filter(\n (item) => item.kind === 'file'\n );\n const hasValidFiles = files.some((item) =>\n this.isFileTypeAccepted(item.getAsFile() as File, item.type)\n );\n\n this.dragClass = hasValidFiles ? 'dragging' : '';\n }\n\n private handleDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n private handleDragLeave(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n // Check if we're actually leaving the container\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const x = e.clientX;\n const y = e.clientY;\n\n if (\n x <= rect.left ||\n x >= rect.right ||\n y <= rect.top ||\n y >= rect.bottom\n ) {\n this.dragClass = '';\n }\n }\n\n private handleDrop(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.dragClass = '';\n\n const files = Array.from(e.dataTransfer?.files || []);\n if (files.length === 0) return;\n\n const validFiles = files.filter((file) => this.isFileTypeAccepted(file));\n\n this.attachFiles(validFiles);\n }\n\n private adjustTextareaHeight() {\n const textarea = this.textInputElement;\n if (!textarea) return;\n\n textarea.style.height = 'auto';\n const newHeight = Math.min(textarea.scrollHeight, 120);\n textarea.style.height = `${newHeight}px`;\n }\n\n private sendMessage() {\n if (!this.inputValue.trim() && this.attachments.length === 0) return;\n\n const messageEvent = new CustomEvent('message-created', {\n detail: { text: this.inputValue, attachments: this.attachments },\n });\n\n this.dispatchEvent(messageEvent);\n this.inputValue = '';\n this.attachments = [];\n\n if (this.textInputElement) {\n this.textInputElement.style.height = 'auto';\n }\n\n setTimeout(() => {\n this.textInputElement?.focus();\n }, 0);\n }\n\n private handleFileUpload(e: Event) {\n const input = (e.target as any).input as HTMLInputElement;\n if (!input.files || input.files.length === 0) return;\n\n const files = Array.from(input.files);\n this.attachFiles(files);\n }\n\n private attachFiles(files: File[]) {\n const newAttachments: IgcMessageAttachment[] = [];\n let count = this.attachments.length;\n files.forEach((file) => {\n const isImage = file.type.startsWith('image/');\n newAttachments.push({\n id: Date.now().toString() + count++,\n // type: isImage ? 'image' : 'file',\n url: URL.createObjectURL(file),\n name: file.name,\n file: file,\n thumbnail: isImage ? URL.createObjectURL(file) : undefined,\n });\n });\n this.attachments = [...this.attachments, ...newAttachments];\n }\n\n private updateAcceptedTypesCache() {\n if (!this._chat?.options?.acceptedFiles) {\n this._acceptedTypesCache = null;\n return;\n }\n\n const types = this._chat?.options?.acceptedFiles\n .split(',')\n .map((type) => type.trim().toLowerCase());\n this._acceptedTypesCache = {\n extensions: new Set(types.filter((t) => t.startsWith('.'))),\n mimeTypes: new Set(\n types.filter((t) => !t.startsWith('.') && !t.endsWith('/*'))\n ),\n wildcardTypes: new Set(\n types.filter((t) => t.endsWith('/*')).map((t) => t.slice(0, -2))\n ),\n };\n }\n\n private isFileTypeAccepted(file: File, type = ''): boolean {\n if (!this._acceptedTypesCache) return true;\n\n if (file === null && type === '') return false;\n\n const fileType =\n file != null ? file.type.toLowerCase() : type.toLowerCase();\n const fileExtension =\n file != null\n ? `.${file.name.split('.').pop()?.toLowerCase()}`\n : `.${type.split('/').pop()?.toLowerCase()}`;\n\n // Check file extension\n if (this._acceptedTypesCache.extensions.has(fileExtension)) {\n return true;\n }\n\n // Check exact MIME type\n if (this._acceptedTypesCache.mimeTypes.has(fileType)) {\n return true;\n }\n\n // Check wildcard MIME types\n const [fileBaseType] = fileType.split('/');\n return this._acceptedTypesCache.wildcardTypes.has(fileBaseType);\n }\n\n private removeAttachment(index: number) {\n this.attachments = this.attachments.filter((_, i) => i !== index);\n }\n\n protected override render() {\n return html`\n <div class=\"input-container ${this.dragClass}\">\n ${this._chat?.options?.disableAttachments\n ? ''\n : html`\n <igc-file-input\n multiple\n .accept=${this._chat?.options?.acceptedFiles}\n @igcChange=${this.handleFileUpload}\n >\n <igc-icon\n slot=\"file-selector-text\"\n name=\"attachment\"\n collection=\"material\"\n ></igc-icon>\n </igc-file-input>\n `}\n\n <div class=\"input-wrapper\">\n <igc-textarea\n class=\"text-input\"\n placeholder=\"Type a message...\"\n rows=\"1\"\n .value=${this.inputValue}\n @input=${this.handleInput}\n @keydown=${this.handleKeyDown}\n ></igc-textarea>\n </div>\n\n <div class=\"buttons-container\">\n <igc-icon-button\n name=\"send-message\"\n collection=\"material\"\n variant=\"contained\"\n class=\"small\"\n ?disabled=${!this.inputValue.trim() &&\n this.attachments.length === 0}\n @click=${this.sendMessage}\n ></igc-icon-button>\n </div>\n </div>\n <div>\n ${this.attachments?.map(\n (attachment, index) => html`\n <div class=\"attachment-wrapper\">\n <igc-chip\n removable\n @igcRemove=${() => this.removeAttachment(index)}\n >\n <span class=\"attachment-name\">${attachment.name}</span>\n </igc-chip>\n </div>\n `\n )}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-input': IgcChatInputComponent;\n }\n}\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* @element igc-chat-message-list
|
|
5
|
-
*
|
|
6
|
-
*/
|
|
7
|
-
export default class IgcChatMessageListComponent extends LitElement {
|
|
8
|
-
/** @private */
|
|
9
|
-
static readonly tagName = "igc-chat-message-list";
|
|
10
|
-
static styles: import("lit").CSSResult;
|
|
11
|
-
private _chat?;
|
|
12
|
-
static register(): void;
|
|
13
|
-
private formatDate;
|
|
14
|
-
private groupMessagesByDate;
|
|
15
|
-
private scrollToBottom;
|
|
16
|
-
protected updated(): void;
|
|
17
|
-
protected firstUpdated(): void;
|
|
18
|
-
protected render(): import("lit-html").TemplateResult<1>;
|
|
19
|
-
}
|
|
20
|
-
declare global {
|
|
21
|
-
interface HTMLElementTagNameMap {
|
|
22
|
-
'igc-chat-message-list': IgcChatMessageListComponent;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
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 { LitElement, html } from 'lit';
|
|
9
|
-
import { repeat } from 'lit/directives/repeat.js';
|
|
10
|
-
import { chatContext } from '../common/context.js';
|
|
11
|
-
import { registerComponent } from '../common/definitions/register.js';
|
|
12
|
-
import IgcChatMessageComponent from './chat-message.js';
|
|
13
|
-
import { styles } from './themes/message-list.base.css.js';
|
|
14
|
-
class IgcChatMessageListComponent extends LitElement {
|
|
15
|
-
static register() {
|
|
16
|
-
registerComponent(IgcChatMessageListComponent, IgcChatMessageComponent);
|
|
17
|
-
}
|
|
18
|
-
formatDate(date) {
|
|
19
|
-
const today = new Date();
|
|
20
|
-
const yesterday = new Date(today);
|
|
21
|
-
yesterday.setDate(yesterday.getDate() - 1);
|
|
22
|
-
if (date.toDateString() === today.toDateString()) {
|
|
23
|
-
return 'Today';
|
|
24
|
-
}
|
|
25
|
-
if (date.toDateString() === yesterday.toDateString()) {
|
|
26
|
-
return 'Yesterday';
|
|
27
|
-
}
|
|
28
|
-
return date.toLocaleDateString('en-US', {
|
|
29
|
-
weekday: 'long',
|
|
30
|
-
month: 'short',
|
|
31
|
-
day: 'numeric',
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
groupMessagesByDate(messages) {
|
|
35
|
-
const grouped = {};
|
|
36
|
-
messages.forEach((message) => {
|
|
37
|
-
const dateStr = this.formatDate(message.timestamp);
|
|
38
|
-
if (!grouped[dateStr]) {
|
|
39
|
-
grouped[dateStr] = [];
|
|
40
|
-
}
|
|
41
|
-
grouped[dateStr].push(message);
|
|
42
|
-
});
|
|
43
|
-
return Object.keys(grouped).map((date) => ({
|
|
44
|
-
date,
|
|
45
|
-
messages: grouped[date],
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
scrollToBottom() {
|
|
49
|
-
requestAnimationFrame(() => {
|
|
50
|
-
const container = this.shadowRoot?.host;
|
|
51
|
-
if (container) {
|
|
52
|
-
container.scrollTop = container.scrollHeight;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
updated() {
|
|
57
|
-
if (!this._chat?.options?.disableAutoScroll) {
|
|
58
|
-
this.scrollToBottom();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
firstUpdated() {
|
|
62
|
-
if (!this._chat?.options?.disableAutoScroll) {
|
|
63
|
-
this.scrollToBottom();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
render() {
|
|
67
|
-
const groupedMessages = this.groupMessagesByDate(this._chat?.messages ?? []);
|
|
68
|
-
return html `
|
|
69
|
-
<div class='message-container'></div>
|
|
70
|
-
<div class="message-list">
|
|
71
|
-
${repeat(groupedMessages, (group) => group.date, (group) => html `
|
|
72
|
-
${repeat(group.messages, (message) => message.id, (message) => html `
|
|
73
|
-
<igc-chat-message .message=${message}></igc-chat-message>
|
|
74
|
-
`)}
|
|
75
|
-
`)}
|
|
76
|
-
${''}
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
`;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
IgcChatMessageListComponent.tagName = 'igc-chat-message-list';
|
|
83
|
-
IgcChatMessageListComponent.styles = styles;
|
|
84
|
-
export default IgcChatMessageListComponent;
|
|
85
|
-
__decorate([
|
|
86
|
-
consume({ context: chatContext, subscribe: true })
|
|
87
|
-
], IgcChatMessageListComponent.prototype, "_chat", void 0);
|
|
88
|
-
//# sourceMappingURL=chat-message-list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat-message-list.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { chatContext } from '../common/context.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport IgcChatMessageComponent from './chat-message.js';\nimport type IgcChatComponent from './chat.js';\nimport { styles } from './themes/message-list.base.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n *\n * @element igc-chat-message-list\n *\n */\nexport default class IgcChatMessageListComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-message-list';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcChatMessageListComponent, IgcChatMessageComponent);\n }\n\n private formatDate(date: Date): string {\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n\n if (date.toDateString() === today.toDateString()) {\n return 'Today';\n }\n\n if (date.toDateString() === yesterday.toDateString()) {\n return 'Yesterday';\n }\n\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'short',\n day: 'numeric',\n });\n }\n\n private groupMessagesByDate(\n messages: IgcMessage[]\n ): { date: string; messages: IgcMessage[] }[] {\n const grouped: { [key: string]: IgcMessage[] } = {};\n\n messages.forEach((message) => {\n const dateStr = this.formatDate(message.timestamp);\n if (!grouped[dateStr]) {\n grouped[dateStr] = [];\n }\n grouped[dateStr].push(message);\n });\n\n return Object.keys(grouped).map((date) => ({\n date,\n messages: grouped[date],\n }));\n }\n\n private scrollToBottom() {\n requestAnimationFrame(() => {\n const container = this.shadowRoot?.host as HTMLElement;\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n });\n }\n\n protected override updated() {\n if (!this._chat?.options?.disableAutoScroll) {\n this.scrollToBottom();\n }\n }\n\n protected override firstUpdated() {\n if (!this._chat?.options?.disableAutoScroll) {\n this.scrollToBottom();\n }\n }\n\n protected override render() {\n const groupedMessages = this.groupMessagesByDate(\n this._chat?.messages ?? []\n );\n\n return html`\n <div class='message-container'></div>\n <div class=\"message-list\">\n ${repeat(\n groupedMessages,\n (group) => group.date,\n (group) => html`\n ${repeat(\n group.messages,\n (message) => message.id,\n (message) => html`\n <igc-chat-message .message=${message}></igc-chat-message>\n `\n )}\n `\n )}\n ${\n ''\n // this.isAiResponding\n // ? html`\n // <div class=\"typing-indicator\">\n // <div class=\"typing-dot\"></div>\n // <div class=\"typing-dot\"></div>\n // <div class=\"typing-dot\"></div>\n // </div>\n // `\n // : ''\n }\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message-list': IgcChatMessageListComponent;\n }\n}\n"]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
import type { IgcMessage } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* @element igc-chat-message
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
export default class IgcChatMessageComponent extends LitElement {
|
|
9
|
-
/** @private */
|
|
10
|
-
static readonly tagName = "igc-chat-message";
|
|
11
|
-
static styles: import("lit").CSSResult;
|
|
12
|
-
private _chat?;
|
|
13
|
-
static register(): void;
|
|
14
|
-
message: IgcMessage | undefined;
|
|
15
|
-
protected render(): import("lit-html").TemplateResult<1>;
|
|
16
|
-
}
|
|
17
|
-
declare global {
|
|
18
|
-
interface HTMLElementTagNameMap {
|
|
19
|
-
'igc-chat-message': IgcChatMessageComponent;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
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 { LitElement, html } from 'lit';
|
|
9
|
-
import { property } from 'lit/decorators.js';
|
|
10
|
-
import IgcAvatarComponent from '../avatar/avatar.js';
|
|
11
|
-
import { chatContext } from '../common/context.js';
|
|
12
|
-
import { registerComponent } from '../common/definitions/register.js';
|
|
13
|
-
import { renderMarkdown } from './markdown-util.js';
|
|
14
|
-
import IgcMessageAttachmentsComponent from './message-attachments.js';
|
|
15
|
-
import { styles } from './themes/message.base.css.js';
|
|
16
|
-
class IgcChatMessageComponent extends LitElement {
|
|
17
|
-
static register() {
|
|
18
|
-
registerComponent(IgcChatMessageComponent, IgcMessageAttachmentsComponent, IgcAvatarComponent);
|
|
19
|
-
}
|
|
20
|
-
render() {
|
|
21
|
-
const containerClass = `message-container ${this.message?.sender === 'user' ? 'sent' : ''}`;
|
|
22
|
-
return html `
|
|
23
|
-
<div class=${containerClass}>
|
|
24
|
-
<div class="bubble">
|
|
25
|
-
${this.message?.text.trim()
|
|
26
|
-
? html ` <div>${renderMarkdown(this.message?.text)}</div>`
|
|
27
|
-
: ''}
|
|
28
|
-
${this.message?.attachments && this.message?.attachments.length > 0
|
|
29
|
-
? html `<igc-message-attachments
|
|
30
|
-
.attachments=${this.message?.attachments}
|
|
31
|
-
>
|
|
32
|
-
</igc-message-attachments>`
|
|
33
|
-
: ''}
|
|
34
|
-
${this._chat?.options?.templates?.messageActionsTemplate &&
|
|
35
|
-
this.message
|
|
36
|
-
? this._chat.options.templates.messageActionsTemplate(this.message)
|
|
37
|
-
: ''}
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
`;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
IgcChatMessageComponent.tagName = 'igc-chat-message';
|
|
44
|
-
IgcChatMessageComponent.styles = styles;
|
|
45
|
-
export default IgcChatMessageComponent;
|
|
46
|
-
__decorate([
|
|
47
|
-
consume({ context: chatContext, subscribe: true })
|
|
48
|
-
], IgcChatMessageComponent.prototype, "_chat", void 0);
|
|
49
|
-
__decorate([
|
|
50
|
-
property({ reflect: true, attribute: false })
|
|
51
|
-
], IgcChatMessageComponent.prototype, "message", void 0);
|
|
52
|
-
//# sourceMappingURL=chat-message.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACvC,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;AAQtD,MAAqB,uBAAwB,SAAQ,UAAU;IAUtD,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CACf,uBAAuB,EACvB,8BAA8B,EAC9B,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAKkB,MAAM;QACvB,MAAM,cAAc,GAAG,qBAAqB,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAE5F,OAAO,IAAI,CAAA;mBACI,cAAc;;YAErB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;YACzB,CAAC,CAAC,IAAI,CAAA,SAAS,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACzD,CAAC,CAAC,EAAE;YACJ,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACjE,CAAC,CAAC,IAAI,CAAA;+BACa,IAAI,CAAC,OAAO,EAAE,WAAW;;yCAEf;YAC7B,CAAC,CAAC,EAAE;YACJ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB;YACxD,IAAI,CAAC,OAAO;YACV,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;YACnE,CAAC,CAAC,EAAE;;;KAGX,CAAC;IACJ,CAAC;;AAzCsB,+BAAO,GAAG,kBAAkB,CAAC;AAE7B,8BAAM,GAAG,MAAM,CAAC;eAJpB,uBAAuB;AAOlC;IADP,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;sDAClB;AAY1B;IADN,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wDACP","sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement, html } 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 IgcChatComponent from './chat.js';\nimport { renderMarkdown } from './markdown-util.js';\nimport IgcMessageAttachmentsComponent from './message-attachments.js';\nimport { styles } from './themes/message.base.css.js';\nimport type { IgcMessage } from './types.js';\n\n/**\n *\n * @element igc-chat-message\n *\n */\nexport default class IgcChatMessageComponent extends LitElement {\n /** @private */\n public static readonly tagName = 'igc-chat-message';\n\n public static override styles = styles;\n\n @consume({ context: chatContext, subscribe: true })\n private _chat?: IgcChatComponent;\n\n /* blazorSuppress */\n public static register() {\n registerComponent(\n IgcChatMessageComponent,\n IgcMessageAttachmentsComponent,\n IgcAvatarComponent\n );\n }\n\n @property({ reflect: true, attribute: false })\n public message: IgcMessage | undefined;\n\n protected override render() {\n const containerClass = `message-container ${this.message?.sender === 'user' ? 'sent' : ''}`;\n\n return html`\n <div class=${containerClass}>\n <div class=\"bubble\">\n ${this.message?.text.trim()\n ? html` <div>${renderMarkdown(this.message?.text)}</div>`\n : ''}\n ${this.message?.attachments && this.message?.attachments.length > 0\n ? html`<igc-message-attachments\n .attachments=${this.message?.attachments}\n >\n </igc-message-attachments>`\n : ''}\n ${this._chat?.options?.templates?.messageActionsTemplate &&\n this.message\n ? this._chat.options.templates.messageActionsTemplate(this.message)\n : ''}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-chat-message': IgcChatMessageComponent;\n }\n}\n"]}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { LitElement } from 'lit';
|
|
2
|
-
import type { Constructor } from '../common/mixins/constructor.js';
|
|
3
|
-
import type { IgcChatOptions, IgcMessage, IgcMessageAttachment } from './types.js';
|
|
4
|
-
export interface IgcChatComponentEventMap {
|
|
5
|
-
igcMessageCreated: CustomEvent<IgcMessage>;
|
|
6
|
-
igcAttachmentClick: CustomEvent<IgcMessageAttachment>;
|
|
7
|
-
igcAttachmentChange: CustomEvent<IgcMessageAttachment>;
|
|
8
|
-
igcTypingChange: CustomEvent<boolean>;
|
|
9
|
-
igcInputFocus: CustomEvent<void>;
|
|
10
|
-
igcInputBlur: CustomEvent<void>;
|
|
11
|
-
igcInputChange: CustomEvent<string>;
|
|
12
|
-
igcMessageCopied: CustomEvent<IgcMessage>;
|
|
13
|
-
}
|
|
14
|
-
declare const IgcChatComponent_base: Constructor<import("../common/mixins/event-emitter.js").EventEmitterInterface<IgcChatComponentEventMap>> & Constructor<LitElement>;
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* @element igc-chat
|
|
18
|
-
*
|
|
19
|
-
*/
|
|
20
|
-
export default class IgcChatComponent extends IgcChatComponent_base {
|
|
21
|
-
/** @private */
|
|
22
|
-
static readonly tagName = "igc-chat";
|
|
23
|
-
static styles: import("lit").CSSResult;
|
|
24
|
-
static register(): void;
|
|
25
|
-
private _context;
|
|
26
|
-
messages: IgcMessage[];
|
|
27
|
-
options?: IgcChatOptions;
|
|
28
|
-
protected contextChanged(): void;
|
|
29
|
-
connectedCallback(): void;
|
|
30
|
-
disconnectedCallback(): void;
|
|
31
|
-
private handleSendMessage;
|
|
32
|
-
private handleAttachmentClick;
|
|
33
|
-
protected firstUpdated(): void;
|
|
34
|
-
protected render(): import("lit-html").TemplateResult<1>;
|
|
35
|
-
}
|
|
36
|
-
declare global {
|
|
37
|
-
interface HTMLElementTagNameMap {
|
|
38
|
-
'igc-chat': IgcChatComponent;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
export {};
|