Moved all of r3f's UI elements to Studio
This commit is contained in:
parent
ff0f8d557b
commit
1444c61d64
4 changed files with 10 additions and 151 deletions
|
@ -2,7 +2,7 @@ import type {VFC} from 'react'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import type {TransformControlsSpace} from '../../store'
|
import type {TransformControlsSpace} from '../../store'
|
||||||
import {BiCube, BiGlobe} from 'react-icons/all'
|
import {BiCube, BiGlobe} from 'react-icons/all'
|
||||||
import CompactModeSelect from './utils/CompactModeSelect'
|
import {ToolbarSwitchSelect} from '@theatre/studio'
|
||||||
|
|
||||||
export interface TransformControlsSpaceSelectProps {
|
export interface TransformControlsSpaceSelectProps {
|
||||||
value: TransformControlsSpace
|
value: TransformControlsSpace
|
||||||
|
@ -13,17 +13,17 @@ const TransformControlsSpaceSelect: VFC<TransformControlsSpaceSelectProps> = ({
|
||||||
value,
|
value,
|
||||||
onChange,
|
onChange,
|
||||||
}) => (
|
}) => (
|
||||||
<CompactModeSelect
|
<ToolbarSwitchSelect
|
||||||
value={value}
|
value={value}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
options={[
|
options={[
|
||||||
{
|
{
|
||||||
option: 'world',
|
value: 'world',
|
||||||
label: 'Space: World',
|
label: 'Space: World',
|
||||||
icon: <BiGlobe />,
|
icon: <BiGlobe />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
option: 'local',
|
value: 'local',
|
||||||
label: 'Space: Local',
|
label: 'Space: Local',
|
||||||
icon: <BiCube />,
|
icon: <BiCube />,
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,7 +2,7 @@ import type {VFC} from 'react'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import type {ViewportShading} from '../../store'
|
import type {ViewportShading} from '../../store'
|
||||||
import {FaCube, GiCube, GiIceCube, BiCube} from 'react-icons/all'
|
import {FaCube, GiCube, GiIceCube, BiCube} from 'react-icons/all'
|
||||||
import CompactModeSelect from './utils/CompactModeSelect'
|
import {ToolbarSwitchSelect} from '@theatre/studio'
|
||||||
|
|
||||||
export interface ViewportShadingSelectProps {
|
export interface ViewportShadingSelectProps {
|
||||||
value: ViewportShading
|
value: ViewportShading
|
||||||
|
@ -13,27 +13,27 @@ const ViewportShadingSelect: VFC<ViewportShadingSelectProps> = ({
|
||||||
value,
|
value,
|
||||||
onChange,
|
onChange,
|
||||||
}) => (
|
}) => (
|
||||||
<CompactModeSelect
|
<ToolbarSwitchSelect
|
||||||
value={value}
|
value={value}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
options={[
|
options={[
|
||||||
{
|
{
|
||||||
option: 'wireframe',
|
value: 'wireframe',
|
||||||
label: 'Display: Wireframe',
|
label: 'Display: Wireframe',
|
||||||
icon: <BiCube />,
|
icon: <BiCube />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
option: 'flat',
|
value: 'flat',
|
||||||
label: 'Display: Flat',
|
label: 'Display: Flat',
|
||||||
icon: <GiCube />,
|
icon: <GiCube />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
option: 'solid',
|
value: 'solid',
|
||||||
label: 'Display: Solid',
|
label: 'Display: Solid',
|
||||||
icon: <FaCube />,
|
icon: <FaCube />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
option: 'rendered',
|
value: 'rendered',
|
||||||
label: 'Display: Rendered',
|
label: 'Display: Rendered',
|
||||||
icon: <GiIceCube />,
|
icon: <GiIceCube />,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
import type {ReactElement, ReactNode} from 'react'
|
|
||||||
import React from 'react'
|
|
||||||
import type {IconType} from 'react-icons'
|
|
||||||
import {Group, Button} from 'reakit'
|
|
||||||
import styled from 'styled-components'
|
|
||||||
import {Tooltip, TooltipReference, useTooltipState} from './Tooltip'
|
|
||||||
|
|
||||||
interface OptionButtonProps<Option> {
|
|
||||||
value: Option
|
|
||||||
option: Option
|
|
||||||
label: string
|
|
||||||
icon: ReactElement<IconType>
|
|
||||||
onClick: () => void
|
|
||||||
}
|
|
||||||
|
|
||||||
const TheButton = styled(TooltipReference)<{selected: boolean}>`
|
|
||||||
display: flex;
|
|
||||||
position: relative;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
font-size: 11px;
|
|
||||||
line-height: 1.25em;
|
|
||||||
font-weight: 600;
|
|
||||||
height: 24px;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
padding-right: 0.5em;
|
|
||||||
border: 1px solid #22222238;
|
|
||||||
|
|
||||||
border-radius: 2px;
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
color: #e6e6e5;
|
|
||||||
background-color: rgba(0, 0, 0, 0.1);
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.selected,
|
|
||||||
&.selected:hover {
|
|
||||||
color: white;
|
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
function OptionButton<Option>({
|
|
||||||
value,
|
|
||||||
option,
|
|
||||||
label,
|
|
||||||
icon,
|
|
||||||
onClick,
|
|
||||||
}: OptionButtonProps<Option>) {
|
|
||||||
console.log('deprecate CompactModeSelect')
|
|
||||||
|
|
||||||
const tooltip = useTooltipState()
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<TheButton
|
|
||||||
{...tooltip}
|
|
||||||
forwardedAs={Button}
|
|
||||||
selected={option === value}
|
|
||||||
className={option === value ? 'selected' : undefined}
|
|
||||||
aria-label={label}
|
|
||||||
onClick={onClick}
|
|
||||||
>
|
|
||||||
{icon}
|
|
||||||
</TheButton>
|
|
||||||
<Tooltip {...tooltip}>{label}</Tooltip>
|
|
||||||
</>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
interface CompactModeSelectProps<Option> {
|
|
||||||
value: Option
|
|
||||||
onChange: (value: Option) => void
|
|
||||||
options: {
|
|
||||||
option: Option
|
|
||||||
label: string
|
|
||||||
icon: ReactElement<IconType>
|
|
||||||
}[]
|
|
||||||
settingsPanel?: ReactNode
|
|
||||||
}
|
|
||||||
|
|
||||||
const Container = styled(Group)`
|
|
||||||
display: flex;
|
|
||||||
gap: 2px;
|
|
||||||
`
|
|
||||||
|
|
||||||
const CompactModeSelect = <Option extends string | number>({
|
|
||||||
value,
|
|
||||||
onChange,
|
|
||||||
options,
|
|
||||||
}: CompactModeSelectProps<Option>) => {
|
|
||||||
return (
|
|
||||||
<Container>
|
|
||||||
{options.map(({label, icon, option}) => (
|
|
||||||
<OptionButton
|
|
||||||
key={option}
|
|
||||||
value={value}
|
|
||||||
option={option}
|
|
||||||
label={label}
|
|
||||||
icon={icon}
|
|
||||||
onClick={() => onChange(option)}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</Container>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default CompactModeSelect
|
|
|
@ -1,26 +0,0 @@
|
||||||
import type {VFC} from 'react'
|
|
||||||
import React from 'react'
|
|
||||||
import {Tooltip as TooltipImpl, TooltipReference, useTooltipState} from 'reakit'
|
|
||||||
import {transparentize} from 'polished'
|
|
||||||
import type {TooltipProps} from 'reakit'
|
|
||||||
import styled from 'styled-components'
|
|
||||||
|
|
||||||
export {TooltipReference, useTooltipState}
|
|
||||||
|
|
||||||
const Container = styled(TooltipImpl)`
|
|
||||||
padding: 3px 5px;
|
|
||||||
|
|
||||||
font-size: 11px;
|
|
||||||
line-height: 1.25em;
|
|
||||||
border-radius: 2px;
|
|
||||||
background-color: ${transparentize(0.5, '#313131')};
|
|
||||||
color: white;
|
|
||||||
pointer-events: none;
|
|
||||||
font-weight: 500;
|
|
||||||
`
|
|
||||||
|
|
||||||
export const Tooltip: VFC<TooltipProps> = ({className, ...props}) => {
|
|
||||||
console.log('deprecate tooltip')
|
|
||||||
|
|
||||||
return <Container {...props} className={className as string} />
|
|
||||||
}
|
|
Loading…
Reference in a new issue