From ba4be8aa6bbe81e1db86f79d0007d4b884b730da Mon Sep 17 00:00:00 2001 From: BFlat Date: Mon, 28 Sep 2026 11:54:04 +0700 Subject: [PATCH] Match desktop app styling to the webapp Bring the desktop app's UI in line with the webapp's brutalist design: flat near-black surfaces, white/15 hairline borders, square panels and modals, 3px corners on controls, white primary buttons, mono uppercase labels, and Archivo display headings. - Retoken the default theme, fonts, and global CSS to the webapp values - Port the webapp's restyled shared components (buttons, modals, popovers, tooltips, inputs, select, switch, model selector) - Restyle prompt boxes, galleries, lightbox, and the 3D scene editor - Render the webapp pricing table inside the desktop pricing modal (new @storyteller/ui-pricing-table package), keeping the Tauri purchase and plan-management flow - Restyle settings, login, credits, and provider modals - Restyle the top bar, task queue, create pages, and apps page --- frontend/apps/artcraft/app/index.html | 2 +- .../GlobalFileDropHandler.tsx | 10 +- .../experiences/ImageTo3DExperience.tsx | 86 ++-- .../generation-feed/CreateEmptyState.tsx | 56 +++ .../DesktopCreatePageShell.tsx | 41 +- .../DesktopGenerationGallery.tsx | 8 +- .../src/components/media/UploadEntryCard.tsx | 43 +- .../components/reusable/ConfirmationModal.tsx | 14 +- .../app/src/components/reusable/CostModal.tsx | 16 +- .../UploadModalMedia/UploadFilesMedia.tsx | 2 +- .../UploadModalMedia/UploadImageMedia.tsx | 2 +- .../UploadImageMediaModal.tsx | 2 +- .../UploadModalMedia/UploadModalMedia.tsx | 2 +- .../src/components/signaled/ErrorDialog.tsx | 4 +- .../signaled/TopBar/AppsQuickMenu.tsx | 159 +++--- .../signaled/TopBar/AuthButtons.tsx | 8 +- .../signaled/TopBar/ProfileDropdown.tsx | 17 +- .../signaled/TopBar/SceneTitleInput.tsx | 39 +- .../components/signaled/TopBar/TaskQueue.tsx | 74 +-- .../src/components/signaled/TopBar/TopBar.tsx | 162 +++--- .../signaled/TopBar/UploadImagesButton.tsx | 7 +- .../apps/artcraft/app/src/config/appMenu.tsx | 69 ++- .../app/src/pages/PageAngles/Angles.tsx | 28 +- .../app/src/pages/PageApps/AppsIndexPage.tsx | 80 ++- .../app/src/pages/PageAudio/CreateAudio.tsx | 2 - .../PageBackgroundChange.tsx | 48 +- .../app/src/pages/PageImage/Background.css | 17 - .../src/pages/PageImage/BackgroundGallery.tsx | 16 - .../app/src/pages/PageImage/TextToImage.tsx | 2 - .../PageImageTo3DObject/ImageTo3DObject.tsx | 1 - .../PageImageTo3DWorld/ImageTo3DWorld.tsx | 1 - .../ImageWatermarkRemover.tsx | 20 +- .../PageRemoveBackground/RemoveBackground.tsx | 34 +- .../src/pages/PageStoryboard/Storyboard.tsx | 98 ++-- .../app/src/pages/PageVideo/Background.css | 17 - .../src/pages/PageVideo/BackgroundGallery.tsx | 16 - .../app/src/pages/PageVideo/ImageToVideo.tsx | 2 - .../VideoFrameExtractor.tsx | 76 +-- .../VideoWatermarkRemover.tsx | 32 +- frontend/apps/artcraft/app/src/root.tsx | 2 +- .../apps/artcraft/app/src/styles/base.css | 237 +++++++-- .../apps/artcraft/app/src/styles/tailwind.css | 31 +- frontend/apps/artcraft/tailwind.config.ts | 38 ++ .../libs/components/badge/src/lib/badge.tsx | 2 +- .../src/lib/button-dropdown.tsx | 14 +- .../src/lib/button-icon-select.tsx | 8 +- .../button-icon/src/lib/button-icon.tsx | 4 +- .../button/src/lib/GenerateButton.tsx | 4 +- .../button/src/lib/ToggleButton.tsx | 15 +- .../libs/components/button/src/lib/button.tsx | 19 +- .../src/lib/camera-settings-modal.tsx | 28 +- .../components/checkbox/src/lib/checkbox.tsx | 8 +- .../close-button/src/lib/close-button.tsx | 4 +- .../src/lib/drag-and-drop-zone.tsx | 10 +- .../gallery-modal/src/lib/DragGhost.tsx | 4 +- .../gallery-modal/src/lib/FolderColorRow.tsx | 12 +- .../src/lib/FolderNameDialog.tsx | 9 +- .../src/lib/GalleryDraggableItem.tsx | 43 +- .../src/lib/GalleryFolderChip.tsx | 4 +- .../src/lib/GalleryItemMenuItems.tsx | 45 +- .../gallery-modal/src/lib/gallery-modal.tsx | 72 +-- .../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 | 29 +- .../generation-list/src/lib/GalleryRow.tsx | 34 +- .../src/lib/GallerySelectToggle.tsx | 4 +- .../src/lib/GalleryViewToggle.tsx | 4 +- .../generation-list/src/lib/PendingCard.tsx | 8 +- .../generation-list/src/lib/PendingRow.tsx | 4 +- .../components/gravatar/src/lib/gravatar.tsx | 2 +- .../help-menu/src/lib/help-menu.tsx | 30 +- .../components/input/src/lib/InputVector.tsx | 4 +- .../components/input/src/lib/NumberInput.tsx | 10 +- .../libs/components/input/src/lib/input.tsx | 16 +- .../src/lib/cheatsheet/Cheatsheet.tsx | 10 +- .../lib/components/KeybindCaptureInput.tsx | 2 +- .../src/lib/settings/KeybindsSettings.tsx | 52 +- .../libs/components/label/src/lib/label.tsx | 7 +- .../lightbox-modal/src/lib/lightbox-modal.tsx | 134 +++-- .../src/lib/tags/TagChipInput.tsx | 9 +- .../src/lib/tags/TagsSection.tsx | 2 +- .../list-dropdown/src/lib/ListDropdown.tsx | 13 +- .../components/loading/src/lib/LoadingBar.tsx | 4 +- .../src/lib/DesktopLoginBridge.tsx | 18 +- .../src/lib/LoginSuccess.module.css | 62 +-- .../login-modal/src/lib/LoginSuccess.tsx | 3 +- .../login-modal/src/lib/artcraft-signup.tsx | 27 +- .../login-modal/src/lib/login-modal.tsx | 144 +++--- .../src/lib/menu-icon-selector.tsx | 11 +- .../libs/components/modal/src/lib/modal.tsx | 15 +- .../src/lib/classy-model-selector.tsx | 18 +- .../moodboard/src/lib/grid/BoardGrid.tsx | 20 +- .../pagescene/src/lib/Stage3DBody.tsx | 8 +- .../lib/comps/AnonHintChip/AnonHintChip.tsx | 2 +- .../comps/AspectRatioMenu/AspectRatioMenu.tsx | 3 +- .../lib/comps/AssetMenu/AnimationsModal.tsx | 16 +- .../src/lib/comps/AssetMenu/AssetModal.tsx | 20 +- .../comps/AssetMenu/shared/ItemElement.tsx | 2 +- .../CameraStatusPill/CameraStatusPill.tsx | 24 +- .../comps/CompletionModal/CompletionModal.tsx | 10 +- .../ControlPanelSceneObject.tsx | 12 +- .../src/lib/comps/Controls3D/Controls3D.tsx | 19 +- .../ControlsTopButtons/ControlsTopButtons.tsx | 10 +- .../comps/ExitCameraView/ExitCameraView.tsx | 2 +- .../FocalLengthDisplay/FocalLengthDisplay.tsx | 2 +- .../src/lib/comps/Outliner/Outliner.tsx | 19 +- .../src/lib/comps/PoseModeSelector.tsx | 6 +- .../PrecisionSelector/PrecisionSelector.tsx | 2 +- .../PreviewEngineCamera.tsx | 4 +- .../pagescene/src/lib/comps/PreviewImages.tsx | 4 +- .../comps/RecordControls/RecordControls.tsx | 4 +- .../lib/comps/SceneModePill/SceneModePill.tsx | 6 +- .../src/lib/comps/Timeline/MotionPopover.tsx | 6 +- .../src/lib/comps/Timeline/TimelineBar.tsx | 12 +- .../lib/comps/Timeline/TimelineClipRow.tsx | 39 +- .../src/lib/comps/Timeline/TimelineEditor.tsx | 19 +- .../lib/comps/Timeline/TimelineTrackRow.tsx | 4 +- .../pagescene/src/lib/comps/toolbarStyles.ts | 2 + .../components/popover/src/lib/popover.tsx | 144 +++--- .../src/lib/cost-breakdown-modal.tsx | 28 +- .../pricing-modal/src/lib/credits-modal.tsx | 40 +- .../pricing-modal/src/lib/pricing-modal.tsx | 476 +++++------------- .../components/pricing-modal/tsconfig.json | 3 + .../pricing-modal/tsconfig.lib.json | 3 + .../components/pricing-table/package.json | 21 + .../components/pricing-table/src/index.ts | 8 + .../src/lib/pricing-promo-banner.tsx | 41 ++ .../pricing-table/src/lib/pricing-table.tsx | 128 +++++ .../pricing-table/src/lib/promo-discounts.ts | 29 ++ .../src/lib/website-pricing-table.css | 55 ++ .../src/lib/website-pricing-table.tsx | 408 +++++++++++++++ .../components/pricing-table/tsconfig.json | 25 + .../pricing-table/tsconfig.lib.json | 59 +++ .../pricing-table/tsconfig.spec.json | 34 ++ .../components/pricing-table/vite.config.ts | 50 ++ .../promptbox/src/lib/CharactersModal.tsx | 68 +-- .../promptbox/src/lib/ImagePromptRow.tsx | 30 +- .../promptbox/src/lib/MentionChipMenu.tsx | 10 +- .../promptbox/src/lib/MentionTextarea.tsx | 10 +- .../promptbox/src/lib/PromptBox2D.tsx | 30 +- .../promptbox/src/lib/PromptBox3D.tsx | 24 +- .../promptbox/src/lib/PromptBoxAudio.tsx | 26 +- .../promptbox/src/lib/PromptBoxEdit.tsx | 38 +- .../src/lib/PromptBoxErrorBoundary.tsx | 2 +- .../promptbox/src/lib/PromptBoxImage.tsx | 30 +- .../promptbox/src/lib/PromptBoxVideo.tsx | 47 +- .../src/lib/PromptClearAllButton.tsx | 4 +- .../src/lib/PromptFullscreenButton.tsx | 4 +- .../src/lib/PromptFullscreenModal.tsx | 1 - .../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 | 6 +- .../others/GenericProviderBillingBlock.tsx | 12 +- .../src/lib/provider-billing-modal.tsx | 7 +- .../src/lib/provider-setup-modal.tsx | 39 +- .../libs/components/select/src/lib/select.tsx | 21 +- .../src/lib/panes/AboutSettingsPane.tsx | 17 +- .../AccountSettings/AccountSettingsPane.tsx | 4 +- .../AccountSettings/ArtcraftAccountBlock.tsx | 18 +- .../AccountSettings/GrokAccountBlock.tsx | 18 +- .../MidjourneyAccountBlock.tsx | 18 +- .../src/lib/panes/AppearanceSettingsPane.tsx | 101 ++-- .../src/lib/panes/AudioSettingsPane.tsx | 6 +- .../src/lib/panes/BillingSettingsPane.tsx | 57 ++- .../src/lib/panes/DownloadsSettingsPane.tsx | 14 +- .../panes/ProviderPrioritySettingsPane.tsx | 18 +- .../settings-modal/src/lib/settings-modal.tsx | 22 +- .../libs/components/switch/src/lib/switch.tsx | 12 +- .../tab-selector/src/lib/tab-selector.tsx | 8 +- .../components/toaster/src/lib/toaster.tsx | 3 + .../components/tooltip/src/lib/tooltip.tsx | 99 ++-- .../src/lib/UploadModal3D/UploadFiles3D.tsx | 14 +- .../lib/UploadModalImage/UploadFilesImage.tsx | 10 +- .../lib/UploadModalSplat/UploadFilesSplat.tsx | 10 +- frontend/package-lock.json | 8 + frontend/tsconfig.base.json | 3 + frontend/tsconfig.json | 3 + 184 files changed, 3100 insertions(+), 2269 deletions(-) create mode 100644 frontend/apps/artcraft/app/src/components/generation-feed/CreateEmptyState.tsx delete mode 100644 frontend/apps/artcraft/app/src/pages/PageImage/Background.css delete mode 100644 frontend/apps/artcraft/app/src/pages/PageImage/BackgroundGallery.tsx delete mode 100644 frontend/apps/artcraft/app/src/pages/PageVideo/Background.css delete mode 100644 frontend/apps/artcraft/app/src/pages/PageVideo/BackgroundGallery.tsx create mode 100644 frontend/libs/components/pagescene/src/lib/comps/toolbarStyles.ts create mode 100644 frontend/libs/components/pricing-table/package.json create mode 100644 frontend/libs/components/pricing-table/src/index.ts create mode 100644 frontend/libs/components/pricing-table/src/lib/pricing-promo-banner.tsx create mode 100644 frontend/libs/components/pricing-table/src/lib/pricing-table.tsx create mode 100644 frontend/libs/components/pricing-table/src/lib/promo-discounts.ts create mode 100644 frontend/libs/components/pricing-table/src/lib/website-pricing-table.css create mode 100644 frontend/libs/components/pricing-table/src/lib/website-pricing-table.tsx create mode 100644 frontend/libs/components/pricing-table/tsconfig.json create mode 100644 frontend/libs/components/pricing-table/tsconfig.lib.json create mode 100644 frontend/libs/components/pricing-table/tsconfig.spec.json create mode 100644 frontend/libs/components/pricing-table/vite.config.ts diff --git a/frontend/apps/artcraft/app/index.html b/frontend/apps/artcraft/app/index.html index 166218c75f..6768a74d4c 100644 --- a/frontend/apps/artcraft/app/index.html +++ b/frontend/apps/artcraft/app/index.html @@ -31,7 +31,7 @@ - diff --git a/frontend/apps/artcraft/app/src/components/GlobalFileDropHandler/GlobalFileDropHandler.tsx b/frontend/apps/artcraft/app/src/components/GlobalFileDropHandler/GlobalFileDropHandler.tsx index 231bf158ba..368189837e 100644 --- a/frontend/apps/artcraft/app/src/components/GlobalFileDropHandler/GlobalFileDropHandler.tsx +++ b/frontend/apps/artcraft/app/src/components/GlobalFileDropHandler/GlobalFileDropHandler.tsx @@ -191,11 +191,11 @@ export function GlobalFileDropHandler() { return ( <> {isDragging && modalType === null && ( -
-
- -
Drop to Upload
-
GLB, PNG, JPG, JPEG, SPZ
+
+
+ +
Drop to Upload
+
GLB, PNG, JPG, JPEG, SPZ
)} diff --git a/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx b/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx index eb4f3d6420..090898616b 100644 --- a/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx +++ b/frontend/apps/artcraft/app/src/components/experiences/ImageTo3DExperience.tsx @@ -36,6 +36,7 @@ import { useCostBreakdownModalStore, } from "@storyteller/ui-pricing-modal"; import { HelpMenuButton } from "@storyteller/ui-help-menu"; +import { CreateEmptyState } from "~/components/generation-feed/CreateEmptyState"; type Mode = "image" | "text"; type Variant = "object" | "world"; @@ -549,9 +550,9 @@ export const ImageTo3DExperience = ({ role="button" tabIndex={0} className={twMerge( - "flex flex-col items-center justify-center rounded-2xl border-[3px] border-dashed border-primary/40 bg-primary/5 text-center text-xs transition-all hover:border-primary hover:bg-primary/10 focus:outline-none focus:ring-2 focus:ring-primary/40", + "flex flex-col items-center justify-center border border-dashed border-white/20 bg-white/[0.015] text-center text-xs transition-all hover:border-white/40 hover:bg-white/5 focus:border-white/60 focus:outline-none", hasResults ? "aspect-square w-24" : "aspect-square w-48", - dragActive && "border-primary bg-primary/10", + dragActive && "border-white/60 bg-white/5", )} onDragEnter={(event) => { event.preventDefault(); @@ -581,11 +582,11 @@ export const ImageTo3DExperience = ({ {!hasResults && ( - + Add Image )} @@ -598,7 +599,7 @@ export const ImageTo3DExperience = ({ {uploadedPreview ? (
!isUploading && fileInputRef.current?.click()} @@ -613,13 +614,13 @@ export const ImageTo3DExperience = ({ /> {isUploading && (
-
+
)} {!isUploading && (
@@ -740,7 +741,7 @@ export const ImageTo3DExperience = ({