用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Hack23/cia --skill ui-ux-design-system命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Identity and access management: RBAC, least privilege, MFA, quarterly reviews per ISO 27001 A.5.15, A.8.2, A.8.3
Business continuity and disaster recovery: 30-day retention, quarterly restore tests, RTO/RPO targets per ISO 27001 A.17
Political psychology, cognitive biases, group dynamics, leadership analysis, decision-making patterns for Swedish political intelligence
基于 SOC 职业分类
正在显示 SKILL.md
| name | ui-ux-design-system |
| description | Design system management, Vaadin component library patterns, consistent UI/UX, accessibility integration |
| license | Apache-2.0 |
This skill defines the design system for the CIA platform, ensuring consistent Vaadin component usage, accessibility compliance, responsive design patterns, and a cohesive user experience for political data visualization. It provides reusable patterns for the web-widgets module.
Apply this skill when:
Do NOT use for:
// ✅ Standard page layout pattern
public class PoliticianOverviewView extends VerticalLayout {
public PoliticianOverviewView() {
setSizeFull();
setPadding(true);
setSpacing(true);
// Page header with breadcrumb
add(createPageHeader("Politician Overview"));
// Content area with responsive grid
HorizontalLayout content = new HorizontalLayout();
content.setSizeFull();
content.add(createFilterPanel(), createDataGrid());
content.setFlexGrow(1, createDataGrid());
add(content);
}
}
// ✅ Consistent grid configuration
public Grid<PoliticianSummary> createPoliticianGrid() {
Grid<PoliticianSummary> grid = new Grid<>(PoliticianSummary.class, false);
// Column configuration with consistent ordering
grid.addColumn(PoliticianSummary::getFirstName)
.setHeader("First Name").setSortable(true).setAutoWidth(true);
grid.addColumn(PoliticianSummary::getLastName)
.setHeader("Last Name").setSortable(true).setAutoWidth(true);
grid.addColumn(PoliticianSummary::getParty)
.setHeader("Party").setSortable(true).setAutoWidth(true);
grid.addColumn(new NumberRenderer<>(PoliticianSummary::getAttendanceRate,
"%.1f%%")).setHeader("Attendance").setSortable(true);
// Lazy loading
grid.setPageSize(50);
grid.setMultiSort(true);
// Accessibility
grid.getElement().setAttribute("aria-label", "Politician data table");
return grid;
}
// ✅ Politically neutral color scheme for party charts
public static final Map<String, String> PARTY_COLORS = Map.of(
"S", "#E8112d", // Socialdemokraterna
"M", "#52BDEC", // Moderaterna
"SD", "#DDDD00", // Sverigedemokraterna
"C", "#009933", // Centerpartiet
"V", "#DA291C", // Vänsterpartiet
"KD", "#000077", // Kristdemokraterna
"L", "#006AB3", // Liberalerna
"MP", "#83CF39" // Miljöpartiet
);
// Always include party label, never rely on color alone (accessibility)
// ✅ Consistent notification usage
public class NotificationHelper {
public static void showSuccess(String message) {
Notification.show(message, 3000, Notification.Position.BOTTOM_START)
.addThemeVariants(NotificationVariant.LUMO_SUCCESS);
}
public static void showError(String message) {
Notification.show(message, 5000, Notification.Position.BOTTOM_START)
.addThemeVariants(NotificationVariant.LUMO_ERROR);
}
public static void showInfo(String message) {
Notification.show(message, 3000, Notification.Position.BOTTOM_START)
.addThemeVariants(NotificationVariant.LUMO_PRIMARY);
}
}
| Breakpoint | Width | Layout Adaptation |
|---|---|---|
| Desktop | ≥ 1024px | Full sidebar + content grid |
| Tablet | 768–1023px | Collapsible sidebar, stacked panels |
| Mobile | < 768px | Bottom navigation, single column |
// ✅ Responsive layout using Vaadin's FormLayout
FormLayout form = new FormLayout();
form.setResponsiveSteps(
new FormLayout.ResponsiveStep("0", 1), // Mobile: 1 column
new FormLayout.ResponsiveStep("768px", 2), // Tablet: 2 columns
new FormLayout.ResponsiveStep("1024px", 3) // Desktop: 3 columns
);
// ✅ Accessible component patterns
public class AccessibleDashboard extends VerticalLayout {
public AccessibleDashboard() {
// Landmark roles
getElement().setAttribute("role", "main");
getElement().setAttribute("aria-label", "Political Dashboard");
// Heading hierarchy
H1 title = new H1("Dashboard");
title.getElement().setAttribute("tabindex", "0");
add(title);
// Data tables with proper headers
Grid<Data> grid = createGrid();
grid.getElement().setAttribute("aria-label", "Voting records");
// Charts with text alternatives
Div chart = createChart();
chart.getElement().setAttribute("aria-label",
"Bar chart showing voting attendance by party");
chart.getElement().setAttribute("role", "img");
}
}
outline: none).cia-[component]-[modifier]
Examples:
.cia-dashboard-header
.cia-politician-grid
.cia-chart-container
.cia-filter-panel--collapsed
.cia-nav-item--active
[Entity][Action]View.java
Examples:
PoliticianOverviewView.java
CommitteeDetailView.java
VotingHistoryView.java
PartyComparisonView.java