From eb1a6b99351b2a3988d4b633aa47c40f2c1c4cfd Mon Sep 17 00:00:00 2001 From: "Anthony Fu (via agent)" Date: Fri, 17 Jul 2026 08:11:07 +0000 Subject: [PATCH] refactor: migrate UnoCSS attributify to class syntax across all components Remove presetAttributify from the shared presetDevToolsUI preset and rewrite every component that relied on attributify mode to use plain class utilities instead. Covers packages/ui, rolldown, vite, oxc and the core playground. Grouped values are expanded to their canonical utilities (border="~ base rounded-lg" -> border border-base rounded-lg, flex="~ col gap-1" -> flex flex-col gap-1) and variant attributes to variant classes (hover="bg-active" -> hover:bg-active). Each converted file was checked to generate byte-identical CSS declarations before and after. --- .../core/playground/src/pages/devtools.vue | 182 +++++++++--------- packages/oxc/src/app/app.vue | 4 +- packages/oxc/src/app/components/Back.vue | 4 +- .../oxc/src/app/components/ErrorTooltip.vue | 53 ++--- packages/oxc/src/app/components/FileCard.vue | 8 +- packages/oxc/src/app/components/LineError.vue | 30 ++- packages/oxc/src/app/components/Search.vue | 16 +- .../oxc/src/app/components/SessionCard.vue | 68 ++----- .../oxc/src/app/components/SummaryCard.vue | 110 ++++------- packages/oxc/src/app/pages/fmt/config.vue | 29 +-- packages/oxc/src/app/pages/index.vue | 145 +++++--------- packages/oxc/src/app/pages/lint/config.vue | 29 +-- .../oxc/src/app/pages/lint/report/[id].vue | 2 +- .../oxc/src/app/pages/lint/report/index.vue | 27 ++- packages/rolldown/src/app/app.vue | 4 +- .../src/app/components/assets/BaseInfo.vue | 6 +- .../src/app/components/assets/Folder.vue | 2 +- .../src/app/components/assets/List.vue | 4 +- .../src/app/components/assets/ListItem.vue | 10 +- .../src/app/components/assets/Sunburst.vue | 24 ++- .../app/components/chart/ModuleFlamegraph.vue | 29 ++- .../src/app/components/chart/Treemap.vue | 4 +- .../src/app/components/chunks/BaseInfo.vue | 20 +- .../src/app/components/chunks/FlatList.vue | 4 +- .../src/app/components/chunks/Graph.vue | 10 +- .../src/app/components/chunks/Imports.vue | 8 +- .../src/app/components/chunks/Sunburst.vue | 24 ++- .../src/app/components/compare/DeltaValue.vue | 4 +- .../src/app/components/compare/MetricCard.vue | 10 +- .../app/components/compare/SessionMeta.vue | 18 +- .../app/components/compare/SingleSideRow.vue | 18 +- .../src/app/components/compare/SplitRow.vue | 58 +++--- .../src/app/components/compare/StatsStrip.vue | 10 +- .../src/app/components/compare/TabView.vue | 38 ++-- .../src/app/components/data/AssetDetails.vue | 44 ++--- .../components/data/AssetDetailsLoader.vue | 2 +- .../components/data/AssetRelationships.vue | 26 +-- .../src/app/components/data/ChunkDetails.vue | 21 +- .../components/data/ChunkDetailsLoader.vue | 2 +- .../components/data/ModuleDetailsLoader.vue | 37 ++-- .../data/ModuleImportRelationships.vue | 22 +-- .../components/data/PackageDetailsLoader.vue | 34 ++-- .../components/data/PluginDetailsLoader.vue | 85 ++++---- .../components/data/PluginDetailsTable.vue | 64 +++--- .../app/components/display/ClusterBadge.vue | 6 +- .../components/display/ComparisonMetric.vue | 2 +- .../display/ExpandableContainer.vue | 23 +-- .../src/app/components/display/IconButton.vue | 5 +- .../src/app/components/display/ModuleId.vue | 8 +- .../src/app/components/display/TreeNode.vue | 20 +- .../src/app/components/display/Version.vue | 2 +- .../app/components/display/VirtualTree.vue | 26 +-- .../src/app/components/flowmap/ModuleFlow.vue | 6 +- .../components/flowmap/ModuleFlowDetails.vue | 15 +- .../components/flowmap/ModuleFlowTimeline.vue | 61 +++--- .../app/components/flowmap/NodeAssetInfo.vue | 10 +- .../app/components/flowmap/NodeChunkInfo.vue | 14 +- .../app/components/flowmap/NodeModuleInfo.vue | 50 ++--- .../src/app/components/flowmap/PluginFlow.vue | 35 ++-- .../components/flowmap/PluginFlowTimeline.vue | 61 +++--- .../app/components/modules/BuildMetrics.vue | 26 +-- .../app/components/modules/DetailedList.vue | 19 +- .../src/app/components/modules/FlatList.vue | 7 +- .../src/app/components/modules/Folder.vue | 2 +- .../src/app/components/modules/Graph.vue | 2 +- .../app/components/packages/Duplicated.vue | 6 +- .../src/app/components/packages/Importers.vue | 12 +- .../src/app/components/packages/Table.vue | 52 +++-- .../app/components/panel/SessionSelector.vue | 29 ++- .../src/app/pages/compare/[sessions].vue | 10 +- packages/rolldown/src/app/pages/index.vue | 34 ++-- .../src/app/pages/session/[session].vue | 25 +-- .../app/pages/session/[session]/assets.vue | 23 ++- .../app/pages/session/[session]/chunks.vue | 59 +++--- .../pages/session/[session]/graph/index.vue | 23 ++- .../src/app/pages/session/[session]/index.vue | 30 +-- .../app/pages/session/[session]/packages.vue | 34 ++-- .../app/pages/session/[session]/plugins.vue | 8 +- .../components/Chart/ChartNavBreadcrumb.vue | 6 +- .../ui/src/components/Code/CodeDiffEditor.vue | 4 +- .../components/Container/ContainerCard.vue | 6 +- .../src/components/Data/DataPathSelector.vue | 10 +- .../components/Data/DataPathSelectorItem.vue | 12 +- .../src/components/Data/DataSearchPanel.vue | 33 ++-- .../src/components/Display/DisplayBadge.vue | 2 +- .../components/Display/DisplayCloseButton.vue | 5 +- .../components/Display/DisplayFileIcon.vue | 2 +- .../Display/DisplayFileSizeBadge.vue | 4 +- .../Display/DisplayGraphHoverView.vue | 2 +- .../components/Display/DisplayIconButton.vue | 5 +- .../components/Display/DisplayModuleGraph.vue | 55 ++---- .../Display/DisplayNumberWithUnit.vue | 2 +- .../components/Display/DisplayTimestamp.vue | 2 +- .../components/Flowmap/FlowmapExpandable.vue | 12 +- .../ui/src/components/Flowmap/FlowmapNode.vue | 12 +- .../Flowmap/FlowmapNodePluginInfo.vue | 10 +- .../ui/src/components/Form/FormCheckbox.vue | 6 +- .../src/components/Overlay/OverlayModal.vue | 17 +- .../ui/src/components/Panel/PanelSideNav.vue | 10 +- .../components/Plugins/PluginsFlatList.vue | 10 +- .../components/Plugins/PluginsSunburst.vue | 26 ++- .../components/Visual/VisualEmptyState.vue | 8 +- .../src/components/Visual/VisualLoading.vue | 6 +- packages/ui/src/unocss/index.ts | 2 - packages/vite/src/app/app.vue | 6 +- .../app/components/chart/ModuleFlamegraph.vue | 29 ++- .../components/data/ModuleDetailsLoader.vue | 37 ++-- .../data/ModuleImportRelationships.vue | 22 +-- .../components/data/PluginDetailsLoader.vue | 85 ++++---- .../components/data/PluginDetailsTable.vue | 64 +++--- .../src/app/components/display/ModuleId.vue | 8 +- .../app/components/display/VirtualTree.vue | 26 +-- .../src/app/components/flowmap/ModuleFlow.vue | 6 +- .../components/flowmap/ModuleFlowDetails.vue | 11 +- .../components/flowmap/ModuleFlowTimeline.vue | 49 +++-- .../app/components/flowmap/NodeModuleInfo.vue | 50 ++--- .../src/app/components/flowmap/PluginFlow.vue | 35 ++-- .../components/flowmap/PluginFlowTimeline.vue | 61 +++--- .../app/components/modules/BuildMetrics.vue | 26 +-- .../app/components/modules/DetailedList.vue | 19 +- .../src/app/components/modules/FlatList.vue | 7 +- .../src/app/components/modules/Folder.vue | 2 +- .../vite/src/app/components/modules/Graph.vue | 2 +- packages/vite/src/app/pages/graph.vue | 39 ++-- packages/vite/src/app/pages/home.vue | 11 +- packages/vite/src/app/pages/index.vue | 2 +- packages/vite/src/app/pages/plugins.vue | 24 ++- 127 files changed, 1301 insertions(+), 1683 deletions(-) diff --git a/packages/core/playground/src/pages/devtools.vue b/packages/core/playground/src/pages/devtools.vue index 9250c52a..921cab8b 100644 --- a/packages/core/playground/src/pages/devtools.vue +++ b/packages/core/playground/src/pages/devtools.vue @@ -151,87 +151,87 @@ function incrementCounter() {