diff --git a/src/components/header.jsx b/src/components/header.jsx
new file mode 100644
index 0000000..2f00ace
--- /dev/null
+++ b/src/components/header.jsx
@@ -0,0 +1,92 @@
+import Logo from '../assets/logo.png';
+import { Avatar, createStyles, Header, Group, rem, UnstyledButton, Title, ActionIcon, Tooltip } from '@mantine/core';
+import SwitchToggle from './toggle-colorscheme';
+import { IconUserCheck, IconUserEdit, IconUserOff } from '@tabler/icons-react';
+import { logout, useAuth } from '../tools/auth-provider';
+import { useNavigate } from 'react-router-dom';
+
+const useStyles = createStyles((theme) => ({
+ header: {
+ paddingLeft: theme.spacing.md,
+ paddingRight: theme.spacing.md,
+ },
+
+ inner: {
+ height: rem(56),
+ display: 'flex',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ },
+
+ links: {
+ [theme.fn.smallerThan('md')]: {
+ display: 'none',
+ },
+ },
+
+ search: {
+ [theme.fn.smallerThan('xs')]: {
+ display: 'none',
+ },
+ },
+
+ link: {
+ display: 'block',
+ lineHeight: 1,
+ padding: `${rem(8)} ${rem(12)}`,
+ borderRadius: theme.radius.sm,
+ textDecoration: 'none',
+ color: theme.colorScheme === 'dark' ? theme.colors.dark[0] : theme.colors.gray[7],
+ fontSize: theme.fontSizes.sm,
+ fontWeight: 500,
+
+ '&:hover': {
+ backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark[6] : theme.colors.gray[0],
+ },
+ },
+}));
+
+const links = [
+ { label: 'Playlists', link: '/playlists' },
+ { label: 'Files', link: '/files' },
+ { label: 'Planning', link: '/planning' },
+];
+
+const HeaderSearch = () => {
+ const { classes } = useStyles();
+ const { role } = useAuth();
+ const navigate = useNavigate();
+
+ const items = links.map((link) => (
+ navigate(link.link)}>
+ {link.label}
+
+ ));
+
+ return (
+
+
+
+
+ navigate('/')} className={classes.link}>
+ Signage
+
+
+
+
+
+ {items}
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default HeaderSearch;
diff --git a/src/components/navbar.jsx b/src/components/navbar.jsx
new file mode 100644
index 0000000..242f3f2
--- /dev/null
+++ b/src/components/navbar.jsx
@@ -0,0 +1,25 @@
+import { Title, Button, Group, Input, Paper } from '@mantine/core';
+import { IconSearch } from '@tabler/icons-react';
+
+const NavbarSignage = ({ data }) => {
+ return (
+
+
+ {data.title}
+
+ data.handlerChange(event)}
+ icon={}
+ />
+ {data?.buttonCreate && (
+
+ )}
+
+
+
+ );
+};
+
+export default NavbarSignage;
diff --git a/src/components/select-item.jsx b/src/components/select-item.jsx
new file mode 100644
index 0000000..a440716
--- /dev/null
+++ b/src/components/select-item.jsx
@@ -0,0 +1,37 @@
+import { Card, Grid, Text, Image, Button, Center } from '@mantine/core';
+import { useState } from 'react';
+
+const SelectorItem = ({ file, clickHandler }) => {
+ const [selected, setSelected] = useState(false);
+ const handleClick = () => {
+ setSelected(!selected);
+ clickHandler(file);
+ };
+
+ return (
+
+
+
+
+
+
+
+ {file.name}
+
+
+
+
+
+ );
+};
+
+export default SelectorItem;
diff --git a/src/pages/errors/error-notification.jsx b/src/pages/errors/error-notification.jsx
new file mode 100644
index 0000000..725f2ec
--- /dev/null
+++ b/src/pages/errors/error-notification.jsx
@@ -0,0 +1,14 @@
+import { notifications } from '@mantine/notifications';
+import { IconCheck, IconX } from '@tabler/icons-react';
+
+const setNotification = (fail, message) => {
+ notifications.show({
+ title: fail ? 'Error' : 'Success',
+ message: message ?? 'Something went wrong',
+ color: fail ? 'red' : 'green',
+ icon: fail ? : ,
+ autoClose: 5000,
+ });
+};
+
+export default setNotification;