feat(iwooos): segment security workbench
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 59s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 59s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
This commit is contained in:
@@ -168,6 +168,7 @@ type VisualDashboardGate = {
|
||||
|
||||
type VisualExperienceMode = 'attackPath' | 'assetHeat' | 'responseFlow'
|
||||
type IwoooSCommandMapMode = 'unlock' | 'scope' | 'hosts' | 'sourceControl' | 'awooop' | 'boundary'
|
||||
type IwoooSWorkspaceView = 'overview' | 'runtime' | 'evidence' | 'ledger'
|
||||
|
||||
type VisualExperienceTab = {
|
||||
key: VisualExperienceMode
|
||||
@@ -6462,6 +6463,105 @@ function ToneDot({ tone }: { tone: 'steady' | 'warn' | 'locked' }) {
|
||||
)
|
||||
}
|
||||
|
||||
const iwooosWorkspaceViews: Array<{
|
||||
key: IwoooSWorkspaceView
|
||||
icon: typeof ShieldCheck
|
||||
tone: 'steady' | 'warn' | 'locked'
|
||||
}> = [
|
||||
{ key: 'overview', icon: Radar, tone: 'steady' },
|
||||
{ key: 'runtime', icon: Workflow, tone: 'warn' },
|
||||
{ key: 'evidence', icon: FileCheck2, tone: 'warn' },
|
||||
{ key: 'ledger', icon: ClipboardList, tone: 'locked' },
|
||||
]
|
||||
|
||||
function IwoooSWorkspaceSwitcher({
|
||||
active,
|
||||
onChange,
|
||||
}: {
|
||||
active: IwoooSWorkspaceView
|
||||
onChange: (value: IwoooSWorkspaceView) => void
|
||||
}) {
|
||||
const t = useTranslations('iwooos.workspace')
|
||||
|
||||
return (
|
||||
<section style={{ ...band, padding: 14, marginBottom: 14 }} data-testid="iwooos-workspace-switcher">
|
||||
<div
|
||||
style={{
|
||||
display: 'grid',
|
||||
gridTemplateColumns: 'minmax(0, 1.1fr) minmax(0, 2fr)',
|
||||
gap: 14,
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
<div style={{ minWidth: 0 }}>
|
||||
<div style={{ display: 'flex', alignItems: 'center', gap: 8, color: '#315f45', fontSize: 12, fontWeight: 800 }}>
|
||||
<ShieldCheck size={16} color="#2f7d48" />
|
||||
{t('eyebrow')}
|
||||
</div>
|
||||
<h2 style={{ margin: '6px 0 0', fontSize: 18, color: '#141413' }}>{t('title')}</h2>
|
||||
<p style={{ margin: '6px 0 0', color: '#5f5b52', fontSize: 12, lineHeight: 1.5 }}>
|
||||
{t('subtitle')}
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
role="tablist"
|
||||
aria-label={t('ariaLabel')}
|
||||
style={{
|
||||
display: 'grid',
|
||||
gridTemplateColumns: 'repeat(auto-fit, minmax(132px, 1fr))',
|
||||
gap: 8,
|
||||
}}
|
||||
>
|
||||
{iwooosWorkspaceViews.map(view => {
|
||||
const Icon = view.icon
|
||||
const selected = active === view.key
|
||||
return (
|
||||
<button
|
||||
key={view.key}
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={selected}
|
||||
onClick={() => onChange(view.key)}
|
||||
style={{
|
||||
appearance: 'none',
|
||||
border: selected ? `1px solid ${toneColors[view.tone]}` : '0.5px solid #ded9ce',
|
||||
background: selected ? '#f6fbf6' : '#fff',
|
||||
color: selected ? toneColors[view.tone] : '#5f5b52',
|
||||
minHeight: 58,
|
||||
padding: '10px 11px',
|
||||
display: 'grid',
|
||||
gap: 5,
|
||||
textAlign: 'left',
|
||||
cursor: 'pointer',
|
||||
}}
|
||||
>
|
||||
<span style={{ display: 'flex', alignItems: 'center', gap: 7, fontSize: 12, fontWeight: 800 }}>
|
||||
<Icon size={15} color={selected ? toneColors[view.tone] : '#77736a'} />
|
||||
{t(`views.${view.key}.label` as never)}
|
||||
</span>
|
||||
<span style={{ fontSize: 11, lineHeight: 1.35, color: selected ? '#315f45' : '#77736a' }}>
|
||||
{t(`views.${view.key}.detail` as never)}
|
||||
</span>
|
||||
</button>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
function IwoooSWorkspacePanel({
|
||||
active,
|
||||
children,
|
||||
}: {
|
||||
active: boolean
|
||||
children: ReactNode
|
||||
}) {
|
||||
if (!active) return null
|
||||
return <div style={{ display: 'grid', gap: 14 }}>{children}</div>
|
||||
}
|
||||
|
||||
function MetricCard({ item }: { item: PostureMetric }) {
|
||||
const t = useTranslations('iwooos.metrics')
|
||||
return (
|
||||
@@ -24146,6 +24246,7 @@ function HostOwnerDecisionRecordHumanRecordOwnerReviewPreparationChecklistCard({
|
||||
export default function IwoooSPage({ params }: { params: { locale: string } }) {
|
||||
const t = useTranslations('iwooos')
|
||||
const ia = useTranslations('iwooos.informationArchitecture')
|
||||
const [workspaceView, setWorkspaceView] = useState<IwoooSWorkspaceView>('overview')
|
||||
|
||||
return (
|
||||
<AppLayout locale={params.locale} fullBleed>
|
||||
@@ -24178,7 +24279,54 @@ export default function IwoooSPage({ params }: { params: { locale: string } }) {
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<IwoooSWorkspaceSwitcher active={workspaceView} onChange={setWorkspaceView} />
|
||||
<IwoooSManagerCockpit />
|
||||
|
||||
<IwoooSWorkspacePanel active={workspaceView === 'overview'}>
|
||||
<IwoooSCommandRail />
|
||||
<IwoooSProgressIntegrityRibbon />
|
||||
<IwoooSExecutiveSnapshotBoard />
|
||||
<IwoooSRuntimeSecurityReadbackBoard />
|
||||
<IwoooSSecurityControlCoverageBoard />
|
||||
</IwoooSWorkspacePanel>
|
||||
|
||||
<IwoooSWorkspacePanel active={workspaceView === 'runtime'}>
|
||||
<IwoooSCommandRail />
|
||||
<IwoooSAgentBountySecurityOnboardingBoard />
|
||||
<IwoooSRolloutRiskReadOnlyBoard />
|
||||
<IwoooSWazuhIntrusionReadbackBoard />
|
||||
<IwoooSRuntimeSecurityReadbackBoard />
|
||||
<IwoooSWazuhLiveRouteReadbackBoard />
|
||||
<IwoooSWazuhReleaseGateBoard />
|
||||
<IwoooSWazuhManagedHostCoverageBoard />
|
||||
<IwoooSWazuhManagerRegistryReviewerValidationBoard />
|
||||
<IwoooSWazuhLiveMetadataEnvGateBoard />
|
||||
<IwoooSSecurityOperatingSystemBoard />
|
||||
<IwoooSSocSiemKaliWazuhIntegrationBoard />
|
||||
<IwoooSP0SecurityIncidentConvergenceBoard />
|
||||
</IwoooSWorkspacePanel>
|
||||
|
||||
<IwoooSWorkspacePanel active={workspaceView === 'evidence'}>
|
||||
<IwoooSSectionGroup
|
||||
id="iwooos-workspace-evidence-chain"
|
||||
title={ia('firstLayerEvidence.title')}
|
||||
summary={ia('firstLayerEvidence.summary')}
|
||||
defaultOpen
|
||||
>
|
||||
<IwoooSFocusDeckBoard />
|
||||
<IwoooSFirstScreenDepthMapBoard />
|
||||
<IwoooSProgressEvidenceRailBoard />
|
||||
<IwoooSEvidenceUnlockQueueBoard />
|
||||
<IwoooSS49RequestDraftPackageBoard />
|
||||
<IwoooSS49RequestDraftDetailBoard />
|
||||
<IwoooSS49OwnerResponseIntakeBoard />
|
||||
</IwoooSSectionGroup>
|
||||
<IwoooSOwnerEvidenceIntakePreflightBoard />
|
||||
<IwoooSWazuhOwnerEvidencePreflightBoard />
|
||||
<IwoooSHighValueConfigOwnerPacketBoard />
|
||||
</IwoooSWorkspacePanel>
|
||||
|
||||
<IwoooSWorkspacePanel active={workspaceView === 'ledger'}>
|
||||
<IwoooSCommandRail />
|
||||
<IwoooSProgressIntegrityRibbon />
|
||||
<IwoooSExecutiveSnapshotBoard />
|
||||
@@ -25388,6 +25536,7 @@ export default function IwoooSPage({ params }: { params: { locale: string } }) {
|
||||
</div>
|
||||
</section>
|
||||
</IwoooSSectionGroup>
|
||||
</IwoooSWorkspacePanel>
|
||||
</main>
|
||||
</AppLayout>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user