diff --git a/src/common/base/menu.ts b/src/common/base/menu.ts index 6749243..495eb80 100644 --- a/src/common/base/menu.ts +++ b/src/common/base/menu.ts @@ -14,6 +14,7 @@ export interface MenuItemCommon> { readonly label?: string; readonly role?: MenuItemRole; readonly type?: MenuItemType; + readonly checked?: boolean; readonly icon?: string; readonly enabled?: boolean; readonly submenu?: ReadonlyArray; diff --git a/src/renderer/application/useCases/appMenu/initAppMenu.ts b/src/renderer/application/useCases/appMenu/initAppMenu.ts index 538ec35..c284908 100644 --- a/src/renderer/application/useCases/appMenu/initAppMenu.ts +++ b/src/renderer/application/useCases/appMenu/initAppMenu.ts @@ -14,6 +14,10 @@ import { OpenAboutUseCase } from '@/application/useCases/about/openAbout'; import { ShellProvider } from '@/application/interfaces/shellProvider'; import { OpenProjectManagerUseCase } from '@/application/useCases/projectManager/openProjectManager'; import { OpenAppManagerUseCase } from '@/application/useCases/appManager/openAppManager'; +import { EditTogglePos, ProjectSwitcherPos } from '@/base/state/ui'; +import { ToggleTopBarUseCase } from '@/application/useCases/toggleTopBar'; +import { SetProjectSwitcherPositionUseCase } from '@/application/useCases/projectSwitcher/setProjectSwitcherPosition'; +import { SetEditTogglePositionUseCase } from '@/application/useCases/setEditTogglePosition'; const urlDownload = 'https://freeter.io/v2/download'; const urlTwitter = 'https://twitter.com/FreeterApp'; @@ -28,6 +32,9 @@ type Deps = { shellProvider: ShellProvider; toggleEditModeUseCase: ToggleEditModeUseCase; toggleMenuBarUseCase: ToggleMenuBarUseCase; + toggleTopBarUseCase: ToggleTopBarUseCase; + setProjectSwitcherPositionUseCase: SetProjectSwitcherPositionUseCase; + setEditTogglePositionUseCase: SetEditTogglePositionUseCase; openApplicationSettingsUseCase: OpenApplicationSettingsUseCase; openAboutUseCase: OpenAboutUseCase; openProjectManagerUseCase: OpenProjectManagerUseCase; @@ -42,6 +49,9 @@ export function createInitAppMenuUseCase({ shellProvider, toggleEditModeUseCase, toggleMenuBarUseCase, + toggleTopBarUseCase, + setProjectSwitcherPositionUseCase, + setEditTogglePositionUseCase, openApplicationSettingsUseCase, openAboutUseCase, openProjectManagerUseCase, @@ -99,9 +109,17 @@ export function createInitAppMenuUseCase({ ] } - const menuEdit: MenuItem = { + const createMenuEdit: ( + editMode: boolean, + ) => MenuItem = (editMode) => ({ label: '&Edit', submenu: [ + { + accelerator: 'CmdOrCtrl+E', + label: `${editMode ? 'Disable' : 'Enable'} Edit Mode`, + doAction: async () => toggleEditModeUseCase() + }, + itemSeparator, { role: 'undo' }, { @@ -116,24 +134,91 @@ export function createInitAppMenuUseCase({ role: 'selectAll' } ] - } + }) - const createMenuView: (editMode: boolean, menuBar: boolean) => MenuItem = (editMode, menuBar) => ({ + const createMenuView: ( + menuBar: boolean, + topBar: boolean, + prjSwitcherPos: ProjectSwitcherPos, + editTogglePos: EditTogglePos, + ) => MenuItem = (menuBar, topBar, prjSwitcherPos, editTogglePos) => ({ label: '&View', submenu: [ - { role: 'togglefullscreen' }, - ...(!isMac - ? [{ - label: menuBar ? 'Hide Menu Bar (ALT to restore)' : 'Show Menu Bar', - doAction: async () => toggleMenuBarUseCase() - }] - : [] - ), - itemSeparator, { - accelerator: 'CmdOrCtrl+E', - label: `${editMode ? 'Disable' : 'Enable'} Edit Mode`, - doAction: async () => toggleEditModeUseCase() + label: 'Appearance', + submenu: [ + { role: 'togglefullscreen' }, + ...(!isMac + ? [{ + label: menuBar ? 'Hide Menu Bar (ALT to restore)' : 'Show Menu Bar', + doAction: async () => toggleMenuBarUseCase() + }] + : [] + ), + { + label: topBar ? 'Hide Top Bar' : 'Show Top Bar', + doAction: async () => toggleTopBarUseCase() + }, + itemSeparator, + { + label: 'Project Switcher Position', + submenu: [ + { + label: 'On Top Bar', + type: 'radio', + checked: prjSwitcherPos === ProjectSwitcherPos.TopBar, + doAction: async () => setProjectSwitcherPositionUseCase(ProjectSwitcherPos.TopBar) + }, + { + label: 'On Tab Bar (Left)', + type: 'radio', + checked: prjSwitcherPos === ProjectSwitcherPos.TabBarLeft, + doAction: async () => setProjectSwitcherPositionUseCase(ProjectSwitcherPos.TabBarLeft) + }, + { + label: 'On Tab Bar (Right)', + type: 'radio', + checked: prjSwitcherPos === ProjectSwitcherPos.TabBarRight, + doAction: async () => setProjectSwitcherPositionUseCase(ProjectSwitcherPos.TabBarRight) + }, + { + label: 'Hidden', + type: 'radio', + checked: prjSwitcherPos === ProjectSwitcherPos.Hidden, + doAction: async () => setProjectSwitcherPositionUseCase(ProjectSwitcherPos.Hidden) + }, + ] + }, + { + label: 'Edit Mode Toggle Position', + submenu: [ + { + label: 'On Top Bar', + type: 'radio', + checked: editTogglePos === EditTogglePos.TopBar, + doAction: async () => setEditTogglePositionUseCase(EditTogglePos.TopBar) + }, + { + label: 'On Tab Bar (Left)', + type: 'radio', + checked: editTogglePos === EditTogglePos.TabBarLeft, + doAction: async () => setEditTogglePositionUseCase(EditTogglePos.TabBarLeft) + }, + { + label: 'On Tab Bar (Right)', + type: 'radio', + checked: editTogglePos === EditTogglePos.TabBarRight, + doAction: async () => setEditTogglePositionUseCase(EditTogglePos.TabBarRight) + }, + { + label: 'Hidden', + type: 'radio', + checked: editTogglePos === EditTogglePos.Hidden, + doAction: async () => setEditTogglePositionUseCase(EditTogglePos.Hidden) + }, + ] + }, + ] }, itemSeparator, { @@ -210,16 +295,22 @@ export function createInitAppMenuUseCase({ isLoading: state.isLoading, editMode: state.ui.editMode, menuBar: state.ui.menuBar, + topBar: state.ui.topBar, + prjSwitcherPos: state.ui.projectSwitcher.pos, + editTogglePos: state.ui.editTogglePos, }), ({ isLoading, editMode, - menuBar + menuBar, + topBar, + prjSwitcherPos, + editTogglePos }) => { if (!isLoading) { appMenu.setMenu([ (isMac ? menuApp : menuFile), - menuEdit, - createMenuView(editMode, menuBar), + createMenuEdit(editMode), + createMenuView(menuBar, topBar, prjSwitcherPos, editTogglePos), menuHelp, ...(isDevMode ? [menuDev] diff --git a/src/renderer/application/useCases/projectSwitcher/setProjectSwitcherPosition.ts b/src/renderer/application/useCases/projectSwitcher/setProjectSwitcherPosition.ts new file mode 100644 index 0000000..a20ad33 --- /dev/null +++ b/src/renderer/application/useCases/projectSwitcher/setProjectSwitcherPosition.ts @@ -0,0 +1,33 @@ +/* + * Copyright: (c) 2024, Alex Kaul + * GNU General Public License v3.0 or later (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + */ + +import { AppStore } from '@/application/interfaces/store'; +import { ProjectSwitcherPos } from '@/base/state/ui'; + +type Deps = { + appStore: AppStore; +} + +export function createSetProjectSwitcherPositionUseCase({ + appStore +}: Deps) { + const useCase = (newPos: ProjectSwitcherPos) => { + const state = appStore.get(); + appStore.set({ + ...state, + ui: { + ...state.ui, + projectSwitcher: { + ...state.ui.projectSwitcher, + pos: newPos + } + } + }) + } + + return useCase; +} + +export type SetProjectSwitcherPositionUseCase = ReturnType; diff --git a/src/renderer/application/useCases/setEditTogglePosition.ts b/src/renderer/application/useCases/setEditTogglePosition.ts new file mode 100644 index 0000000..1a1db8b --- /dev/null +++ b/src/renderer/application/useCases/setEditTogglePosition.ts @@ -0,0 +1,30 @@ +/* + * Copyright: (c) 2024, Alex Kaul + * GNU General Public License v3.0 or later (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + */ + +import { AppStore } from '@/application/interfaces/store'; +import { EditTogglePos } from '@/base/state/ui'; + +type Deps = { + appStore: AppStore; +} + +export function createSetEditTogglePositionUseCase({ + appStore +}: Deps) { + const useCase = (newPos: EditTogglePos) => { + const state = appStore.get(); + appStore.set({ + ...state, + ui: { + ...state.ui, + editTogglePos: newPos + } + }) + } + + return useCase; +} + +export type SetEditTogglePositionUseCase = ReturnType; diff --git a/src/renderer/application/useCases/toggleTopBar.ts b/src/renderer/application/useCases/toggleTopBar.ts new file mode 100644 index 0000000..e9d9ef2 --- /dev/null +++ b/src/renderer/application/useCases/toggleTopBar.ts @@ -0,0 +1,30 @@ +/* + * Copyright: (c) 2024, Alex Kaul + * GNU General Public License v3.0 or later (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + */ + +import { AppStore } from '@/application/interfaces/store'; + +type Deps = { + appStore: AppStore; +} + +export function createToggleTopBarUseCase({ + appStore +}: Deps) { + const useCase = () => { + const state = appStore.get(); + const { topBar } = state.ui; + appStore.set({ + ...state, + ui: { + ...state.ui, + topBar: !topBar + } + }) + } + + return useCase; +} + +export type ToggleTopBarUseCase = ReturnType; diff --git a/src/renderer/base/state/ui.ts b/src/renderer/base/state/ui.ts index 66c53d5..e27eb31 100644 --- a/src/renderer/base/state/ui.ts +++ b/src/renderer/base/state/ui.ts @@ -88,9 +88,17 @@ export interface ProjectManagerState { duplicateProjectIds: Record | null; } +export enum ProjectSwitcherPos { + Hidden = 0, + TopBar = 1, + TabBarLeft = 2, + TabBarRight = 3, +} + export interface ProjectSwitcherState { projectIds: EntityIdList; currentProjectId: EntityId; + pos: ProjectSwitcherPos; } export interface AppManagerState { @@ -190,9 +198,18 @@ export interface MemSaverState { workflowTimeouts: Record; } +export enum EditTogglePos { + Hidden = 0, + TopBar = 1, + TabBarLeft = 2, + TabBarRight = 3, +} + export interface UiState { editMode: boolean; menuBar: boolean; + topBar: boolean; + editTogglePos: EditTogglePos; appConfig: AppConfig; apps: AppsState; dragDrop: DragDropState; @@ -210,6 +227,8 @@ export function createUiState(): UiState { dragDrop: {}, editMode: false, menuBar: true, + topBar: false, + editTogglePos: EditTogglePos.TabBarRight, appConfig: { mainHotkey: 'CmdOrCtrl+Shift+F', memSaver: { @@ -267,7 +286,8 @@ export function createUiState(): UiState { }, projectSwitcher: { currentProjectId: '', - projectIds: [] + projectIds: [], + pos: ProjectSwitcherPos.TabBarRight, }, shelf: { widgetList: [] diff --git a/src/renderer/init.ts b/src/renderer/init.ts index 6c21aa9..7666afa 100644 --- a/src/renderer/init.ts +++ b/src/renderer/init.ts @@ -15,8 +15,8 @@ import { createDropOnWorktableLayoutUseCase } from '@/application/useCases/dragD import { createResizeLayoutItemUseCase, createResizeLayoutItemEndUseCase, createResizeLayoutItemStartUseCase } from '@/application/useCases/worktable/resizeLayoutItem'; import { uuidv4IdGenerator } from '@/infra/idGenerator/uuidv4IdGenerator'; import { createAppComponent } from '@/ui/components/app'; -import { createPaletteComponent } from '@/ui/components/topBar/palette'; -import { createPaletteViewModelHook } from '@/ui/components/topBar/palette/paletteViewModel'; +import { createPaletteComponent } from '@/ui/components/palette'; +import { createPaletteViewModelHook } from '@/ui/components/palette/paletteViewModel'; import { createTopBarComponent } from '@/ui/components/topBar'; import { createShelfComponent, createShelfItemComponent } from '@/ui/components/topBar/shelf'; import { createShelfViewModelHook } from '@/ui/components/topBar/shelf/shelfViewModel'; @@ -24,7 +24,7 @@ import { createWorktableComponent } from '@/ui/components/worktable'; import { createWidgetLayoutComponent, createWidgetLayoutItemComponent } from '@/ui/components/worktable/widgetLayout'; import { createWidgetLayoutViewModelHook } from '@/ui/components/worktable/widgetLayout/widgetLayoutViewModel'; import { createWorkflowSwitcherComponent, createWorkflowSwitcherViewModelHook } from '@/ui/components/workflowSwitcher'; -import { createProjectSwitcherComponent, createProjectSwitcherViewModelHook } from '@/ui/components/topBar/projectSwitcher'; +import { createProjectSwitcherComponent, createProjectSwitcherViewModelHook } from '@/ui/components/projectSwitcher'; import { createSwitchProjectUseCase } from '@/application/useCases/projectSwitcher/switchProject'; import { createSwitchWorkflowUseCase } from '@/application/useCases/workflowSwitcher/switchWorkflow'; import { createDragOverWorkflowSwitcherUseCase } from '@/application/useCases/dragDrop/dragOverWorkflowSwitcher'; @@ -38,7 +38,7 @@ import { createCloseWidgetSettingsUseCase } from '@/application/useCases/widgetS import { createSaveWidgetSettingsUseCase } from '@/application/useCases/widgetSettings/saveWidgetSettings'; import { createWidgetByIdComponent } from '@/ui/components/widget/widgetById'; import { createWidgetByIdViewModelHook } from '@/ui/components/widget/widgetByIdViewModel'; -import { createEditModeToggleComponent, createEditModeToggleViewModelHook } from '@/ui/components/topBar/editModeToggle'; +import { createEditModeToggleComponent, createEditModeToggleViewModelHook } from '@/ui/components/editModeToggle'; import { createToggleEditModeUseCase } from '@/application/useCases/toggleEditMode'; import { createToggleMenuBarUseCase } from '@/application/useCases/toggleMenuBar'; import { createAppStore } from '@/data/appStore'; @@ -77,7 +77,7 @@ import { createToggleDeletionInProjectManagerUseCase } from '@/application/useCa import { createUpdateProjectSettingsInProjectManagerUseCase } from '@/application/useCases/projectManager/updateProjectSettingsInProjectManager'; import { createUpdateProjectsOrderInProjectManagerUseCase } from '@/application/useCases/projectManager/updateProjectsOrderInProjectManager'; import { createCloseProjectManagerUseCase } from '@/application/useCases/projectManager/closeProjectManager'; -import { createManageProjectsButtonComponent, createManageProjectsButtonViewModelHook } from '@/ui/components/topBar/manageProjectsButton'; +import { createManageProjectsButtonComponent, createManageProjectsButtonViewModelHook } from '@/ui/components/manageProjectsButton'; import { createOpenProjectManagerUseCase } from '@/application/useCases/projectManager/openProjectManager'; import { createAddWorkflowUseCase } from '@/application/useCases/workflowSwitcher/addWorkflow'; import { createRenameWorkflowUseCase } from '@/application/useCases/workflowSwitcher/renameWorkflow'; @@ -140,6 +140,9 @@ import { createOpenAppManagerUseCase } from '@/application/useCases/appManager/o import { createShowOpenFileDialogUseCase } from '@/application/useCases/dialog/showOpenFileDialog'; import { createInitMemSaverUseCase } from '@/application/useCases/memSaver/initMemSaver'; import { createDeactivateWorkflowUseCase } from '@/application/useCases/memSaver/deactivateWorkflow'; +import { createToggleTopBarUseCase } from '@/application/useCases/toggleTopBar'; +import { createSetProjectSwitcherPositionUseCase } from '@/application/useCases/projectSwitcher/setProjectSwitcherPosition'; +import { createSetEditTogglePositionUseCase } from '@/application/useCases/setEditTogglePosition'; function prepareDataStorageForRenderer(dataStorage: DataStorage): DataStorageRenderer { return setTextOnlyIfChanged(withJson(dataStorage)); @@ -226,6 +229,9 @@ async function createUseCases(store: ReturnType) { const toggleEditModeUseCase = createToggleEditModeUseCase(deps); const toggleMenuBarUseCase = createToggleMenuBarUseCase(deps); + const toggleTopBarUseCase = createToggleTopBarUseCase(deps); + const setProjectSwitcherPositionUseCase = createSetProjectSwitcherPositionUseCase(deps); + const setEditTogglePositionUseCase = createSetEditTogglePositionUseCase(deps); const clickContextMenuItemUseCase = createClickContextMenuItemUseCase(); const osContextMenuProvider = createOsContextMenuProvider({ clickContextMenuItemUseCase }); @@ -327,6 +333,9 @@ async function createUseCases(store: ReturnType) { shellProvider, toggleEditModeUseCase, toggleMenuBarUseCase, + toggleTopBarUseCase, + setProjectSwitcherPositionUseCase, + setEditTogglePositionUseCase, openApplicationSettingsUseCase, openAboutUseCase, openAppManagerUseCase, @@ -602,7 +611,11 @@ function createUI(stateHooks: ReturnType, useCases: Awaite const useWorkflowSwitcherViewModel = createWorkflowSwitcherViewModelHook(deps); const WorkflowSwitcher = createWorkflowSwitcherComponent({ - useWorkflowSwitcherViewModel + useWorkflowSwitcherViewModel, + EditModeToggle, + ManageProjectsButton, + Palette, + ProjectSwitcher, }) const useWorktableViewModel = createWorktableViewModelHook(deps); const Worktable = createWorktableComponent({ diff --git a/src/renderer/ui/components/app/app.module.scss b/src/renderer/ui/components/app/app.module.scss index 2481fe9..30f49c3 100644 --- a/src/renderer/ui/components/app/app.module.scss +++ b/src/renderer/ui/components/app/app.module.scss @@ -3,13 +3,19 @@ * GNU General Public License v3.0 or later (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) */ -.no-projects { - background-color: var(--freeter-inAppNoteNoProjectsBackground); +.main-screen { + display: flex; + flex-direction: column; position: fixed; - top: 62px; - left: 0; + top: 0; right: 0; bottom: 0; + left: 0; +} + +.no-projects { + background-color: var(--freeter-inAppNoteNoProjectsBackground); + flex-grow: 1; } .manage-icon { diff --git a/src/renderer/ui/components/app/app.tsx b/src/renderer/ui/components/app/app.tsx index fed47f2..d2e962c 100644 --- a/src/renderer/ui/components/app/app.tsx +++ b/src/renderer/ui/components/app/app.tsx @@ -27,20 +27,20 @@ export function createAppComponent({ useAppViewModel }: Deps) { function App() { - const {modalScreens, hasModalScreens, hasProjects, contextMenuHandler, uiThemeId} = useAppViewModel(); + const {modalScreens, hasModalScreens, hasProjects, contextMenuHandler, uiThemeId, hasTopBar} = useAppViewModel(); return (
-
- +
+ {hasTopBar && } + { hasProjects ? <> - : - {'You don\'t have any projects. Use the Manage Projects '} {' button at the Top Bar to create a first one.'} + {'You don\'t have any projects. Use the Manage Projects '} {' button above (or under the View menu) to create a first one.'} }
diff --git a/src/renderer/ui/components/app/appViewModel.ts b/src/renderer/ui/components/app/appViewModel.ts index 848fc39..bfb1dec 100644 --- a/src/renderer/ui/components/app/appViewModel.ts +++ b/src/renderer/ui/components/app/appViewModel.ts @@ -39,7 +39,8 @@ export function createAppViewModelHook({ projects, workflows, modalScreensOrder, - uiTheme + uiTheme, + hasTopBar ] = useAppState(state => [ state.ui.editMode, state.ui.projectSwitcher.projectIds, @@ -47,7 +48,8 @@ export function createAppViewModelHook({ state.entities.projects, state.entities.workflows, state.ui.modalScreens.order, - state.ui.appConfig.uiTheme + state.ui.appConfig.uiTheme, + state.ui.topBar ]) const projectList = useAppState.useEntityList(state => state.entities.projects, projectIds); @@ -92,7 +94,8 @@ export function createAppViewModelHook({ modalScreens, hasModalScreens, contextMenuHandler, - uiThemeId + uiThemeId, + hasTopBar } } diff --git a/src/renderer/ui/components/topBar/editModeToggle/editModeToggle.tsx b/src/renderer/ui/components/editModeToggle/editModeToggle.tsx similarity index 100% rename from src/renderer/ui/components/topBar/editModeToggle/editModeToggle.tsx rename to src/renderer/ui/components/editModeToggle/editModeToggle.tsx diff --git a/src/renderer/ui/components/topBar/editModeToggle/editModeToggleViewModel.ts b/src/renderer/ui/components/editModeToggle/editModeToggleViewModel.ts similarity index 100% rename from src/renderer/ui/components/topBar/editModeToggle/editModeToggleViewModel.ts rename to src/renderer/ui/components/editModeToggle/editModeToggleViewModel.ts diff --git a/src/renderer/ui/components/topBar/editModeToggle/index.ts b/src/renderer/ui/components/editModeToggle/index.ts similarity index 100% rename from src/renderer/ui/components/topBar/editModeToggle/index.ts rename to src/renderer/ui/components/editModeToggle/index.ts diff --git a/src/renderer/ui/components/topBar/manageProjectsButton/index.ts b/src/renderer/ui/components/manageProjectsButton/index.ts similarity index 100% rename from src/renderer/ui/components/topBar/manageProjectsButton/index.ts rename to src/renderer/ui/components/manageProjectsButton/index.ts diff --git a/src/renderer/ui/components/topBar/manageProjectsButton/manageProjectsButton.tsx b/src/renderer/ui/components/manageProjectsButton/manageProjectsButton.tsx similarity index 100% rename from src/renderer/ui/components/topBar/manageProjectsButton/manageProjectsButton.tsx rename to src/renderer/ui/components/manageProjectsButton/manageProjectsButton.tsx diff --git a/src/renderer/ui/components/topBar/manageProjectsButton/manageProjectsButtonViewModel.ts b/src/renderer/ui/components/manageProjectsButton/manageProjectsButtonViewModel.ts similarity index 100% rename from src/renderer/ui/components/topBar/manageProjectsButton/manageProjectsButtonViewModel.ts rename to src/renderer/ui/components/manageProjectsButton/manageProjectsButtonViewModel.ts diff --git a/src/renderer/ui/components/topBar/palette/index.ts b/src/renderer/ui/components/palette/index.ts similarity index 100% rename from src/renderer/ui/components/topBar/palette/index.ts rename to src/renderer/ui/components/palette/index.ts diff --git a/src/renderer/ui/components/topBar/palette/palette.module.scss b/src/renderer/ui/components/palette/palette.module.scss similarity index 95% rename from src/renderer/ui/components/topBar/palette/palette.module.scss rename to src/renderer/ui/components/palette/palette.module.scss index 3f843d6..06f2535 100644 --- a/src/renderer/ui/components/topBar/palette/palette.module.scss +++ b/src/renderer/ui/components/palette/palette.module.scss @@ -17,7 +17,6 @@ z-index:1; display: inline-block; font-family: 'Roboto Condensed'; - padding: 22px 16px; font-size: 16px; line-height: 16px; background-color: var(--freeter-paletteTabBackground); @@ -33,6 +32,17 @@ } } } +.pos-tab-bar { + .palette-tab { + padding: 10px 12px; + } +} +.pos-top-bar { + .palette-tab { + padding: 22px 16px; + } +} + .palette-section { box-sizing: border-box; overflow-x: hidden; diff --git a/src/renderer/ui/components/topBar/palette/palette.tsx b/src/renderer/ui/components/palette/palette.tsx similarity index 82% rename from src/renderer/ui/components/topBar/palette/palette.tsx rename to src/renderer/ui/components/palette/palette.tsx index 8094701..b2de2f4 100644 --- a/src/renderer/ui/components/topBar/palette/palette.tsx +++ b/src/renderer/ui/components/palette/palette.tsx @@ -13,10 +13,21 @@ type Deps = { usePaletteViewModel: PaletteViewModelHook } +export enum PalettePropsPos { + TopBar = 1, + TabBar = 2 +} + +export interface PaletteProps extends React.PropsWithChildren, HTMLDivElement>> { + pos: PalettePropsPos +}; + export function createPaletteComponent({ usePaletteViewModel }: Deps) { - function Palette() { + function Palette({ + pos + }: PaletteProps) { const { onAddItemDragEnd, onAddItemDragStart, @@ -33,7 +44,12 @@ export function createPaletteComponent({ return (
Add Widget Paste Widget diff --git a/src/renderer/ui/components/topBar/palette/paletteItem.tsx b/src/renderer/ui/components/palette/paletteItem.tsx similarity index 100% rename from src/renderer/ui/components/topBar/palette/paletteItem.tsx rename to src/renderer/ui/components/palette/paletteItem.tsx diff --git a/src/renderer/ui/components/topBar/palette/paletteViewModel.ts b/src/renderer/ui/components/palette/paletteViewModel.ts similarity index 100% rename from src/renderer/ui/components/topBar/palette/paletteViewModel.ts rename to src/renderer/ui/components/palette/paletteViewModel.ts diff --git a/src/renderer/ui/components/topBar/projectSwitcher/index.ts b/src/renderer/ui/components/projectSwitcher/index.ts similarity index 100% rename from src/renderer/ui/components/topBar/projectSwitcher/index.ts rename to src/renderer/ui/components/projectSwitcher/index.ts diff --git a/src/renderer/ui/components/topBar/projectSwitcher/projectSwitcher.module.scss b/src/renderer/ui/components/projectSwitcher/projectSwitcher.module.scss similarity index 89% rename from src/renderer/ui/components/topBar/projectSwitcher/projectSwitcher.module.scss rename to src/renderer/ui/components/projectSwitcher/projectSwitcher.module.scss index 557ab69..cfaf5c4 100644 --- a/src/renderer/ui/components/topBar/projectSwitcher/projectSwitcher.module.scss +++ b/src/renderer/ui/components/projectSwitcher/projectSwitcher.module.scss @@ -4,13 +4,11 @@ */ .project-switcher { - height: 36px; line-height: 24px; font-family: 'Roboto Condensed'; font-size: 16px; min-width: 140px; max-width: 280px; - margin-right: 12px; option[disabled] { display: none; } diff --git a/src/renderer/ui/components/topBar/projectSwitcher/projectSwitcher.tsx b/src/renderer/ui/components/projectSwitcher/projectSwitcher.tsx similarity index 72% rename from src/renderer/ui/components/topBar/projectSwitcher/projectSwitcher.tsx rename to src/renderer/ui/components/projectSwitcher/projectSwitcher.tsx index 7fe2774..f60878b 100644 --- a/src/renderer/ui/components/topBar/projectSwitcher/projectSwitcher.tsx +++ b/src/renderer/ui/components/projectSwitcher/projectSwitcher.tsx @@ -3,7 +3,7 @@ * GNU General Public License v3.0 or later (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) */ -import { ProjectSwitcherViewModelHook } from '@/ui/components/topBar/projectSwitcher/projectSwitcherViewModel'; +import { ProjectSwitcherViewModelHook } from '@/ui/components/projectSwitcher/projectSwitcherViewModel'; import clsx from 'clsx'; import * as styles from './projectSwitcher.module.scss'; @@ -11,10 +11,14 @@ type Deps = { useProjectSwitcherViewModel: ProjectSwitcherViewModelHook } +export type ProjectSwitcherProps = React.PropsWithChildren, HTMLSelectElement>>; + export function createProjectSwitcherComponent({ useProjectSwitcherViewModel }: Deps) { - function ProjectSwitcher() { + function ProjectSwitcher({ + className + }: ProjectSwitcherProps) { const { currentProjectId, projects, @@ -25,7 +29,7 @@ export function createProjectSwitcherComponent({ return (