Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
d30f255
feat: try formatting
Lasserich Aug 28, 2025
f7678d6
feat: demo bento layout
Lasserich Aug 28, 2025
dbe7eb2
add white color background to graph
GenosseOtt Sep 8, 2025
fe8f24e
Merge branch 'main' into ft/bento
Lasserich Sep 8, 2025
94661aa
fix: first bento layout
Lasserich Sep 9, 2025
039ae27
fix: layout
Lasserich Sep 9, 2025
cfa2774
fix: show graph
Lasserich Sep 9, 2025
aecdc74
feat: style graph
Lasserich Sep 9, 2025
deb8cca
feat: some restructuring
Lasserich Sep 10, 2025
acc9f79
feat: maxWidth
Lasserich Sep 10, 2025
edc4c7d
feat: components fill Bento
Lasserich Sep 10, 2025
1757143
Merge branch 'main' into ft/bento
Lasserich Sep 10, 2025
f6f3080
fix: zindex & shadow
Lasserich Sep 10, 2025
3b5bcf0
feat: add expand button
Lasserich Sep 10, 2025
646da2b
fix: move button
Lasserich Sep 10, 2025
67a781c
feat: fix sizing
Lasserich Sep 11, 2025
f5cee53
feat: show flux graph
Lasserich Sep 11, 2025
4bc3bec
fix: panning
Lasserich Sep 11, 2025
ae327e0
feat: add kyverno and eso
Lasserich Sep 11, 2025
2e950b0
fix: length of charts
Lasserich Sep 11, 2025
e2fbf53
feat: providers distribution bar for crossplane
Lasserich Sep 15, 2025
bb3e5fe
fix: enable flux
Lasserich Sep 15, 2025
2159066
fix: reduce shadows and doubled edges
Lasserich Sep 15, 2025
34bd323
feat: fix graph view
Lasserich Sep 15, 2025
4bd22eb
feat: member card
Lasserich Sep 16, 2025
f2f2aca
feat: some formatting
Lasserich Sep 16, 2025
d0bddfd
chore: cleanup
Lasserich Sep 16, 2025
e605b1f
Merge branch 'main' into ft/bento
Lasserich Sep 16, 2025
3f089f0
fix: linting
Lasserich Sep 16, 2025
e0c0fb1
fix: linting
Lasserich Sep 17, 2025
6aa5508
fix: unit tests
Lasserich Sep 17, 2025
488cdde
Update public/locales/en.json
Lasserich Sep 17, 2025
c7912ae
reploace login image (light & dark)
GenosseOtt Sep 17, 2025
3fb1ca1
adjust border radius
GenosseOtt Sep 17, 2025
a626b5c
adjust label
GenosseOtt Sep 17, 2025
8d52c39
cleanup icon
GenosseOtt Sep 17, 2025
7c0dfc5
favicon cleanups
GenosseOtt Sep 17, 2025
7fd9475
feat: refactor code
Lasserich Sep 18, 2025
c8183a0
Merge branch 'ft/bento' of https://github.com/openmcp-project/ui-fron…
Lasserich Sep 18, 2025
b8931c7
feat: enable clean code structure, enable secondary labels
Lasserich Sep 18, 2025
0573f8c
feat: leave fine tuning for now
Lasserich Sep 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/logo.png" />
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MCP</title>
<title>ManagedControlPlane UI</title>
</head>

