diff --git a/next.config.mjs b/next.config.mjs
index e814877c..f1940020 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -21,6 +21,18 @@ export default withNextra({
hostname: 'plus.unsplash.com',
port: '',
pathname: '/**',
+ },
+ {
+ protocol: 'https',
+ hostname: 'cdn.brandfetch.io',
+ port: '',
+ pathname: '/**',
+ },
+ {
+ protocol: 'https',
+ hostname: 'cdn.prod.website-files.com',
+ port: '',
+ pathname: '/**',
}
],
},
diff --git a/package-lock.json b/package-lock.json
index e99ef376..72427c7c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -57,7 +57,7 @@
"langchain": "^0.3.15",
"langsmith": "^0.3.7",
"lucide-react": "^0.439.0",
- "next": "^14.2.24",
+ "next": "^14.2.35",
"next-auth": "^4.24.11",
"nextra": "^3.0.6",
"nextra-theme-docs": "^3.0.6",
@@ -86,7 +86,7 @@
"@types/node": "^22.7.5",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.0",
- "eslint-config-next": "^14.2.24",
+ "eslint-config-next": "^14.2.35",
"postcss": "^8.5.3",
"tailwindcss": "^3.4.1",
"typescript": "^5.6.2"
@@ -3618,15 +3618,15 @@
}
},
"node_modules/@next/env": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.24.tgz",
- "integrity": "sha512-LAm0Is2KHTNT6IT16lxT+suD0u+VVfYNQqM+EJTKuFRRuY2z+zj01kueWXPCxbMBDt0B5vONYzabHGUNbZYAhA==",
+ "version": "14.2.35",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.35.tgz",
+ "integrity": "sha512-DuhvCtj4t9Gwrx80dmz2F4t/zKQ4ktN8WrMwOuVzkJfBilwAwGr6v16M5eI8yCuZ63H9TTuEU09Iu2HqkzFPVQ==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.24.tgz",
- "integrity": "sha512-FDL3qs+5DML0AJz56DCVr+KnFYivxeAX73En8QbPw9GjJZ6zbfvqDy+HrarHFzbsIASn7y8y5ySJ/lllSruNVQ==",
+ "version": "14.2.35",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.35.tgz",
+ "integrity": "sha512-Jw9A3ICz2183qSsqwi7fgq4SBPiNfmOLmTPXKvlnzstUwyvBrtySiY+8RXJweNAs9KThb1+bYhZh9XWcNOr2zQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3634,9 +3634,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.24.tgz",
- "integrity": "sha512-7Tdi13aojnAZGpapVU6meVSpNzgrFwZ8joDcNS8cJVNuP3zqqrLqeory9Xec5TJZR/stsGJdfwo8KeyloT3+rQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.33.tgz",
+ "integrity": "sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==",
"cpu": [
"arm64"
],
@@ -3650,9 +3650,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.24.tgz",
- "integrity": "sha512-lXR2WQqUtu69l5JMdTwSvQUkdqAhEWOqJEYUQ21QczQsAlNOW2kWZCucA6b3EXmPbcvmHB1kSZDua/713d52xg==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.33.tgz",
+ "integrity": "sha512-8HGBeAE5rX3jzKvF593XTTFg3gxeU4f+UWnswa6JPhzaR6+zblO5+fjltJWIZc4aUalqTclvN2QtTC37LxvZAA==",
"cpu": [
"x64"
],
@@ -3666,9 +3666,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.24.tgz",
- "integrity": "sha512-nxvJgWOpSNmzidYvvGDfXwxkijb6hL9+cjZx1PVG6urr2h2jUqBALkKjT7kpfurRWicK6hFOvarmaWsINT1hnA==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.33.tgz",
+ "integrity": "sha512-JXMBka6lNNmqbkvcTtaX8Gu5by9547bukHQvPoLe9VRBx1gHwzf5tdt4AaezW85HAB3pikcvyqBToRTDA4DeLw==",
"cpu": [
"arm64"
],
@@ -3682,9 +3682,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.24.tgz",
- "integrity": "sha512-PaBgOPhqa4Abxa3y/P92F3kklNPsiFjcjldQGT7kFmiY5nuFn8ClBEoX8GIpqU1ODP2y8P6hio6vTomx2Vy0UQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.33.tgz",
+ "integrity": "sha512-Bm+QulsAItD/x6Ih8wGIMfRJy4G73tu1HJsrccPW6AfqdZd0Sfm5Imhgkgq2+kly065rYMnCOxTBvmvFY1BKfg==",
"cpu": [
"arm64"
],
@@ -3698,9 +3698,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.24.tgz",
- "integrity": "sha512-vEbyadiRI7GOr94hd2AB15LFVgcJZQWu7Cdi9cWjCMeCiUsHWA0U5BkGPuoYRnTxTn0HacuMb9NeAmStfBCLoQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.33.tgz",
+ "integrity": "sha512-FnFn+ZBgsVMbGDsTqo8zsnRzydvsGV8vfiWwUo1LD8FTmPTdV+otGSWKc4LJec0oSexFnCYVO4hX8P8qQKaSlg==",
"cpu": [
"x64"
],
@@ -3714,9 +3714,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.24.tgz",
- "integrity": "sha512-df0FC9ptaYsd8nQCINCzFtDWtko8PNRTAU0/+d7hy47E0oC17tI54U/0NdGk7l/76jz1J377dvRjmt6IUdkpzQ==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.33.tgz",
+ "integrity": "sha512-345tsIWMzoXaQndUTDv1qypDRiebFxGYx9pYkhwY4hBRaOLt8UGfiWKr9FSSHs25dFIf8ZqIFaPdy5MljdoawA==",
"cpu": [
"x64"
],
@@ -3730,9 +3730,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.24.tgz",
- "integrity": "sha512-ZEntbLjeYAJ286eAqbxpZHhDFYpYjArotQ+/TW9j7UROh0DUmX7wYDGtsTPpfCV8V+UoqHBPU7q9D4nDNH014Q==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.33.tgz",
+ "integrity": "sha512-nscpt0G6UCTkrT2ppnJnFsYbPDQwmum4GNXYTeoTIdsmMydSKFz9Iny2jpaRupTb+Wl298+Rh82WKzt9LCcqSQ==",
"cpu": [
"arm64"
],
@@ -3746,9 +3746,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.24.tgz",
- "integrity": "sha512-9KuS+XUXM3T6v7leeWU0erpJ6NsFIwiTFD5nzNg8J5uo/DMIPvCp3L1Ao5HjbHX0gkWPB1VrKoo/Il4F0cGK2Q==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.33.tgz",
+ "integrity": "sha512-pc9LpGNKhJ0dXQhZ5QMmYxtARwwmWLpeocFmVG5Z0DzWq5Uf0izcI8tLc+qOpqxO1PWqZ5A7J1blrUIKrIFc7Q==",
"cpu": [
"ia32"
],
@@ -3762,9 +3762,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.24.tgz",
- "integrity": "sha512-cXcJ2+x0fXQ2CntaE00d7uUH+u1Bfp/E0HsNQH79YiLaZE5Rbm7dZzyAYccn3uICM7mw+DxoMqEfGXZtF4Fgaw==",
+ "version": "14.2.33",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.33.tgz",
+ "integrity": "sha512-nOjfZMy8B94MdisuzZo9/57xuFVLHJaDj5e/xrduJp9CV2/HrfxTRH2fbyLe+K9QT41WBLUd4iXX3R7jBp0EUg==",
"cpu": [
"x64"
],
@@ -11759,13 +11759,13 @@
}
},
"node_modules/eslint-config-next": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.24.tgz",
- "integrity": "sha512-9r1ujK++Pgpfixr5+DQ6rXDIQmSzuDbBlAQYMkJRMz9KWqovX7ESUTC0EAyBfOCl3ubkoeplw+aoXDuih3A8fw==",
+ "version": "14.2.35",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.35.tgz",
+ "integrity": "sha512-BpLsv01UisH193WyT/1lpHqq5iJ/Orfz9h/NOOlAmTUq4GY349PextQ62K4XpnaM9supeiEn3TaOTeQO07gURg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@next/eslint-plugin-next": "14.2.24",
+ "@next/eslint-plugin-next": "14.2.35",
"@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
@@ -16404,12 +16404,12 @@
"dev": true
},
"node_modules/next": {
- "version": "14.2.24",
- "resolved": "https://registry.npmjs.org/next/-/next-14.2.24.tgz",
- "integrity": "sha512-En8VEexSJ0Py2FfVnRRh8gtERwDRaJGNvsvad47ShkC2Yi8AXQPXEA2vKoDJlGFSj5WE5SyF21zNi4M5gyi+SQ==",
+ "version": "14.2.35",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.2.35.tgz",
+ "integrity": "sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==",
"license": "MIT",
"dependencies": {
- "@next/env": "14.2.24",
+ "@next/env": "14.2.35",
"@swc/helpers": "0.5.5",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001579",
@@ -16424,15 +16424,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.2.24",
- "@next/swc-darwin-x64": "14.2.24",
- "@next/swc-linux-arm64-gnu": "14.2.24",
- "@next/swc-linux-arm64-musl": "14.2.24",
- "@next/swc-linux-x64-gnu": "14.2.24",
- "@next/swc-linux-x64-musl": "14.2.24",
- "@next/swc-win32-arm64-msvc": "14.2.24",
- "@next/swc-win32-ia32-msvc": "14.2.24",
- "@next/swc-win32-x64-msvc": "14.2.24"
+ "@next/swc-darwin-arm64": "14.2.33",
+ "@next/swc-darwin-x64": "14.2.33",
+ "@next/swc-linux-arm64-gnu": "14.2.33",
+ "@next/swc-linux-arm64-musl": "14.2.33",
+ "@next/swc-linux-x64-gnu": "14.2.33",
+ "@next/swc-linux-x64-musl": "14.2.33",
+ "@next/swc-win32-arm64-msvc": "14.2.33",
+ "@next/swc-win32-ia32-msvc": "14.2.33",
+ "@next/swc-win32-x64-msvc": "14.2.33"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
diff --git a/package.json b/package.json
index 81398822..3c0acf6b 100644
--- a/package.json
+++ b/package.json
@@ -75,7 +75,7 @@
"langchain": "^0.3.15",
"langsmith": "^0.3.7",
"lucide-react": "^0.439.0",
- "next": "^14.2.24",
+ "next": "^14.2.35",
"next-auth": "^4.24.11",
"nextra": "^3.0.6",
"nextra-theme-docs": "^3.0.6",
@@ -104,7 +104,7 @@
"@types/node": "^22.7.5",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.0",
- "eslint-config-next": "^14.2.24",
+ "eslint-config-next": "^14.2.35",
"postcss": "^8.5.3",
"tailwindcss": "^3.4.1",
"typescript": "^5.6.2"
diff --git a/public/img/themes/servicedesk/e-space_small.png b/public/img/themes/servicedesk/e-space_small.png
new file mode 100644
index 00000000..f0202e6d
Binary files /dev/null and b/public/img/themes/servicedesk/e-space_small.png differ
diff --git a/public/img/themes/servicedesk/espace_logo.svg b/public/img/themes/servicedesk/espace_logo.svg
new file mode 100644
index 00000000..9c28084d
--- /dev/null
+++ b/public/img/themes/servicedesk/espace_logo.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ E-Space
+
+
+
+
+ SATELLITE CONNECTIVITY
+
+
+
diff --git a/src/app/demo/servicedesk/Home.jsx b/src/app/demo/servicedesk/Home.jsx
index d5989b11..090dfe6d 100644
--- a/src/app/demo/servicedesk/Home.jsx
+++ b/src/app/demo/servicedesk/Home.jsx
@@ -21,7 +21,7 @@ import {
MessageSquare
} from 'lucide-react';
-export const description = "Service Excellence Platform - Customer service analytics with real-time metrics, case management, and training insights to drive customer satisfaction and renewals";
+export const description = "E-Space Support Hub - Satellite network support analytics with real-time metrics, ticket management, and customer onboarding insights to ensure mission-critical connectivity";
export const Home = () => {
const [showFilterPopup, setShowFilterPopup] = useState(false);
@@ -277,12 +277,21 @@ export const Home = () => {
overflow: hidden;
contain: layout style paint;
isolation: isolate;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ margin: 0;
+ padding: 0;
}
.tableau-container tableau-viz {
position: relative !important;
z-index: 1 !important;
contain: layout style paint !important;
isolation: isolate !important;
+ width: 100% !important;
+ height: 100% !important;
+ display: block;
}
/* Prevent Tableau from stealing focus and scrolling */
tableau-viz:focus {
@@ -310,17 +319,17 @@ export const Home = () => {
- Service Excellence Dashboard
+ E-Space Supply Dashboard
- Real-time insights to build trust, drive renewals, and showcase premium service
+ Real-time satellite network insights to ensure mission-critical connectivity and customer success
-
-
-
System Healthy
+
+
+
Satellite Network Online
@@ -338,10 +347,10 @@ export const Home = () => {
setShowFilterPopup(true)}
- className="flex items-center gap-2 px-6 py-3 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors shadow-lg"
+ className="flex items-center gap-2 px-6 py-3 bg-espace-500 hover:bg-espace-600 text-white rounded-lg transition-colors shadow-lg"
>
- Case Priority: {casePriority.charAt(0).toUpperCase() + casePriority.slice(1)}
+ Ticket Priority: {casePriority.charAt(0).toUpperCase() + casePriority.slice(1)}
{/* Action Button - Shows when marks are selected */}
@@ -349,41 +358,41 @@ export const Home = () => {
{
const dataOnly = selectedMarks.map((mark, index) =>
- `Case ${index + 1}:
+ `Ticket ${index + 1}:
${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n')}`
).join('\n\n');
setEditableSlackMessage(dataOnly);
setShowSlackModal(true);
}}
- className="flex items-center gap-2 px-6 py-3 bg-green-600 hover:bg-green-700 text-white rounded-lg transition-colors shadow-lg animate-pulse"
+ className="flex items-center gap-2 px-6 py-3 bg-cyan-600 hover:bg-cyan-700 text-white rounded-lg transition-colors shadow-lg animate-pulse"
>
- Share Case Update ({selectedMarks.length})
+ Share Ticket Update ({selectedMarks.length})
)}
- {/* Case Management Dashboard */}
+ {/* Supply Chain Management Dashboard */}
-
- Case Management
+
+ Supply Chain Management
- Track open, closed cases and response times
+ Track inventory, manufacturing, and supply chain operations
-
+
e.stopPropagation()}>
-
- Filter by Case Priority
+
+ Filter by Ticket Priority
setShowFilterPopup(false)}
@@ -437,7 +446,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
}}
className={`w-full text-left p-4 rounded-lg transition-colors border ${
casePriority === priority
- ? 'bg-blue-600 border-blue-600 text-white'
+ ? 'bg-espace-500 border-espace-500 text-white'
: 'bg-slate-700 border-slate-600 text-slate-200 hover:bg-slate-600'
}`}
>
@@ -467,8 +476,8 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
e.stopPropagation()}>
-
- Share Case Update
+
+ Share Ticket Update
setShowSlackModal(false)}
@@ -485,7 +494,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
@@ -509,12 +518,12 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
alert('Please enter a message before sending.');
return;
}
- alert(`Demo: Message sent to team!\n\nMessage: ${editableSlackMessage}`);
+ alert(`Demo: Message sent to E-Space support team!\n\nMessage: ${editableSlackMessage}`);
setShowSlackModal(false);
setSelectedMarks([]);
setEditableSlackMessage('');
}}
- className="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
+ className="px-4 py-2 bg-espace-500 hover:bg-espace-600 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
>
Send to Team
diff --git a/src/app/demo/servicedesk/cases/page.jsx b/src/app/demo/servicedesk/cases/page.jsx
index f998b900..e5fe0eb6 100644
--- a/src/app/demo/servicedesk/cases/page.jsx
+++ b/src/app/demo/servicedesk/cases/page.jsx
@@ -3,7 +3,7 @@
import { Demo, FloatingAssistant } from '@/components';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui";
import { TableauEmbed } from '@/components';
-import { FileText, Clock, MessageSquare, X } from 'lucide-react';
+import { Truck, Package, MapPin, MessageSquare, X } from 'lucide-react';
import { settings } from '../config';
import { useState, useEffect } from 'react';
@@ -64,24 +64,16 @@ const CasesContent = () => {
};
const setupListeners = () => {
- // Try multiple ways to find the viz elements
- let openCasesViz = document.getElementById('openCasesViz');
- let createdCasesViz = document.getElementById('createdCasesViz');
+ // Try multiple ways to find the viz element
+ let trackingViz = document.getElementById('trackingViz');
// If not found by ID, try querySelector
- if (!openCasesViz || !createdCasesViz) {
+ if (!trackingViz) {
const tableauVizElements = document.querySelectorAll('tableau-viz');
if (tableauVizElements.length > 0) {
- if (!openCasesViz) {
- openCasesViz = Array.from(tableauVizElements).find(
- viz => viz.id === 'openCasesViz' || viz.getAttribute('id') === 'openCasesViz'
- ) || tableauVizElements[0];
- }
- if (!createdCasesViz && tableauVizElements.length > 1) {
- createdCasesViz = Array.from(tableauVizElements).find(
- viz => viz.id === 'createdCasesViz' || viz.getAttribute('id') === 'createdCasesViz'
- ) || tableauVizElements[1];
- }
+ trackingViz = Array.from(tableauVizElements).find(
+ viz => viz.id === 'trackingViz' || viz.getAttribute('id') === 'trackingViz'
+ ) || tableauVizElements[0];
}
}
@@ -89,53 +81,37 @@ const CasesContent = () => {
viz.addEventListener('markselectionchanged', handleMarkSelectionChanged);
};
- if (openCasesViz) {
- // Check if already interactive
- const isAlreadyInteractive = openCasesViz.getIsInteractive?.() || openCasesViz.isInteractive || false;
-
- if (isAlreadyInteractive) {
- addMarkSelectionListener(openCasesViz);
- } else {
- openCasesViz.addEventListener('firstinteractive', () => {
- addMarkSelectionListener(openCasesViz);
- });
- }
- }
-
- if (createdCasesViz) {
+ if (trackingViz) {
// Check if already interactive
- const isAlreadyInteractive = createdCasesViz.getIsInteractive?.() || createdCasesViz.isInteractive || false;
+ const isAlreadyInteractive = trackingViz.getIsInteractive?.() || trackingViz.isInteractive || false;
if (isAlreadyInteractive) {
- addMarkSelectionListener(createdCasesViz);
+ addMarkSelectionListener(trackingViz);
} else {
- createdCasesViz.addEventListener('firstinteractive', () => {
- addMarkSelectionListener(createdCasesViz);
+ trackingViz.addEventListener('firstinteractive', () => {
+ addMarkSelectionListener(trackingViz);
});
}
}
- return { openCasesViz, createdCasesViz };
+ return { trackingViz };
};
// Delay setup to ensure DOM elements are available
const timer = setTimeout(() => {
- const { openCasesViz, createdCasesViz } = setupListeners();
+ const { trackingViz } = setupListeners();
// Store refs for cleanup
- window._vizRefs = { openCasesViz, createdCasesViz, handleMarkSelectionChanged };
+ window._vizRefs = { trackingViz, handleMarkSelectionChanged };
}, 1000);
// Cleanup
return () => {
clearTimeout(timer);
if (window._vizRefs) {
- const { openCasesViz, createdCasesViz, handleMarkSelectionChanged } = window._vizRefs;
- if (openCasesViz) {
- openCasesViz.removeEventListener('markselectionchanged', handleMarkSelectionChanged);
- }
- if (createdCasesViz) {
- createdCasesViz.removeEventListener('markselectionchanged', handleMarkSelectionChanged);
+ const { trackingViz, handleMarkSelectionChanged } = window._vizRefs;
+ if (trackingViz) {
+ trackingViz.removeEventListener('markselectionchanged', handleMarkSelectionChanged);
}
delete window._vizRefs;
}
@@ -150,7 +126,7 @@ const CasesContent = () => {
// Generate message content for each selected mark
const dataOnly = selectedMarks.map((mark, index) =>
- `Case ${index + 1}:
+ `Shipment ${index + 1}:
${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n')}`
).join('\n\n');
@@ -161,102 +137,102 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
return (
- {/* Service Portal Elements Row */}
+ {/* Shipping Metrics Row */}
- {/* Case Queue Status */}
+ {/* Shipment Status */}
-
- Queue Status
+
+ Shipment Status
- Current case queue metrics
+ Current shipment tracking metrics
- Pending Review
- 23
+ In Transit
+ 247
- In Progress
- 47
+ Out for Delivery
+ 89
- Awaiting Customer
- 12
+ Delivered Today
+ 156
- Escalated
- 5
+ Delayed
+ 12
- {/* SLA Performance */}
+ {/* Delivery Performance */}
-
- SLA Performance
+
+ Delivery Performance
- Service level agreement metrics
+ On-time delivery and logistics metrics
- Response Time
- 2.3h
+ On-Time Delivery
+ 94.8%
- Resolution Time
- 18.5h
+ Avg Transit Time
+ 2.4 days
- SLA Compliance
- 94.2%
+ Delivery Success Rate
+ 98.2%
- First Call Resolution
- 78.1%
+ Same-Day Delivery
+ 23.5%
- {/* Agent Performance */}
+ {/* Top Shipping Routes */}
-
- Agent Performance
+
+ Top Shipping Routes
- Top performing agents this week
+ Most active shipping corridors this week
- Sarah Chen
- 47 cases
+ NYC → LA
+ 342 shipments
- Mike Rodriguez
- 42 cases
+ Chicago → Miami
+ 287 shipments
- Emily Johnson
- 38 cases
+ Seattle → Boston
+ 198 shipments
- David Kim
- 35 cases
+ Atlanta → Denver
+ 156 shipments
@@ -268,35 +244,34 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
- Share Case Update ({selectedMarks.length})
+ Share Shipment Update ({selectedMarks.length})
)}
- {/* Tableau Dashboards Row */}
-
- {/* Open Cases Dashboard */}
+ {/* Tableau Dashboard */}
+
-
- Open Cases
+
+ E-Space Tracking
- Current open cases and their status across all service channels
+ Real-time shipment tracking and logistics analytics
-
+
` • ${key}: ${value}`).join('\n'
min-w-[300px] min-h-[1430px]
sm:min-w-[510px] sm:min-h-[1430px]
md:min-w-[600px] md:min-h-[950px]
- lg:min-w-[750px] lg:min-h-[950px]
- xl:min-w-[750px] xl:min-h-[950px]
- 2xl:min-w-[750px] 2xl:min-h-[950px]
+ lg:min-w-[1200px] lg:min-h-[950px]
+ xl:min-w-[1600px] xl:min-h-[1180px]
+ 2xl:min-w-[1600px] 2xl:min-h-[1180px]
'
layouts = {{
'xs': { 'device': 'desktop' },
@@ -320,47 +295,6 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
-
- {/* Created Cases Dashboard */}
-
-
-
-
- Created Cases
-
-
- Case creation trends and volume analysis over time
-
-
-
-
-
-
@@ -370,8 +304,8 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
e.stopPropagation()}>
-
- Share Case Update
+
+ Share Shipment Update
setShowSlackModal(false)}
@@ -388,7 +322,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
@@ -412,12 +346,12 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
alert('Please enter a message before sending.');
return;
}
- alert(`Demo: Message sent to team!\n\nMessage: ${editableSlackMessage}`);
+ alert(`Demo: Message sent to E-Space logistics team!\n\nMessage: ${editableSlackMessage}`);
setShowSlackModal(false);
setSelectedMarks([]);
setEditableSlackMessage('');
}}
- className="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
+ className="px-4 py-2 bg-espace-500 hover:bg-espace-600 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
>
Send to Team
@@ -434,7 +368,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
export default function CasesPage() {
return (
-
+
diff --git a/src/app/demo/servicedesk/config.js b/src/app/demo/servicedesk/config.js
index 02f54b2e..8c6bec81 100644
--- a/src/app/demo/servicedesk/config.js
+++ b/src/app/demo/servicedesk/config.js
@@ -9,22 +9,24 @@ import {
Settings,
BarChart3,
Clock,
- Languages
+ Languages,
+ Truck,
+ Leaf
} from "lucide-react";
export const settings = {
app_id: 'servicedesk',
- app_name: 'Service Excellence Platform',
- app_logo: '/img/themes/servicedesk/dataicon.png',
- auth_logo: '/img/themes/servicedesk/dataicon.png',
+ app_name: 'E-Space Support Hub',
+ app_logo: '/img/themes/servicedesk/e-space_small.png',
+ auth_logo: 'https://cdn.brandfetch.io/idypK-MB6o/w/200/h/200/theme/dark/icon.jpeg?c=1bxid64Mup7aczewSAYMX&t=1762890670211',
base_path: '/demo/servicedesk',
- auth_hero: 'https://images.unsplash.com/photo-1556761175-5973dc0f32e7?q=80&w=2832&auto=format&fit=crop',
+ auth_hero: 'https://player.vimeo.com/video/753626640?h=23d74e3691&&autoplay=1&loop=1&autopause=0&api=1&background=1',
ai_chat: true,
- ai_avatar: '/img/themes/servicedesk/dataicon.png',
+ ai_avatar: 'https://cdn.brandfetch.io/idypK-MB6o/w/200/h/200/theme/dark/icon.jpeg?c=1bxid64Mup7aczewSAYMX&t=1762890670211',
sample_questions: [
- "What's our average response time this month?",
- "Show me open cases by priority",
- "What's our customer training completion rate?",
+ "What's our satellite network uptime this month?",
+ "Show me open support tickets by priority",
+ "What's our customer onboarding completion rate?",
],
sections: [
{
@@ -32,28 +34,28 @@ export const settings = {
icon: ,
path: '',
min_role: 0,
- description: 'Service analytics overview and key metrics'
+ description: 'E-Space support analytics overview and key metrics'
},
{
- name: 'Cases',
- icon: ,
+ name: 'Shipping Tracker',
+ icon: ,
path: '/cases',
min_role: 0,
- description: 'Open cases and case creation analytics'
+ description: 'Track shipments and delivery status'
},
{
- name: 'Customer Success',
- icon: ,
+ name: 'ESG Impact',
+ icon: ,
path: '/success',
min_role: 2,
- description: 'Strategic insights, renewals, and customer health'
+ description: 'Track environmental, social, and governance impact metrics'
},
{
- name: 'Training',
+ name: 'Onboarding',
icon: ,
path: '/training',
min_role: 1,
- description: 'Customer training completion and effectiveness'
+ description: 'Customer onboarding completion and effectiveness'
},
{
name: 'Settings',
@@ -71,14 +73,14 @@ export const settings = {
},
],
branding: {
- primary_color: '#2563EB', // Professional blue
- secondary_color: '#3B82F6',
- accent_color: '#10B981',
+ primary_color: '#046C93', // E-Space primary blue
+ secondary_color: '#1E3A8A', // Rich blue
+ accent_color: '#046C93', // Primary blue
success_color: '#10B981',
warning_color: '#F59E0B',
danger_color: '#EF4444',
- background_color: '#F8FAFC',
- text_color: '#1F2937'
+ background_color: '#0F172A', // Dark space background
+ text_color: '#F1F5F9'
}
}
diff --git a/src/app/demo/servicedesk/success/page.jsx b/src/app/demo/servicedesk/success/page.jsx
index de05da21..5cbb4873 100644
--- a/src/app/demo/servicedesk/success/page.jsx
+++ b/src/app/demo/servicedesk/success/page.jsx
@@ -3,11 +3,11 @@
import { Demo, FloatingAssistant } from '@/components';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui";
import { TableauEmbed } from '@/components';
-import { Users2, MessageSquare, X } from 'lucide-react';
+import { Leaf, MessageSquare, X } from 'lucide-react';
import { settings } from '../config';
import { useState, useEffect } from 'react';
-const CustomerSuccessContent = () => {
+const ESGImpactContent = () => {
// State for mark selection and Slack functionality
const [selectedMarks, setSelectedMarks] = useState([]);
const [showSlackModal, setShowSlackModal] = useState(false);
@@ -65,54 +65,54 @@ const CustomerSuccessContent = () => {
const setupListeners = () => {
// Try multiple ways to find the viz element
- let customerHealthViz = document.getElementById('customerHealthViz');
+ let esgImpactViz = document.getElementById('esgImpactViz');
// If not found by ID, try shadow root or querySelector
- if (!customerHealthViz) {
+ if (!esgImpactViz) {
const tableauVizElements = document.querySelectorAll('tableau-viz');
if (tableauVizElements.length > 0) {
// Find the one with matching id attribute
- customerHealthViz = Array.from(tableauVizElements).find(
- viz => viz.id === 'customerHealthViz' || viz.getAttribute('id') === 'customerHealthViz'
+ esgImpactViz = Array.from(tableauVizElements).find(
+ viz => viz.id === 'esgImpactViz' || viz.getAttribute('id') === 'esgImpactViz'
) || tableauVizElements[0];
}
}
- if (customerHealthViz) {
+ if (esgImpactViz) {
const addMarkSelectionListener = () => {
- customerHealthViz.addEventListener('markselectionchanged', handleMarkSelectionChanged);
+ esgImpactViz.addEventListener('markselectionchanged', handleMarkSelectionChanged);
};
// Check if already interactive
- const isAlreadyInteractive = customerHealthViz.getIsInteractive?.() || customerHealthViz.isInteractive || false;
+ const isAlreadyInteractive = esgImpactViz.getIsInteractive?.() || esgImpactViz.isInteractive || false;
if (isAlreadyInteractive) {
addMarkSelectionListener();
} else {
- customerHealthViz.addEventListener('firstinteractive', () => {
+ esgImpactViz.addEventListener('firstinteractive', () => {
addMarkSelectionListener();
});
}
}
- return { customerHealthViz };
+ return { esgImpactViz };
};
// Delay setup to ensure DOM elements are available
const timer = setTimeout(() => {
- const { customerHealthViz } = setupListeners();
+ const { esgImpactViz } = setupListeners();
// Store refs for cleanup
- window._vizRefs = { customerHealthViz, handleMarkSelectionChanged };
+ window._vizRefs = { esgImpactViz, handleMarkSelectionChanged };
}, 1000);
// Cleanup
return () => {
clearTimeout(timer);
if (window._vizRefs) {
- const { customerHealthViz, handleMarkSelectionChanged } = window._vizRefs;
- if (customerHealthViz) {
- customerHealthViz.removeEventListener('markselectionchanged', handleMarkSelectionChanged);
+ const { esgImpactViz, handleMarkSelectionChanged } = window._vizRefs;
+ if (esgImpactViz) {
+ esgImpactViz.removeEventListener('markselectionchanged', handleMarkSelectionChanged);
}
delete window._vizRefs;
}
@@ -127,7 +127,7 @@ const CustomerSuccessContent = () => {
// Generate message content for each selected mark
const dataOnly = selectedMarks.map((mark, index) =>
- `Customer ${index + 1}:
+ `ESG Impact ${index + 1}:
${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n')}`
).join('\n\n');
@@ -143,41 +143,71 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
- Share Customer Update ({selectedMarks.length})
+ Share ESG Impact Update ({selectedMarks.length})
)}
-
+
+ {/* Key ESG Metrics - Stacked on top */}
+
+
+ Key ESG Metrics
+
+ Performance indicators
+
+
+
+
+
+
Carbon Reduction
+
32%
+
↓ 8% from last quarter
+
+
+
Waste Diversion Rate
+
87%
+
↑ 5% from last month
+
+
+
Renewable Energy
+
94%
+
↑ 12% this quarter
+
+
+
+
+
+ {/* Tableau Viz - Full width below */}
-
- Customer Health Score
+
+ Environmental Impact Tracking
- Track customer satisfaction and renewal likelihood
+ Monitor carbon emissions, waste reduction, and environmental sustainability metrics
-
+
` • ${key}: ${value}`).join('\n'
-
-
-
- Key Success Metrics
-
- Renewal rates and customer engagement
-
-
-
-
-
-
Renewal Rate
-
94%
-
↑ 5% from last quarter
-
-
-
Customer Satisfaction
-
4.8/5
-
↑ 0.3 from last month
-
-
-
Premium Upgrades
-
23%
-
↑ 8% this quarter
-
-
-
-
@@ -228,8 +230,8 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
e.stopPropagation()}>
-
- Share Customer Update
+
+ Share ESG Impact Update
setShowSlackModal(false)}
@@ -246,7 +248,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
@@ -270,12 +272,12 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
alert('Please enter a message before sending.');
return;
}
- alert(`Demo: Message sent to team!\n\nMessage: ${editableSlackMessage}`);
+ alert(`Demo: Message sent to E-Space ESG team!\n\nMessage: ${editableSlackMessage}`);
setShowSlackModal(false);
setSelectedMarks([]);
setEditableSlackMessage('');
}}
- className="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
+ className="px-4 py-2 bg-espace-500 hover:bg-espace-600 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
>
Send to Team
@@ -290,10 +292,10 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
);
}
-export default function CustomerSuccessPage() {
+export default function ESGImpactPage() {
return (
-
-
+
+
);
diff --git a/src/app/demo/servicedesk/training/page.jsx b/src/app/demo/servicedesk/training/page.jsx
index 7e9d131c..756678f8 100644
--- a/src/app/demo/servicedesk/training/page.jsx
+++ b/src/app/demo/servicedesk/training/page.jsx
@@ -127,7 +127,7 @@ const TrainingContent = () => {
// Generate message content for each selected mark
const dataOnly = selectedMarks.map((mark, index) =>
- `Training ${index + 1}:
+ `Onboarding ${index + 1}:
${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n')}`
).join('\n\n');
@@ -144,18 +144,18 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
Overall Completion
- 87%
- All training programs
+ 87%
+ All onboarding programs
- Active Trainees
+ Active Customers
1,247
- ↑ 15% from last month
+ ↑ 15% from last month
@@ -165,7 +165,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
3.2 days
- ↓ 0.5 days faster
+ ↓ 0.5 days faster
@@ -174,7 +174,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
Satisfaction Score
- 4.6/5
+ 4.6/5
Customer feedback
@@ -185,25 +185,25 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
- Share Training Update ({selectedMarks.length})
+ Share Onboarding Update ({selectedMarks.length})
)}
-
-
-
- Training Analytics
-
-
- Completion rates and effectiveness by training type
-
-
-
+
+
+
+ Customer Onboarding Analytics
+
+
+ Completion rates and effectiveness by onboarding program
+
+
+
` • ${key}: ${value}`).join('\n'
- Onboarding Training
+ Satellite Network Basics
New customer orientation
@@ -251,8 +251,8 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
- Advanced Features
- Premium tier training
+ Advanced Connectivity
+ Enterprise features training
@@ -267,7 +267,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
- Best Practices
+ Network Optimization
Ongoing education
@@ -289,8 +289,8 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
e.stopPropagation()}>
-
- Share Training Update
+
+ Share Onboarding Update
setShowSlackModal(false)}
@@ -307,7 +307,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
@@ -331,12 +331,12 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
alert('Please enter a message before sending.');
return;
}
- alert(`Demo: Message sent to team!\n\nMessage: ${editableSlackMessage}`);
+ alert(`Demo: Message sent to E-Space onboarding team!\n\nMessage: ${editableSlackMessage}`);
setShowSlackModal(false);
setSelectedMarks([]);
setEditableSlackMessage('');
}}
- className="px-4 py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
+ className="px-4 py-2 bg-espace-500 hover:bg-espace-600 text-white rounded-lg transition-colors font-semibold flex items-center gap-2"
>
Send to Team
@@ -353,7 +353,7 @@ ${Object.entries(mark).map(([key, value]) => ` • ${key}: ${value}`).join('\n'
export default function TrainingPage() {
return (
-
+
diff --git a/src/components/Demo/components/Auth/Auth.jsx b/src/components/Demo/components/Auth/Auth.jsx
index 2a310891..17762366 100644
--- a/src/components/Demo/components/Auth/Auth.jsx
+++ b/src/components/Demo/components/Auth/Auth.jsx
@@ -22,25 +22,56 @@ export const Auth = (props) => {
const roles = demoManager.getAllRolesForDemo(app_id);
+ // Check if auth_hero is a video URL (Vimeo)
+ const isVideo = auth_hero && (
+ auth_hero.includes('vimeo.com') ||
+ auth_hero.includes('youtube.com') ||
+ auth_hero.includes('youtu.be') ||
+ auth_hero.includes('.mp4') ||
+ auth_hero.includes('.webm')
+ );
+
return (
-
+ {isVideo ? (
+ <>
+
+ {/* Dark overlay for better contrast */}
+
+ >
+ ) : (
+
+ )}
-
+
APP
diff --git a/src/components/Demo/components/Demo.jsx b/src/components/Demo/components/Demo.jsx
index 22dbc474..3391367e 100644
--- a/src/components/Demo/components/Demo.jsx
+++ b/src/components/Demo/components/Demo.jsx
@@ -36,7 +36,7 @@ export const Demo = (props) => {
ai_avatar={ai_avatar}
sections={sections}
/>
-
+
{
} = props;
return (
-
-
+
+
-
+
APP
@@ -44,15 +44,15 @@ export const NavigationMd = (props) => {
return
}): null}
-
+
-
+
Settings
@@ -74,9 +74,11 @@ const NavBarItem = (props) => {
- {icon}
+
+ {icon}
+
{name}
diff --git a/src/components/TableauEmbed/TableauToolbar/TableauToolbar.jsx b/src/components/TableauEmbed/TableauToolbar/TableauToolbar.jsx
index 29e1568a..7c2351c3 100644
--- a/src/components/TableauEmbed/TableauToolbar/TableauToolbar.jsx
+++ b/src/components/TableauEmbed/TableauToolbar/TableauToolbar.jsx
@@ -83,7 +83,7 @@ export const TableauToolbar = forwardRef(function TableauToolbar(props, ref) {
}, [ref]);
return (
-
+
File
diff --git a/src/components/TableauEmbed/TableauViz.jsx b/src/components/TableauEmbed/TableauViz.jsx
index 33a49bd0..fe6cf13f 100644
--- a/src/components/TableauEmbed/TableauViz.jsx
+++ b/src/components/TableauEmbed/TableauViz.jsx
@@ -74,7 +74,11 @@ export const TableauViz = forwardRef(function Viz(props, ref) {
return (
- {customToolbar ? : null}
+ {customToolbar ? (
+
+ ) : null}
- {customToolbar ? : null}
+ {customToolbar ? (
+
+ ) : null}
- {customToolbar ? : null}
+ {customToolbar ? (
+
+ ) : null}
- {customToolbar ? : null}
+ {customToolbar ? (
+
+ ) : null}
- {customToolbar ? : null}
+ {customToolbar ? (
+
+ ) : null}
- {customToolbar ? : null}
+ {customToolbar ? (
+
+ ) : null}