diff --git a/frontend/apps/artcraft/app/src/components/signaled/TopBar/AppsQuickMenu.tsx b/frontend/apps/artcraft/app/src/components/signaled/TopBar/AppsQuickMenu.tsx index 4a8ce8af8b..cebd524848 100644 --- a/frontend/apps/artcraft/app/src/components/signaled/TopBar/AppsQuickMenu.tsx +++ b/frontend/apps/artcraft/app/src/components/signaled/TopBar/AppsQuickMenu.tsx @@ -38,9 +38,9 @@ const AppsQuickMenuSection = ({ onClick={() => goToApp(app.action)} disabled={!app.action} className={twMerge( - "group flex w-full items-center gap-3 px-2 py-2 text-left transition-colors", + "group flex w-full items-center gap-3 rounded-[3px] px-2 py-2 text-left transition-colors", app.action - ? "cursor-pointer hover:bg-white/10" + ? "cursor-pointer hover:bg-white/[0.08]" : "cursor-default opacity-60", )} > diff --git a/frontend/apps/artcraft/app/src/config/appMenu.tsx b/frontend/apps/artcraft/app/src/config/appMenu.tsx index 5fae79778a..0e90686e62 100644 --- a/frontend/apps/artcraft/app/src/config/appMenu.tsx +++ b/frontend/apps/artcraft/app/src/config/appMenu.tsx @@ -105,10 +105,10 @@ const APP_CARD_PALETTES: Record = { hoverStyle: "hover:border-blue-400/60 hover:bg-blue-500/10", }, "image-to-video": { - accent: "from-amber-500/20 to-amber-500/0", - iconBg: "bg-amber-500/20 border-amber-400/40", - iconColor: "text-amber-300", - hoverStyle: "hover:border-amber-400/60 hover:bg-amber-500/10", + accent: "from-purple-500/20 to-purple-500/0", + iconBg: "bg-purple-500/20 border-purple-400/40", + iconColor: "text-purple-300", + hoverStyle: "hover:border-purple-400/60 hover:bg-purple-500/10", }, "create-audio": { accent: "from-pink-500/20 to-pink-500/0", @@ -117,17 +117,65 @@ const APP_CARD_PALETTES: Record = { hoverStyle: "hover:border-pink-400/60 hover:bg-pink-500/10", }, "image-to-3d-object": { + accent: "from-cyan-500/20 to-cyan-500/0", + iconBg: "bg-cyan-500/20 border-cyan-400/40", + iconColor: "text-cyan-300", + hoverStyle: "hover:border-cyan-400/60 hover:bg-cyan-500/10", + }, + "image-to-3d-world": { + accent: "from-teal-500/20 to-teal-500/0", + iconBg: "bg-teal-500/20 border-teal-400/40", + iconColor: "text-teal-300", + hoverStyle: "hover:border-teal-400/60 hover:bg-teal-500/10", + }, + "3d-editor": { + accent: "from-amber-500/20 to-amber-500/0", + iconBg: "bg-amber-500/20 border-amber-400/40", + iconColor: "text-amber-300", + hoverStyle: "hover:border-amber-400/60 hover:bg-amber-500/10", + }, + "background-change": { accent: "from-emerald-500/20 to-emerald-500/0", iconBg: "bg-emerald-500/20 border-emerald-400/40", iconColor: "text-emerald-300", hoverStyle: "hover:border-emerald-400/60 hover:bg-emerald-500/10", }, - "image-to-3d-world": { + "video-editor": { + accent: "from-rose-500/20 to-rose-500/0", + iconBg: "bg-rose-500/20 border-rose-400/40", + iconColor: "text-rose-300", + hoverStyle: "hover:border-rose-400/60 hover:bg-rose-500/10", + }, + moodboard: { + accent: "from-indigo-500/20 to-indigo-500/0", + iconBg: "bg-indigo-500/20 border-indigo-400/40", + iconColor: "text-indigo-300", + hoverStyle: "hover:border-indigo-400/60 hover:bg-indigo-500/10", + }, + "video-frame-extractor": { + accent: "from-orange-500/20 to-orange-500/0", + iconBg: "bg-orange-500/20 border-orange-400/40", + iconColor: "text-orange-300", + hoverStyle: "hover:border-orange-400/60 hover:bg-orange-500/10", + }, + "edit-image": { accent: "from-sky-500/20 to-sky-500/0", iconBg: "bg-sky-500/20 border-sky-400/40", iconColor: "text-sky-300", hoverStyle: "hover:border-sky-400/60 hover:bg-sky-500/10", }, + "2d-canvas": { + accent: "from-sky-500/20 to-sky-500/0", + iconBg: "bg-sky-500/20 border-sky-400/40", + iconColor: "text-sky-300", + hoverStyle: "hover:border-sky-400/60 hover:bg-sky-500/10", + }, + "remove-background": { + accent: "from-violet-500/20 to-violet-500/0", + iconBg: "bg-violet-500/20 border-violet-400/40", + iconColor: "text-violet-300", + hoverStyle: "hover:border-violet-400/60 hover:bg-violet-500/10", + }, angles: { accent: "from-lime-500/20 to-lime-500/0", iconBg: "bg-lime-500/20 border-lime-400/40", @@ -140,59 +188,17 @@ const APP_CARD_PALETTES: Record = { iconColor: "text-fuchsia-300", hoverStyle: "hover:border-fuchsia-400/60 hover:bg-fuchsia-500/10", }, - "2d-canvas": { - accent: "from-sky-500/20 to-sky-500/0", - iconBg: "bg-sky-500/20 border-sky-400/40", - iconColor: "text-sky-300", - hoverStyle: "hover:border-sky-400/60 hover:bg-sky-500/10", - }, - "3d-editor": { - accent: "from-emerald-500/20 to-emerald-500/0", - iconBg: "bg-emerald-500/20 border-emerald-400/40", - iconColor: "text-emerald-300", - hoverStyle: "hover:border-emerald-400/60 hover:bg-emerald-500/10", - }, - "edit-image": { - accent: "from-purple-500/20 to-purple-500/0", - iconBg: "bg-purple-500/20 border-purple-400/40", - iconColor: "text-purple-300", - hoverStyle: "hover:border-purple-400/60 hover:bg-purple-500/10", - }, - "remove-background": { - accent: "from-violet-500/20 to-violet-500/0", - iconBg: "bg-violet-500/20 border-violet-400/40", - iconColor: "text-violet-300", - hoverStyle: "hover:border-violet-400/60 hover:bg-violet-500/10", - }, - "video-frame-extractor": { - accent: "from-rose-500/20 to-rose-500/0", - iconBg: "bg-rose-500/20 border-rose-400/40", - iconColor: "text-rose-300", - hoverStyle: "hover:border-rose-400/60 hover:bg-rose-500/10", - }, - "background-change": { - accent: "from-orange-500/20 to-orange-500/0", - iconBg: "bg-orange-500/20 border-orange-400/40", - iconColor: "text-orange-300", - hoverStyle: "hover:border-orange-400/60 hover:bg-orange-500/10", - }, - "video-editor": { - accent: "from-teal-500/20 to-teal-500/0", - iconBg: "bg-teal-500/20 border-teal-400/40", - iconColor: "text-teal-300", - hoverStyle: "hover:border-teal-400/60 hover:bg-teal-500/10", - }, "video-watermark-removal": { - accent: "from-cyan-500/20 to-cyan-500/0", - iconBg: "bg-cyan-500/20 border-cyan-400/40", - iconColor: "text-cyan-300", - hoverStyle: "hover:border-cyan-400/60 hover:bg-cyan-500/10", + accent: "from-yellow-500/20 to-yellow-500/0", + iconBg: "bg-yellow-500/20 border-yellow-400/40", + iconColor: "text-yellow-300", + hoverStyle: "hover:border-yellow-400/60 hover:bg-yellow-500/10", }, "image-watermark-removal": { - accent: "from-indigo-500/20 to-indigo-500/0", - iconBg: "bg-indigo-500/20 border-indigo-400/40", - iconColor: "text-indigo-300", - hoverStyle: "hover:border-indigo-400/60 hover:bg-indigo-500/10", + accent: "from-red-500/20 to-red-500/0", + iconBg: "bg-red-500/20 border-red-400/40", + iconColor: "text-red-300", + hoverStyle: "hover:border-red-400/60 hover:bg-red-500/10", }, }; diff --git a/frontend/apps/artcraft/app/src/pages/PageApps/AppsIndexPage.tsx b/frontend/apps/artcraft/app/src/pages/PageApps/AppsIndexPage.tsx index afd5daffd2..cead11f663 100644 --- a/frontend/apps/artcraft/app/src/pages/PageApps/AppsIndexPage.tsx +++ b/frontend/apps/artcraft/app/src/pages/PageApps/AppsIndexPage.tsx @@ -90,7 +90,9 @@ function AppCard({ app }: { app: FullAppItem }) { {app.badge} diff --git a/frontend/apps/artcraft/tailwind.config.ts b/frontend/apps/artcraft/tailwind.config.ts index 7d9fa35957..d3063797d2 100644 --- a/frontend/apps/artcraft/tailwind.config.ts +++ b/frontend/apps/artcraft/tailwind.config.ts @@ -326,6 +326,9 @@ export default { }, plugins: [], safelist: [ + // lucide-react adds this class at runtime; keep the base-layer sizing rule + // in styles/tailwind.css from being purged. + "lucide", "bg-character-selected", "bg-character-unselected", "bg-character-clip", diff --git a/frontend/libs/components/button/src/lib/ToggleButton.tsx b/frontend/libs/components/button/src/lib/ToggleButton.tsx index f2b90ea7b8..41ad3f4912 100644 --- a/frontend/libs/components/button/src/lib/ToggleButton.tsx +++ b/frontend/libs/components/button/src/lib/ToggleButton.tsx @@ -1,6 +1,6 @@ import type { LucideIcon } from "lucide-react"; import { DynamicIcon } from "@storyteller/icons"; -import { Button } from "./button"; +import { Button, NEUTRAL_BUTTON_HOVER_CLASSES } from "./button"; import { twMerge } from "tailwind-merge"; interface ToggleButtonProps { @@ -26,14 +26,14 @@ export const ToggleButton = ({ return ( diff --git a/frontend/libs/components/menu-icon-selector/src/lib/menu-icon-selector.tsx b/frontend/libs/components/menu-icon-selector/src/lib/menu-icon-selector.tsx index e4916496eb..356a7b6727 100644 --- a/frontend/libs/components/menu-icon-selector/src/lib/menu-icon-selector.tsx +++ b/frontend/libs/components/menu-icon-selector/src/lib/menu-icon-selector.tsx @@ -94,7 +94,7 @@ export const MenuIconSelector: React.FC = ({ {/* Active tab background */} {selectedIndex >= 0 && (
= ({ {/* Hover background (only if hovering a different tab) */} {hoveredIndex !== -1 && hoveredIndex !== selectedIndex && (
= ({ closeOnClick={true} interactive={interactive} disabled={disabled} - className={twMerge( - "text-sm font-semibold", - item.large && "text-md", - )} + className="font-sans text-xs font-medium normal-case tracking-normal" imageSrc={imageSrc || undefined} description={description || undefined} > @@ -153,7 +150,7 @@ export const MenuIconSelector: React.FC = ({ className={twMerge( "relative z-30 flex flex-col items-center justify-center px-3 py-2 rounded-[2px] transition-colors duration-150", idx === selectedIndex - ? "text-ui-panel" + ? "text-base-fg" : "text-base-fg/70 hover:text-base-fg", disabled ? "cursor-not-allowed opacity-60" : "", )} diff --git a/frontend/libs/components/promptbox/src/lib/PromptBoxVideo.tsx b/frontend/libs/components/promptbox/src/lib/PromptBoxVideo.tsx index d6c23116fe..1bf1f72388 100644 --- a/frontend/libs/components/promptbox/src/lib/PromptBoxVideo.tsx +++ b/frontend/libs/components/promptbox/src/lib/PromptBoxVideo.tsx @@ -4,7 +4,11 @@ import { JobContextType } from "@storyteller/common"; import { PopoverMenu, PopoverItem } from "@storyteller/ui-popover"; import { SliderV2 } from "@storyteller/ui-sliderv2"; import { Tooltip } from "@storyteller/ui-tooltip"; -import { ToggleButton, GenerateIconButton } from "@storyteller/ui-button"; +import { + ToggleButton, + GenerateIconButton, + NEUTRAL_BUTTON_HOVER_CLASSES, +} from "@storyteller/ui-button"; import { GenerateVideo, GenerateVideoRequest, commandErrorMessage } from "@storyteller/tauri-api"; import { AudioLinesIcon, ChevronDownIcon, ChevronUpIcon, ClockIcon, InfoIcon } from "lucide-react"; import { DynamicIcon } from "@storyteller/icons"; @@ -1317,7 +1321,7 @@ export const PromptBoxVideo = ({ @@ -1531,11 +1535,6 @@ export const PromptBoxVideo = ({ icon={AudioLinesIcon} activeIcon={AudioLinesIcon} onClick={() => setGenerateWithSound(!generateWithSound)} - className={ - generateWithSound - ? "bg-white/10 hover:bg-white/15 border-white/40" - : undefined - } /> )}