* Remove unnecessary console.log
* Create a global appMachine
* Strip authMachine of side-effects
* Replace react-bound authMachine use with XState actor use
* Fix import goof
* Register auth commands directly!
* Don't provide anything to settingsMachine from React
* Remove unecessary async
* Make it possible to load project settings via a sent event, without React
* Make settingsMachine ready to be an actor
* Remove settingsLoader use
* Replace all useSettingsAuthContext use with direct actor use
* Add logic to clear project settings, fmt
* fmt
* Clear and load project settings from routeLoaders, but using actor
* Remove useRefreshSettings
* Restore use of useToken() that wasn't working for some reason
* Migrate useFileSystemWatcher use to RouteProvider
* Surface wasm_bindgen unavailable error to console
* Remove unnecessary use of Jest settings wrappers
* Replace dynamic import with actor.getSnapshot
* Migrate system theme and theme color watching from useEffects to actors/actions
* Migrate cursor color effect
* Remove unused code that is now in RouteProvider
* Migrate route commands registration further down for now, out of SettingsAuthProvider
* Migrate settings command registration out of SettingsAuthProvider.tsx
* Delete SettingsAuthProvider.tsx!
* Remove unused settingsLoader!
* fmt and remove comments
* Use actor for routeLoader
* Fix project read error due to uninitialized WASM
* Fix user settings load error due to uninitialized WASM
* Move settingsActor into appActor as a spawned child
* Trying to fix unit tests
* Remove unused imports and demo window attachments
* fmt
* Fix testing issues caused by circular dependency
* Add `setThemeColor` to a few actions list it was missing from
* fmt
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Fix "Execute AST" action in browser, where currentProject is `undefined`
* Update commands list when currentProject changes
* Fix `clearProjectSettings`, which was passing along non-settings context
* Fix onboarding test that actually needed the onboarding initially dismissed
* Add scrollIntoView to make this test more reliable
* @lf94's feedback I missed
I got distracted by a million other things last week
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* Revert "A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)"
This reverts commit 129226c6ef
.
* fmt
* revert bad snapshot
* Fix up camera movement test locator
* Fix test that was flipping the user settings without waiting
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
95 lines
2.6 KiB
TypeScript
95 lines
2.6 KiB
TypeScript
import { ReactNode } from 'react'
|
|
import styles from './ModelingPane.module.css'
|
|
import { ActionButton } from 'components/ActionButton'
|
|
import Tooltip from 'components/Tooltip'
|
|
import { CustomIconName } from 'components/CustomIcon'
|
|
import { IconDefinition } from '@fortawesome/free-solid-svg-icons'
|
|
import { ActionIcon } from 'components/ActionIcon'
|
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
|
import { useSettings } from 'machines/appMachine'
|
|
|
|
export interface ModelingPaneProps {
|
|
id: string
|
|
children: ReactNode | ReactNode[]
|
|
className?: string
|
|
icon?: CustomIconName | IconDefinition
|
|
title: ReactNode
|
|
Menu?: React.ReactNode | React.FC
|
|
detailsTestId?: string
|
|
onClose: () => void
|
|
}
|
|
|
|
export const ModelingPaneHeader = ({
|
|
id,
|
|
icon,
|
|
title,
|
|
Menu,
|
|
onClose,
|
|
}: Pick<ModelingPaneProps, 'id' | 'icon' | 'title' | 'Menu' | 'onClose'>) => {
|
|
return (
|
|
<div className={styles.header}>
|
|
<div className="flex gap-2 items-center flex-1">
|
|
{icon && (
|
|
<ActionIcon
|
|
icon={icon}
|
|
className="p-1"
|
|
size="sm"
|
|
iconClassName="!text-chalkboard-80 dark:!text-chalkboard-30"
|
|
bgClassName="!bg-transparent"
|
|
/>
|
|
)}
|
|
<span data-testid={id + '-header'}>{title}</span>
|
|
</div>
|
|
{Menu instanceof Function ? <Menu /> : Menu}
|
|
<ActionButton
|
|
Element="button"
|
|
iconStart={{
|
|
icon: 'close',
|
|
iconClassName: '!text-current',
|
|
bgClassName: 'bg-transparent dark:bg-transparent',
|
|
}}
|
|
className="!p-0 !bg-transparent hover:text-primary border-transparent dark:!border-transparent hover:!border-primary dark:hover:!border-chalkboard-70 !outline-none"
|
|
onClick={() => onClose()}
|
|
>
|
|
<Tooltip position="bottom-right" delay={750}>
|
|
Close
|
|
</Tooltip>
|
|
</ActionButton>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export const ModelingPane = ({
|
|
id,
|
|
children,
|
|
className,
|
|
detailsTestId,
|
|
onClose,
|
|
title,
|
|
...props
|
|
}: ModelingPaneProps) => {
|
|
const settings = useSettings()
|
|
const onboardingStatus = settings.app.onboardingStatus
|
|
const pointerEventsCssClass =
|
|
onboardingStatus.current === onboardingPaths.CAMERA
|
|
? 'pointer-events-none '
|
|
: 'pointer-events-auto '
|
|
return (
|
|
<section
|
|
{...props}
|
|
aria-label={title && typeof title === 'string' ? title : ''}
|
|
data-testid={detailsTestId}
|
|
id={id}
|
|
className={
|
|
'focus-within:border-primary dark:focus-within:border-chalkboard-50 ' +
|
|
pointerEventsCssClass +
|
|
styles.panel +
|
|
' group ' +
|
|
(className || '')
|
|
}
|
|
>
|
|
{children}
|
|
</section>
|
|
)
|
|
}
|