From 60bcfffc8d42834e30eb095dc322803094de3a8f Mon Sep 17 00:00:00 2001 From: BFlat Date: Tue, 1 Sep 2026 10:25:21 +0700 Subject: [PATCH] Webapp stylings (#1916) --- .../src/components/ui/checkbox.tsx | 16 +- .../src/pages/UserSignups.tsx | 107 +++- frontend/apps/artcraft-webapp/index.html | 2 +- .../public/images/artcraft-icon-2.png | Bin 0 -> 9628 bytes .../public/images/artcraft-logo-2.png | Bin 0 -> 8425 bytes frontend/apps/artcraft-webapp/src/app/app.tsx | 8 +- .../src/components/auth/GoogleLoginButton.tsx | 10 +- .../src/components/auth/auth-layout.tsx | 15 +- .../src/components/auth/auth-showcase.tsx | 4 +- .../src/components/auth/signup-form.tsx | 18 +- .../src/components/credits-modal.tsx | 36 +- .../CreateMediaPageShell.tsx | 37 +- .../GallerySelectionDownloadBar.tsx | 2 +- .../GenerationGalleryGrid.tsx | 17 +- .../GenerationGalleryList.tsx | 6 +- .../components/insufficient-credits-modal.tsx | 30 +- .../components/lightbox/LightboxDetails.tsx | 197 +++---- .../src/components/lightbox/lightbox.tsx | 16 +- .../components/prompt-box/CharactersModal.tsx | 130 ++--- .../components/prompt-box/ImagePromptRow.tsx | 74 ++- .../prompt-box/MediaReferenceRow.tsx | 48 +- .../src/components/prompt-box/PromptBox.tsx | 32 +- .../prompt-box/PromptBoxDropZone.tsx | 6 +- .../prompt-box/PromptFullscreen.tsx | 5 +- .../prompt-box/mobile/DrawerOptionList.tsx | 8 +- .../prompt-box/mobile/DrawerSection.tsx | 2 +- .../prompt-box/mobile/MobileCountStepper.tsx | 10 +- .../prompt-box/mobile/MobileFieldButton.tsx | 2 +- .../prompt-box/mobile/MobilePromptForm.tsx | 4 +- .../prompt-box/mobile/SettingsDrawer.tsx | 6 +- .../settings-modal/AccountSection.tsx | 26 +- .../settings-modal/ApiKeySection.tsx | 38 +- .../settings-modal/SettingsModal.tsx | 26 +- .../src/components/sidebar/app-sidebar.tsx | 37 +- .../sidebar/library-folders-nav.tsx | 4 +- .../components/sidebar/library-tags-nav.tsx | 6 +- .../components/sidebar/mobile-bottom-nav.tsx | 6 +- .../src/components/signup-cta-modal.tsx | 27 +- .../src/components/toast/toast.tsx | 6 +- .../components/topbar/ActiveSceneTitle.tsx | 8 +- .../src/components/topbar/TopBarActions.tsx | 67 ++- .../src/components/topbar/breadcrumbs.tsx | 2 +- .../src/components/topbar/task-queue.tsx | 90 ++-- .../src/components/topbar/topbar.tsx | 6 +- .../src/components/ui/sheet.tsx | 10 +- .../src/components/ui/sidebar.tsx | 12 +- .../src/components/ui/tooltip.tsx | 2 +- .../src/pages/checkout/cancel.tsx | 19 +- .../src/pages/checkout/success.tsx | 74 ++- .../src/pages/create-audio/create-audio.tsx | 19 +- .../components/AspectRatioIcon.tsx | 1 - .../src/pages/create-image/create-image.tsx | 2 +- .../components/MeshInputsRow.tsx | 130 ++--- .../src/pages/create-object/create-object.tsx | 2 +- .../src/pages/create-vfx/create-vfx.tsx | 10 +- .../src/pages/create-video/create-video.tsx | 56 +- .../components/ReferenceVideoSlot.tsx | 27 +- .../src/pages/create-world/create-world.tsx | 2 +- .../pages/forgot-password/forgot-password.tsx | 32 +- .../pages/forgot-password/verify-reset.tsx | 46 +- .../frame-extractor/extraction-panel.tsx | 46 +- .../pages/frame-extractor/frame-extractor.tsx | 4 +- .../src/pages/frame-extractor/frames-grid.tsx | 18 +- .../pages/frame-extractor/video-drop-zone.tsx | 10 +- .../pages/frame-extractor/video-scrubber.tsx | 22 +- .../artcraft-webapp/src/pages/home/home.tsx | 116 ++-- .../src/pages/library/library.tsx | 277 +++++----- .../artcraft-webapp/src/pages/login/login.tsx | 24 +- .../artcraft-webapp/src/pages/media/media.tsx | 4 +- .../src/pages/onboarding/onboarding.tsx | 61 +-- .../pages/pagedraw/base-image-selector.tsx | 24 +- .../src/pages/pagedraw/pagedraw.tsx | 4 +- .../pages/pagescene/demo-output-overlay.tsx | 50 +- .../pages/pagescene/other-scenes-overlay.tsx | 16 +- .../src/pages/pagescene/pagescene.tsx | 2 +- .../pagescene/splash/SceneSplashCard.tsx | 19 +- .../pagescene/splash/SceneSplashModal.tsx | 12 +- .../pages/pagescene/splash/example-scenes.ts | 8 +- .../src/pages/pricing/pricing.tsx | 46 +- .../src/pages/referrals/referrals.tsx | 51 +- .../src/pages/set-password/set-password.tsx | 34 +- .../src/pages/support/support.tsx | 10 +- .../VideoEditorProjectsLanding.tsx | 21 +- .../components/VideoProjectCard.tsx | 67 +-- .../src/pages/video-editor/video-editor.tsx | 6 +- .../src/pages/welcome/welcome.tsx | 67 ++- frontend/apps/artcraft-webapp/src/styles.css | 168 +++--- .../apps/artcraft-webapp/tailwind.config.js | 44 +- frontend/apps/artcraft-website-next/TUNER.md | 12 +- .../apps/artcraft-website-next/next.config.ts | 12 + .../artcraft-website-next/package-lock.json | 10 +- .../artcraft-website-next/src/app/globals.css | 24 +- .../artcraft-website-next/src/app/layout.tsx | 26 +- .../src/components/landing/hero-tunables.ts | 123 +++-- .../src/components/landing/hero-wall.tsx | 388 ++++++++++++++ .../src/components/landing/hero-wordmark.tsx | 497 ++++-------------- .../src/components/landing/hero.tsx | 7 +- .../src/components/landing/wordmark-sim.ts | 437 --------------- .../src/components/ui/button.tsx | 16 +- .../src/lib/landing-data.ts | 26 +- .../components/prototype-navbar.tsx | 22 +- .../genhub/src/components/ui/checkbox.tsx | 19 +- .../button-icon/src/lib/button-icon.tsx | 4 +- .../button-link/src/lib/button-link.tsx | 2 +- .../button/src/lib/ToggleButton.tsx | 12 +- .../libs/components/button/src/lib/button.tsx | 6 +- .../components/checkbox/src/lib/checkbox.tsx | 2 +- .../close-button/src/lib/close-button.tsx | 4 +- .../gallery-modal/src/lib/FolderColorRow.tsx | 12 +- .../src/lib/FolderNameDialog.tsx | 2 +- .../src/lib/GalleryDraggableItem.tsx | 31 +- .../src/lib/GalleryFolderChip.tsx | 18 +- .../src/lib/GalleryItemMenuItems.tsx | 43 +- .../gallery-modal/src/lib/gallery-modal.tsx | 44 +- .../src/lib/CopyPromptButton.tsx | 2 +- .../generation-list/src/lib/FailedCard.tsx | 8 +- .../generation-list/src/lib/FailedRow.tsx | 10 +- .../src/lib/GalleryAutoplayToggle.tsx | 4 +- .../generation-list/src/lib/GalleryCard.tsx | 26 +- .../generation-list/src/lib/GalleryRow.tsx | 33 +- .../src/lib/GallerySelectToggle.tsx | 4 +- .../src/lib/GalleryViewToggle.tsx | 4 +- .../generation-list/src/lib/PendingCard.tsx | 8 +- .../generation-list/src/lib/PendingRow.tsx | 4 +- .../libs/components/input/src/lib/input.tsx | 8 +- .../libs/components/modal/src/lib/modal.tsx | 10 +- .../src/lib/classy-model-selector.tsx | 12 +- .../moodboard/src/lib/grid/BoardGrid.tsx | 20 +- .../lib/comps/Timeline/TimelineClipRow.tsx | 35 +- .../components/popover/src/lib/popover.tsx | 81 ++- .../pricing-modal/src/lib/pricing-modal.tsx | 9 +- .../promptbox/src/lib/CharactersModal.tsx | 22 +- .../promptbox/src/lib/ImagePromptRow.tsx | 30 +- .../promptbox/src/lib/MentionChipMenu.tsx | 10 +- .../promptbox/src/lib/MentionTextarea.tsx | 10 +- .../promptbox/src/lib/PromptBox2D.tsx | 8 +- .../promptbox/src/lib/PromptBox3D.tsx | 8 +- .../promptbox/src/lib/PromptBoxAudio.tsx | 6 +- .../promptbox/src/lib/PromptBoxEdit.tsx | 14 +- .../src/lib/PromptBoxErrorBoundary.tsx | 2 +- .../promptbox/src/lib/PromptBoxImage.tsx | 6 +- .../promptbox/src/lib/PromptBoxVideo.tsx | 14 +- .../src/lib/PromptClearAllButton.tsx | 2 +- .../src/lib/common/AudioReferenceRow.tsx | 12 +- .../src/lib/common/AudioTuningPopover.tsx | 2 +- .../src/lib/common/SoundsSettingsPopover.tsx | 4 +- .../src/lib/common/StylePromptRow.tsx | 2 +- .../promptbox/src/lib/deck/DeckCard.tsx | 12 +- .../promptbox/src/lib/deck/KeyframeCards.tsx | 2 +- .../promptbox/src/lib/deck/ReferenceDeck.tsx | 8 +- .../src/lib/deck/usePromptBoxDrop.tsx | 4 +- .../libs/components/select/src/lib/select.tsx | 15 +- .../libs/components/switch/src/lib/switch.tsx | 15 +- .../tab-selector/src/lib/tab-selector.tsx | 6 +- .../components/toaster/src/lib/toaster.tsx | 3 + .../components/tooltip/src/lib/tooltip.tsx | 99 ++-- 156 files changed, 2512 insertions(+), 2753 deletions(-) create mode 100644 frontend/apps/artcraft-webapp/public/images/artcraft-icon-2.png create mode 100644 frontend/apps/artcraft-webapp/public/images/artcraft-logo-2.png create mode 100644 frontend/apps/artcraft-website-next/src/components/landing/hero-wall.tsx delete mode 100644 frontend/apps/artcraft-website-next/src/components/landing/wordmark-sim.ts diff --git a/frontend/apps/artcraft-dashboard/src/components/ui/checkbox.tsx b/frontend/apps/artcraft-dashboard/src/components/ui/checkbox.tsx index 37308a6862..064dcde810 100644 --- a/frontend/apps/artcraft-dashboard/src/components/ui/checkbox.tsx +++ b/frontend/apps/artcraft-dashboard/src/components/ui/checkbox.tsx @@ -1,8 +1,8 @@ -import * as React from "react" -import { CheckIcon, MinusIcon } from "lucide-react" -import { Checkbox as CheckboxPrimitive } from "radix-ui" +import * as React from "react"; +import { CheckIcon, MinusIcon } from "lucide-react"; +import { Checkbox as CheckboxPrimitive } from "radix-ui"; -import { cn } from "@/lib/utils" +import { cn } from "@/lib/utils"; function Checkbox({ className, @@ -14,8 +14,8 @@ function Checkbox({ data-slot="checkbox" checked={checked} className={cn( - "peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary dark:data-[state=indeterminate]:bg-primary", - className + "peer size-4 shrink-0 rounded-[3px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary dark:data-[state=indeterminate]:bg-primary", + className, )} {...props} > @@ -30,7 +30,7 @@ function Checkbox({ )} - ) + ); } -export { Checkbox } +export { Checkbox }; diff --git a/frontend/apps/artcraft-dashboard/src/pages/UserSignups.tsx b/frontend/apps/artcraft-dashboard/src/pages/UserSignups.tsx index 41ca1e7238..42924a13a0 100644 --- a/frontend/apps/artcraft-dashboard/src/pages/UserSignups.tsx +++ b/frontend/apps/artcraft-dashboard/src/pages/UserSignups.tsx @@ -59,7 +59,9 @@ export function UserSignups() { if (cancelledRef.current) return; if (resp.success && resp.data) { - setUsers((prev) => (append ? [...prev, ...resp.data!.users] : resp.data!.users)); + setUsers((prev) => + append ? [...prev, ...resp.data!.users] : resp.data!.users, + ); setNextCursor(resp.data.next_cursor); } else { setError(resp.errorMessage || "Failed to load users"); @@ -169,7 +171,9 @@ export function UserSignups() { onClick={handleRefresh} disabled={isLoading} > - + Refresh @@ -188,7 +192,8 @@ export function UserSignups() { All Users {!isLoading && ( - ({users.length}{nextCursor != null ? "+" : ""}) + ({users.length} + {nextCursor != null ? "+" : ""}) )} @@ -234,15 +239,33 @@ export function UserSignups() { {Array.from({ length: 10 }).map((_, i) => ( - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + ))} @@ -305,12 +328,21 @@ export function UserSignups() { - {user.display_name || —} + {user.display_name || ( + + — + + )} - {user.email_address} + + {user.email_address} + {!user.email_confirmed && ( - + Unconfirmed )} @@ -330,40 +362,65 @@ export function UserSignups() { {user.maybe_source} ) : ( - — + + — + )} {user.maybe_signup_method ? ( - + {user.maybe_signup_method} ) : ( - — + + — + )}
{user.is_temporary && ( - + Temp )} {user.is_without_password && ( - + No Password )} {!user.is_temporary && !user.is_without_password && ( - + Active )}
- diff --git a/frontend/apps/artcraft-webapp/src/components/auth/auth-showcase.tsx b/frontend/apps/artcraft-webapp/src/components/auth/auth-showcase.tsx index 9335fe28ed..6e17337a40 100644 --- a/frontend/apps/artcraft-webapp/src/components/auth/auth-showcase.tsx +++ b/frontend/apps/artcraft-webapp/src/components/auth/auth-showcase.tsx @@ -4,7 +4,7 @@ const FEATURED_VIDEO_URL = export const AuthShowcase = () => { return (
{/* Vimeo background embed (no controls) scaled to cover the pane. The @@ -30,7 +30,7 @@ export const AuthShowcase = () => { {/* Caption */}
-

+

One of the cheapest

diff --git a/frontend/apps/artcraft-webapp/src/components/auth/signup-form.tsx b/frontend/apps/artcraft-webapp/src/components/auth/signup-form.tsx index 23d93c8c58..94c0b2e606 100644 --- a/frontend/apps/artcraft-webapp/src/components/auth/signup-form.tsx +++ b/frontend/apps/artcraft-webapp/src/components/auth/signup-form.tsx @@ -107,7 +107,7 @@ export const SignupForm = ({ }} > {error && ( -
+
{error}
)} @@ -123,7 +123,7 @@ export const SignupForm = ({ className="space-y-4" > - -
-