diff --git a/frontend/src/assets/02-34-11-741_512.gif b/frontend/src/assets/02-34-11-741_512.gif
new file mode 100644
index 00000000..4384a78e
Binary files /dev/null and b/frontend/src/assets/02-34-11-741_512.gif differ
diff --git a/frontend/src/assets/13306cc5121a7f1a546dcd301ee79787.jpg b/frontend/src/assets/13306cc5121a7f1a546dcd301ee79787.jpg
new file mode 100644
index 00000000..a5bba6bb
Binary files /dev/null and b/frontend/src/assets/13306cc5121a7f1a546dcd301ee79787.jpg differ
diff --git a/frontend/src/assets/gettyimages-1354372881-612x612.jpg b/frontend/src/assets/gettyimages-1354372881-612x612.jpg
new file mode 100644
index 00000000..ad18b36c
Binary files /dev/null and b/frontend/src/assets/gettyimages-1354372881-612x612.jpg differ
diff --git a/frontend/src/assets/message-send.svg b/frontend/src/assets/message-send.svg
new file mode 100644
index 00000000..3e414a8f
--- /dev/null
+++ b/frontend/src/assets/message-send.svg
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/frontend/src/assets/sendimage.jpeg b/frontend/src/assets/sendimage.jpeg
new file mode 100644
index 00000000..f75b9ab9
Binary files /dev/null and b/frontend/src/assets/sendimage.jpeg differ
diff --git a/frontend/src/assets/tenor.gif b/frontend/src/assets/tenor.gif
new file mode 100644
index 00000000..27ea72b5
Binary files /dev/null and b/frontend/src/assets/tenor.gif differ
diff --git a/frontend/src/assets/wance-paleri-s7gyjnH7Ulk-unsplash-scaled.webp b/frontend/src/assets/wance-paleri-s7gyjnH7Ulk-unsplash-scaled.webp
new file mode 100644
index 00000000..181f4eb1
Binary files /dev/null and b/frontend/src/assets/wance-paleri-s7gyjnH7Ulk-unsplash-scaled.webp differ
diff --git a/frontend/src/components/ChatBot.jsx b/frontend/src/components/ChatBot.jsx
index 7ba8f9fd..838b436d 100644
--- a/frontend/src/components/ChatBot.jsx
+++ b/frontend/src/components/ChatBot.jsx
@@ -3,6 +3,8 @@ import React, { useState, useEffect, useRef } from 'react';
import styled from 'styled-components';
import { AiOutlineClose } from 'react-icons/ai'; // Import the close icon
import bot from '../assets/1_YOViITfBkahHTwGGkKsQdg.png'; // Import the bot image
+import sendmessage from '../assets/message-send.svg'; // Import the sendmessage image
+import chatbackground from '../assets/02-34-11-741_512.gif'; // Import the sendmessage image
const Chatbot = () => {
@@ -108,7 +110,7 @@ const Chatbot = () => {
onChange={handleInputChange}
onKeyPress={(e) => e.key === 'Enter' && handleSendMessage()}
/>
- Send
+
)}
@@ -122,12 +124,13 @@ const ChatbotContainer = styled.div`
max-width: 500px;
margin: 0 auto;
background-color: #121212;
- border-radius: 15px;
+ border-radius: 50px;
box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.5);
font-family: 'Roboto', sans-serif;
display: flex;
flex-direction: column;
justify-content: flex-end;
+
`;
const ToggleContainer = styled.div`
@@ -166,24 +169,36 @@ const ToggleButton = styled.div`
const ChatWindow = styled.div`
display: flex;
flex-direction: column;
+ border-radius: 25px;
justify-content: space-between;
height: 600px;
+ overflow: hidden; /* Hide overflow content when closed */
+ transition: height 0.5s ease; /* Smooth transition for height */
position: relative;
+ background-image: url(${chatbackground}); /* Set the imported image as background */
+
+
`;
+
const CloseIcon = styled.div`
position: absolute;
top: 10px;
right: 20px;
cursor: pointer;
- font-size: 24px;
- color: #FFFFFFF;
- transition: color 0.3s ease;
+ font-size: 28px;
+ color: #ff4d4f; /* Soft red for the default close icon */
+ transition: color 0.3s ease, transform 0.2s ease;
&:hover {
- color: #FFA500; /* Lighter golden on hover */
+ color: #ffa07a; /* Soft coral on hover */
+ transform: scale(1.5); /* Slight zoom on hover */
}
+
+
`;
+
+
const ChatHistory = styled.div`
padding: 20px;
background-color: #1c1c1c; /* Dark gray background for chat history */
@@ -228,9 +243,12 @@ const ChatMessage = styled.div`
? 'linear-gradient(135deg, #001f3f, #0056b3)'
: 'linear-gradient(135deg, #a0d4ff, #4ca1ff)'};
color: ${({ from }) => (from === 'bot' ? 'white' : '#333333')};
+
+ float: ${({ from }) => (from === 'bot' ? 'left' : 'right')}; /* Floating bot to the left, user to the right */
+ clear: both; /* Ensures proper spacing between messages */
align-self: ${({ from }) => (from === 'bot' ? 'flex-start' : 'flex-end')};
transition: background 0.3s ease, transform 0.2s ease;
-
+
&:hover {
background: ${({ from }) =>
from === 'bot'
@@ -241,6 +259,7 @@ const ChatMessage = styled.div`
`;
+
const ChatInput = styled.div`
display: flex;
align-items: center;
@@ -268,26 +287,24 @@ const InputField = styled.input`
`;
const SendButton = styled.button`
- padding: 15px 20px;
- background: linear-gradient(135deg, #001f3f, #0056b3); /* Dark blue gradient */
- color: white; /* White text */
+ width: 50px;
+ height: 50px;
+ background-image: url(${sendmessage});no-repeat center center;
+ background-size: contain;
border: none;
border-radius: 10px;
cursor: pointer;
- font-size: 16px;
- font-weight: bold;
transition: background 0.3s ease, transform 0.2s ease;
-
+
&:hover {
- background: linear-gradient(135deg, #003366, #007bff); /* Slightly lighter blue on hover */
transform: scale(1.05);
}
&:active {
- background: linear-gradient(135deg, #002147, #0056b3); /* Even darker on click */
transform: scale(0.98);
}
`;
-export default Chatbot;
+
+export default Chatbot;
\ No newline at end of file
diff --git a/frontend/src/components/StockForecastingPage/ForecastNowButton.jsx b/frontend/src/components/StockForecastingPage/ForecastNowButton.jsx
index dbae3d76..389f7f73 100644
--- a/frontend/src/components/StockForecastingPage/ForecastNowButton.jsx
+++ b/frontend/src/components/StockForecastingPage/ForecastNowButton.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable no-unused-vars */
// ForecastNowButton.js
import React from 'react';
import styled, { keyframes } from 'styled-components';
@@ -24,33 +25,26 @@ const ForecastNowButton = ({ onClick }) => {
const ForecastNow = styled.button`
font-size: 1.5rem;
color: #ffffff;
- background-color: #01182b;
+ background-color: #004080; /* Dark blue background */
border: none;
- border-radius: 8px;
+ border-radius: 50px; /* Rounded button */
padding: 15px 30px;
- z-index: 9999;
- animation: ${bounceForecast} 2s infinite;
- position: fixed;
- bottom: 20px;
- right: 20px;
cursor: pointer;
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2),
- 0 0 20px rgba(0, 200, 255, 0.6), /* Glow effect */
- 0 0 40px rgba(0, 200, 255, 0.4); /* Glow spread */
- transition: transform 0.2s ease, box-shadow 0.2s ease;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); /* Shadow for depth */
+ transition: background-color 0.3s, transform 0.3s; /* Smooth transitions */
&:hover {
- transform: scale(1.1); /* Slight zoom on hover */
- box-shadow: 0 4px 20px rgba(0, 200, 255, 0.8), /* Enhanced glow on hover */
- 0 0 60px rgba(0, 200, 255, 0.6);
+ background-color: #0050a0; /* Lighter blue on hover */
+ transform: scale(1.05); /* Slightly enlarge on hover */
}
&:active {
- transform: scale(1); /* Reset zoom when clicked */
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2),
- 0 0 20px rgba(0, 200, 255, 0.6), /* Glow remains when clicked */
- 0 0 40px rgba(0, 200, 255, 0.4);
+ transform: scale(0.95); /* Slightly shrink when clicked */
}
+
+ display: flex; /* Center icon and text */
+ align-items: center;
+ justify-content: center;
`;
export default ForecastNowButton;
diff --git a/frontend/src/components/StockForecastingPage/ForecastSummary.jsx b/frontend/src/components/StockForecastingPage/ForecastSummary.jsx
index d873c36e..38f11b1a 100644
--- a/frontend/src/components/StockForecastingPage/ForecastSummary.jsx
+++ b/frontend/src/components/StockForecastingPage/ForecastSummary.jsx
@@ -23,6 +23,7 @@ const ForecastSummary = ({ predictedPrices }) => {
return (
+
Highest Price
Price: ${highest}
@@ -31,7 +32,7 @@ const ForecastSummary = ({ predictedPrices }) => {
Lowest Price
Price: ${lowest}
-
+
{/* CSV Download Button */}
{/* CSV Icon */}
@@ -39,6 +40,7 @@ const ForecastSummary = ({ predictedPrices }) => {
Download as CSV
+
);
};
@@ -47,107 +49,124 @@ export default ForecastSummary;
// Styled Components
-const SummaryContainer = styled.div`
- display: flex;
- flex-direction: column;
- margin-right: 220px;
- gap: 20px;
- padding: 20px;
- background: rgba(255, 255, 255, 0.1);
- border-radius: 8px;
- color: #ffffff;
-
- @media (max-width: 768px) {
- margin-right: 0;
- padding: 10px;
- }
+const SummaryBoxAll = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ margin-top: 20px;
+ font-size: 1.2rem;
+ background: #004080;
+ padding: 10px 20px;
+ border-radius: 5px;
+ cursor: pointer;
+`;
- @media (max-width: 480px) {
- padding: 5px;
- }
+const SummaryContainer = styled.div`
+ width: 40%;
+ display: flex;
+ flex-direction: column;
+ margin-right: 20px;
+ gap: 20px;
+ padding: 20px;
+ background: rgba(255, 255, 255, 0.1);
+ border-radius: 8px;
+ color: #ffffff;
+
+ @media (max-width: 768px) {
+ margin-right: 0;
+ padding: 10px;
+ }
+
+ @media (max-width: 480px) {
+ padding: 5px;
+ }
`;
const SummaryBox = styled.div`
- background: rgba(0, 0, 0, 0.5);
- padding: 15px;
- border-radius: 8px;
- text-align: center;
+ background: rgba(0, 0, 0, 0.5);
+ padding: 15px;
+ border-radius: 8px;
+ text-align: center;
+width: 100%;
+height: 90%;
+ h2 {
+ margin-bottom: 10px;
+ font-size: 1.2rem;
+ }
+
+ p {
+ margin: 5px 0;
+ font-size: 1rem;
+ }
+
+ @media (max-width: 768px) {
+ padding: 10px;
h2 {
- margin-bottom: 10px;
- font-size: 1.2rem;
+ font-size: 1rem;
}
p {
- margin: 5px 0;
- font-size: 1rem;
+ font-size: 0.9rem;
}
+ }
- @media (max-width: 768px) {
- padding: 10px;
+ @media (max-width: 480px) {
+ padding: 8px;
- h2 {
- font-size: 1rem;
- }
-
- p {
- font-size: 0.9rem;
- }
+ h2 {
+ font-size: 0.9rem;
}
- @media (max-width: 480px) {
- padding: 8px;
-
- h2 {
- font-size: 0.9rem;
- }
-
- p {
- font-size: 0.8rem;
- }
+ p {
+ font-size: 0.8rem;
}
+ }
`;
const CSVDownloadButton = styled.div`
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 10px;
- margin-top: 20px;
- font-size: 1.2rem;
- background: #004080;
- padding: 10px 20px;
- border-radius: 5px;
- cursor: pointer;
-
- svg {
- font-size: 1.5rem;
- }
-
- a {
- color: #ffffff;
- text-decoration: none;
- }
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 10px;
+ margin-top: 20px;
+ font-size: 1.2rem;
+ background: #004080;
+ padding: 10px 20px;
+ border-radius: 5px;
+ cursor: pointer;
+
+ svg {
+ font-size: 1.5rem;
+ }
+
+ a {
+ color: #ffffff;
+ text-decoration: none;
+ }
- &:hover {
- background: #0050a0;
- }
+ &:hover {
+ background: #0050a0;
+ }
- @media (max-width: 768px) {
- font-size: 1rem;
- padding: 8px 16px;
+ @media (max-width: 768px) {
+ font-size: 1rem;
+ padding: 8px 16px;
- svg {
- font-size: 1.2rem;
- }
+ svg {
+ font-size: 1.2rem;
}
+ }
- @media (max-width: 480px) {
- font-size: 0.9rem;
- padding: 6px 12px;
+ @media (max-width: 480px) {
+ font-size: 0.9rem;
+ padding: 6px 12px;
- svg {
- font-size: 1rem;
- }
+ svg {
+ font-size: 1rem;
}
+ }
`;
+
+export { SummaryBoxAll, SummaryContainer, SummaryBox, CSVDownloadButton };
diff --git a/frontend/src/components/StockForecastingPage/ForecastedPricesChart.jsx b/frontend/src/components/StockForecastingPage/ForecastedPricesChart.jsx
index e5340028..74289169 100644
--- a/frontend/src/components/StockForecastingPage/ForecastedPricesChart.jsx
+++ b/frontend/src/components/StockForecastingPage/ForecastedPricesChart.jsx
@@ -59,6 +59,7 @@ const ChartContainer = styled.div`
max-width: 700px; /* Limit the width on larger screens */
margin: 0 auto;
padding: 10px;
+ margine-left: 20px;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 10px;
color: white;
diff --git a/frontend/src/components/StockForecastingPage/Header.jsx b/frontend/src/components/StockForecastingPage/Header.jsx
index f90ca738..51a46011 100644
--- a/frontend/src/components/StockForecastingPage/Header.jsx
+++ b/frontend/src/components/StockForecastingPage/Header.jsx
@@ -3,24 +3,35 @@ import styled from 'styled-components';
const HeaderContainer = styled.div`
text-align: center;
- margin-bottom: 20px;
+ margin-bottom: 30px;
+ padding: 20px;
+ background: rgba(0, 0, 0, 0.6); /* Slightly transparent background */
+ border-radius: 8px;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
`;
const Title = styled.h1`
- font-size: 2rem;
- color: #ffffff; /* Light text color for dark background */
+ font-size: 2.5rem;
+ color: #f0f0f0; /* Light, elegant text color */
+ font-weight: 600;
+ letter-spacing: 2px; /* Adds a slight spread to the letters */
+ margin-bottom: 10px;
`;
const Slogan = styled.p`
- font-size: 1.2rem;
- color: #cccccc; /* Lighter text color for slogan */
+ font-size: 1.3rem;
+ color: #a8a8a8; /* Subtle grey for a softer feel */
+ font-weight: 300;
+ margin-bottom: 0;
+ line-height: 1.6; /* Enhances readability */
+ font-style: italic;
`;
const Header = () => {
return (
- Stock Forecast Page
- Predict real-time market stock data
+ Predict Future Trends
+ Stay ahead with real-time market insights
);
};
diff --git a/frontend/src/pages/Dashboard.jsx b/frontend/src/pages/Dashboard.jsx
index 8f0d71e6..4b7aa51d 100644
--- a/frontend/src/pages/Dashboard.jsx
+++ b/frontend/src/pages/Dashboard.jsx
@@ -6,6 +6,7 @@ import TickerTape from '../components/Dashboard_Components/TickerTape.jsx';
import GainersChart from '../components/Dashboard_Components/GainersChart.jsx';
import NewsComponent from '../services/NewsService.jsx';
import Chatbot from '../components/ChatBot';
+import backgroundimage from '../assets/02-34-11-741_512.gif'; // Import the sendmessage image
const Dashboard = () => {
const [isBouncing, setIsBouncing] = useState(true); // To control bounce animation
@@ -42,6 +43,7 @@ const DashboardContainer = styled.div`
min-height: 100vh; /* Full height */
padding: 20px;
color: #fff; /* Ensure text is readable */
+ background-image: url(${backgroundimage}); /* Set the imported image as background */
`;
const MainContent = styled.main`
diff --git a/frontend/src/pages/StockForecastPage.jsx b/frontend/src/pages/StockForecastPage.jsx
index ae625a97..700951c3 100644
--- a/frontend/src/pages/StockForecastPage.jsx
+++ b/frontend/src/pages/StockForecastPage.jsx
@@ -93,14 +93,18 @@ const StockForecastPage = () => {
)}
+
+{selectedStock && }
- {selectedStock && }
+
+
{/* Flex container for side-by-side components */}
{predictedPrices.length > 0 && (
+
)}
@@ -112,7 +116,14 @@ const StockForecastPage = () => {
export default StockForecastPage;
// Styled components
-
+const ForecastNowButtonContainer = styled.div`
+ position: fixed; /* Use fixed positioning */
+ bottom: 20px; /* Distance from the bottom */
+ right: 20px; /* Distance from the right */
+ display: flex;
+ justify-content: center;
+ z-index: 9999; /* Ensure it appears above other content */
+`;
const bounce = keyframes`
0%, 20%, 50%, 80%, 100% {
transform: translateY(0);
@@ -167,6 +178,7 @@ const AnimatedIcon = styled.div`
align-items: center;
width: 100px;
height: 100px;
+
svg {
font-size: 3rem;
@@ -197,12 +209,20 @@ const StockInfoContainer = styled.div`
const ForecastContainer = styled.div`
display: flex;
+ flex-direction: row;
justify-content: space-between;
- gap: 20px;
+ gap: 50px;
margin-top: 20px;
- @media (max-width: 768px) {
- flex-direction: column;
+ /* Make sure the left side takes 2/3 of the width and the right side 1/3 */
+ & > .left {
+ flex-basis: 66.66%; /* 2/3 of the width */
+ background-color: #f0f0f0; /* Optional: set background for visibility */
+ }
+
+ & > .right {
+ flex-basis: 33.33%; /* 1/3 of the width */
+ background-color: #d0d0d0; /* Optional: set background for visibility */
}
`;