<body>
Expand Down
Binary file added public/co-logo-orchestrating-dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/co-logo-orchestrating.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/eso_dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/eso_light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon.ico
Binary file not shown.
4,515 changes: 4,515 additions & 0 deletions public/kyverno.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 38 additions & 22 deletions public/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
"ComponentList": {
"tableComponentHeader": "Name",
"tableVersionHeader": "Version"
},
"MemberList": {

},
"FluxList": {
"tableNameHeader": "Name",
Expand All @@ -23,6 +26,7 @@
"tableVersionHeader": "Revision",
"noFluxError": "Please install flux to view this component",
"gitOpsTitle": "GitOps",
"repositoriesTitle": "Repositories",
"kustomizationsTitle": "Kustomizations",
"undefinedError": "Something went wrong"
},
Expand Down Expand Up @@ -346,6 +350,7 @@
"btp": "BTP",
"error": "Error",
"ready": "Ready",
"notReady": "Not Ready",
"synced": "Synced",
"healthy": "Healthy",
"installed": "Installed",
Expand All @@ -354,7 +359,14 @@
"unhealthy": "Unhealthy",
"progress": "Managed",
"remaining": "Remaining",
"active": "Active"
"active": "Active",
"inactive": "Inactive",
"comingSoon": "Coming soon...",
"providers": "Provider",
"health": "Health",
"serviceaccounts": "ServiceAccounts",
"loading": "Loading...",
"resources": "Status"
},
"errors": {
"installError": "Install error",
Expand Down Expand Up @@ -390,44 +402,48 @@
"Hints": {
"CrossplaneHint": {
"title": "Crossplane",
"subtitle": "Managed Resources Readiness",
"subtitle": "Manage your cloud landscape in code",
"activeStatus": "Active v",
"progressAvailable": "% Available",
"progressAvailable": "Available",
"noResources": "No Resources",
"inactive": "Inactive",
"activate": "Activate",
"healthy": "Healthy",
"hoverContent": {
"totalResources": "Total Resources",
"healthy": "Healthy",
"creating": "Creating",
"failing": "Failing"
}
"healthy": "Healthy"
},
"GitOpsHint": {
"title": "Flux",
"subtitle": "GitOps Progress",
"subtitle": "Persist desired state in code repositories",
"activeStatus": "Active v",
"progressAvailable": "% Available",
"progressAvailable": "Available",
"noResources": "No Resources",
"inactive": "Inactive",
"activate": "Activate",
"managed": "Managed",
"hoverContent": {
"totalResources": "Total Resources",
"managed": "Managed",
"unmanaged": "Unmanaged"
}
"managed": "Persisted"
},
"VaultHint": {
"title": "Vault",
"subtitle": "Rotating Secrets Progress",
"MembersHint": {
"title": "Members",
"subtitle": "Manage access to your Managed Control Plane",
"users": "Users",
"serviceAccounts": "Service Accounts"
},
"ESOHint": {
"title": "External Secrets",
"subtitle": "Secure secrets with rotation",
"activeStatus": "Active v",
"progressAvailable": "% Available",
"progressAvailable": "Available",
"noResources": "No Resources",
"inactive": "Coming soon...",
"activate": "Activate"
},
"KyvernoHint": {
"title": "Kyverno",
"subtitle": "Enforce policies",
"activeStatus": "Active v",
"progressAvailable": "Available",
"noResources": "No Resources",
"inactive": "Inactive",
"activate": "Activate"
},
"common": {
"loading": "Loading...",
"errorLoadingResources": "Error loading resources",
Expand Down
Binary file modified public/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions public/members.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed public/vault.png
Binary file not shown.
92 changes: 92 additions & 0 deletions src/components/BentoGrid/BentoGrid.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/* Bento Grid Layout - 12 columns x 6 rows */
.bentoGrid {
display: grid;
grid-template-columns: repeat(12, 1fr);
grid-template-rows: repeat(6, 1fr);
gap: 24px;
width: 100%;
height: 600px; /* Fixed height for the entire grid */
position: relative;
}

/* Base card styling */
.bentoCard {
border-radius: 18px; /* Increased to match or slightly exceed ui5-card */
overflow: hidden;
background: var(--sapTile_Background);
border: 1px solid var(--sapTile_BorderColor);
box-shadow: var(--sapContent_Shadow0); /* Reduced shadow intensity */
transition: all 0.3s ease;
display: flex;
flex-direction: column;
position: relative;
}

.bentoCard:hover {
box-shadow: var(--sapContent_Shadow1); /* Reduced hover shadow intensity */
transform: translateY(-2px);
}

/* Card sizes are explicitly positioned via gridColumn/gridRow props */
/* Layout:
- Left: Extra large graph (8 cols x 4 rows) + Large crossplane (8 cols x 2 rows)
- Right: Two medium GitOps (4 cols x 2 rows each) + Two small underneath (2 cols x 2 rows each)
*/

/* Fallback positioning for cards in case the layout breaks */
.card-small {
grid-column: span 2;
grid-row: span 2;
}

.card-medium {
grid-column: span 3;
grid-row: span 2;
}

/* Dark theme support */
@media (prefers-color-scheme: dark) {
.bentoCard {
background: var(--sapTile_Background);
border-color: var(--sapTile_BorderColor);
}
}

/* Responsive behavior - simplified as requested */
@media (max-width: 768px) {
.bentoGrid {
grid-template-columns: repeat(6, 1fr);
grid-template-rows: repeat(10, 1fr);
height: 1000px;
}

.card-extra-large {
grid-column: 1 / 7;
grid-row: 1 / 5;
}

.card-large {
grid-column: 1 / 7;
grid-row: 5 / 7;
}

.card-medium:nth-of-type(3) {
grid-column: 1 / 7;
grid-row: 7 / 9;
}

.card-medium:nth-of-type(4) {
grid-column: 1 / 7;
grid-row: 9 / 11;
}

.card-small:nth-of-type(5) {
grid-column: 1 / 4;
grid-row: 11 / 13;
}

.card-small:nth-of-type(6) {
grid-column: 4 / 7;
grid-row: 11 / 13;
}
}
35 changes: 35 additions & 0 deletions src/components/BentoGrid/BentoGrid.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import React from 'react';
import styles from './BentoGrid.module.css';

export type CardSize = 'small' | 'medium' | 'large' | 'extra-large';

export interface BentoCardProps {
size: CardSize;
children: React.ReactNode;
className?: string;
gridColumn?: string;
gridRow?: string;
}

export interface BentoGridProps {
children: React.ReactNode;
className?: string;
}

export const BentoCard: React.FC<BentoCardProps> = ({ size, children, className = '', gridColumn, gridRow }) => {
const cardClass = `${styles.bentoCard} ${styles[`card-${size}`]} ${className}`;

const style: React.CSSProperties = {};
if (gridColumn) style.gridColumn = gridColumn;
if (gridRow) style.gridRow = gridRow;

return (
<div className={cardClass} style={style}>
{children}
</div>
);
};

export const BentoGrid: React.FC<BentoGridProps> = ({ children, className = '' }) => {
return <div className={`${styles.bentoGrid} ${className}`}>{children}</div>;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
.container {
position: relative;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}

.card {
height: 100%;
display: flex;
flex-direction: column;
}

.disabled {
opacity: 0.6;
user-select: none;
pointer-events: none;
}

.clickable {
cursor: pointer;
}

.disabledOverlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.1);
z-index: 1;
pointer-events: none;
}

.avatar {
width: 50px;
height: 50px;
border-radius: 50%;
background: transparent;
object-fit: cover;
}

.expandButton {
position: absolute;
bottom: 8px;
right: 8px;
min-width: 32px;
height: 32px;
z-index: 10;
}

.expandButtonSmall {
position: absolute;
bottom: 8px;
right: 8px;
min-width: 24px;
height: 24px;
z-index: 10;
}
Loading
Loading