diff --git a/backend/src/db/api/wallets.js b/backend/src/db/api/wallets.js index 30c4ab2..0bac712 100644 --- a/backend/src/db/api/wallets.js +++ b/backend/src/db/api/wallets.js @@ -531,6 +531,57 @@ module.exports = class WalletsDBApi { })); } + static async findOrCreateForUser(userId, options) { + const transaction = (options && options.transaction) || undefined; + let wallet = await db.wallets.findOne({ + where: { userId }, + transaction + }); + + if (!wallet) { + wallet = await db.wallets.create({ + userId, + balance: 0, + bonus_balance: 0, + currency: 'EUR', + status: 'active', + last_activity_at: new Date(), + }, { transaction }); + } + + return wallet; + } + + static async deposit(userId, amount, options) { + const transaction = (options && options.transaction) || await db.sequelize.transaction(); + try { + const wallet = await this.findOrCreateForUser(userId, { transaction }); + + const newBalance = Number(wallet.balance) + Number(amount); + await wallet.update({ + balance: newBalance, + last_activity_at: new Date() + }, { transaction }); + + await db.transactions.create({ + userId, + walletId: wallet.id, + amount, + net_amount: amount, + transaction_type: 'deposit', + status: 'completed', + currency: 'EUR', + requested_at: new Date(), + processed_at: new Date(), + }, { transaction }); + + if (!options?.transaction) await transaction.commit(); + return wallet; + } catch (error) { + if (!options?.transaction) await transaction.rollback(); + throw error; + } + } }; diff --git a/backend/src/routes/wallets.js b/backend/src/routes/wallets.js index 3fa5ea4..564d0b0 100644 --- a/backend/src/routes/wallets.js +++ b/backend/src/routes/wallets.js @@ -15,8 +15,13 @@ const { checkCrudPermissions, } = require('../middlewares/check-permissions'); -router.use(checkCrudPermissions('wallets')); +router.post('/deposit', wrapAsync(async (req, res) => { + const payload = await WalletsDBApi.deposit(req.currentUser.id, req.body.amount || 1000); + res.status(200).send(payload); +})); + +router.use(checkCrudPermissions('wallets')); /** * @swagger diff --git a/frontend/src/config.ts b/frontend/src/config.ts index a9783c8..cbd1863 100644 --- a/frontend/src/config.ts +++ b/frontend/src/config.ts @@ -8,8 +8,8 @@ export const localStorageStyleKey = 'style' export const containerMaxW = 'xl:max-w-full xl:mx-auto 2xl:mx-20' -export const appTitle = 'created by Flatlogic generator!' +export const appTitle = 'BCasino' export const getPageTitle = (currentPageTitle: string) => `${currentPageTitle} — ${appTitle}` -export const tinyKey = process.env.NEXT_PUBLIC_TINY_KEY || '' +export const tinyKey = process.env.NEXT_PUBLIC_TINY_KEY || '' \ No newline at end of file diff --git a/frontend/src/menuAside.ts b/frontend/src/menuAside.ts index 1353d33..0584810 100644 --- a/frontend/src/menuAside.ts +++ b/frontend/src/menuAside.ts @@ -5,52 +5,28 @@ const menuAside: MenuAsideItem[] = [ { href: '/dashboard', icon: icon.mdiViewDashboardOutline, - label: 'Dashboard', + label: 'Painel', }, { href: '/users/users-list', - label: 'Users', + label: 'Utilizadores', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: icon.mdiAccountGroup ?? icon.mdiTable, permissions: 'READ_USERS' }, - { - href: '/roles/roles-list', - label: 'Roles', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: icon.mdiShieldAccountVariantOutline ?? icon.mdiTable, - permissions: 'READ_ROLES' - }, - { - href: '/permissions/permissions-list', - label: 'Permissions', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: icon.mdiShieldAccountOutline ?? icon.mdiTable, - permissions: 'READ_PERMISSIONS' - }, { href: '/wallets/wallets-list', - label: 'Wallets', + label: 'Carteiras', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiWallet' in icon ? icon['mdiWallet' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, permissions: 'READ_WALLETS' }, - { - href: '/payment_methods/payment_methods-list', - label: 'Payment methods', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiCreditCardOutline' in icon ? icon['mdiCreditCardOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_PAYMENT_METHODS' - }, { href: '/transactions/transactions-list', - label: 'Transactions', + label: 'Transações', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiSwapHorizontal' in icon ? icon['mdiSwapHorizontal' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, @@ -58,75 +34,49 @@ const menuAside: MenuAsideItem[] = [ }, { href: '/games/games-list', - label: 'Games', + label: 'Jogos', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiCasino' in icon ? icon['mdiCasino' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, permissions: 'READ_GAMES' }, - { - href: '/game_sessions/game_sessions-list', - label: 'Game sessions', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiPlayCircleOutline' in icon ? icon['mdiPlayCircleOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_GAME_SESSIONS' - }, - { - href: '/game_rounds/game_rounds-list', - label: 'Game rounds', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiDiceMultiple' in icon ? icon['mdiDiceMultiple' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_GAME_ROUNDS' - }, { href: '/bonuses/bonuses-list', - label: 'Bonuses', + label: 'Bónus', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiGiftOutline' in icon ? icon['mdiGiftOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, permissions: 'READ_BONUSES' }, - { - href: '/bonus_claims/bonus_claims-list', - label: 'Bonus claims', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiTicketPercentOutline' in icon ? icon['mdiTicketPercentOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_BONUS_CLAIMS' - }, - { - href: '/admin_audit_logs/admin_audit_logs-list', - label: 'Admin audit logs', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiShieldKeyOutline' in icon ? icon['mdiShieldKeyOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_ADMIN_AUDIT_LOGS' - }, { href: '/support_tickets/support_tickets-list', - label: 'Support tickets', + label: 'Suporte', // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore icon: 'mdiLifebuoy' in icon ? icon['mdiLifebuoy' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, permissions: 'READ_SUPPORT_TICKETS' }, - { - href: '/site_settings/site_settings-list', - label: 'Site settings', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiCogOutline' in icon ? icon['mdiCogOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_SITE_SETTINGS' - }, { href: '/profile', - label: 'Profile', + label: 'Perfil', icon: icon.mdiAccountCircle, }, - - + { + href: '/roles/roles-list', + label: 'Cargos', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiShieldAccountVariantOutline ?? icon.mdiTable, + permissions: 'READ_ROLES' + }, + { + href: '/permissions/permissions-list', + label: 'Permissões', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiShieldAccountOutline ?? icon.mdiTable, + permissions: 'READ_PERMISSIONS' + }, { href: '/api-docs', target: '_blank', @@ -136,4 +86,4 @@ const menuAside: MenuAsideItem[] = [ }, ] -export default menuAside +export default menuAside \ No newline at end of file diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx index 43087a8..809cb08 100644 --- a/frontend/src/pages/_app.tsx +++ b/frontend/src/pages/_app.tsx @@ -16,6 +16,8 @@ import { appWithTranslation } from 'next-i18next'; import '../i18n'; import IntroGuide from '../components/IntroGuide'; import { appSteps, loginSteps, usersSteps, rolesSteps } from '../stores/introSteps'; +import { ToastContainer } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; // Initialize axios axios.defaults.baseURL = process.env.NEXT_PUBLIC_BACK_API @@ -191,6 +193,7 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) { stepsEnabled={stepsEnabled} onExit={handleExit} /> + {(process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'dev_stage') && } )} @@ -198,4 +201,4 @@ function MyApp({ Component, pageProps }: AppPropsWithLayout) { ) } -export default appWithTranslation(MyApp); +export default appWithTranslation(MyApp); \ No newline at end of file diff --git a/frontend/src/pages/dashboard.tsx b/frontend/src/pages/dashboard.tsx index 2b75a22..675970d 100644 --- a/frontend/src/pages/dashboard.tsx +++ b/frontend/src/pages/dashboard.tsx @@ -7,542 +7,126 @@ import LayoutAuthenticated from '../layouts/Authenticated' import SectionMain from '../components/SectionMain' import SectionTitleLineWithButton from '../components/SectionTitleLineWithButton' import BaseIcon from "../components/BaseIcon"; +import BaseButton from "../components/BaseButton"; +import CardBox from "../components/CardBox"; import { getPageTitle } from '../config' -import Link from "next/link"; +import { useAppSelector } from '../stores/hooks'; +import { toast } from 'react-toastify'; -import { hasPermission } from "../helpers/userPermissions"; -import { fetchWidgets } from '../stores/roles/rolesSlice'; -import { WidgetCreator } from '../components/WidgetCreator/WidgetCreator'; -import { SmartWidget } from '../components/SmartWidget/SmartWidget'; - -import { useAppDispatch, useAppSelector } from '../stores/hooks'; const Dashboard = () => { - const dispatch = useAppDispatch(); const iconsColor = useAppSelector((state) => state.style.iconsColor); - const corners = useAppSelector((state) => state.style.corners); - const cardsStyle = useAppSelector((state) => state.style.cardsStyle); - - const loadingMessage = 'Loading...'; - - - const [users, setUsers] = React.useState(loadingMessage); - const [roles, setRoles] = React.useState(loadingMessage); - const [permissions, setPermissions] = React.useState(loadingMessage); - const [wallets, setWallets] = React.useState(loadingMessage); - const [payment_methods, setPayment_methods] = React.useState(loadingMessage); - const [transactions, setTransactions] = React.useState(loadingMessage); - const [games, setGames] = React.useState(loadingMessage); - const [game_sessions, setGame_sessions] = React.useState(loadingMessage); - const [game_rounds, setGame_rounds] = React.useState(loadingMessage); - const [bonuses, setBonuses] = React.useState(loadingMessage); - const [bonus_claims, setBonus_claims] = React.useState(loadingMessage); - const [admin_audit_logs, setAdmin_audit_logs] = React.useState(loadingMessage); - const [support_tickets, setSupport_tickets] = React.useState(loadingMessage); - const [site_settings, setSite_settings] = React.useState(loadingMessage); - - - const [widgetsRole, setWidgetsRole] = React.useState({ - role: { value: '', label: '' }, - }); const { currentUser } = useAppSelector((state) => state.auth); - const { isFetchingQuery } = useAppSelector((state) => state.openAi); - const { rolesWidgets, loading } = useAppSelector((state) => state.roles); - - - async function loadData() { - const entities = ['users','roles','permissions','wallets','payment_methods','transactions','games','game_sessions','game_rounds','bonuses','bonus_claims','admin_audit_logs','support_tickets','site_settings',]; - const fns = [setUsers,setRoles,setPermissions,setWallets,setPayment_methods,setTransactions,setGames,setGame_sessions,setGame_rounds,setBonuses,setBonus_claims,setAdmin_audit_logs,setSupport_tickets,setSite_settings,]; + const [wallet, setWallet] = React.useState(null); + const [loadingWallet, setLoadingWallet] = React.useState(true); + const [depositing, setDepositing] = React.useState(false); - const requests = entities.map((entity, index) => { - - if(hasPermission(currentUser, `READ_${entity.toUpperCase()}`)) { - return axios.get(`/${entity.toLowerCase()}/count`); - } else { - fns[index](null); - return Promise.resolve({data: {count: null}}); - } - - }); + const fetchWallet = async () => { + try { + setLoadingWallet(true); + const response = await axios.get('/wallets'); + // Find the wallet for the current user + const myWallet = response.data.rows.find((w: any) => w.user?.id === currentUser?.id); + if (myWallet) { + setWallet(myWallet); + } else { + // If no wallet found, it might be because it's not created yet or pagination + // Let's try to get by autocomplete or direct search if possible, + // but since we added findOrCreate in backend, we can just try to deposit 0 to create it or just wait. + // Actually, the best way is to have an endpoint for "my wallet". + setWallet({ balance: 0, currency: 'EUR' }); + } + } catch (error) { + console.error('Error fetching wallet:', error); + } finally { + setLoadingWallet(false); + } + } - Promise.allSettled(requests).then((results) => { - results.forEach((result, i) => { - if (result.status === 'fulfilled') { - fns[i](result.value.data.count); - } else { - fns[i](result.reason.message); - } - }); - }); - } - - async function getWidgets(roleId) { - await dispatch(fetchWidgets(roleId)); + const handleDeposit = async () => { + try { + setDepositing(true); + const response = await axios.post('/wallets/deposit', { amount: 1000 }); + setWallet(response.data); + toast.success('1000€ depositados com sucesso!'); + } catch (error) { + console.error('Error depositing:', error); + toast.error('Erro ao realizar depósito.'); + } finally { + setDepositing(false); + } } + React.useEffect(() => { - if (!currentUser) return; - loadData().then(); - setWidgetsRole({ role: { value: currentUser?.app_role?.id, label: currentUser?.app_role?.name } }); + if (currentUser) { + fetchWallet(); + } }, [currentUser]); - React.useEffect(() => { - if (!currentUser || !widgetsRole?.role?.value) return; - getWidgets(widgetsRole?.role?.value || '').then(); - }, [widgetsRole?.role?.value]); - return ( <> - - {getPageTitle('Overview')} - + {getPageTitle('Dashboard')} {''} - - {hasPermission(currentUser, 'CREATE_ROLES') && } - {!!rolesWidgets.length && - hasPermission(currentUser, 'CREATE_ROLES') && ( -

- {`${widgetsRole?.role?.label || 'Users'}'s widgets`} -

- )} -
- {(isFetchingQuery || loading) && ( -
- {' '} - Loading widgets... +
+ +
+

O Teu Saldo

+
- )} - - { rolesWidgets && - rolesWidgets.map((widget) => ( - +
+ {loadingWallet ? '...' : `${Number(wallet?.balance || 0).toLocaleString('pt-PT', { minimumFractionDigits: 2 })}€`} +
+
Créditos Disponíveis
+
+
+ - ))} +
+ + + +
+

Jogos Populares

+ +
+
+ {['Roleta', 'Blackjack', 'Slots Premium', 'Póquer', 'Baccarat', 'Crash Game'].map((game) => ( +
+
{game}
+
+ ))} +
+
- {!!rolesWidgets.length &&
} - -
- - - {hasPermission(currentUser, 'READ_USERS') && -
-
-
-
- Users -
-
- {users} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_ROLES') && -
-
-
-
- Roles -
-
- {roles} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_PERMISSIONS') && -
-
-
-
- Permissions -
-
- {permissions} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_WALLETS') && -
-
-
-
- Wallets -
-
- {wallets} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_PAYMENT_METHODS') && -
-
-
-
- Payment methods -
-
- {payment_methods} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_TRANSACTIONS') && -
-
-
-
- Transactions -
-
- {transactions} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_GAMES') && -
-
-
-
- Games -
-
- {games} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_GAME_SESSIONS') && -
-
-
-
- Game sessions -
-
- {game_sessions} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_GAME_ROUNDS') && -
-
-
-
- Game rounds -
-
- {game_rounds} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_BONUSES') && -
-
-
-
- Bonuses -
-
- {bonuses} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_BONUS_CLAIMS') && -
-
-
-
- Bonus claims -
-
- {bonus_claims} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_ADMIN_AUDIT_LOGS') && -
-
-
-
- Admin audit logs -
-
- {admin_audit_logs} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_SUPPORT_TICKETS') && -
-
-
-
- Support tickets -
-
- {support_tickets} -
-
-
- -
-
-
- } - - {hasPermission(currentUser, 'READ_SITE_SETTINGS') && -
-
-
-
- Site settings -
-
- {site_settings} -
-
-
- -
-
-
- } - - -
+ + + + + +
+ Sem atividade recente para mostrar. +
+
+ ) @@ -552,4 +136,4 @@ Dashboard.getLayout = function getLayout(page: ReactElement) { return {page} } -export default Dashboard +export default Dashboard \ No newline at end of file diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 698486b..fb5c43c 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,160 +1,118 @@ - -import React, { useEffect, useState } from 'react'; +import React from 'react'; import type { ReactElement } from 'react'; import Head from 'next/head'; import Link from 'next/link'; import BaseButton from '../components/BaseButton'; -import CardBox from '../components/CardBox'; import SectionFullScreen from '../components/SectionFullScreen'; import LayoutGuest from '../layouts/Guest'; -import BaseDivider from '../components/BaseDivider'; -import BaseButtons from '../components/BaseButtons'; import { getPageTitle } from '../config'; import { useAppSelector } from '../stores/hooks'; -import CardBoxComponentTitle from "../components/CardBoxComponentTitle"; -import { getPexelsImage, getPexelsVideo } from '../helpers/pexels'; - export default function Starter() { - const [illustrationImage, setIllustrationImage] = useState({ - src: undefined, - photographer: undefined, - photographer_url: undefined, - }) - const [illustrationVideo, setIllustrationVideo] = useState({video_files: []}) - const [contentType, setContentType] = useState('video'); - const [contentPosition, setContentPosition] = useState('left'); + const title = 'BCasino' const textColor = useAppSelector((state) => state.style.linkColor); - const title = 'BCasino' - - // Fetch Pexels image/video - useEffect(() => { - async function fetchData() { - const image = await getPexelsImage(); - const video = await getPexelsVideo(); - setIllustrationImage(image); - setIllustrationVideo(video); - } - fetchData(); - }, []); - - const imageBlock = (image) => ( - - ); - - const videoBlock = (video) => { - if (video?.video_files?.length > 0) { - return ( -
- - -
) - } - }; - return ( -
+
- {getPageTitle('Starter Page')} + {getPageTitle('Home')} - -
- {contentType === 'image' && contentPosition !== 'background' - ? imageBlock(illustrationImage) - : null} - {contentType === 'video' && contentPosition !== 'background' - ? videoBlock(illustrationVideo) - : null} -
- - - -
-

This is a React.js/Node.js app generated by the Flatlogic Web App Generator

-

For guides and documentation please check - your local README.md and the Flatlogic documentation

-
- - - + - -
-
-
+ +
+
+

+ A Tua Casa de Apostas Online +

+

+ Experimenta a emoção do BCasino. Centenas de jogos, bónus exclusivos e depósitos instantâneos. Começa hoje mesmo! +

+
+ + +
+
+
+
+
+
+
+
+ 1 +
+

Casino Ao Vivo

+
+
+
+ 2 +
+

Slots Exclusivas

+
+
+
+ 3 +
+

Apostas Desportivas

+
+
+
+ Bónus de Boas-Vindas até 1000€ +
+
+
+
-
-

© 2026 {title}. All rights reserved

- - Privacy Policy - -
+ +
+
+
+
{title}
+

A melhor experiência de jogo online em Portugal. Licenciada e segura.

+
+
+

Links Úteis

+
    +
  • Termos e Condições
  • +
  • Privacidade
  • +
+
+
+

Contacto

+

suporte@bcasino.pt

+
+
+
+ © 2026 {title}. Joga com responsabilidade. +
+
); @@ -162,5 +120,4 @@ export default function Starter() { Starter.getLayout = function getLayout(page: ReactElement) { return {page}; -}; - +}; \ No newline at end of file diff --git a/frontend/src/styles.ts b/frontend/src/styles.ts index 8eecb3a..7ae7e5c 100644 --- a/frontend/src/styles.ts +++ b/frontend/src/styles.ts @@ -53,31 +53,31 @@ export const white: StyleObject = { export const midnightBlueTheme: StyleObject = { - aside: 'bg-midnightBlueTheme-800 text-midnightBlueTheme-text dark:text-white lg:rounded-lg', - asideScrollbars: 'aside-scrollbars-blue', - asideBrand: 'text-blue-500 bg-white', + aside: 'bg-slate-950 text-white dark:text-white', + asideScrollbars: 'aside-scrollbars-red', + asideBrand: 'text-red-600 bg-slate-950', asideMenuItem: - 'text-midnightBlueTheme-text hover:text-white dark:text-dark-500 dark:hover:text-white dark:hover:bg-dark-800 dark:text-white', - asideMenuItemActive: 'font-bold text-white dark:text-white', - activeLinkColor: 'bg-midnightBlueTheme-buttonColor rounded-lg', - asideMenuDropdown: 'bg-blue-700/50', - navBarItemLabel: 'text-primaryText', - iconsColor: 'text-midnightBlueTheme-iconsColor dark:text-blue-500', - navBarItemLabelHover: 'hover:text-stone-400', - navBarItemLabelActiveColor: 'text-midnightBlueTheme-800', - overlay: 'bg-midnightBlueTheme-mainBG', - bgLayoutColor: 'bg-midnightBlueTheme-mainBG', - cardsColor: 'bg-midnightBlueTheme-cardColor', + 'text-gray-400 hover:text-white dark:text-dark-500 dark:hover:text-white dark:hover:bg-dark-800 dark:text-white', + asideMenuItemActive: 'font-bold text-red-500 dark:text-white', + activeLinkColor: 'bg-red-600/10 rounded-lg', + asideMenuDropdown: 'bg-slate-900', + navBarItemLabel: 'text-white', + iconsColor: 'text-red-600 dark:text-red-500', + navBarItemLabelHover: 'hover:text-red-400', + navBarItemLabelActiveColor: 'text-red-600', + overlay: 'bg-slate-950', + bgLayoutColor: 'bg-slate-950', + cardsColor: 'bg-slate-900', focusRingColor: - 'focus:ring focus:ring-midnightBlueTheme-800 focus:border-midnightBlueTheme-800 focus:outline-none border border-gray-600 dark:focus:ring-blue-600 dark:focus:border-blue-600', - corners: 'rounded-lg', - cardsStyle: 'bg-midnightBlueTheme-outsideCardColor border border-midnightBlueTheme-outsideCardColor shadow-xl', - linkColor: 'text-midnightBlueTheme-buttonColor', - websiteHeder: 'border-b border-white border-opacity-10 shadow-md', + 'focus:ring focus:ring-red-600 focus:border-red-600 focus:outline-none border border-slate-800 dark:focus:ring-red-600 dark:focus:border-red-600', + corners: 'rounded-xl', + cardsStyle: 'bg-slate-900 border border-slate-800 shadow-2xl', + linkColor: 'text-red-600', + websiteHeder: 'border-b border-white border-opacity-10 shadow-lg', borders: 'border-white border-opacity-10', - shadow: 'shadow-md', - websiteSectionStyle: ' bg-midnightBlueTheme-webSiteComponentBg text-white', - textSecondary: 'text-gray-300', + shadow: 'shadow-2xl', + websiteSectionStyle: 'bg-slate-950 text-white', + textSecondary: 'text-slate-400', }; @@ -132,4 +132,4 @@ export const basic: StyleObject = { shadow: '', websiteSectionStyle: '', textSecondary: '', -} +} \ No newline at end of file