From 7fa3c511ec163f02f6d707f096c8711f3feef80f Mon Sep 17 00:00:00 2001 From: Daniel R Farrell Date: Tue, 24 Sep 2024 17:04:30 -0400 Subject: [PATCH 1/5] Updated copy and styles - Added in icons to the right click menu - Adjusted editor toolbar copy - Added in open in Zed - Improved styles on some dropdowns --- app/bun.lockb | Bin 364555 -> 373860 bytes app/common/ide.ts | 6 +- app/package.json | 1 + app/src/assets/zed.svg | 10 ++ app/src/components/ui/command.tsx | 143 ++++++++++++++++++ app/src/lib/editor/styles/index.ts | 2 +- app/src/lib/editor/styles/models.ts | 2 +- .../routes/editor/RightClickMenu/index.tsx | 20 ++- .../routes/editor/TopBar/OpenCode/index.tsx | 17 ++- .../editor/TopBar/ProjectSelect/index.tsx | 6 +- .../projects/ProjectsTab/Create/Load/Name.tsx | 6 +- .../Select/ProjectSettingsButton.tsx | 2 +- app/src/routes/projects/SettingsTab/index.tsx | 17 ++- app/src/routes/projects/TopBar/index.tsx | 7 +- 14 files changed, 224 insertions(+), 15 deletions(-) create mode 100644 app/src/assets/zed.svg create mode 100644 app/src/components/ui/command.tsx diff --git a/app/bun.lockb b/app/bun.lockb index 44af83436c4f9755c391f2e20614f3de66f02274..33ea7bacf6ec9596e33aaf42d2cc29909135b201 100755 GIT binary patch delta 61210 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

