343 lines
15 KiB
JSON
343 lines
15 KiB
JSON
{
|
|
"summary": {
|
|
"filesScanned": 120,
|
|
"elementsParsed": 10219,
|
|
"vstackUses": 1425,
|
|
"hstackUses": 853
|
|
},
|
|
"sections": [
|
|
{
|
|
"title": "Layout idiom census — exact VStack/HStack/Card/Grid/Section configs (≥ 3 uses, ≥ 2 files)",
|
|
"rows": [
|
|
{
|
|
"signature": "VStack(gap=1)",
|
|
"count": 464,
|
|
"files": 34,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/InvitationContainer.tsx, src/features/organizations/containers/OrganizationSettingsContainer.tsx … (+29 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:194"
|
|
},
|
|
{
|
|
"signature": "VStack(gap=0)",
|
|
"count": 360,
|
|
"files": 34,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/components/MemberTable.tsx … (+29 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:174"
|
|
},
|
|
{
|
|
"signature": "HStack(gap=2,vAlign=center)",
|
|
"count": 204,
|
|
"files": 26,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/playbooks/PlaybookDiagram.tsx, src/features/tasks/TaskKanbanBoard.tsx, src/pages/AgentDetails.tsx … (+21 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:166"
|
|
},
|
|
{
|
|
"signature": "Card(padding=4)",
|
|
"count": 160,
|
|
"files": 16,
|
|
"filesList": "src/features/dispatch/IntegrationCard.tsx, src/pages/AgentPluginDetails.tsx, src/pages/AgentPlugins.tsx, src/pages/ConnectorDetails.tsx, src/pages/Connectors.tsx … (+11 more)",
|
|
"example": "src/features/dispatch/IntegrationCard.tsx:40"
|
|
},
|
|
{
|
|
"signature": "StackItem(size=fill)",
|
|
"count": 150,
|
|
"files": 20,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/playbooks/PlaybookDiagram.tsx, src/features/playbooks/PlaybookFlow.tsx … (+15 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:173"
|
|
},
|
|
{
|
|
"signature": "HStack(gap=3,vAlign=center)",
|
|
"count": 138,
|
|
"files": 33,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/components/AuthLayout.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/components/MemberTable.tsx, src/features/organizations/containers/OrganizationInvitationsContainer.tsx … (+28 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:370"
|
|
},
|
|
{
|
|
"signature": "VStack(gap=3)",
|
|
"count": 128,
|
|
"files": 30,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/pages/OrganizationCreatePage.tsx, src/features/playbooks/PlaybookDiagram.tsx, src/features/playbooks/PlaybookFlow.tsx … (+25 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:193"
|
|
},
|
|
{
|
|
"signature": "VStack(gap=4)",
|
|
"count": 114,
|
|
"files": 19,
|
|
"filesList": "src/features/auth/pages/LoginPage.tsx, src/features/auth/pages/SignupPage.tsx, src/features/organizations/components/OrganizationForm.tsx, src/pages/AgentDetails.tsx, src/pages/AgentPlugins.tsx … (+14 more)",
|
|
"example": "src/features/auth/pages/LoginPage.tsx:115"
|
|
},
|
|
{
|
|
"signature": "VStack(gap=2)",
|
|
"count": 96,
|
|
"files": 20,
|
|
"filesList": "src/features/agent-backends/AcpLaunchInstructions.tsx, src/features/artifacts/ArtifactViewer.tsx, src/features/auth/components/AuthLayout.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/dispatch/IntegrationCard.tsx … (+15 more)",
|
|
"example": "src/features/agent-backends/AcpLaunchInstructions.tsx:31"
|
|
},
|
|
{
|
|
"signature": "Grid(columns=expr,gap=4)",
|
|
"count": 93,
|
|
"files": 22,
|
|
"filesList": "src/features/auth/pages/ProfileSettingsPage.tsx, src/features/auth/pages/SignupPage.tsx, src/pages/AgentDetails.tsx, src/pages/AgentPluginDetails.tsx, src/pages/AgentPlugins.tsx … (+17 more)",
|
|
"example": "src/features/auth/pages/ProfileSettingsPage.tsx:129"
|
|
}
|
|
],
|
|
"total": 81
|
|
},
|
|
{
|
|
"title": "Repeated JSX structure fingerprints (≥ 3 occurrences, ≥ 2 files)",
|
|
"rows": [
|
|
{
|
|
"signature": "Text(color:s,type:s)[#t1]",
|
|
"count": 1255,
|
|
"files": 47,
|
|
"filesList": "src/features/agent-backends/AcpLaunchInstructions.tsx, src/features/artifacts/ArtifactViewer.tsx, src/features/auth/components/AuthLayout.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/conversations/WorkspaceToolsPanel.tsx … (+42 more)",
|
|
"example": "src/features/agent-backends/AcpLaunchInstructions.tsx:24"
|
|
},
|
|
{
|
|
"signature": "Heading(level:s)[#t1]",
|
|
"count": 837,
|
|
"files": 42,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/InvitationContainer.tsx, src/features/organizations/containers/OrganizationInvitationsContainer.tsx … (+37 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:156"
|
|
},
|
|
{
|
|
"signature": "Icon(color:s,icon:s,size:s)[]",
|
|
"count": 347,
|
|
"files": 40,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/dispatch/ProjectDispatch.tsx … (+35 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:126"
|
|
},
|
|
{
|
|
"signature": "Text(type:s,weight:s)[#t1]",
|
|
"count": 314,
|
|
"files": 31,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/pages/ProfileSettingsPage.tsx, src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/containers/OrganizationSettingsContainer.tsx … (+26 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:175"
|
|
},
|
|
{
|
|
"signature": "Badge(label:s,variant:s)[]",
|
|
"count": 256,
|
|
"files": 37,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/git-providers/GitProviderSelector.tsx, src/features/organizations/components/InvitationTable.tsx … (+32 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:387"
|
|
},
|
|
{
|
|
"signature": "VStack(gap:s)[Heading(level:s)[#t1];Text(color:s,type:s)[#t1]]",
|
|
"count": 218,
|
|
"files": 28,
|
|
"filesList": "src/features/auth/pages/ProfileSettingsPage.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/OrganizationSettingsContainer.tsx, src/pages/AgentDetails.tsx, src/pages/AgentPluginDetails.tsx … (+23 more)",
|
|
"example": "src/features/auth/pages/ProfileSettingsPage.tsx:93"
|
|
},
|
|
{
|
|
"signature": "Text(type:s)[#t1]",
|
|
"count": 182,
|
|
"files": 25,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/dispatch/IntegrationCard.tsx, src/features/organizations/pages/OrganizationCreatePage.tsx, src/features/playbooks/PlaybookFlow.tsx … (+20 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:267"
|
|
},
|
|
{
|
|
"signature": "Icon(icon:s,size:s)[]",
|
|
"count": 170,
|
|
"files": 47,
|
|
"filesList": "src/features/artifacts/ArtifactViewer.tsx, src/features/auth/containers/UserProfileMenu.tsx, src/features/auth/pages/LoginPage.tsx, src/features/auth/pages/SignupPage.tsx, src/features/connectors/EnvironmentLabels.tsx … (+42 more)",
|
|
"example": "src/features/artifacts/ArtifactViewer.tsx:244"
|
|
},
|
|
{
|
|
"signature": "Button(label:s,onClick:s,variant:s)[]",
|
|
"count": 149,
|
|
"files": 28,
|
|
"filesList": "src/features/conversations/WorkspaceToolsPanel.tsx, src/features/dispatch/ProjectDispatch.tsx, src/features/organizations/containers/InvitationContainer.tsx, src/features/organizations/containers/OrganizationInvitationsContainer.tsx, src/features/organizations/containers/OrganizationPeopleContainer.tsx … (+23 more)",
|
|
"example": "src/features/conversations/WorkspaceToolsPanel.tsx:224"
|
|
},
|
|
{
|
|
"signature": "VStack(gap:s)[Text(color:s,type:s)[#t1];Heading(level:s)[#t1];Text(color:s,type:s)[#t1]]",
|
|
"count": 136,
|
|
"files": 13,
|
|
"filesList": "src/pages/AgentPluginDetails.tsx, src/pages/AgentPlugins.tsx, src/pages/ConnectorDetails.tsx, src/pages/Connectors.tsx, src/pages/GitProviderDetails.tsx … (+8 more)",
|
|
"example": "src/pages/AgentPluginDetails.tsx:235"
|
|
}
|
|
],
|
|
"total": 220
|
|
},
|
|
{
|
|
"title": "Known hand-rolled idioms — extraction candidates",
|
|
"rows": [
|
|
{
|
|
"idiom": "Label+description pair (VStack gap=0: Text + supporting Text)",
|
|
"key": "labelPair",
|
|
"count": 64,
|
|
"files": 18,
|
|
"examples": [
|
|
"src/features/artifacts/ArtifactViewer.tsx:174",
|
|
"src/features/auth/containers/UserProfileMenu.tsx:88",
|
|
"src/features/auth/pages/ProfileSettingsPage.tsx:108"
|
|
]
|
|
},
|
|
{
|
|
"idiom": "Section header (VStack gap=0: Heading + supporting Text)",
|
|
"key": "sectionHeader",
|
|
"count": 163,
|
|
"files": 25,
|
|
"examples": [
|
|
"src/features/organizations/containers/InvitationContainer.tsx:184",
|
|
"src/features/playbooks/PlaybookDiagram.tsx:105",
|
|
"src/features/playbooks/PlaybookFlow.tsx:35"
|
|
]
|
|
},
|
|
{
|
|
"idiom": "Stat card (Card padding>=3 > VStack gap=1: 2 supporting Texts + Heading)",
|
|
"key": "statCard",
|
|
"count": 138,
|
|
"files": 13,
|
|
"examples": [
|
|
"src/pages/AgentPluginDetails.tsx:234",
|
|
"src/pages/AgentPlugins.tsx:240",
|
|
"src/pages/ConnectorDetails.tsx:175"
|
|
]
|
|
},
|
|
{
|
|
"idiom": "Icon + text row (HStack vAlign=center: Icon + VStack)",
|
|
"key": "iconTextRow",
|
|
"count": 54,
|
|
"files": 14,
|
|
"examples": [
|
|
"src/pages/AgentPluginDetails.tsx:123",
|
|
"src/pages/AgentPlugins.tsx:124",
|
|
"src/pages/GitProviderDetails.tsx:111"
|
|
]
|
|
},
|
|
{
|
|
"idiom": "Form action row (HStack gap=2: 2+ Buttons)",
|
|
"key": "formActions",
|
|
"count": 43,
|
|
"files": 13,
|
|
"examples": [
|
|
"src/features/artifacts/ArtifactViewer.tsx:216",
|
|
"src/pages/AgentDetails.tsx:806",
|
|
"src/pages/Agents.tsx:783"
|
|
]
|
|
},
|
|
{
|
|
"idiom": "Wizard progress (HStack wrap=wrap of Badge+Text steps)",
|
|
"key": "wizardProgress",
|
|
"count": 0,
|
|
"files": 0,
|
|
"examples": []
|
|
}
|
|
],
|
|
"total": 6
|
|
},
|
|
{
|
|
"title": "Most similar page pairs (Jaccard over structure fingerprints)",
|
|
"rows": [
|
|
{
|
|
"pair": "src/pages/GitProviders.tsx ↔ src/pages/Integrations.tsx",
|
|
"jaccard": "0.76",
|
|
"shared": 22
|
|
},
|
|
{
|
|
"pair": "src/pages/NewIntegration.tsx ↔ src/pages/NewIssueProvider.tsx",
|
|
"jaccard": "0.58",
|
|
"shared": 38
|
|
},
|
|
{
|
|
"pair": "src/pages/NewGitProvider.tsx ↔ src/pages/NewIssueProvider.tsx",
|
|
"jaccard": "0.57",
|
|
"shared": 37
|
|
},
|
|
{
|
|
"pair": "src/pages/GitProviderDetails.tsx ↔ src/pages/IntegrationDetails.tsx",
|
|
"jaccard": "0.54",
|
|
"shared": 40
|
|
},
|
|
{
|
|
"pair": "src/pages/NewGitProvider.tsx ↔ src/pages/NewIntegration.tsx",
|
|
"jaccard": "0.54",
|
|
"shared": 36
|
|
},
|
|
{
|
|
"pair": "src/pages/Integrations.tsx ↔ src/pages/IssueProviders.tsx",
|
|
"jaccard": "0.47",
|
|
"shared": 18
|
|
},
|
|
{
|
|
"pair": "src/pages/Integrations.tsx ↔ src/pages/Playbooks.tsx",
|
|
"jaccard": "0.47",
|
|
"shared": 18
|
|
},
|
|
{
|
|
"pair": "src/pages/GitProviders.tsx ↔ src/pages/IssueProviders.tsx",
|
|
"jaccard": "0.46",
|
|
"shared": 18
|
|
},
|
|
{
|
|
"pair": "src/features/organizations/containers/OrganizationInvitationsContainer.tsx ↔ src/features/organizations/containers/OrganizationPeopleContainer.tsx",
|
|
"jaccard": "0.43",
|
|
"shared": 12
|
|
},
|
|
{
|
|
"pair": "src/pages/GitProviders.tsx ↔ src/pages/Playbooks.tsx",
|
|
"jaccard": "0.42",
|
|
"shared": 17
|
|
}
|
|
],
|
|
"total": 22
|
|
},
|
|
{
|
|
"title": "Most co-imported @astryxdesign/core modules (signals composite components to extract)",
|
|
"rows": [
|
|
{
|
|
"modules": "/Layout|@astryxdesign/core/Text",
|
|
"count": 46,
|
|
"files": 46
|
|
},
|
|
{
|
|
"modules": "/Icon|@astryxdesign/core/Layout",
|
|
"count": 45,
|
|
"files": 45
|
|
},
|
|
{
|
|
"modules": "/Button|@astryxdesign/core/Layout",
|
|
"count": 43,
|
|
"files": 43
|
|
},
|
|
{
|
|
"modules": "/Icon|@astryxdesign/core/Text",
|
|
"count": 42,
|
|
"files": 42
|
|
},
|
|
{
|
|
"modules": "/Button|@astryxdesign/core/Text",
|
|
"count": 39,
|
|
"files": 39
|
|
},
|
|
{
|
|
"modules": "/Button|@astryxdesign/core/Icon",
|
|
"count": 38,
|
|
"files": 38
|
|
},
|
|
{
|
|
"modules": "/Badge|@astryxdesign/core/Icon",
|
|
"count": 33,
|
|
"files": 33
|
|
},
|
|
{
|
|
"modules": "/Badge|@astryxdesign/core/Layout",
|
|
"count": 33,
|
|
"files": 33
|
|
},
|
|
{
|
|
"modules": "/Badge|@astryxdesign/core/Text",
|
|
"count": 32,
|
|
"files": 32
|
|
},
|
|
{
|
|
"modules": "/Card|@astryxdesign/core/Layout",
|
|
"count": 30,
|
|
"files": 30
|
|
}
|
|
],
|
|
"total": 211
|
|
}
|
|
]
|
|
}
|