Franknoirot/cmd bar (#328)
* Add XState and naive ActionBar
* Add basic dialog and combobox
* Selectable commands in command bar
* Add a few (broken) file actions
* Home commands
* Add subcommand descriptions, cleanup on navigate
* Refactor: move command creation and types to lib
* Refactor to allow any machine to add commands
* Add auth to command bar, add ability to hide cmds
* Refactor: consolidate theme utilities
* Add settings as machine and command set
* Fix: type tweaks
* Fix: only allow auth to navigate from signin
* Remove zustand-powered settings
* Fix: remove zustand settings from App
* Fix: browser infinite redirect
* Feature: allow commands to be hidden per-platform
* Fix: tsc errors
* Fix: hide default project directory from cmd bar
* Polish: transitions, css tweaks
* Feature: label current value in options settings
* Fix broken debug panel UI
* Refactor: move settings toasts to actions
* Tweak: css rounding
* Fix: set default directory recursion and reload 🐞
* Refactor: move machines to their own directory
* Fix formatting
* @Irev-Dev clean-up catches, import cleanup
This commit is contained in:
@ -13,7 +13,6 @@ import {
|
||||
} from './lang/executor'
|
||||
import { recast } from './lang/recast'
|
||||
import { EditorSelection } from '@codemirror/state'
|
||||
import { BaseDirectory } from '@tauri-apps/api/fs'
|
||||
import {
|
||||
ArtifactMap,
|
||||
SourceRangeMap,
|
||||
@ -95,22 +94,14 @@ export type GuiModes =
|
||||
position: Position
|
||||
}
|
||||
|
||||
type UnitSystem = 'imperial' | 'metric'
|
||||
export enum Themes {
|
||||
Light = 'light',
|
||||
Dark = 'dark',
|
||||
System = 'system',
|
||||
}
|
||||
|
||||
export const baseUnits: Record<UnitSystem, string[]> = {
|
||||
export const baseUnits = {
|
||||
imperial: ['in', 'ft'],
|
||||
metric: ['mm', 'cm', 'm'],
|
||||
}
|
||||
} as const
|
||||
|
||||
interface DefaultDir {
|
||||
base?: BaseDirectory
|
||||
dir: string
|
||||
}
|
||||
export type BaseUnit = 'in' | 'ft' | 'mm' | 'cm' | 'm'
|
||||
|
||||
export const baseUnitsUnion = Object.values(baseUnits).flatMap((v) => v)
|
||||
|
||||
export type PaneType = 'code' | 'variables' | 'debug' | 'kclErrors' | 'logs'
|
||||
|
||||
@ -181,21 +172,8 @@ export interface StoreState {
|
||||
streamHeight: number
|
||||
}) => void
|
||||
|
||||
// tauri specific app settings
|
||||
defaultDir: DefaultDir
|
||||
setDefaultDir: (dir: DefaultDir) => void
|
||||
defaultProjectName: string
|
||||
setDefaultProjectName: (defaultProjectName: string) => void
|
||||
defaultUnitSystem: UnitSystem
|
||||
setDefaultUnitSystem: (defaultUnitSystem: UnitSystem) => void
|
||||
defaultBaseUnit: string
|
||||
setDefaultBaseUnit: (defaultBaseUnit: string) => void
|
||||
showHomeMenu: boolean
|
||||
setHomeShowMenu: (showMenu: boolean) => void
|
||||
onboardingStatus: string
|
||||
setOnboardingStatus: (status: string) => void
|
||||
theme: Themes
|
||||
setTheme: (theme: Themes) => void
|
||||
isBannerDismissed: boolean
|
||||
setBannerDismissed: (isBannerDismissed: boolean) => void
|
||||
openPanes: PaneType[]
|
||||
@ -205,8 +183,6 @@ export interface StoreState {
|
||||
path: string
|
||||
}[]
|
||||
setHomeMenuItems: (items: { name: string; path: string }[]) => void
|
||||
debugPanel: boolean
|
||||
setDebugPanel: (debugPanel: boolean) => void
|
||||
}
|
||||
|
||||
let pendingAstUpdates: number[] = []
|
||||
@ -385,18 +361,6 @@ export const useStore = create<StoreState>()(
|
||||
defaultDir: {
|
||||
dir: '',
|
||||
},
|
||||
setDefaultDir: (dir) => set({ defaultDir: dir }),
|
||||
defaultProjectName: 'new-project-$nnn',
|
||||
setDefaultProjectName: (defaultProjectName) =>
|
||||
set({ defaultProjectName }),
|
||||
defaultUnitSystem: 'imperial',
|
||||
setDefaultUnitSystem: (defaultUnitSystem) => set({ defaultUnitSystem }),
|
||||
defaultBaseUnit: 'in',
|
||||
setDefaultBaseUnit: (defaultBaseUnit) => set({ defaultBaseUnit }),
|
||||
onboardingStatus: '',
|
||||
setOnboardingStatus: (onboardingStatus) => set({ onboardingStatus }),
|
||||
theme: Themes.System,
|
||||
setTheme: (theme) => set({ theme }),
|
||||
isBannerDismissed: false,
|
||||
setBannerDismissed: (isBannerDismissed) => set({ isBannerDismissed }),
|
||||
openPanes: ['code'],
|
||||
@ -405,25 +369,13 @@ export const useStore = create<StoreState>()(
|
||||
setHomeShowMenu: (showHomeMenu) => set({ showHomeMenu }),
|
||||
homeMenuItems: [],
|
||||
setHomeMenuItems: (homeMenuItems) => set({ homeMenuItems }),
|
||||
debugPanel: false,
|
||||
setDebugPanel: (debugPanel) => set({ debugPanel }),
|
||||
}),
|
||||
{
|
||||
name: 'store',
|
||||
partialize: (state) =>
|
||||
Object.fromEntries(
|
||||
Object.entries(state).filter(([key]) =>
|
||||
[
|
||||
'code',
|
||||
'defaultDir',
|
||||
'defaultProjectName',
|
||||
'defaultUnitSystem',
|
||||
'defaultBaseUnit',
|
||||
'debugPanel',
|
||||
'onboardingStatus',
|
||||
'theme',
|
||||
'openPanes',
|
||||
].includes(key)
|
||||
['code', 'openPanes'].includes(key)
|
||||
)
|
||||
),
|
||||
}
|
||||
|
Reference in New Issue
Block a user