;yyHThl;>;zzH~;PIbD63Ti<-)o1GJ$zx}$$ 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 U+7KE_St3P*NwRXUiye3TAC}!*I{*Lx delta 56768 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 pMzyRt{=g#pfe($zx0d + + + + + + + + + diff --git a/app/src/components/ui/command.tsx b/app/src/components/ui/command.tsx new file mode 100644 index 000000000..83d8b8515 --- /dev/null +++ b/app/src/components/ui/command.tsx @@ -0,0 +1,143 @@ +import * as React from 'react'; +import { type DialogProps } from '@radix-ui/react-dialog'; +import { MagnifyingGlassIcon } from '@radix-ui/react-icons'; +import { Command as CommandPrimitive } from 'cmdk'; + +import { cn } from '@/lib/utils'; +import { Dialog, DialogContent } from '@/components/ui/dialog'; + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Command.displayName = CommandPrimitive.displayName; + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( +

+ + + {children} + + + + ); +}; + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)); + +CommandInput.displayName = CommandPrimitive.Input.displayName; + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandList.displayName = CommandPrimitive.List.displayName; + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)); + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandGroup.displayName = CommandPrimitive.Group.displayName; + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandItem.displayName = CommandPrimitive.Item.displayName; + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return ( + + ); +}; +CommandShortcut.displayName = 'CommandShortcut'; + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +}; diff --git a/app/src/lib/editor/styles/index.ts b/app/src/lib/editor/styles/index.ts index f92d89e04..fd56b78dd 100644 --- a/app/src/lib/editor/styles/index.ts +++ b/app/src/lib/editor/styles/index.ts @@ -282,7 +282,7 @@ export const ELEMENT_STYLES: ElementStyle[] = [ new ElementStyleImpl( 'backgroundColor', '', - 'Fill', + 'Background', ElementStyleType.Color, ElementStyleGroup.Style, ), diff --git a/app/src/lib/editor/styles/models.ts b/app/src/lib/editor/styles/models.ts index b90370a55..f525ebba3 100644 --- a/app/src/lib/editor/styles/models.ts +++ b/app/src/lib/editor/styles/models.ts @@ -23,7 +23,7 @@ export enum ElementStyleType { export enum ElementStyleGroup { Size = 'Size', Position = 'Position & Dimensions', - Layout = 'Layout', + Layout = 'Flexbox & Layout', Style = 'Styles', Text = 'Text', Effects = 'Effects', diff --git a/app/src/routes/editor/RightClickMenu/index.tsx b/app/src/routes/editor/RightClickMenu/index.tsx index 0309f991c..92157332d 100644 --- a/app/src/routes/editor/RightClickMenu/index.tsx +++ b/app/src/routes/editor/RightClickMenu/index.tsx @@ -11,6 +11,13 @@ import { useEffect, useState } from 'react'; import { Hotkey } from '/common/hotkeys'; import { WebViewElement } from '/common/models/element'; import { TemplateNode } from '/common/models/element/templateNode'; +import { + Component1Icon, + ComponentInstanceIcon, + CodeIcon, + ReloadIcon, + ExternalLinkIcon, +} from '@radix-ui/react-icons'; interface RightClickMenuProps { children: React.ReactNode; @@ -21,7 +28,9 @@ interface MenuItem { action: () => void; hotkey?: Hotkey; children?: MenuItem[]; + icon: React.ReactNode; // Add this line } + export const RightClickMenu = observer(({ children }: RightClickMenuProps) => { const editorEngine = useEditorEngine(); const [menuItems, setMenuItems] = useState([]); @@ -32,12 +41,14 @@ export const RightClickMenu = observer(({ children }: RightClickMenuProps) => { action: () => { editorEngine.inspect(); }, + icon: , // Add this line }, { label: 'Refresh layers', action: () => { editorEngine.refreshLayers(); }, + icon: , // Add this line }, ]; @@ -58,10 +69,16 @@ export const RightClickMenu = observer(({ children }: RightClickMenuProps) => { instance && { label: 'View instance code', action: () => viewSource(instance), + icon: , }, root && { label: `View ${instance ? 'component' : 'element'} code`, action: () => viewSource(root), + icon: instance ? ( + + ) : ( + + ), }, ...DEFAULT_MENU_ITEMS, ].filter(Boolean) as MenuItem[]; @@ -79,7 +96,8 @@ export const RightClickMenu = observer(({ children }: RightClickMenuProps) => { {menuItems.map((item) => ( - + + {item.icon} {item.label} {item.hotkey && {item.hotkey.readableCommand}} diff --git a/app/src/routes/editor/TopBar/OpenCode/index.tsx b/app/src/routes/editor/TopBar/OpenCode/index.tsx index 0866792ff..73acf3091 100644 --- a/app/src/routes/editor/TopBar/OpenCode/index.tsx +++ b/app/src/routes/editor/TopBar/OpenCode/index.tsx @@ -1,5 +1,6 @@ import CursorIcon from '@/assets/cursor.svg'; import VsCodeIcon from '@/assets/vscode.svg'; +import ZedIcon from '@/assets/zed.svg'; import { useEditorEngine } from '@/components/Context'; import { DropdownMenu, @@ -73,7 +74,13 @@ const OpenCode = observer(() => { > {`${ide} @@ -131,7 +138,13 @@ const OpenCode = observer(() => { > {`${item} diff --git a/app/src/routes/editor/TopBar/ProjectSelect/index.tsx b/app/src/routes/editor/TopBar/ProjectSelect/index.tsx index 06f74c27a..f550a72e4 100644 --- a/app/src/routes/editor/TopBar/ProjectSelect/index.tsx +++ b/app/src/routes/editor/TopBar/ProjectSelect/index.tsx @@ -30,7 +30,7 @@ const ProjectBreadcrumb = observer(() => { } return ( -
+
- + Return to project selection -

{'/'}

+

{'/'}

{projectsManager.project?.name}

diff --git a/app/src/routes/projects/ProjectsTab/Create/Load/Name.tsx b/app/src/routes/projects/ProjectsTab/Create/Load/Name.tsx index 37a898e75..d5d1b8d50 100644 --- a/app/src/routes/projects/ProjectsTab/Create/Load/Name.tsx +++ b/app/src/routes/projects/ProjectsTab/Create/Load/Name.tsx @@ -34,7 +34,11 @@ export const LoadNameProject = ({ {'Let’s name your project'} - {'You can always change this later'} + + { + "This is your Onlook project name. Don't worry, This will not rename your actual folder." + } +
diff --git a/app/src/routes/projects/ProjectsTab/Select/ProjectSettingsButton.tsx b/app/src/routes/projects/ProjectsTab/Select/ProjectSettingsButton.tsx index fee461d19..295da81b4 100644 --- a/app/src/routes/projects/ProjectsTab/Select/ProjectSettingsButton.tsx +++ b/app/src/routes/projects/ProjectsTab/Select/ProjectSettingsButton.tsx @@ -46,7 +46,7 @@ export default function ProjectSettingsButton({ project }: { project: Project }) Open Project Folder diff --git a/app/src/routes/projects/SettingsTab/index.tsx b/app/src/routes/projects/SettingsTab/index.tsx index 314590198..eb94b23fa 100644 --- a/app/src/routes/projects/SettingsTab/index.tsx +++ b/app/src/routes/projects/SettingsTab/index.tsx @@ -1,5 +1,6 @@ import CursorIcon from '@/assets/cursor.svg'; import VsCodeIcon from '@/assets/vscode.svg'; +import ZedIcon from '@/assets/zed.svg'; import { Button } from '@/components/ui/button'; import { DropdownMenu, @@ -56,7 +57,13 @@ export default function SettingsTab() { - Sign out + + + Sign out +
From 851fd99dc61bebcd65c9b8fce7a713ef4c03580f Mon Sep 17 00:00:00 2001 From: Daniel R Farrell Date: Tue, 24 Sep 2024 18:30:16 -0400 Subject: [PATCH 2/5] Improved hotkey styling in tooltips Also tried to detect operating system but feel like maybe my implementation isn't the best. --- app/common/hotkeys.ts | 16 ++++++++++++++-- app/src/components/ui/hotkeys-label.tsx | 10 ++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/common/hotkeys.ts b/app/common/hotkeys.ts index 15a3f69f5..b6275dff2 100644 --- a/app/common/hotkeys.ts +++ b/app/common/hotkeys.ts @@ -22,10 +22,22 @@ export class Hotkey { } get readableCommand() { + const isMac = process.platform === 'darwin'; return this.command - .replace('meta', '⌘') + .replace('mod', isMac ? '⌘' : 'Ctrl') .split('+') - .map((value) => capitalizeFirstLetter(value)) + .map((value) => { + if (value === 'shift') { + return '⇧'; + } + if (value === 'alt') { + return isMac ? '⌥' : 'Alt'; + } + if (value === 'ctrl') { + return isMac ? '⌃' : 'Ctrl'; + } + return capitalizeFirstLetter(value); + }) .join(' '); } } diff --git a/app/src/components/ui/hotkeys-label.tsx b/app/src/components/ui/hotkeys-label.tsx index 969025093..c15d8273c 100644 --- a/app/src/components/ui/hotkeys-label.tsx +++ b/app/src/components/ui/hotkeys-label.tsx @@ -3,9 +3,15 @@ import { Kbd } from './kbd'; export function HotKeyLabel({ hotkey }: { hotkey: Hotkey }) { return ( - + {hotkey.description} - {hotkey.readableCommand} + + + + ); } From af108eef29eb2e99be4c6b48a76e28ed2c4b5863 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 24 Sep 2024 19:15:08 -0400 Subject: [PATCH 3/5] Clean up IDE icons --- app/common/ide.ts | 11 +++++--- .../routes/editor/RightClickMenu/index.tsx | 20 +++++++-------- .../routes/editor/TopBar/OpenCode/index.tsx | 25 ++----------------- app/src/routes/projects/SettingsTab/index.tsx | 25 ++----------------- 4 files changed, 22 insertions(+), 59 deletions(-) diff --git a/app/common/ide.ts b/app/common/ide.ts index 2edaceb89..c429c361c 100644 --- a/app/common/ide.ts +++ b/app/common/ide.ts @@ -1,3 +1,7 @@ +import CursorIcon from '../src/assets/cursor.svg'; +import VsCodeIcon from '../src/assets/vscode.svg'; +import ZedIcon from '../src/assets/zed.svg'; + export enum IdeType { VS_CODE = 'VSCode', CURSOR = 'Cursor', @@ -5,14 +9,15 @@ export enum IdeType { } export class IDE { - static readonly VS_CODE = new IDE('VSCode', IdeType.VS_CODE, 'vscode'); - static readonly CURSOR = new IDE('Cursor', IdeType.CURSOR, 'cursor'); - static readonly ZED = new IDE('Zed', IdeType.ZED, 'zed'); + static readonly VS_CODE = new IDE('VSCode', IdeType.VS_CODE, 'vscode', VsCodeIcon); + static readonly CURSOR = new IDE('Cursor', IdeType.CURSOR, 'cursor', CursorIcon); + static readonly ZED = new IDE('Zed', IdeType.ZED, 'zed', ZedIcon); private constructor( public readonly displayName: string, public readonly type: IdeType, public readonly command: string, + public readonly icon: string, ) {} toString() { diff --git a/app/src/routes/editor/RightClickMenu/index.tsx b/app/src/routes/editor/RightClickMenu/index.tsx index 92157332d..c1162c903 100644 --- a/app/src/routes/editor/RightClickMenu/index.tsx +++ b/app/src/routes/editor/RightClickMenu/index.tsx @@ -6,18 +6,18 @@ import { ContextMenuTrigger, } from '@/components/ui/context-menu'; import { Kbd } from '@/components/ui/kbd'; -import { observer } from 'mobx-react-lite'; -import { useEffect, useState } from 'react'; -import { Hotkey } from '/common/hotkeys'; -import { WebViewElement } from '/common/models/element'; -import { TemplateNode } from '/common/models/element/templateNode'; import { + CodeIcon, Component1Icon, ComponentInstanceIcon, - CodeIcon, - ReloadIcon, ExternalLinkIcon, + ReloadIcon, } from '@radix-ui/react-icons'; +import { observer } from 'mobx-react-lite'; +import { useEffect, useState } from 'react'; +import { Hotkey } from '/common/hotkeys'; +import { WebViewElement } from '/common/models/element'; +import { TemplateNode } from '/common/models/element/templateNode'; interface RightClickMenuProps { children: React.ReactNode; @@ -28,7 +28,7 @@ interface MenuItem { action: () => void; hotkey?: Hotkey; children?: MenuItem[]; - icon: React.ReactNode; // Add this line + icon: React.ReactNode; } export const RightClickMenu = observer(({ children }: RightClickMenuProps) => { @@ -41,14 +41,14 @@ export const RightClickMenu = observer(({ children }: RightClickMenuProps) => { action: () => { editorEngine.inspect(); }, - icon: , // Add this line + icon: , }, { label: 'Refresh layers', action: () => { editorEngine.refreshLayers(); }, - icon: , // Add this line + icon: , }, ]; diff --git a/app/src/routes/editor/TopBar/OpenCode/index.tsx b/app/src/routes/editor/TopBar/OpenCode/index.tsx index 73acf3091..b565b1982 100644 --- a/app/src/routes/editor/TopBar/OpenCode/index.tsx +++ b/app/src/routes/editor/TopBar/OpenCode/index.tsx @@ -1,6 +1,3 @@ -import CursorIcon from '@/assets/cursor.svg'; -import VsCodeIcon from '@/assets/vscode.svg'; -import ZedIcon from '@/assets/zed.svg'; import { useEditorEngine } from '@/components/Context'; import { DropdownMenu, @@ -73,16 +70,7 @@ const OpenCode = observer(() => { onClick={() => viewSource(instance || root)} > - {`${ide} + {`${ide} {`Open in ${ide}`} @@ -137,16 +125,7 @@ const OpenCode = observer(() => { }} > - {`${item} + {`${item} {item.displayName} {ide === item && } diff --git a/app/src/routes/projects/SettingsTab/index.tsx b/app/src/routes/projects/SettingsTab/index.tsx index eb94b23fa..8074c1984 100644 --- a/app/src/routes/projects/SettingsTab/index.tsx +++ b/app/src/routes/projects/SettingsTab/index.tsx @@ -1,6 +1,3 @@ -import CursorIcon from '@/assets/cursor.svg'; -import VsCodeIcon from '@/assets/vscode.svg'; -import ZedIcon from '@/assets/zed.svg'; import { Button } from '@/components/ui/button'; import { DropdownMenu, @@ -56,16 +53,7 @@ export default function SettingsTab() {
diff --git a/app/src/routes/editor/TopBar/PublishModal/index.tsx b/app/src/routes/editor/TopBar/PublishModal/index.tsx index 144fddb83..b77b7d120 100644 --- a/app/src/routes/editor/TopBar/PublishModal/index.tsx +++ b/app/src/routes/editor/TopBar/PublishModal/index.tsx @@ -123,7 +123,7 @@ const PublishModal = observer(() => { className="truncate justify-start" onClick={() => viewSource(item.path)} > - {item.path} {' '} + {item.path}

- By signing up, you agree to our{' '} + {'By signing up, you agree to our '} {' '} - and{' '} + {'Privacy Policy'} + + {' and '}