From e7ce294aebc7ced69cd3abe88dab80381fcb0864 Mon Sep 17 00:00:00 2001 From: Alexander Brown <448862+DrJKL@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:19:18 -0800 Subject: [PATCH] style: apply Tailwind CSS class sorting across codebase Co-authored-by: Amp Amp-Thread-ID: https://ampcode.com/threads/T-019bd8c8-bce1-70bc-a125-baf2a1503ee8 --- .storybook/README.md | 4 +- lint-staged.config.mjs | 24 -- lint-staged.config.ts | 5 +- .../LiteGraphCanvasSplitterOverlay.vue | 39 +- src/components/MenuHamburger.vue | 2 +- src/components/TopMenuSection.vue | 6 +- src/components/actionbar/ComfyActionbar.vue | 20 +- .../tabs/terminal/BaseTerminal.vue | 9 +- .../breadcrumb/SubgraphBreadcrumb.vue | 8 +- .../breadcrumb/SubgraphBreadcrumbItem.vue | 13 +- src/components/button/IconGroup.vue | 4 +- src/components/card/CardBottom.vue | 4 +- src/components/card/CardContainer.vue | 6 +- src/components/chip/SquareChip.vue | 6 +- src/components/common/OverlayIcon.vue | 9 +- src/components/common/SearchBox.vue | 18 +- src/components/common/TreeExplorer.vue | 17 +- .../common/TreeExplorerTreeNode.vue | 17 +- src/components/dialog/confirm/ConfirmBody.vue | 2 +- .../dialog/confirm/ConfirmFooter.vue | 9 +- .../dialog/confirm/ConfirmHeader.vue | 7 +- .../dialog/content/MissingNodesContent.vue | 14 +- .../dialog/content/MissingNodesFooter.vue | 32 +- .../content/TopUpCreditsDialogContent.vue | 23 +- .../content/credit/CreditTopUpOption.vue | 6 +- .../dialog/content/signin/SignInForm.vue | 22 +- src/components/graph/NodeContextMenu.vue | 7 +- .../selectionToolbox/ColorPickerButton.vue | 7 +- .../selectionToolbox/ColorPickerMenu.vue | 13 +- .../helpcenter/HelpCenterMenuContent.vue | 43 ++- src/components/imagecrop/WidgetImageCrop.vue | 23 +- src/components/input/MultiSelect.vue | 4 +- src/components/load3d/Load3DScene.vue | 7 +- .../load3d/controls/PopupSlider.vue | 4 +- .../load3d/controls/RecordingControls.vue | 2 +- .../maskeditor/BrushSettingsPanel.vue | 49 +-- .../maskeditor/ColorSelectSettingsPanel.vue | 2 +- .../maskeditor/ImageLayerSettingsPanel.vue | 43 ++- .../maskeditor/MaskEditorContent.vue | 18 +- .../maskeditor/PaintBucketSettingsPanel.vue | 2 +- src/components/maskeditor/PointerZone.vue | 2 +- src/components/maskeditor/SidePanel.vue | 6 +- src/components/maskeditor/ToolPanel.vue | 8 +- .../maskeditor/controls/DropdownControl.vue | 6 +- .../maskeditor/controls/SliderControl.vue | 4 +- .../maskeditor/controls/ToggleControl.vue | 8 +- .../maskeditor/dialog/TopBarHeader.vue | 39 +- src/components/node/NodeHelpContent.vue | 31 +- src/components/queue/QueueOverlayExpanded.vue | 4 +- src/components/queue/QueueProgressOverlay.vue | 4 +- .../queue/dialogs/QueueClearHistoryDialog.vue | 13 +- src/components/queue/job/QueueJobItem.vue | 32 +- .../rightSidePanel/RightSidePanel.vue | 15 +- .../layout/PropertiesAccordionItem.vue | 18 +- .../parameters/SectionWidgets.vue | 14 +- .../parameters/TabGlobalParameters.vue | 4 +- .../rightSidePanel/parameters/TabNodes.vue | 10 +- .../parameters/TabNormalInputs.vue | 10 +- .../parameters/TabSubgraphInputs.vue | 4 +- .../parameters/WidgetActions.vue | 4 +- .../rightSidePanel/parameters/WidgetItem.vue | 20 +- .../rightSidePanel/settings/LayoutField.vue | 8 +- .../rightSidePanel/settings/SetNodeColor.vue | 4 +- .../settings/TabGlobalSettings.vue | 4 +- .../subgraph/SubgraphEditor.vue | 38 +- .../subgraph/SubgraphNodeWidget.vue | 12 +- src/components/searchbox/NodeSearchFilter.vue | 9 +- src/components/sidebar/ModeToggle.vue | 2 +- src/components/sidebar/SideToolbar.vue | 22 +- src/components/sidebar/SidebarIcon.vue | 18 +- .../sidebar/tabs/AssetsSidebarListView.vue | 19 +- .../sidebar/tabs/AssetsSidebarTab.vue | 77 +++- .../sidebar/tabs/SidebarTabTemplate.vue | 9 +- src/components/tab/Tab.vue | 8 +- src/components/topbar/CurrentUserButton.vue | 14 +- src/components/topbar/CurrentUserPopover.vue | 66 ++-- src/components/topbar/LoginButton.vue | 9 +- src/components/topbar/TopMenuHelpButton.vue | 6 +- src/components/topbar/TopbarBadge.vue | 29 +- .../topbar/WorkflowOverflowMenu.vue | 2 +- src/components/topbar/WorkflowTabPopover.vue | 12 +- src/components/topbar/WorkflowTabs.vue | 39 +- src/components/ui/Popover.vue | 11 +- src/components/ui/TypeformPopoverButton.vue | 11 +- src/components/ui/ZoomPane.vue | 2 +- src/components/ui/button/button.variants.ts | 10 +- src/components/ui/slider/Slider.vue | 6 +- .../ui/stepper/FormattedNumberStepper.vue | 12 +- src/components/ui/tags-input/TagsInput.vue | 4 +- .../ui/tags-input/TagsInputInput.vue | 2 +- .../ui/tags-input/TagsInputItem.vue | 2 +- .../ui/tags-input/TagsInputItemDelete.vue | 2 +- .../widget/layout/BaseModalLayout.vue | 34 +- src/components/widget/nav/NavIcon.vue | 5 +- src/components/widget/nav/NavItem.vue | 19 +- src/components/widget/nav/NavTitle.vue | 4 +- src/lib/litegraph/README.md | 346 +++++++++--------- .../assets/components/AssetBadgeGroup.vue | 4 +- src/platform/assets/components/AssetCard.vue | 40 +- .../assets/components/AssetFilterBar.vue | 9 +- .../assets/components/MediaAssetCard.vue | 24 +- .../components/MediaAssetFilterButton.vue | 8 +- .../components/MediaAssetFilterMenu.vue | 4 +- .../components/MediaAssetSortButton.vue | 8 +- src/platform/assets/components/MediaTitle.vue | 2 +- .../components/ModelImportProgressDialog.vue | 9 +- .../components/UploadModelDialogHeader.vue | 4 +- .../assets/components/UploadModelFooter.vue | 9 +- .../assets/components/UploadModelProgress.vue | 19 +- .../components/UploadModelUpgradeModal.vue | 2 +- .../UploadModelUpgradeModalFooter.vue | 20 +- .../assets/components/UploadModelUrlInput.vue | 34 +- .../components/UploadModelUrlInputCivitai.vue | 25 +- .../cloud/onboarding/CloudAuthTimeoutView.vue | 19 +- .../CloudSubscriptionRedirectView.vue | 6 +- .../subscription/components/PricingTable.vue | 72 ++-- .../components/SubscriptionPanel.vue | 45 ++- .../SubscriptionRequiredDialogContent.vue | 19 +- .../components/ReleaseNotificationToast.vue | 31 +- .../updates/components/WhatsNewPopup.vue | 22 +- .../core/layout/transform/TransformPane.vue | 2 +- .../extensions/linearMode/DropZone.vue | 18 +- .../extensions/linearMode/ImagePreview.vue | 15 +- .../extensions/linearMode/LinearControls.vue | 62 ++-- .../extensions/linearMode/LinearPreview.vue | 29 +- .../extensions/linearMode/OutputHistory.vue | 42 ++- .../extensions/linearMode/Preview3d.vue | 2 +- .../extensions/linearMode/VideoPreview.vue | 5 +- .../extensions/vueNodes/VideoPreview.vue | 12 +- .../vueNodes/components/ImagePreview.vue | 31 +- .../vueNodes/components/InputSlot.vue | 23 +- .../vueNodes/components/LGraphNode.vue | 57 ++- .../vueNodes/components/LGraphNodePreview.vue | 6 +- .../vueNodes/components/NodeBadge.vue | 7 +- .../vueNodes/components/NodeHeader.vue | 32 +- .../vueNodes/components/NodeSlots.vue | 18 +- .../vueNodes/components/NodeWidgets.vue | 9 +- .../vueNodes/components/OutputSlot.vue | 22 +- .../vueNodes/components/SlotConnectionDot.vue | 13 +- .../vueNodes/composables/useNodeTooltips.ts | 2 +- .../components/ValueControlPopover.vue | 20 +- .../widgets/components/WidgetAudioUI.vue | 8 +- .../widgets/components/WidgetButton.vue | 7 +- .../widgets/components/WidgetColorPicker.vue | 7 +- .../components/WidgetInputNumberInput.vue | 12 +- .../components/WidgetInputNumberSlider.vue | 2 +- .../widgets/components/WidgetInputText.vue | 2 +- .../widgets/components/WidgetRecordAudio.vue | 14 +- .../components/WidgetSelectDefault.vue | 2 +- .../widgets/components/WidgetTextarea.vue | 4 +- .../widgets/components/WidgetWithControl.vue | 14 +- .../components/audio/AudioPreviewPlayer.vue | 19 +- .../components/form/FormSearchInput.vue | 16 +- .../components/form/FormSelectButton.vue | 8 +- .../form/dropdown/FormDropdownInput.vue | 16 +- .../form/dropdown/FormDropdownMenu.vue | 6 +- .../form/dropdown/FormDropdownMenuActions.vue | 12 +- .../form/dropdown/FormDropdownMenuFilter.vue | 6 +- .../form/dropdown/FormDropdownMenuItem.vue | 18 +- .../components/layout/WidgetLayoutField.vue | 9 +- .../composables/useNumberWidgetButtonPt.ts | 4 +- src/views/LinearView.vue | 37 +- .../manager/ImportFailedNodeContent.vue | 9 +- .../components/manager/ManagerDialog.vue | 30 +- .../manager/NodeConflictDialogContent.vue | 29 +- .../infoPanel/tabs/WarningTabPanel.vue | 4 +- .../manager/packBanner/PackBanner.vue | 20 +- .../components/manager/packIcon/PackIcon.vue | 20 +- 168 files changed, 1777 insertions(+), 1103 deletions(-) delete mode 100644 lint-staged.config.mjs diff --git a/.storybook/README.md b/.storybook/README.md index ba09b24d5..08db988a9 100644 --- a/.storybook/README.md +++ b/.storybook/README.md @@ -226,8 +226,8 @@ In this project, only the `` syntax from unpl ``` diff --git a/lint-staged.config.mjs b/lint-staged.config.mjs deleted file mode 100644 index 6f74d6616..000000000 --- a/lint-staged.config.mjs +++ /dev/null @@ -1,24 +0,0 @@ -import path from 'node:path' - -export default { - 'tests-ui/**': () => - 'echo "Files in tests-ui/ are deprecated. Colocate tests with source files." && exit 1', - - './**/*.js': (stagedFiles) => formatAndEslint(stagedFiles), - - './**/*.{ts,tsx,vue,mts}': (stagedFiles) => [ - ...formatAndEslint(stagedFiles), - 'pnpm typecheck' - ] -} - -function formatAndEslint(fileNames) { - // Convert absolute paths to relative paths for better ESLint resolution - const relativePaths = fileNames.map((f) => path.relative(process.cwd(), f)) - const joinedPaths = relativePaths.map((p) => `"${p}"`).join(' ') - return [ - `pnpm exec oxfmt ${joinedPaths}`, - `pnpm exec oxlint --fix ${joinedPaths}`, - `pnpm exec eslint --cache --fix --no-warn-ignored ${joinedPaths}` - ] -} diff --git a/lint-staged.config.ts b/lint-staged.config.ts index 89deaa4b0..3ea9358fa 100644 --- a/lint-staged.config.ts +++ b/lint-staged.config.ts @@ -1,6 +1,9 @@ import path from 'node:path' export default { + 'tests-ui/**': () => + 'echo "Files in tests-ui/ are deprecated. Colocate tests with source files." && exit 1', + './**/*.js': (stagedFiles: string[]) => formatAndEslint(stagedFiles), './**/*.{ts,tsx,vue,mts}': (stagedFiles: string[]) => [ @@ -14,7 +17,7 @@ function formatAndEslint(fileNames: string[]) { const relativePaths = fileNames.map((f) => path.relative(process.cwd(), f)) const joinedPaths = relativePaths.map((p) => `"${p}"`).join(' ') return [ - `pnpm exec prettier --cache --write ${joinedPaths}`, + `pnpm exec oxfmt ${joinedPaths}`, `pnpm exec oxlint --fix ${joinedPaths}`, `pnpm exec eslint --cache --fix --no-warn-ignored ${joinedPaths}` ] diff --git a/src/components/LiteGraphCanvasSplitterOverlay.vue b/src/components/LiteGraphCanvasSplitterOverlay.vue index 4a7695d18..a0a8a0cf5 100644 --- a/src/components/LiteGraphCanvasSplitterOverlay.vue +++ b/src/components/LiteGraphCanvasSplitterOverlay.vue @@ -1,6 +1,6 @@ @@ -233,7 +233,7 @@ onUpdated(() => { } :deep(.p-breadcrumb-item) { - @apply flex items-center overflow-hidden h-8; + @apply flex h-8 items-center overflow-hidden; min-width: calc(var(--p-breadcrumb-item-min-width) + 1rem); border: 1px solid transparent; background-color: transparent; diff --git a/src/components/breadcrumb/SubgraphBreadcrumbItem.vue b/src/components/breadcrumb/SubgraphBreadcrumbItem.vue index 0edcc25f9..499ee7cd4 100644 --- a/src/components/breadcrumb/SubgraphBreadcrumbItem.vue +++ b/src/components/breadcrumb/SubgraphBreadcrumbItem.vue @@ -21,8 +21,15 @@ class="icon-[lucide--triangle-alert] text-warning-background" /> {{ item.label }} - - + + - + diff --git a/src/components/card/CardBottom.vue b/src/components/card/CardBottom.vue index 4a0ae1047..502d08bce 100644 --- a/src/components/card/CardBottom.vue +++ b/src/components/card/CardBottom.vue @@ -1,6 +1,6 @@ @@ -14,6 +14,6 @@ const { fullHeight = true } = defineProps<{ }>() const containerClasses = computed(() => - cn('flex-1 w-full', fullHeight && 'h-full') + cn('w-full flex-1', fullHeight && 'h-full') ) diff --git a/src/components/card/CardContainer.vue b/src/components/card/CardContainer.vue index 8b8f81944..0b9e8fa5c 100644 --- a/src/components/card/CardContainer.vue +++ b/src/components/card/CardContainer.vue @@ -1,7 +1,7 @@ @@ -59,7 +59,7 @@ const containerClasses = computed(() => { outline: cn( hasBorder && 'border-2 border-border-subtle', hasCursor && 'cursor-pointer', - 'hover:border-border-subtle/50 transition-colors' + 'transition-colors hover:border-border-subtle/50' ) } diff --git a/src/components/chip/SquareChip.vue b/src/components/chip/SquareChip.vue index b31e283db..0f19eb3fb 100644 --- a/src/components/chip/SquareChip.vue +++ b/src/components/chip/SquareChip.vue @@ -1,6 +1,6 @@ @@ -19,9 +19,9 @@ const baseClasses = const variantStyles = { dark: 'bg-zinc-500/40 text-white/90', - light: cn('backdrop-blur-[2px] bg-base-background/50 text-base-foreground'), + light: cn('bg-base-background/50 text-base-foreground backdrop-blur-[2px]'), gray: cn( - 'backdrop-blur-[2px] bg-modal-card-tag-background text-base-foreground' + 'bg-modal-card-tag-background text-base-foreground backdrop-blur-[2px]' ) } diff --git a/src/components/common/OverlayIcon.vue b/src/components/common/OverlayIcon.vue index bc68918f0..268c51cfd 100644 --- a/src/components/common/OverlayIcon.vue +++ b/src/components/common/OverlayIcon.vue @@ -1,11 +1,14 @@