diff --git a/apps/palette/web/src/components/projects/ColorBreakdown.tsx b/apps/palette/web/src/components/projects/ColorBreakdown.tsx index e4cb1d83..aa3fa1c3 100644 --- a/apps/palette/web/src/components/projects/ColorBreakdown.tsx +++ b/apps/palette/web/src/components/projects/ColorBreakdown.tsx @@ -2,6 +2,8 @@ import { Color } from '@dynamize/color-utilities'; import { clsx } from '@a-type/ui'; import { useBoundsCssVars } from '@a-type/ui/hooks'; +import { OnboardingTooltip } from '@biscuits/client'; +import { basicsOnboarding } from '@/onboarding/basics.js'; export interface ColorBreakdownProps { color: { r: number; g: number; b: number }; @@ -25,36 +27,42 @@ export function ColorBreakdown({ color, className }: ColorBreakdownProps) { const hsl = convertible.hsl; return ( -
- -
-
50 ? 'black' : 'white', - }} + +
+ +
+
50 ? 'black' : 'white', + }} + /> +
-
+
); } diff --git a/apps/palette/web/src/components/projects/ProjectCanvas.tsx b/apps/palette/web/src/components/projects/ProjectCanvas.tsx index e63306bf..b4af3c40 100644 --- a/apps/palette/web/src/components/projects/ProjectCanvas.tsx +++ b/apps/palette/web/src/components/projects/ProjectCanvas.tsx @@ -22,6 +22,8 @@ import { import { ref, useSnapshot } from 'valtio'; import { toolState } from './state.js'; import { preventDefault } from '@a-type/utils'; +import { OnboardingTooltip } from '@biscuits/client'; +import { basicsOnboarding } from '@/onboarding/basics.js'; export interface ProjectCanvasProps { project: Project; @@ -41,18 +43,24 @@ export function ProjectCanvas({ project, className }: ProjectCanvasProps) { }); return ( -
- - - {showBubbles && !activelyPicking && } - - -
+
+ + + {showBubbles && !activelyPicking && } + + +
+ ); } diff --git a/apps/palette/web/src/components/projects/ProjectPalette.tsx b/apps/palette/web/src/components/projects/ProjectPalette.tsx index c62320cc..2a1046f2 100644 --- a/apps/palette/web/src/components/projects/ProjectPalette.tsx +++ b/apps/palette/web/src/components/projects/ProjectPalette.tsx @@ -5,6 +5,8 @@ import { useColorSelection, useSort } from './hooks.js'; import { H3 } from '@a-type/ui/components/typography'; // @ts-ignore import { Color } from '@dynamize/color-utilities'; +import { OnboardingTooltip } from '@biscuits/client'; +import { basicsOnboarding } from '@/onboarding/basics.js'; export interface ProjectPaletteProps { project: Project; @@ -36,7 +38,13 @@ export function ProjectPalette({ project, className }: ProjectPaletteProps) { return (
-

Saved Colors

+ +

Saved Colors

+
{!sorted.length && ( Click the image to select colors diff --git a/apps/palette/web/src/components/projects/ProjectsList.tsx b/apps/palette/web/src/components/projects/ProjectsList.tsx index 52e58799..01eab76d 100644 --- a/apps/palette/web/src/components/projects/ProjectsList.tsx +++ b/apps/palette/web/src/components/projects/ProjectsList.tsx @@ -1,10 +1,10 @@ import { hooks } from '@/hooks.js'; import { Project } from '@palette.biscuits/verdant'; import { - CardRoot, - CardMain, - CardGrid, - CardImage, + CardRoot, + CardMain, + CardGrid, + CardImage, } from '@a-type/ui/components/card'; import { InfiniteLoadTrigger } from '@a-type/ui/components/infiniteLoadTrigger'; import { Link } from '@verdant-web/react-router'; @@ -12,35 +12,35 @@ import { Link } from '@verdant-web/react-router'; export interface ProjectsListProps {} export function ProjectsList({}: ProjectsListProps) { - const [items, { hasMore, loadMore }] = hooks.useAllProjectsInfinite({ - index: { - where: 'createdAt', - order: 'desc', - }, - pageSize: 20, - }); + const [items, { hasMore, loadMore }] = hooks.useAllProjectsInfinite({ + index: { + where: 'createdAt', + order: 'desc', + }, + pageSize: 20, + }); - return ( - <> - - {items.map((item, i) => ( - - ))} - - {hasMore && } - - ); + return ( + <> + + {items.map((item, i) => ( + + ))} + + {hasMore && } + + ); } function ProjectsListItem({ item }: { item: Project }) { - const { id, image } = hooks.useWatch(item); - hooks.useWatch(image); - return ( - - - - - {image.url && } - - ); + const { id, image } = hooks.useWatch(item); + hooks.useWatch(image); + return ( + + + + + {image.url && } + + ); } diff --git a/apps/palette/web/src/onboarding/basics.ts b/apps/palette/web/src/onboarding/basics.ts new file mode 100644 index 00000000..3a67483f --- /dev/null +++ b/apps/palette/web/src/onboarding/basics.ts @@ -0,0 +1,7 @@ +import { createOnboarding } from '@biscuits/client'; + +export const basicsOnboarding = createOnboarding( + 'basics', + ['intro', 'bubbles', 'color', 'palette'], + true, +); diff --git a/apps/palette/web/src/pages/HomePage.tsx b/apps/palette/web/src/pages/HomePage.tsx index bddbe283..dc547ecc 100644 --- a/apps/palette/web/src/pages/HomePage.tsx +++ b/apps/palette/web/src/pages/HomePage.tsx @@ -1,7 +1,8 @@ import { CreateProject } from '@/components/projects/CreateProject.jsx'; import { ProjectsList } from '@/components/projects/ProjectsList.jsx'; +import { basicsOnboarding } from '@/onboarding/basics.js'; import { PageContent, PageFixedArea } from '@a-type/ui/components/layouts'; -import { usePageTitle, UserMenu } from '@biscuits/client'; +import { OnboardingBanner, usePageTitle, UserMenu } from '@biscuits/client'; export interface HomePageProps {} @@ -15,6 +16,14 @@ export function HomePage({}: HomePageProps) {
+ + Palette is a painting tool which helps you analyze colors in reference + photos. Add an image to start a new project. +