* add package.json Signed-off-by: Jess Frazelle <github@jessfraz.com> initial run; Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> more fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> clientsidescne Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> paths Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix styles Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> combine Signed-off-by: Jess Frazelle <github@jessfraz.com> eslint rule Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> my ocd Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> constants file Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> no more import sceneInfra Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> try fix circular import Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
113 lines
3.5 KiB
TypeScript
113 lines
3.5 KiB
TypeScript
import { useMemo } from 'react'
|
|
import toast from 'react-hot-toast'
|
|
import ReactJson from 'react-json-view'
|
|
|
|
import type { ExtrudeSurface } from '@rust/kcl-lib/bindings/ExtrudeSurface'
|
|
import type { Path } from '@rust/kcl-lib/bindings/Path'
|
|
|
|
import { ActionButton } from '@src/components/ActionButton'
|
|
import Tooltip from '@src/components/Tooltip'
|
|
import { useModelingContext } from '@src/hooks/useModelingContext'
|
|
import { useResolvedTheme } from '@src/hooks/useResolvedTheme'
|
|
import { useKclContext } from '@src/lang/KclProvider'
|
|
import type { VariableMap } from '@src/lang/wasm'
|
|
import { sketchFromKclValueOptional } from '@src/lang/wasm'
|
|
import { Reason, trap } from '@src/lib/trap'
|
|
|
|
export const MemoryPaneMenu = () => {
|
|
const { variables } = useKclContext()
|
|
|
|
function copyProgramMemoryToClipboard() {
|
|
if (globalThis && 'navigator' in globalThis) {
|
|
navigator.clipboard
|
|
.writeText(JSON.stringify(variables))
|
|
.then(() => toast.success('Program memory copied to clipboard'))
|
|
.catch((e) =>
|
|
trap(new Error('Failed to copy program memory to clipboard'))
|
|
)
|
|
}
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<ActionButton
|
|
Element="button"
|
|
iconStart={{
|
|
icon: 'clipboardPlus',
|
|
iconClassName: '!text-current',
|
|
bgClassName: 'bg-transparent',
|
|
}}
|
|
className="!p-0 !bg-transparent hover:text-primary border-transparent hover:border-primary !outline-none"
|
|
onClick={copyProgramMemoryToClipboard}
|
|
>
|
|
<Tooltip position="bottom-right">Copy to clipboard</Tooltip>
|
|
</ActionButton>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export const MemoryPane = () => {
|
|
const theme = useResolvedTheme()
|
|
const { variables } = useKclContext()
|
|
const { state } = useModelingContext()
|
|
const ProcessedMemory = useMemo(() => processMemory(variables), [variables])
|
|
return (
|
|
<div className="h-full relative">
|
|
<div className="absolute inset-0 p-2 flex flex-col items-start">
|
|
<div className="overflow-auto h-full w-full pb-12">
|
|
<ReactJson
|
|
src={ProcessedMemory}
|
|
collapsed={1}
|
|
collapseStringsAfterLength={60}
|
|
enableClipboard={false}
|
|
displayDataTypes={false}
|
|
displayObjectSize={true}
|
|
indentWidth={2}
|
|
quotesOnKeys={false}
|
|
sortKeys={true}
|
|
name={false}
|
|
theme={theme === 'light' ? 'rjv-default' : 'monokai'}
|
|
/>
|
|
</div>
|
|
</div>
|
|
{state.matches('Sketch') && (
|
|
<div
|
|
className="absolute inset-0 dark:bg-chalkboard-90/80 bg-chalkboard-10/80 cursor-not-allowed"
|
|
title="Variables won't update in sketch mode"
|
|
></div>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export const processMemory = (variables: VariableMap) => {
|
|
const processedMemory: any = {}
|
|
for (const [key, val] of Object.entries(variables)) {
|
|
if (val === undefined) continue
|
|
if (
|
|
val.type === 'Sketch' ||
|
|
// @ts-ignore
|
|
val.type !== 'Function'
|
|
) {
|
|
const sk = sketchFromKclValueOptional(val, key)
|
|
if (val.type === 'Solid') {
|
|
processedMemory[key] = val.value.value.map(
|
|
({ ...rest }: ExtrudeSurface) => {
|
|
return rest
|
|
}
|
|
)
|
|
} else if (!(sk instanceof Reason)) {
|
|
processedMemory[key] = sk.paths.map(({ __geoMeta, ...rest }: Path) => {
|
|
return rest
|
|
})
|
|
} else {
|
|
processedMemory[key] = val.value
|
|
}
|
|
//@ts-ignore
|
|
} else if (val.type === 'Function') {
|
|
processedMemory[key] = `__function__`
|
|
}
|
|
}
|
|
return processedMemory
|
|
}
|