diff --git a/frontend/src/menuAside.ts b/frontend/src/menuAside.ts index 73e457a..ab75316 100644 --- a/frontend/src/menuAside.ts +++ b/frontend/src/menuAside.ts @@ -7,165 +7,142 @@ const menuAside: MenuAsideItem[] = [ icon: icon.mdiViewDashboardOutline, label: 'Dashboard', }, - { - href: '/users/users-list', - label: 'Users', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: icon.mdiAccountGroup ?? icon.mdiTable, - permissions: 'READ_USERS' + label: 'Compliance Engine', + icon: icon.mdiGavel, + menu: [ + { + href: '/reg_changes/reg_changes-list', + label: 'Reg Changes', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiFileDocumentEditOutline, + permissions: 'READ_REG_CHANGES' + }, + { + href: '/pipeline_runs/pipeline_runs-list', + label: 'Pipeline Runs', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiPlayCircleOutline, + permissions: 'READ_PIPELINE_RUNS' + }, + { + href: '/evidence_packs/evidence_packs-list', + label: 'Evidence Packs', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiArchiveOutline, + permissions: 'READ_EVIDENCE_PACKS' + }, + ] }, { - 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' + label: 'Curation', + icon: icon.mdiClipboardCheckOutline, + menu: [ + { + href: '/requirements/requirements-list', + label: 'Requirements Queue', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiClipboardListOutline, + permissions: 'READ_REQUIREMENTS' + }, + { + href: '/curation_actions/curation_actions-list', + label: 'Curation History', + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + icon: icon.mdiHistory, + permissions: 'READ_CURATION_ACTIONS' + }, + ] }, { - 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' + label: 'Knowledge Graph', + icon: icon.mdiGraphOutline, + menu: [ + { + href: '/chunks/chunks-list', + label: 'Chunks', + icon: icon.mdiFileDocumentOutline, + permissions: 'READ_CHUNKS' + }, + { + href: '/subtopics/subtopics-list', + label: 'Subtopics', + icon: icon.mdiTagMultipleOutline, + permissions: 'READ_SUBTOPICS' + }, + { + href: '/statements/statements-list', + label: 'Statements', + icon: icon.mdiCommentTextMultipleOutline, + permissions: 'READ_STATEMENTS' + }, + { + href: '/artifacts/artifacts-list', + label: 'Artifacts', + icon: icon.mdiFileTreeOutline, + permissions: 'READ_ARTIFACTS' + }, + { + href: '/graph_edges/graph_edges-list', + label: 'Traceability Edges', + icon: icon.mdiLinkVariant, + permissions: 'READ_GRAPH_EDGES' + }, + ] }, { - href: '/organizations/organizations-list', - label: 'Organizations', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_ORGANIZATIONS' - }, - { - href: '/tenants/tenants-list', - label: 'Tenants', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiDomain' in icon ? icon['mdiDomain' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_TENANTS' - }, - { - href: '/projects/projects-list', - label: 'Projects', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiFolderCog' in icon ? icon['mdiFolderCog' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_PROJECTS' - }, - { - href: '/reg_changes/reg_changes-list', - label: 'Reg changes', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiGavel' in icon ? icon['mdiGavel' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_REG_CHANGES' - }, - { - href: '/pipeline_runs/pipeline_runs-list', - label: 'Pipeline runs', - // 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_PIPELINE_RUNS' - }, - { - href: '/stage_tasks/stage_tasks-list', - label: 'Stage tasks', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiProgressWrench' in icon ? icon['mdiProgressWrench' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_STAGE_TASKS' - }, - { - href: '/model_versions/model_versions-list', - label: 'Model versions', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiRobot' in icon ? icon['mdiRobot' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_MODEL_VERSIONS' - }, - { - href: '/chunks/chunks-list', - label: 'Chunks', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiFileDocumentOutline' in icon ? icon['mdiFileDocumentOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_CHUNKS' - }, - { - href: '/subtopics/subtopics-list', - label: 'Subtopics', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiTagMultipleOutline' in icon ? icon['mdiTagMultipleOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_SUBTOPICS' - }, - { - href: '/statements/statements-list', - label: 'Statements', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiCommentTextMultipleOutline' in icon ? icon['mdiCommentTextMultipleOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_STATEMENTS' - }, - { - href: '/requirements/requirements-list', - label: 'Requirements', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiClipboardCheckOutline' in icon ? icon['mdiClipboardCheckOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_REQUIREMENTS' - }, - { - href: '/artifacts/artifacts-list', - label: 'Artifacts', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiFileTreeOutline' in icon ? icon['mdiFileTreeOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_ARTIFACTS' - }, - { - href: '/graph_edges/graph_edges-list', - label: 'Graph edges', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiGraphOutline' in icon ? icon['mdiGraphOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_GRAPH_EDGES' - }, - { - href: '/curation_actions/curation_actions-list', - label: 'Curation actions', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiThumbsUpDownOutline' in icon ? icon['mdiThumbsUpDownOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_CURATION_ACTIONS' - }, - { - href: '/evidence_packs/evidence_packs-list', - label: 'Evidence packs', - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - icon: 'mdiArchiveOutline' in icon ? icon['mdiArchiveOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable, - permissions: 'READ_EVIDENCE_PACKS' + label: 'Administration', + icon: icon.mdiCogOutline, + menu: [ + { + href: '/users/users-list', + label: 'Users', + icon: icon.mdiAccountGroup, + permissions: 'READ_USERS' + }, + { + href: '/roles/roles-list', + label: 'Roles', + icon: icon.mdiShieldAccountVariantOutline, + permissions: 'READ_ROLES' + }, + { + href: '/organizations/organizations-list', + label: 'Organizations', + icon: icon.mdiTable, + permissions: 'READ_ORGANIZATIONS' + }, + { + href: '/projects/projects-list', + label: 'Projects', + icon: icon.mdiFolderCog, + permissions: 'READ_PROJECTS' + }, + { + href: '/model_versions/model_versions-list', + label: 'AI Models', + icon: icon.mdiRobot, + permissions: 'READ_MODEL_VERSIONS' + }, + ] }, { href: '/profile', label: 'Profile', icon: icon.mdiAccountCircle, }, - - { href: '/api-docs', target: '_blank', - label: 'Swagger API', + label: 'API Docs', icon: icon.mdiFileCode, permissions: 'READ_API_DOCS' }, ] -export default menuAside +export default menuAside \ No newline at end of file diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 17608a6..d9076b8 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -1,19 +1,15 @@ - import React, { useEffect, useState } 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'; - +import { getPexelsImage } from '../helpers/pexels'; +import * as icon from '@mdi/js'; +import BaseIcon from '../components/BaseIcon'; export default function Starter() { const [illustrationImage, setIllustrationImage] = useState({ @@ -21,146 +17,140 @@ export default function Starter() { photographer: undefined, photographer_url: undefined, }) - const [illustrationVideo, setIllustrationVideo] = useState({video_files: []}) - const [contentType, setContentType] = useState('video'); - const [contentPosition, setContentPosition] = useState('left'); const textColor = useAppSelector((state) => state.style.linkColor); + const title = 'RegChange AI' - const title = 'Reg Change Assessment AI' - - // 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 ( -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
-© 2026 {title}. All rights reserved
- - Privacy Policy - -+ Transform complex regulatory documents into actionable requirements and implementation artifacts using our traceable knowledge graph and human-in-the-loop curation. +
+Our 5-stage pipeline ensures 100% traceability from regulation to test case.
++ {feature.desc} +
+