Finished switching to styled-components in r3f
This commit is contained in:
parent
596b7e9d81
commit
8395e44614
9 changed files with 108 additions and 196086 deletions
|
@ -43,7 +43,6 @@
|
||||||
"@theatre/core": "workspace:*",
|
"@theatre/core": "workspace:*",
|
||||||
"@theatre/studio": "workspace:*",
|
"@theatre/studio": "workspace:*",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"prism-react-renderer": "1.2.1",
|
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
"react-icons": "^4.2.0",
|
"react-icons": "^4.2.0",
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,6 @@ import {useEditorStore} from '../store'
|
||||||
import {OrbitControls} from '@react-three/drei'
|
import {OrbitControls} from '@react-three/drei'
|
||||||
import shallow from 'zustand/shallow'
|
import shallow from 'zustand/shallow'
|
||||||
import root from 'react-shadow/styled-components'
|
import root from 'react-shadow/styled-components'
|
||||||
import styles from '../bundle.css.txt'
|
|
||||||
import UI from './UI'
|
import UI from './UI'
|
||||||
import ProxyManager from './ProxyManager'
|
import ProxyManager from './ProxyManager'
|
||||||
import studio from '@theatre/studio'
|
import studio from '@theatre/studio'
|
||||||
|
@ -131,7 +130,6 @@ const Editor: VFC = () => {
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
<style type="text/css">{styles}</style>
|
|
||||||
</root.div>
|
</root.div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,11 +4,18 @@ import {useEditorStore} from '../store'
|
||||||
import shallow from 'zustand/shallow'
|
import shallow from 'zustand/shallow'
|
||||||
import type {WebGLRenderer} from 'three'
|
import type {WebGLRenderer} from 'three'
|
||||||
import useMeasure from 'react-use-measure'
|
import useMeasure from 'react-use-measure'
|
||||||
|
import styled from 'styled-components'
|
||||||
|
|
||||||
interface ReferenceWindowProps {
|
interface ReferenceWindowProps {
|
||||||
height: number
|
height: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Container = styled.div`
|
||||||
|
box-shadow: 0 25px 50px -12px gray;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
`
|
||||||
|
|
||||||
const ReferenceWindow: VFC<ReferenceWindowProps> = ({height}) => {
|
const ReferenceWindow: VFC<ReferenceWindowProps> = ({height}) => {
|
||||||
const canvasRef = useRef<HTMLCanvasElement>(null)
|
const canvasRef = useRef<HTMLCanvasElement>(null)
|
||||||
|
|
||||||
|
@ -52,7 +59,7 @@ const ReferenceWindow: VFC<ReferenceWindowProps> = ({height}) => {
|
||||||
}, [gl, height])
|
}, [gl, height])
|
||||||
|
|
||||||
return gl?.domElement ? (
|
return gl?.domElement ? (
|
||||||
<div className="rounded overflow-hidden shadow-2xl">
|
<Container>
|
||||||
<canvas
|
<canvas
|
||||||
ref={canvasRef}
|
ref={canvasRef}
|
||||||
width={
|
width={
|
||||||
|
@ -62,7 +69,7 @@ const ReferenceWindow: VFC<ReferenceWindowProps> = ({height}) => {
|
||||||
}
|
}
|
||||||
height={height}
|
height={height}
|
||||||
/>
|
/>
|
||||||
</div>
|
</Container>
|
||||||
) : null
|
) : null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,44 @@ interface OptionButtonProps<Option> {
|
||||||
onClick: () => void
|
onClick: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
// const Ro = styled(TooltipReference)``
|
const _TooltipRef = styled(TooltipReference)<{selected: boolean}>`
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: auto;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 1.25rem;
|
||||||
|
font-weight: 600;
|
||||||
|
height: 1.75rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
border: 0 transparent;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
border-top-left-radius: 0.25rem;
|
||||||
|
border-bottom-left-radius: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-top-right-radius: 0.25rem;
|
||||||
|
border-bottom-right-radius: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
color: ${({selected}) => (selected ? 'white' : 'rgba(55, 65, 81, 1)')};
|
||||||
|
background-color: ${({selected}) =>
|
||||||
|
selected ? 'rgba(6, 95, 70, 1)' : 'rgba(243, 244, 246, 1);'};
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: ${({selected}) =>
|
||||||
|
selected ? 'rgba(6, 78, 59, 1)' : 'rgba(229, 231, 235, 1);'};
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
function OptionButton<Option>({
|
function OptionButton<Option>({
|
||||||
value,
|
value,
|
||||||
|
@ -25,19 +62,15 @@ function OptionButton<Option>({
|
||||||
const tooltip = useTooltipState()
|
const tooltip = useTooltipState()
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<TooltipReference
|
<_TooltipRef
|
||||||
{...tooltip}
|
{...tooltip}
|
||||||
as={Button}
|
forwardedAs={Button}
|
||||||
className={`flex relative items-center justify-center align-middle w-auto text-sm font-semibold h-7 px-2 first:rounded-l last:rounded-r focus:outline-none focus:ring focus:ring-blue-300 focus:ring-inset ${
|
selected={option === value}
|
||||||
option === value
|
|
||||||
? 'bg-green-800 hover:bg-green-900 text-white'
|
|
||||||
: 'bg-gray-100 text-gray-700 hover:bg-gray-200'
|
|
||||||
}`}
|
|
||||||
aria-label={label}
|
aria-label={label}
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
>
|
>
|
||||||
{icon}
|
{icon}
|
||||||
</TooltipReference>
|
</_TooltipRef>
|
||||||
<Tooltip {...tooltip}>{label}</Tooltip>
|
<Tooltip {...tooltip}>{label}</Tooltip>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,27 +4,63 @@ import type {ButtonProps} from 'reakit'
|
||||||
import {Button} from 'reakit'
|
import {Button} from 'reakit'
|
||||||
import type {IconType} from 'react-icons'
|
import type {IconType} from 'react-icons'
|
||||||
import {Tooltip, TooltipReference, useTooltipState} from './Tooltip'
|
import {Tooltip, TooltipReference, useTooltipState} from './Tooltip'
|
||||||
|
import styled from 'styled-components'
|
||||||
|
|
||||||
export interface IconButtonProps extends Exclude<ButtonProps, 'children'> {
|
export interface IconButtonProps extends Exclude<ButtonProps, 'children'> {
|
||||||
icon: ReactElement<IconType>
|
icon: ReactElement<IconType>
|
||||||
label: string
|
label: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const _TooltipRef = styled(TooltipReference)`
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: auto;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 1.25rem;
|
||||||
|
font-weight: 600;
|
||||||
|
height: 1.75rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
border-top-left-radius: 0.25rem;
|
||||||
|
border-bottom-left-radius: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-top-right-radius: 0.25rem;
|
||||||
|
border-bottom-right-radius: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
color: rgba(55, 65, 81, 1);
|
||||||
|
background-color: rgba(243, 244, 246, 1);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: rgba(229, 231, 235, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
border: 0 transparent;
|
||||||
|
`
|
||||||
const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
|
const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
|
||||||
({label, icon, className, ...props}, ref) => {
|
({label, icon, className, ...props}, ref) => {
|
||||||
const tooltip = useTooltipState()
|
const tooltip = useTooltipState()
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<TooltipReference
|
<_TooltipRef
|
||||||
ref={ref}
|
|
||||||
{...props}
|
{...props}
|
||||||
{...tooltip}
|
{...tooltip}
|
||||||
as={Button}
|
forwardedAs={Button}
|
||||||
className={`${className} flex relative items-center justify-center align-middle w-auto text-sm font-semibold h-7 px-2 first:rounded-l last:rounded-r bg-gray-100 text-gray-700 hover:bg-gray-200 focus:outline-none focus:ring focus:ring-blue-300 focus:ring-inset`}
|
|
||||||
aria-label={label}
|
aria-label={label}
|
||||||
>
|
>
|
||||||
{icon}
|
{icon}
|
||||||
</TooltipReference>
|
</_TooltipRef>
|
||||||
<Tooltip {...tooltip}>{label}</Tooltip>
|
<Tooltip {...tooltip}>{label}</Tooltip>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,15 +3,24 @@ import React from 'react'
|
||||||
import {Tooltip as TooltipImpl, TooltipReference, useTooltipState} from 'reakit'
|
import {Tooltip as TooltipImpl, TooltipReference, useTooltipState} from 'reakit'
|
||||||
|
|
||||||
import type {TooltipProps} from 'reakit'
|
import type {TooltipProps} from 'reakit'
|
||||||
|
import styled from 'styled-components'
|
||||||
|
|
||||||
export {TooltipReference, useTooltipState}
|
export {TooltipReference, useTooltipState}
|
||||||
|
|
||||||
|
const Container = styled(TooltipImpl)`
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
padding-top: 0.25rem;
|
||||||
|
padding-bottom: 0.25rem;
|
||||||
|
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 1.25rem;
|
||||||
|
border-radius: 0.125rem;
|
||||||
|
background-color: rgba(55, 65, 81, 1);
|
||||||
|
color: white;
|
||||||
|
pointer-events: none;
|
||||||
|
`
|
||||||
|
|
||||||
export const Tooltip: VFC<TooltipProps> = ({className, ...props}) => (
|
export const Tooltip: VFC<TooltipProps> = ({className, ...props}) => (
|
||||||
<TooltipImpl
|
<Container {...props} className={className as string} />
|
||||||
// @ts-ignore
|
|
||||||
{...props}
|
|
||||||
className={
|
|
||||||
`${className} px-2 py-1 text-white bg-gray-700 rounded-sm text-sm pointer-events-none shadow-md` as string
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
@tailwind base;
|
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
|
||||||
|
|
||||||
@layer base {
|
|
||||||
/*
|
|
||||||
Shadow dom base styles
|
|
||||||
========
|
|
||||||
*/
|
|
||||||
|
|
||||||
#react-three-editable-editor-root {
|
|
||||||
-moz-tab-size: 4;
|
|
||||||
tab-size: 4;
|
|
||||||
line-height: 1.15; /* 1 */
|
|
||||||
-webkit-text-size-adjust: 100%; /* 2 */
|
|
||||||
margin: 0;
|
|
||||||
font-family: system-ui, -apple-system,
|
|
||||||
/* Firefox supports this but not yet `system-ui` */ 'Segoe UI', Roboto,
|
|
||||||
Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas {
|
|
||||||
outline: none
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
10
yarn.lock
10
yarn.lock
|
@ -3804,7 +3804,6 @@ __metadata:
|
||||||
"@types/react": ^17.0.9
|
"@types/react": ^17.0.9
|
||||||
"@types/styled-components": ^5.1.9
|
"@types/styled-components": ^5.1.9
|
||||||
lodash-es: ^4.17.21
|
lodash-es: ^4.17.21
|
||||||
prism-react-renderer: 1.2.1
|
|
||||||
react: ^17.0.2
|
react: ^17.0.2
|
||||||
react-dom: ^17.0.2
|
react-dom: ^17.0.2
|
||||||
react-icons: ^4.2.0
|
react-icons: ^4.2.0
|
||||||
|
@ -14880,15 +14879,6 @@ fsevents@^1.2.7:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"prism-react-renderer@npm:1.2.1":
|
|
||||||
version: 1.2.1
|
|
||||||
resolution: "prism-react-renderer@npm:1.2.1"
|
|
||||||
peerDependencies:
|
|
||||||
react: ">=0.14.9"
|
|
||||||
checksum: b27670bd96e4320075f9a2932d440b3025f9ce1ff64ddd8d8e71867701aabd6c9d2914d5deecb7bef7e92ed59baaef538a31559ca71c76efee3711a064f3e8ff
|
|
||||||
languageName: node
|
|
||||||
linkType: hard
|
|
||||||
|
|
||||||
"private@npm:^0.1.8":
|
"private@npm:^0.1.8":
|
||||||
version: 0.1.8
|
version: 0.1.8
|
||||||
resolution: "private@npm:0.1.8"
|
resolution: "private@npm:0.1.8"
|
||||||
|
|
Loading…
Reference in a new issue