-
{{pluralize this.notifications.length "Unread Notification"}}
+
\ No newline at end of file
diff --git a/addon/components/notification-tray.js b/addon/components/notification-tray.js
index e177ffe..4782962 100644
--- a/addon/components/notification-tray.js
+++ b/addon/components/notification-tray.js
@@ -82,7 +82,7 @@ export default class NotificationTrayComponent extends Component {
* @memberof NotificationTrayComponent
* @type {Audio}
*/
- notificationSound = new Audio('/sounds/notification-sound.mp3');
+ @tracked notificationSound = new Audio('/sounds/notification-sound.mp3');
/**
* Creates an instance of the NotificationTrayComponent
diff --git a/addon/components/scrollable.hbs b/addon/components/scrollable.hbs
deleted file mode 100644
index cd7b179..0000000
--- a/addon/components/scrollable.hbs
+++ /dev/null
@@ -1 +0,0 @@
-
{{yield}}
\ No newline at end of file
diff --git a/addon/components/scrollable.js b/addon/components/scrollable.js
deleted file mode 100644
index 8a3aec8..0000000
--- a/addon/components/scrollable.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import Component from '@glimmer/component';
-import { tracked } from '@glimmer/tracking';
-import { action } from '@ember/object';
-
-export default class ScrollableComponent extends Component {
- @tracked horizontal = false;
- @tracked vertical = true;
- @tracked nodeRef;
-
- @action setupComponent(element) {
- const { onSetup, horizontal, vertical } = this.args;
-
- this.nodeRef = element;
- this.horizontal = horizontal;
- this.vertical = vertical;
-
- if (typeof onSetup === 'function') {
- onSetup(...arguments);
- }
-
- this.makeScrollable(element);
- }
-
- @action makeScrollable(element) {
- this.setComputedSize(element);
-
- const resizeObserver = new ResizeObserver(this.onResize);
- resizeObserver.observe(element);
- }
-
- @action setComputedSize(element) {
- const { clientHeight } = element;
-
- element.style.height = `${clientHeight}px`;
- element.style.overflowY = 'scroll';
- }
-
- @action onResize([entry]) {
- console.log('elemen has been resized! #entry', entry);
- }
-}
diff --git a/addon/helpers/can-remove-chat-participant.js b/addon/helpers/can-remove-chat-participant.js
new file mode 100644
index 0000000..c414546
--- /dev/null
+++ b/addon/helpers/can-remove-chat-participant.js
@@ -0,0 +1,16 @@
+import { helper } from '@ember/component/helper';
+
+export default helper(function canRemoveChatParticipant([channel, currentParticipant, focusedParticipant]) {
+ // Cannot remove the creator of the channel
+ if (channel.created_by_uuid === focusedParticipant.user_uuid) {
+ return false;
+ }
+
+ const isChannelCreator = currentParticipant && channel.created_by_uuid === currentParticipant.user_uuid;
+ const isFocusingSelf = currentParticipant && currentParticipant.id === focusedParticipant.id;
+ if (isChannelCreator || isFocusingSelf) {
+ return true;
+ }
+
+ return false;
+});
diff --git a/addon/helpers/noop.js b/addon/helpers/noop.js
index 3d91d69..3ab666b 100644
--- a/addon/helpers/noop.js
+++ b/addon/helpers/noop.js
@@ -1,6 +1,5 @@
import { helper } from '@ember/component/helper';
-
-const noopFn = () => {};
+import noopFn from '../utils/noop';
export default helper(function noop() {
return noopFn;
diff --git a/addon/styles/addon.css b/addon/styles/addon.css
index 1222780..8dc3966 100644
--- a/addon/styles/addon.css
+++ b/addon/styles/addon.css
@@ -44,6 +44,7 @@
@import 'components/sidebar-toggle.css';
@import 'components/countdown.css';
@import 'components/otp-input.css';
+@import 'components/chat.css';
/** Third party */
@import 'air-datepicker/air-datepicker.css';
diff --git a/addon/styles/components/attacher.css b/addon/styles/components/attacher.css
index 7668767..5c5f48f 100644
--- a/addon/styles/components/attacher.css
+++ b/addon/styles/components/attacher.css
@@ -114,7 +114,9 @@
.ember-attacher-light-theme {
background-color: #f3f6f9;
border: 1px solid #ced2e2;
- box-shadow: 0 0 16px -4px rgba(0, 20, 40, 0.2), 0 0 80px -10px rgba(0, 20, 40, 0.3);
+ box-shadow:
+ 0 0 16px -4px rgba(0, 20, 40, 0.2),
+ 0 0 80px -10px rgba(0, 20, 40, 0.3);
color: #203d5d;
}
@@ -253,4 +255,4 @@
max-width: 96%;
max-width: calc(100% - 42px);
}
-}
\ No newline at end of file
+}
diff --git a/addon/styles/components/badge.css b/addon/styles/components/badge.css
index 468a388..6eabeb9 100644
--- a/addon/styles/components/badge.css
+++ b/addon/styles/components/badge.css
@@ -3,6 +3,16 @@
width: fit-content;
}
+.status-badge > span.badge-rounded-full {
+ width: 0.5rem;
+ height: 0.5rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ border-radius: 100%;
+}
+
.status-badge > span {
@apply text-gray-800 bg-gray-100;
}
@@ -75,6 +85,7 @@
}
.status-badge[class*='4'] > span,
+.status-badge.offline-status-badge > span,
.status-badge.pending-review-badge > span,
.status-badge.awaiting-review-badge > span,
.status-badge.scheduled-maintenance-badge > span,
@@ -89,6 +100,7 @@
}
.status-badge[class*='4'] > span svg,
+.status-badge.offline-status-badge > span svg,
.status-badge.pending-review-badge > span svg,
.status-badge.awaiting-review-badge > span svg,
.status-badge.scheduled-maintenance-badge > span svg,
@@ -102,14 +114,6 @@
@apply text-yellow-400;
}
-.status-badge.offline-status-badge > span {
- @apply text-gray-700 bg-gray-300;
-}
-
-.status-badge.offline-status-badge > span svg {
- @apply text-gray-700;
-}
-
.status-badge.operational-suggestion-status-badge > span,
.status-badge.dispatched-status-badge > span,
.status-badge.assigned-status-badge > span {
diff --git a/addon/styles/components/chat.css b/addon/styles/components/chat.css
new file mode 100644
index 0000000..5f8afaa
--- /dev/null
+++ b/addon/styles/components/chat.css
@@ -0,0 +1,699 @@
+.chat-tray-panel-container {
+ box-shadow:
+ 0 4px 6px -1px rgb(0 0 0 / 0.1),
+ 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ margin-top: 0.75rem;
+ background-color: #f9fafb;
+ border: 1px #e5e7eb solid;
+ border-radius: 0.5rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 400px;
+ @apply space-y-2;
+}
+
+body[data-theme='dark'] .chat-tray-panel-container {
+ background-color: #111827;
+ border-color: #374151;
+}
+
+.chat-container {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ z-index: 800;
+ margin-right: 1rem;
+}
+
+.chat-window-container {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ margin-left: calc(360px + 2rem);
+ margin-bottom: 1rem;
+ z-index: 800;
+ display: flex;
+ flex-direction: column;
+ width: 360px;
+ height: 483px;
+ min-height: 483px;
+ max-height: 553px;
+ box-shadow:
+ 0 4px 6px -1px rgb(0 0 0 / 0.1),
+ 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ border: 1px #d1d5db solid;
+ border-radius: 1rem;
+ background-color: #f9fafb;
+ transition: transform 0.5s ease;
+}
+
+.chat-window-container.has-attachments {
+ min-height: 513px;
+}
+
+body[data-theme='dark'] .chat-window-container {
+ background-color: #1f2937;
+ border-color: #374151;
+}
+
+.chat-window-container a,
+.chat-window-container button {
+ cursor: default !important;
+}
+
+.chat-window-input-container {
+ display: flex;
+ flex-direction: column;
+ background-color: #f9fafb;
+ border-bottom-left-radius: 1rem;
+ border-bottom-right-radius: 1rem;
+}
+
+body[data-theme='dark'] .chat-window-input-container {
+ background-color: #1f2937;
+}
+
+.chat-window-input-box {
+ flex: 1;
+ width: 100%;
+ background-color: #f9fafb;
+}
+
+body[data-theme='dark'] .chat-window-input-box {
+ background-color: #1f2937;
+}
+
+.chat-window-input {
+ height: 80px;
+ max-height: 80px;
+ min-height: 80px;
+ flex: 1;
+ padding: 0.6rem;
+ font-size: 0.75rem;
+ background-color: #f9fafb;
+ width: 100%;
+ border: 0;
+ outline: none;
+ box-shadow: none;
+}
+
+body[data-theme='dark'] .chat-window-input {
+ background-color: #1f2937;
+ color: #f9fafb;
+}
+
+.chat-window-input:focus {
+ border: 0;
+ outline: none;
+ box-shadow: none;
+}
+
+.chat-window-submit-container {
+ flex: 1;
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: end;
+ padding: 0.5rem;
+}
+
+.chat-window-submit-container .btn-wrapper {
+ border: 0;
+ outline: none;
+ box-shadow: none;
+}
+
+.chat-window-attachment-input a.btn.btn-xs,
+.chat-window-attachment-input a,
+.chat-window-submit-container button.btn.btn-xs,
+.chat-window-submit-container button {
+ background-color: #64748b;
+ border: 1px solid #64748b;
+ color: #f9fafb;
+}
+
+body[data-theme='dark'] .chat-window-attachment-input a.btn.btn-xs,
+body[data-theme='dark'] .chat-window-attachment-input a,
+body[data-theme='dark'] .chat-window-submit-container button.btn.btn-xs,
+body[data-theme='dark'] .chat-window-submit-container button {
+ background-color: #374151;
+ color: #f3f4f6;
+ border-color: #111827;
+}
+
+.chat-window-attachment-input a.btn.btn-xs:hover,
+.chat-window-attachment-input a:hover,
+.chat-window-submit-container button.btn.btn-xs:hover,
+.chat-window-submit-container button:hover {
+ background-color: #64748b;
+ border: 1px solid #64748b;
+ color: #f9fafb;
+ opacity: 0.5;
+}
+
+body[data-theme='dark'] .chat-window-attachment-input a.btn.btn-xs:hover,
+body[data-theme='dark'] .chat-window-attachment-input a:hover,
+body[data-theme='dark'] .chat-window-submit-container button.btn.btn-xs:hover,
+body[data-theme='dark'] .chat-window-submit-container button:hover {
+ background-color: #374151;
+ color: #f3f4f6;
+ border-color: #111827;
+ opacity: 0.5;
+}
+
+.chat-window-controls-container {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ border-top-left-radius: 1rem;
+ border-top-right-radius: 1rem;
+ background-color: #f9fafb;
+ padding: 0.5rem 0.5rem;
+}
+
+body[data-theme='dark'] .chat-window-controls-container {
+ background-color: #1f2937;
+}
+
+.chat-window-controls-container .chat-window-name {
+ display: flex;
+ align-items: center;
+ text-align: left;
+ font-size: 0.75rem;
+ font-weight: 500;
+ color: #000;
+ flex: 1;
+}
+
+body[data-theme='dark'] .chat-window-controls-container,
+body[data-theme='dark'] .chat-window-controls-container .chat-window-name {
+ color: #fff;
+}
+
+.chat-window-controls-container .chat-window-controls {
+ display: flex;
+ flex-direction: row;
+ justify-content: end;
+ flex: 1;
+}
+
+.chat-window-controls-container .chat-window-controls .chat-window-button {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #e5e7eb;
+ border: 1px solid #d1d5db;
+ border-radius: 0.5rem;
+ height: 24px;
+ width: 24px;
+ text-align: center;
+ font-size: 0.75rem;
+ margin-left: 0.25rem;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+ cursor: default;
+}
+
+.chat-window-controls-container .chat-window-controls .chat-window-button svg {
+ font-size: 0.5rem;
+}
+
+.chat-window-controls-container .chat-window-controls .chat-window-button:hover {
+ opacity: 0.5;
+}
+
+.chat-window-controls-container .chat-window-controls .chat-window-close-button {
+ background-color: #b91c1c;
+ border-color: #dc2626;
+ color: #fee2e2;
+}
+
+.chat-window-participants-container {
+ padding: 0rem 0.5rem 0.5rem 0.5rem;
+ background-color: #f9fafb;
+ display: flex;
+}
+
+body[data-theme='dark'] .chat-window-participants-container {
+ background-color: #1f2937;
+}
+
+.chat-window-participants-container > .chat-window-participant-name {
+ border: 1px #2563eb solid;
+ color: #e5e7eb;
+ font-size: 0.65rem;
+ width: 70px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ border-radius: 0.5rem;
+ padding: 0.25rem;
+ background-color: #3b82f6;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+}
+
+.chat-window-participants-container .chat-window-participant-bubble-container {
+ width: 35px;
+ display: flex;
+ position: relative;
+}
+
+.chat-window-participants-container .chat-window-participant-bubble-container > .chat-window-participant-online-status,
+.chat-window-participants-container .chat-window-participant-bubble-container > .chat-window-remove-participant {
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin-right: 5px;
+ margin-top: -2px;
+ border-radius: 100%;
+ background-color: #ef4444;
+ color: #fff;
+ height: 14px;
+ width: 14px;
+ font-size: 12px;
+ font-weight: bold;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ border: 1px #dc2626 solid;
+ box-shadow:
+ 0 10px 15px -3px rgb(0 0 0 / 0.1),
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
+}
+
+.chat-window-participants-container .chat-window-participant-bubble-container > .chat-window-remove-participant:hover {
+ opacity: 0.5;
+}
+
+.chat-window-participants-container .chat-window-participant-bubble-container:hover > .chat-window-remove-participant {
+ opacity: 1;
+}
+
+.chat-window-participants-container .chat-window-participant-bubble-container > .chat-window-participant-online-status {
+ opacity: 0.8;
+ height: 10px;
+ width: 10px;
+ left: 0;
+ right: unset;
+ margin-right: unset;
+ margin-left: -2px;
+ margin-top: -1px;
+ background-color: #eab308;
+ border: 1px #facc15 solid;
+}
+
+.chat-window-participants-container .chat-window-participant-bubble-container > .chat-window-participant-online-status.is-online {
+ background-color: #16a34a;
+ border: 1px #22c55e solid;
+}
+
+.chat-window-participants-container .chat-window-participant-bubble {
+ width: 24px;
+ height: 24px;
+ border-radius: 100%;
+ border: 1px #000 solid;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+}
+
+.chat-window-messages-container {
+ height: 230px;
+ max-height: 230px;
+ min-height: 230px;
+ width: 100%;
+ background-color: #fff;
+ border-bottom: 1px #e5e7eb solid;
+ border-top: 1px #e5e7eb solid;
+ overflow-y: scroll;
+}
+
+body[data-theme='dark'] .chat-window-messages-container {
+ border-color: #374151;
+ background-color: #323b49;
+ box-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
+}
+
+.chat-window-messages {
+ height: 100%;
+ width: 100%;
+ background-color: #fff;
+ padding: 0.25rem 0;
+}
+
+body[data-theme='dark'] .chat-window-messages {
+ background-color: #323b49;
+ box-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
+}
+
+.chat-window-pending-attachments-container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-self: start;
+ padding-top: 0.5rem;
+ width: 100%;
+ height: 30px;
+}
+
+.chat-window-pending-attachment {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ align-self: start;
+ border-radius: 0.25rem;
+ font-size: 0.7rem;
+ background-color: #f9fafb;
+ border: 1px #fff solid;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+ color: #0f172a;
+ position: relative;
+ padding: 0.1rem 0.25rem;
+ opacity: 0.9;
+ margin-right: 0.15rem;
+ max-height: 26px;
+}
+
+body[data-theme='dark'] .chat-window-pending-attachment {
+ background-color: #374151;
+ border-color: #1f2937;
+ color: #f3f4f6;
+}
+
+.chat-window-pending-attachment > .chat-window-pending-attachment-preview {
+ display: flex;
+ align-items: center;
+}
+
+.chat-window-pending-attachment > .chat-window-pending-attachment-preview > .x-fleetbase-file-preview > .file-icon svg {
+ font-size: 0.75rem;
+}
+
+.chat-window-pending-attachment > .chat-window-pending-attachment-preview > .flb--img.x-fleetbase-file-preview {
+ height: 20px;
+ border-radius: 0.05rem;
+}
+
+.chat-window-pending-attachment > .chat-window-pending-attachment-name {
+ font-size: 0.55rem;
+ display: flex;
+ align-items: center;
+ margin-left: 0.25rem;
+ height: 20px;
+ max-height: 20px;
+ width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.chat-window-pending-attachment > .chat-window-pending-attachment-actions {
+ display: flex;
+ justify-content: end;
+ align-items: center;
+ font-size: 0.65rem;
+}
+
+.chat-log-container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ padding-top: 0.7rem;
+ padding-bottom: 0.15rem;
+}
+
+.chat-log-container .chat-log-content-bubble-container {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ flex: 1;
+ width: 100%;
+ padding: 0 0.35rem;
+}
+
+.chat-log-container .chat-log-content-bubble {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ font-size: 0.7rem;
+ background-color: #f9fafb;
+ width: 100%;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+ color: #0f172a;
+ text-align: center;
+}
+
+body[data-theme='dark'] .chat-log-container .chat-log-content-bubble {
+ background-color: #374151;
+ color: #f9fafb;
+ border: 1px solid rgb(31 41 55 / 70%);
+}
+
+.chat-log-container .chat-log-created-at {
+ font-size: 0.5rem;
+ margin-top: 0.2rem;
+ color: #475569;
+}
+
+body[data-theme='dark'] .chat-log-container .chat-log-created-at {
+ color: #f9fafb;
+}
+
+.chat-message-container {
+ display: flex;
+ flex-direction: row;
+ padding: 0.7rem 0;
+}
+
+.chat-message-container .chat-message-content-bubble-container {
+ flex: 1;
+ width: 100%;
+ padding: 0 0.35rem;
+}
+
+.chat-message-container .chat-message-content-bubble-container.has-attachments .chat-message-content-bubble {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container {
+ display: flex;
+ flex-direction: row;
+ border-top-left-radius: 0.25rem;
+ border-top-right-radius: 0.25rem;
+ padding: 0.5rem 0.5rem 0rem 0.5rem;
+ background-color: rgb(229 231 235 / 65%);
+ width: 100%;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+}
+
+body[data-theme='dark'] .chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container {
+ background-color: #1f2937;
+ color: #f9fafb;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container .chat-attachment-container {
+ margin-right: 0.15rem;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container .chat-attachment-image-preview {
+ height: 45px;
+ width: 50px;
+ border-radius: 0.25rem;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+ border: 1px #fff solid;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container .chat-attachment-file-preview {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: start;
+ align-self: start;
+ background-color: #fff;
+ height: 45px;
+ width: 50px;
+ padding: 0.15rem;
+ border-radius: 0.25rem;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+ border: 1px #fff solid;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container .chat-attachment-file-preview:hover,
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container .chat-attachment-file-preview:focus {
+ border-color: #3b82f6;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-attachments-container .chat-attachment-file-preview .chat-attachment-file-preview-filename {
+ font-size: 0.45rem;
+ color: #000;
+ width: 50px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.chat-message-container .chat-message-content-bubble-container .chat-message-content-bubble {
+ border-radius: 0.25rem;
+ padding: 0.5rem 0.5rem 1rem 0.5rem;
+ font-size: 0.7rem;
+ background-color: rgb(229 231 235 / 65%);
+ width: 100%;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+ color: #0f172a;
+}
+
+body[data-theme='dark'] .chat-message-container .chat-message-content-bubble-container .chat-message-content-bubble {
+ background-color: #1f2937;
+ color: #f9fafb;
+}
+
+.chat-message-container .chat-message-created-at {
+ font-size: 0.5rem;
+ color: #475569;
+}
+
+body[data-theme='dark'] .chat-message-container .chat-message-created-at {
+ color: #f9fafb;
+}
+
+.chat-message-container .chat-message-receipts {
+ display: flex;
+ flex: 1;
+ flex-direction: row;
+ align-items: center;
+ justify-content: end;
+}
+
+.chat-message-container .chat-message-receipts > div:not(:last-child)::after {
+ content: ',';
+ margin-right: 5px;
+ font-size: 0.5rem;
+ color: #475569;
+}
+
+.chat-message-container .chat-message-receipts .chat-message-receipt-container {
+ display: inline-flex;
+ align-self: start;
+ font-size: 0.5rem;
+ color: #475569;
+}
+
+.chat-message-container .chat-message-receipts .chat-message-receipt {
+ font-size: 0.5rem;
+ color: #475569;
+}
+
+.chat-message-container .chat-message-receipts .chat-message-receipt svg {
+ font-size: 0.5rem;
+}
+
+body[data-theme='dark'] .chat-message-container .chat-message-receipts > div:not(:last-child)::after,
+body[data-theme='dark'] .chat-message-container .chat-message-receipts .chat-message-receipt-container,
+body[data-theme='dark'] .chat-message-container .chat-message-receipts .chat-message-receipt {
+ color: #f9fafb;
+}
+
+.chat-message-container .chat-message-sender-bubble {
+ width: 60px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: start;
+}
+
+.chat-message-container .chat-message-sender-bubble > img {
+ width: 27px;
+ height: 27px;
+ border-radius: 100%;
+ border: 1px #f3f4f6 solid;
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
+}
+
+body[data-theme='dark'] .chat-message-container .chat-message-sender-bubble > img {
+ border-color: #1f2937;
+}
+
+.chat-message-container .chat-message-sender-bubble > .chat-message-sender-name {
+ margin-top: 0.15rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ width: 50px;
+ max-width: 50px;
+ max-width: 60px;
+ font-size: 0.5rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ color: #475569;
+}
+
+body[data-theme='dark'] .chat-message-container .chat-message-sender-bubble > .chat-message-sender-name {
+ color: #fff;
+}
+
+.chat-window-attachments-container {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ width: 100%;
+ padding: 0.5rem;
+}
+
+.chat-window-attachment-input {
+ display: flex;
+ flex-direction: row;
+}
+
+.chat-tray-channel-preview:hover {
+ opacity: 0.5;
+}
+
+.chat-tray-channel-preview .chat-tray-channel-preview-last-message {
+ display: flex;
+ flex-direction: column;
+ width: 285px;
+ max-width: 285px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ text-align: left;
+}
+
+.chat-tray-channel-preview .chat-tray-channel-preview-last-message .chat-tray-channel-preview-last-message-attachments {
+ display: flex;
+ align-items: center;
+ align-self: start;
+ margin-top: 0.15rem;
+}
+
+.chat-tray-icon .chat-tray-unread-notifications-badge {
+ position: absolute;
+ top: -6px;
+ right: -6px;
+ width: 16px;
+ height: 16px;
+ background: #dc2626;
+ color: white;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 50%;
+ font-size: 10px;
+ font-weight: bold;
+}
+
+.chat-tray-icon .chat-tray-unread-notifications-badge:hover {
+ background-color: #b91c1c;
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/addon/styles/components/dashboard.css b/addon/styles/components/dashboard.css
index d1ccf8f..16b3eb4 100644
--- a/addon/styles/components/dashboard.css
+++ b/addon/styles/components/dashboard.css
@@ -16,4 +16,4 @@
.col-span-full {
grid-column: 1 / -1;
-}
\ No newline at end of file
+}
diff --git a/addon/styles/components/drawer.css b/addon/styles/components/drawer.css
index b361717..2f518ba 100644
--- a/addon/styles/components/drawer.css
+++ b/addon/styles/components/drawer.css
@@ -71,14 +71,14 @@ body[data-theme='dark'] .next-drawer > .next-drawer-panel-container > .next-draw
@apply border-2 border-gray-200 border-solid;
}
-body[data-theme="dark"] .next-drawer > .next-drawer-panel-container > .gutter {
+body[data-theme='dark'] .next-drawer > .next-drawer-panel-container > .gutter {
@apply border-gray-500;
}
.next-drawer > .next-drawer-panel-container > .gutter:hover,
.next-drawer.drawer-is-resizing > .next-drawer-panel-container > .gutter,
-body[data-theme="dark"] .next-drawer > .next-drawer-panel-container > .gutter:hover,
-body[data-theme="dark"] .next-drawer.drawer-is-resizing > .next-drawer-panel-container > .gutter {
+body[data-theme='dark'] .next-drawer > .next-drawer-panel-container > .gutter:hover,
+body[data-theme='dark'] .next-drawer.drawer-is-resizing > .next-drawer-panel-container > .gutter {
@apply border-sky-500 bg-opacity-75;
}
@@ -102,7 +102,7 @@ body[data-theme="dark"] .next-drawer.drawer-is-resizing > .next-drawer-panel-con
@apply bg-gray-200 border-2 border-white shadow-md drop-shadow-md rounded-lg;
}
-body[data-theme="dark"] .next-drawer > .next-drawer-panel-container > .gutter > .notch {
+body[data-theme='dark'] .next-drawer > .next-drawer-panel-container > .gutter > .notch {
@apply bg-gray-600 border-gray-600;
}
diff --git a/addon/styles/components/full-calendar.css b/addon/styles/components/full-calendar.css
index d7bcc80..8154e28 100644
--- a/addon/styles/components/full-calendar.css
+++ b/addon/styles/components/full-calendar.css
@@ -31,7 +31,7 @@ body[data-theme='dark'] .fleetbase-full-calendar.fc table.fc-scrollgrid {
.fleetbase-full-calendar.fc .fc-button:disabled,
.fleetbase-full-calendar.fc .fc-button-primary:disabled,
-body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button-primary:disabled {
+body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button-primary:disabled {
@apply opacity-50 cursor-not-allowed;
}
@@ -71,12 +71,12 @@ body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button .fc-icon {
@apply text-gray-300;
}
-.fleetbase-full-calendar.fc .fc-button-primary {
+.fleetbase-full-calendar.fc .fc-button-primary {
@apply bg-white border-gray-300 shadow-sm text-gray-800;
}
.fleetbase-full-calendar.fc .fc-button-primary:hover:not(:disabled) {
- @apply text-gray-500
+ @apply text-gray-500;
}
.fleetbase-full-calendar.fc .fc-button-primary:focus {
@@ -91,9 +91,9 @@ body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button .fc-icon {
@apply text-gray-900;
}
-.fleetbase-full-calendar.fc .fc-button-primary:not(:disabled).fc-button-active:focus,
+.fleetbase-full-calendar.fc .fc-button-primary:not(:disabled).fc-button-active:focus,
.fleetbase-full-calendar.fc .fc-button-primary:not(:disabled):active:focus,
-body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button-primary:not(:disabled).fc-button-active:focus,
+body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button-primary:not(:disabled).fc-button-active:focus,
body[data-theme='dark'] .fleetbase-full-calendar.fc .fc-button-primary:not(:disabled):active:focus {
box-shadow: none;
-}
\ No newline at end of file
+}
diff --git a/addon/styles/components/input.css b/addon/styles/components/input.css
index 97ce046..4885550 100644
--- a/addon/styles/components/input.css
+++ b/addon/styles/components/input.css
@@ -525,7 +525,10 @@ body[data-theme='dark'] .iti__country-list {
.fleetbase-console .form-checkbox:focus-visible,
.fleetbase-console .form-checkbox:focus-within,
.fleetbase-console .form-radio:focus {
- box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow) !important;
+ box-shadow:
+ 0 0 rgba(0, 0, 0, 0),
+ 0 0 rgba(0, 0, 0, 0),
+ var(--tw-shadow) !important;
box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-shadow) !important;
}
@@ -548,8 +551,8 @@ body[data-theme='dark'] .iti__country-list {
@apply w-4 h-4 transition duration-150 ease-in-out bg-gray-200 border-gray-200 dark:bg-gray-800 dark:border-gray-900;
}
-body[data-theme="light"] .form-checkbox,
-body[data-theme="light"] .form-radio {
+body[data-theme='light'] .form-checkbox,
+body[data-theme='light'] .form-radio {
@apply border-gray-200;
}
diff --git a/addon/styles/components/kanban.css b/addon/styles/components/kanban.css
index 89b3514..acb2a9d 100644
--- a/addon/styles/components/kanban.css
+++ b/addon/styles/components/kanban.css
@@ -1,4 +1,4 @@
-.kanban-container {
+.kanban-container {
display: flex;
width: 100%;
max-width: 100%;
@@ -17,7 +17,7 @@
.kanban-container .kanban-inner-container .kanban-column {
width: 300px;
height: 100%;
- border-radius: .5rem;
+ border-radius: 0.5rem;
margin-right: 1.25rem;
@apply bg-gray-300 dark:bg-gray-800 shadow-sm;
}
@@ -25,12 +25,12 @@
.kanban-container .kanban-inner-container .kanban-column > .kanban-column-header {
display: flex;
flex-direction: row;
- border-top-left-radius: .5rem;
- border-top-right-radius: .5rem;
+ border-top-left-radius: 0.5rem;
+ border-top-right-radius: 0.5rem;
border-bottom-width: 2px;
@apply px-4 py-2 border-gray-200 dark:border-gray-500;
}
.kanban-container .kanban-inner-container .kanban-column > .kanban-column-body {
@apply px-4 py-2;
-}
\ No newline at end of file
+}
diff --git a/addon/styles/components/navbar.css b/addon/styles/components/navbar.css
index cbdca67..a103805 100644
--- a/addon/styles/components/navbar.css
+++ b/addon/styles/components/navbar.css
@@ -134,7 +134,9 @@ body.sandbox-console .fleetbase-console-navbar::after {
font-weight: 700;
border-bottom-left-radius: 0.5rem;
border-bottom-right-radius: 0.5rem;
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+ box-shadow:
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1),
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
z-index: 12;
}
@@ -174,7 +176,9 @@ body[data-theme='dark'] .dropdown-menu-panel.ember-basic-dropdown-content a.nav-
#extensionsNav {
z-index: 999999;
transform: translateX(0);
- transition: transform 0.3s ease, width 0.3s ease;
+ transition:
+ transform 0.3s ease,
+ width 0.3s ease;
@apply fixed top-0 left-0 w-10/12 h-screen bg-gray-900 border-r border-gray-900 shadow-lg;
}
diff --git a/addon/styles/components/notification-tray.css b/addon/styles/components/notification-tray.css
index 6e4d486..f742589 100644
--- a/addon/styles/components/notification-tray.css
+++ b/addon/styles/components/notification-tray.css
@@ -12,7 +12,7 @@
right: -6px;
width: 16px;
height: 16px;
- background: red;
+ background: #dc2626;
color: white;
display: flex;
justify-content: center;
@@ -24,12 +24,12 @@
/* Adding a hover effect for the badge */
.notification-tray-unread-notifications-badge:hover {
- background-color: darkred;
+ background-color: #b91c1c;
cursor: pointer;
}
.notification-tray-panel {
- @apply mt-5 bg-white border border-gray-200 shadow-md rounded-lg dark:bg-gray-900 dark:border-gray-700 space-y-2 truncate;
+ @apply mt-3 bg-white border border-gray-200 shadow-md rounded-lg dark:bg-gray-900 dark:border-gray-700 space-y-2 truncate;
width: 300px;
}
@@ -39,4 +39,4 @@
.notification-tray-view-all-link {
@apply rounded px-2 py-1 text-sm text-gray-800 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-moregray-750;
-}
\ No newline at end of file
+}
diff --git a/addon/styles/components/otp-input.css b/addon/styles/components/otp-input.css
index 10c2c7b..21b3f07 100644
--- a/addon/styles/components/otp-input.css
+++ b/addon/styles/components/otp-input.css
@@ -1,17 +1,17 @@
.otp-input-container {
display: flex;
justify-content: space-between;
- width: 400px;
+ width: 400px;
}
.otp-input-container input {
- width: 68px;
- height: 68px;
- font-size: 24px;
+ width: 68px;
+ height: 68px;
+ font-size: 24px;
text-align: center;
- border: 3px solid #3498db;
+ border: 3px solid #3498db;
border-radius: 8px;
- background-color: #2c3e50;
+ background-color: #2c3e50;
color: #ecf0f1;
margin: 0;
transition: all 0.3s ease;
diff --git a/addon/styles/components/table.css b/addon/styles/components/table.css
index 9b7f09b..318eb23 100644
--- a/addon/styles/components/table.css
+++ b/addon/styles/components/table.css
@@ -318,11 +318,11 @@ body[data-theme='dark'] .next-table-wrapper.auto-height > table > tbody:after,
body[data-theme='light'] .next-table-wrapper.rounded-b > table > tbody > tr:last-child > td:first-child,
body[data-theme='dark'] .next-table-wrapper.rounded-b > table > tbody > tr:last-child > td:first-child,
.next-table-wrapper.auto-height > table > tbody > tr:last-child > td:first-child {
- border-bottom-left-radius: .25rem;
+ border-bottom-left-radius: 0.25rem;
}
body[data-theme='light'] .next-table-wrapper.rounded-b > table > tbody > tr:last-child > td:last-child,
body[data-theme='dark'] .next-table-wrapper.rounded-b > table > tbody > tr:last-child > td:last-child,
.next-table-wrapper.auto-height > table > tbody > tr:last-child > td:last-child {
- border-bottom-right-radius: .25rem;
-}
\ No newline at end of file
+ border-bottom-right-radius: 0.25rem;
+}
diff --git a/addon/styles/components/tabs.css b/addon/styles/components/tabs.css
index 3a72f09..6a4d94c 100644
--- a/addon/styles/components/tabs.css
+++ b/addon/styles/components/tabs.css
@@ -189,4 +189,4 @@ body[data-theme='light'] .fleetbase-pill-tabs > nav > a.ui-tab.active {
background-color: #3b82f6;
border: 1px solid #2563eb;
color: #fff;
-}
\ No newline at end of file
+}
diff --git a/addon/styles/components/timeline.css b/addon/styles/components/timeline.css
index 2a0f987..b8f603e 100644
--- a/addon/styles/components/timeline.css
+++ b/addon/styles/components/timeline.css
@@ -77,7 +77,7 @@
overflow-x: auto;
overflow-y: hidden;
scrollbar-width: none;
- gap: .5rem;
+ gap: 0.5rem;
position: relative;
overflow: visible;
margin-bottom: 10px;
diff --git a/addon/styles/layout/legacy.css b/addon/styles/layout/legacy.css
index 7458fbb..5cd2831 100644
--- a/addon/styles/layout/legacy.css
+++ b/addon/styles/layout/legacy.css
@@ -212,8 +212,9 @@ body[data-theme='dark'] .filter-row .filter-row-body {
box-sizing: border-box;
}
+.ember-basic-dropdown-content,
#ember-basic-dropdown-wormhole .ember-basic-dropdown-content {
- z-index: 99999;
+ z-index: 9999;
}
.datum-row {
@@ -555,10 +556,20 @@ body[data-theme='dark'] .radio-group-condensed .radio-group-item input[type='rad
@apply px-3 py-2;
}
+.ui-input-info-block.sm,
+.ui-input-info-block.sm span {
+ @apply text-sm;
+}
+
.ui-input-info-block.xs {
@apply px-2 py-1;
}
+.ui-input-info-block.xs,
+.ui-input-info-block.xs span {
+ @apply text-xs;
+}
+
.ui-input-info-block .ui-input-info-block-text,
.ui-input-info-block p {
@apply text-blue-900;
@@ -805,7 +816,7 @@ body[data-theme='dark'] li.iti__country > span {
}
.ui-input-info > svg {
- margin-right: .5rem;
+ margin-right: 0.5rem;
}
.ui-input-info.danger {
diff --git a/addon/styles/layout/next.css b/addon/styles/layout/next.css
index 77fd08a..c3e764e 100644
--- a/addon/styles/layout/next.css
+++ b/addon/styles/layout/next.css
@@ -1,10 +1,14 @@
body {
- height: 100%;
- min-height: 100%;
+ height: 100%;
+ min-height: 100%;
max-height: 100%;
}
-body, html, button, a, * {
+body,
+html,
+button,
+a,
+* {
cursor: default;
}
@@ -76,8 +80,8 @@ body[data-theme='dark'] .next-mobile-navbar .next-mobile-navbar-tabs > .next-mob
@apply text-gray-800 flex flex-col bg-white border-t-0;
overflow: hidden;
width: 100%;
- height: 100%;
- min-height: 100%;
+ height: 100%;
+ min-height: 100%;
max-height: 100%;
align-items: stretch;
border-top: none;
@@ -1156,7 +1160,7 @@ body[data-theme='dark'] .next-content-panel-wrapper .next-content-panel-containe
border-right: 2px transparent solid;
}
-.next-content-overlay.next-content-overlay-pos-right > .next-content-overlay-panel-container > .next-content-overlay-panel + .gutter {
+.next-content-overlay.next-content-overlay-pos-right > .next-content-overlay-panel-container > .next-content-overlay-panel + .gutter {
margin-left: -10px;
}
@@ -1229,7 +1233,7 @@ body[data-theme='dark'] .next-sidebar .next-sidebar-panel-container > .next-side
}
.next-org-button-trigger:hover,
-.next-org-button-trigger[aria-expanded="true"],
+.next-org-button-trigger[aria-expanded='true'],
.next-org-button-trigger.is-open {
@apply bg-gray-700 bg-opacity-75 cursor-default;
}
@@ -1418,7 +1422,12 @@ body[data-theme='dark'] .next-table-wrapper .tfoot-row > td {
max-width: 100%;
}
-.next-table-wrapper .tfoot-wrapper > .fleetbase-pagination > .fleetbase-pagination-meta-info-wrapper > .fleetbase-pagination-meta-info-paging-wrapper > .fleetbase-pagination-meta-info-paging-inner {
+.next-table-wrapper
+ .tfoot-wrapper
+ > .fleetbase-pagination
+ > .fleetbase-pagination-meta-info-wrapper
+ > .fleetbase-pagination-meta-info-paging-wrapper
+ > .fleetbase-pagination-meta-info-paging-inner {
position: fixed;
right: 0;
bottom: 0;
@@ -1888,15 +1897,15 @@ input.order-list-overlay-search:focus {
flex-direction: column;
align-items: center;
justify-content: center;
- padding: .65rem;
+ padding: 0.65rem;
max-width: 96px;
height: 135px;
max-height: 160px;
border: 1px #d1d5db solid;
- border-radius: .5rem;
+ border-radius: 0.5rem;
}
-body[data-theme="dark"] .x-fleetbase-file > .x-fleetbase-file-wrapper {
+body[data-theme='dark'] .x-fleetbase-file > .x-fleetbase-file-wrapper {
border: 1px #374151 solid;
}
@@ -1906,8 +1915,8 @@ body[data-theme="dark"] .x-fleetbase-file > .x-fleetbase-file-wrapper {
.x-fleetbase-file > .x-fleetbase-file-wrapper .x-fleetbase-file-name {
background-color: #3b82f6;
- padding: .15rem;
- border-radius: .15rem;
+ padding: 0.15rem;
+ border-radius: 0.15rem;
text-align: center;
font-size: 0.75rem;
line-height: 1rem;
@@ -1921,7 +1930,7 @@ body[data-theme="dark"] .x-fleetbase-file > .x-fleetbase-file-wrapper {
justify-content: center;
width: 4rem;
height: 4rem;
- margin-bottom: .5rem;
+ margin-bottom: 0.5rem;
}
.x-fleetbase-file > .x-fleetbase-file-wrapper .x-fleetbase-file-actions {
@@ -1940,4 +1949,4 @@ body[data-theme="dark"] .x-fleetbase-file > .x-fleetbase-file-wrapper {
.x-fleetbase-file > .x-fleetbase-file-wrapper .x-fleetbase-file-actions #x-fleetbase-file-actions-dropdown .ember-basic-dropdown-trigger button.btn {
padding: 0.15rem 0.65rem;
-}
\ No newline at end of file
+}
diff --git a/addon/utils/noop.js b/addon/utils/noop.js
new file mode 100644
index 0000000..ca6a744
--- /dev/null
+++ b/addon/utils/noop.js
@@ -0,0 +1 @@
+export default function noop() {}
diff --git a/app/components/chat-container.js b/app/components/chat-container.js
new file mode 100644
index 0000000..bda94a2
--- /dev/null
+++ b/app/components/chat-container.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-container';
diff --git a/app/components/chat-tray.js b/app/components/chat-tray.js
new file mode 100644
index 0000000..72bea41
--- /dev/null
+++ b/app/components/chat-tray.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-tray';
diff --git a/app/components/chat-window.js b/app/components/chat-window.js
new file mode 100644
index 0000000..e0b2abc
--- /dev/null
+++ b/app/components/chat-window.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-window';
diff --git a/app/components/chat-window/attachment.js b/app/components/chat-window/attachment.js
new file mode 100644
index 0000000..e68074b
--- /dev/null
+++ b/app/components/chat-window/attachment.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-window/attachment';
diff --git a/app/components/chat-window/feed.js b/app/components/chat-window/feed.js
new file mode 100644
index 0000000..97763e4
--- /dev/null
+++ b/app/components/chat-window/feed.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-window/feed';
diff --git a/app/components/chat-window/log.js b/app/components/chat-window/log.js
new file mode 100644
index 0000000..22a0b4f
--- /dev/null
+++ b/app/components/chat-window/log.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-window/log';
diff --git a/app/components/chat-window/message.js b/app/components/chat-window/message.js
new file mode 100644
index 0000000..8b81f66
--- /dev/null
+++ b/app/components/chat-window/message.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-window/message';
diff --git a/app/components/chat-window/pending-attachment.js b/app/components/chat-window/pending-attachment.js
new file mode 100644
index 0000000..3b75d98
--- /dev/null
+++ b/app/components/chat-window/pending-attachment.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/chat-window/pending-attachment';
diff --git a/app/components/locale-selector-tray.js b/app/components/locale-selector-tray.js
new file mode 100644
index 0000000..3c596b2
--- /dev/null
+++ b/app/components/locale-selector-tray.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/locale-selector-tray';
diff --git a/app/components/modals/edit-chat-name.js b/app/components/modals/edit-chat-name.js
new file mode 100644
index 0000000..ce5d511
--- /dev/null
+++ b/app/components/modals/edit-chat-name.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/components/modals/edit-chat-name';
diff --git a/app/components/scrollable.js b/app/components/scrollable.js
deleted file mode 100644
index a341efc..0000000
--- a/app/components/scrollable.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from '@fleetbase/ember-ui/components/scrollable';
diff --git a/app/helpers/can-remove-chat-participant.js b/app/helpers/can-remove-chat-participant.js
new file mode 100644
index 0000000..5c168ba
--- /dev/null
+++ b/app/helpers/can-remove-chat-participant.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/helpers/can-remove-chat-participant';
diff --git a/app/utils/noop.js b/app/utils/noop.js
new file mode 100644
index 0000000..d56920b
--- /dev/null
+++ b/app/utils/noop.js
@@ -0,0 +1 @@
+export { default } from '@fleetbase/ember-ui/utils/noop';
diff --git a/assets/sounds/message-notification-sound.mp3 b/assets/sounds/message-notification-sound.mp3
new file mode 100644
index 0000000..a1ad34a
Binary files /dev/null and b/assets/sounds/message-notification-sound.mp3 differ
diff --git a/package.json b/package.json
index 8d0db94..3cbd0c6 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@fleetbase/ember-ui",
- "version": "0.2.12",
+ "version": "0.2.13",
"description": "Fleetbase UI provides all the interface components, helpers, services and utilities for building a Fleetbase extension into the Console.",
"keywords": [
"fleetbase-ui",
@@ -34,12 +34,12 @@
"publish:github": "npm config set '@fleetbase:registry' https://npm.pkg.github.com/ && npm publish"
},
"dependencies": {
- "@fleetbase/ember-accounting": "^0.0.1",
"@babel/core": "^7.23.2",
"@ember/render-modifiers": "^2.0.4",
"@ember/string": "^3.0.1",
"@embroider/addon": "^0.30.0",
"@embroider/macros": "^1.8.3",
+ "@fleetbase/ember-accounting": "^0.0.1",
"@floating-ui/dom": "^1.0.1",
"@fortawesome/ember-fontawesome": "^1.0.0",
"@fortawesome/fontawesome-svg-core": "^6.4.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0a2e160..76d6d55 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1977,7 +1977,7 @@ packages:
'@glint/template':
optional: true
dependencies:
- '@embroider/macros': 1.8.3
+ '@embroider/macros': 1.13.4
ember-cli-babel: 7.26.11
ember-modifier-manager-polyfill: 1.2.0(@babel/core@7.23.2)
ember-source: 5.4.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(rsvp@4.8.5)(webpack@5.89.0)
diff --git a/tests/integration/components/chat-container-test.js b/tests/integration/components/chat-container-test.js
new file mode 100644
index 0000000..5a7061b
--- /dev/null
+++ b/tests/integration/components/chat-container-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-container', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/scrollable-test.js b/tests/integration/components/chat-tray-test.js
similarity index 67%
rename from tests/integration/components/scrollable-test.js
rename to tests/integration/components/chat-tray-test.js
index 65fbc7f..1b1533e 100644
--- a/tests/integration/components/scrollable-test.js
+++ b/tests/integration/components/chat-tray-test.js
@@ -3,24 +3,24 @@ import { setupRenderingTest } from 'dummy/tests/helpers';
import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
-module('Integration | Component | scrollable', function (hooks) {
+module('Integration | Component | chat-tray', function (hooks) {
setupRenderingTest(hooks);
test('it renders', async function (assert) {
// Set any properties with this.set('myProperty', 'value');
// Handle any actions with this.set('myAction', function(val) { ... });
- await render(hbs`
`);
+ await render(hbs`
`);
- assert.dom(this.element).hasText('');
+ assert.dom().hasText('');
// Template block usage:
await render(hbs`
-
+
template block text
-
+
`);
- assert.dom(this.element).hasText('template block text');
+ assert.dom().hasText('template block text');
});
});
diff --git a/tests/integration/components/chat-window-test.js b/tests/integration/components/chat-window-test.js
new file mode 100644
index 0000000..10654d6
--- /dev/null
+++ b/tests/integration/components/chat-window-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-window', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/chat-window/attachment-test.js b/tests/integration/components/chat-window/attachment-test.js
new file mode 100644
index 0000000..ff826e1
--- /dev/null
+++ b/tests/integration/components/chat-window/attachment-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-window/attachment', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/chat-window/feed-test.js b/tests/integration/components/chat-window/feed-test.js
new file mode 100644
index 0000000..316cf98
--- /dev/null
+++ b/tests/integration/components/chat-window/feed-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-window/feed', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/chat-window/log-test.js b/tests/integration/components/chat-window/log-test.js
new file mode 100644
index 0000000..f752732
--- /dev/null
+++ b/tests/integration/components/chat-window/log-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-window/log', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/chat-window/message-test.js b/tests/integration/components/chat-window/message-test.js
new file mode 100644
index 0000000..602fac4
--- /dev/null
+++ b/tests/integration/components/chat-window/message-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-window/message', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/chat-window/pending-attachment-test.js b/tests/integration/components/chat-window/pending-attachment-test.js
new file mode 100644
index 0000000..7d144d2
--- /dev/null
+++ b/tests/integration/components/chat-window/pending-attachment-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | chat-window/pending-attachment', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/locale-selector-tray-test.js b/tests/integration/components/locale-selector-tray-test.js
new file mode 100644
index 0000000..ef7d087
--- /dev/null
+++ b/tests/integration/components/locale-selector-tray-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | locale-selector-tray', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/components/modals/edit-chat-name-test.js b/tests/integration/components/modals/edit-chat-name-test.js
new file mode 100644
index 0000000..a7c800b
--- /dev/null
+++ b/tests/integration/components/modals/edit-chat-name-test.js
@@ -0,0 +1,26 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Component | modals/edit-chat-name', function (hooks) {
+ setupRenderingTest(hooks);
+
+ test('it renders', async function (assert) {
+ // Set any properties with this.set('myProperty', 'value');
+ // Handle any actions with this.set('myAction', function(val) { ... });
+
+ await render(hbs`
`);
+
+ assert.dom().hasText('');
+
+ // Template block usage:
+ await render(hbs`
+
+ template block text
+
+ `);
+
+ assert.dom().hasText('template block text');
+ });
+});
diff --git a/tests/integration/helpers/can-remove-chat-participant-test.js b/tests/integration/helpers/can-remove-chat-participant-test.js
new file mode 100644
index 0000000..049f790
--- /dev/null
+++ b/tests/integration/helpers/can-remove-chat-participant-test.js
@@ -0,0 +1,17 @@
+import { module, test } from 'qunit';
+import { setupRenderingTest } from 'dummy/tests/helpers';
+import { render } from '@ember/test-helpers';
+import { hbs } from 'ember-cli-htmlbars';
+
+module('Integration | Helper | can-remove-chat-participant', function (hooks) {
+ setupRenderingTest(hooks);
+
+ // TODO: Replace this with your real tests.
+ test('it renders', async function (assert) {
+ this.set('inputValue', '1234');
+
+ await render(hbs`{{can-remove-chat-participant this.inputValue}}`);
+
+ assert.dom().hasText('1234');
+ });
+});
diff --git a/tests/unit/utils/noop-test.js b/tests/unit/utils/noop-test.js
new file mode 100644
index 0000000..3f8017c
--- /dev/null
+++ b/tests/unit/utils/noop-test.js
@@ -0,0 +1,10 @@
+import noop from 'dummy/utils/noop';
+import { module, test } from 'qunit';
+
+module('Unit | Utility | noop', function () {
+ // TODO: Replace this with your real tests.
+ test('it works', function (assert) {
+ let result = noop();
+ assert.equal(result, undefined);
+ });
+});