{"version":3,"sources":["../lib/main.ts","../lib/ProdTheatreProvider.tsx","../lib/InnerTheatreProvider.tsx","../lib/theatreContext.tsx","../lib/Gizmo.tsx","../lib/useControls.tsx","../lib/theatreComponentContext.tsx","../lib/useSheetObject.tsx","../lib/framerMotionRafDriver.tsx","../lib/useTheatre.tsx","../lib/withTheatre.tsx"],"sourcesContent":["export { TheatreProvider } from \"./ProdTheatreProvider\";\nexport { useControls } from \"./useControls\";\nexport { useSheetObject } from \"./useSheetObject\";\nexport { useTheatre } from \"./useTheatre\";\nexport { withTheatre } from \"./withTheatre\";\n","import React, { ReactNode, useMemo } from \"react\";\nimport { IProject, ISheetObject } from \"@theatre/core\";\nimport { IStudio } from \"@theatre/studio\";\nimport { InnerTheatreProvider } from \"./InnerTheatreProvider\";\nimport { GizmoTheme } from \"./types\";\n\nexport const TheatreProvider = ({\n  project,\n  studio: userStudio,\n  children,\n  theme,\n}: {\n  project: IProject;\n  studio?: IStudio | \"auto\" | false;\n  children: ReactNode;\n  theme?: GizmoTheme;\n}) => {\n  const actualStudio = useMemo(() => {\n    if (userStudio !== \"auto\" && userStudio) {\n      return userStudio;\n    }\n  }, [userStudio]);\n\n  return (\n    <InnerTheatreProvider project={project} studio={actualStudio} theme={theme}>\n      {children}\n    </InnerTheatreProvider>\n  );\n};\n","import React, { ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { IProject, ISheetObject } from \"@theatre/core\";\nimport { IStudio } from \"@theatre/studio\";\nimport { theatreContext } from \"./theatreContext\";\nimport { GizmoTarget, GizmoTheme } from \"./types\";\nimport { Gizmo } from \"./Gizmo\";\n\nfunction keyFromAddress(object: ISheetObject): string {\n  let key = \"\";\n\n  for (const part of Object.values(object.address)) {\n    key += part;\n  }\n\n  return key;\n}\n\nexport const InnerTheatreProvider = ({\n  project,\n  studio,\n  children,\n  theme,\n}: {\n  project: IProject;\n  studio?: IStudio;\n  children: ReactNode;\n  theme?: GizmoTheme;\n}) => {\n  const defaultGizmoTheme = {\n    normalColor: \"rgb(60, 140, 219)\",\n    selectedColor: \"rgb(31, 121, 210)\",\n    fillOpacity: 0.2,\n    width: 3,\n  };\n\n  const [gizmoTargets, setGizmoTargets] = useState<GizmoTarget[]>([]);\n  const [isGizmoActive, setIsGizmoActive] = useState(false);\n  const [selectedObject, setSelectedObject] = useState<ISheetObject | null>(\n    null\n  );\n\n  const registerGizmoTarget = useCallback<\n    (gizmoTarget: GizmoTarget) => () => void\n  >((gizmoTarget) => {\n    setGizmoTargets((gizmoTargets) => [...gizmoTargets, gizmoTarget]);\n\n    return () => {\n      setGizmoTargets((gizmoTargets) =>\n        gizmoTargets.filter((e) => e !== gizmoTarget)\n      );\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!studio) {\n      setSelectedObject(null);\n    } else {\n      setSelectedObject(\n        (studio.selection.filter(\n          (e) => e.type === \"Theatre_SheetObject_PublicAPI\"\n        )[0] as ISheetObject | undefined) ?? null\n      );\n      studio.onSelectionChange((selection) => {\n        const object = selection.filter(\n          (e) => e.type === \"Theatre_SheetObject_PublicAPI\"\n        )[0] as ISheetObject | undefined;\n        setSelectedObject(object ?? null);\n      });\n    }\n  }, [studio]);\n\n  useEffect(() => {\n    if (!studio) {\n      return;\n    }\n\n    const keyDown = (e: KeyboardEvent) => {\n      if (e.altKey === true) {\n        setIsGizmoActive(true);\n      }\n    };\n\n    const keyUp = (e: KeyboardEvent) => {\n      if (e.altKey === false) {\n        setIsGizmoActive(false);\n      }\n    };\n\n    document.addEventListener(\"keydown\", keyDown);\n    document.addEventListener(\"keyup\", keyUp);\n\n    return () => {\n      document.removeEventListener(\"keydown\", keyDown);\n      document.removeEventListener(\"keyup\", keyUp);\n    };\n  }, [studio]);\n\n  return (\n    <theatreContext.Provider\n      value={{\n        project,\n        studio: studio,\n        gizmoTheme: theme ?? defaultGizmoTheme,\n        registerGizmoTarget,\n        selectedObject,\n      }}\n    >\n      {isGizmoActive && (\n        <div\n          style={{\n            position: \"fixed\",\n            top: 0,\n            left: 0,\n            zIndex: 999999999,\n          }}\n        >\n          {gizmoTargets.map((gizmoTarget) => (\n            <Gizmo\n              key={keyFromAddress(gizmoTarget.sheetObject)}\n              gizmoTarget={gizmoTarget}\n            />\n          ))}\n        </div>\n      )}\n      {children}\n    </theatreContext.Provider>\n  );\n};\n","import { createContext } from \"react\";\nimport { IProject, ISheetObject } from \"@theatre/core\";\nimport { IStudio } from \"@theatre/studio\";\nimport { GizmoTarget, GizmoTheme } from \"./types\";\n\nexport const theatreContext = createContext<{\n  project: IProject;\n  studio?: IStudio;\n  gizmoTheme: GizmoTheme;\n  registerGizmoTarget: (gizmoTarget: GizmoTarget) => () => void;\n  selectedObject: ISheetObject | null;\n}>(null!);\n","import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { useAnimationFrame, useMotionValue } from \"framer-motion\";\nimport { IScrub } from \"@theatre/studio\";\nimport { theatreContext } from \"./theatreContext\";\nimport { GizmoTarget } from \"./types\";\nimport { motion } from \"framer-motion\";\n\nexport function Gizmo({ gizmoTarget }: { gizmoTarget: GizmoTarget }) {\n  const {\n    gizmoTheme: theme,\n    studio,\n    selectedObject,\n  } = useContext(theatreContext);\n\n  const { target, options, axesMap, sheetObject } = gizmoTarget;\n\n  const [isHovered, setIsHovered] = useState(false);\n  const isSelected = selectedObject === sheetObject;\n\n  const color = isSelected ? theme.selectedColor : theme.normalColor;\n  const zIndex = useMotionValue(options.zIndex ?? 0);\n\n  const x = useMotionValue(0);\n  const y = useMotionValue(0);\n  const width = useMotionValue(0);\n  const height = useMotionValue(0);\n\n  useAnimationFrame(() => {\n    const bounds = target.getBoundingClientRect();\n\n    if (!options.ignoreComputedZIndex) {\n      zIndex.set(\n        (options.zIndex ?? 0) + Number(getComputedStyle(target).zIndex)\n      );\n    }\n\n    x.set(bounds.x);\n    y.set(bounds.y);\n    width.set(bounds.width);\n    height.set(bounds.height);\n  });\n\n  const scrubRef = useRef<IScrub | null>(null);\n  const initialRef = useRef(sheetObject.value);\n  const initialStylesRef = useRef({\n    userSelect: document.body.style.userSelect,\n    cursor: document.body.style.cursor,\n  });\n\n  // cleanup on unmount\n  useEffect(() => {\n    return () => {\n      if (scrubRef.current) {\n        scrubRef.current.discard();\n      }\n\n      document.body.style.userSelect = initialStylesRef.current.userSelect;\n      document.body.style.webkitUserSelect =\n        initialStylesRef.current.userSelect;\n      document.body.style.cursor = initialStylesRef.current.cursor;\n    };\n  }, []);\n\n  return (\n    <motion.div\n      style={{\n        position: \"absolute\",\n        top: 0,\n        left: 0,\n        borderWidth: theme.width,\n        borderStyle: isSelected ? \"solid\" : \"dashed\",\n        borderColor: color,\n        backgroundColor: `rgb(from ${color} r g b / ${\n          isHovered && !isSelected ? theme.fillOpacity : 0\n        })`,\n        boxSizing: \"border-box\",\n        contain: \"strict\",\n        userSelect: \"none\",\n        WebkitUserSelect: \"none\",\n        touchAction: \"none\",\n        x,\n        y,\n        width,\n        height,\n        zIndex,\n      }}\n      onHoverStart={() => setIsHovered(true)}\n      onHoverEnd={() => setIsHovered(false)}\n      onTap={() => {\n        if (studio && !scrubRef.current) {\n          studio.setSelection([gizmoTarget.sheetObject]);\n          studio.ui.restore();\n        }\n      }}\n      onPanStart={() => {\n        if (!studio) {\n          return;\n        }\n\n        studio.setSelection([gizmoTarget.sheetObject]);\n\n        if (scrubRef.current) {\n          scrubRef.current.discard();\n        }\n\n        scrubRef.current = studio.scrub();\n        initialRef.current = sheetObject.value;\n\n        initialStylesRef.current = {\n          userSelect: document.body.style.userSelect,\n          cursor: document.body.style.cursor,\n        };\n\n        document.body.style.userSelect = \"none\";\n        document.body.style.webkitUserSelect = \"none\";\n        document.body.style.cursor = \"move\";\n      }}\n      onPan={(event, info) => {\n        if (!scrubRef.current) {\n          return;\n        }\n\n        const xKey = axesMap.translate.x;\n        const yKey = axesMap.translate.y;\n\n        scrubRef.current.capture(({ set }) => {\n          if (xKey) {\n            set(\n              sheetObject.props[xKey],\n              initialRef.current[xKey] +\n                info.offset.x * (options.translate?.strength ?? 1)\n            );\n          }\n\n          if (yKey) {\n            set(\n              sheetObject.props[yKey],\n              initialRef.current[yKey] +\n                info.offset.y * (options.translate?.strength ?? 1)\n            );\n          }\n        });\n      }}\n      onPanEnd={() => {\n        if (scrubRef.current) {\n          scrubRef.current.commit();\n          scrubRef.current = null;\n        }\n\n        document.body.style.userSelect = initialStylesRef.current.userSelect;\n        document.body.style.webkitUserSelect =\n          initialStylesRef.current.userSelect;\n        document.body.style.cursor = initialStylesRef.current.cursor;\n      }}\n    />\n  );\n}\n","import { useContext } from \"react\";\nimport { theatreComponentContext } from \"./theatreComponentContext\";\n\nexport function useControls() {\n  const { sheet } = useContext(theatreComponentContext);\n\n  return sheet.sequence;\n}\n","import { createContext } from \"react\";\nimport { ISheet } from \"@theatre/core\";\n\nexport const theatreComponentContext = createContext<{\n  sheet: ISheet;\n}>(null!);\n","import { useContext, useEffect, useMemo, useState } from \"react\";\nimport {\n  ISheetObject,\n  UnknownShorthandCompoundProps,\n  onChange,\n} from \"@theatre/core\";\nimport { MotionValue, motionValue } from \"framer-motion\";\nimport { theatreContext } from \"./theatreContext\";\nimport { framerMotionRafDriver } from \"./framerMotionRafDriver\";\nimport { theatreComponentContext } from \"./theatreComponentContext\";\nimport { GizmoOptions } from \"./types\";\n\ntype MotionValueObject<Props extends UnknownShorthandCompoundProps> = {\n  [K in keyof ISheetObject<Props>[\"value\"]]: MotionValue<\n    ISheetObject<Props>[\"value\"][K]\n  >;\n};\n\ntype MotionValueObjectWithStudio<Props extends UnknownShorthandCompoundProps> =\n  MotionValueObject<Props> & {\n    $studio: {\n      isSelected: boolean;\n      select: () => void;\n      createGizmo: (\n        options?: GizmoOptions\n      ) => (element: HTMLElement | null) => void;\n    };\n  };\n\nexport function useSheetObject<\n  Props extends UnknownShorthandCompoundProps = UnknownShorthandCompoundProps\n>(objectId: string, initial: Props): MotionValueObjectWithStudio<Props> {\n  const { sheet } = useContext(theatreComponentContext);\n  const { studio, selectedObject, registerGizmoTarget } =\n    useContext(theatreContext);\n  const [selectionTarget, setSelectionTarget] = useState<{\n    element: HTMLElement;\n    options: GizmoOptions;\n  } | null>(null);\n\n  const [object, setObject] = useState(() =>\n    sheet.object(objectId, initial, { reconfigure: true })\n  );\n\n  const [motionValues, setMotionValues] = useState<MotionValueObject<Props>>(\n    () => {\n      const values = {} as MotionValueObject<Props>;\n\n      for (const key in object.value) {\n        values[key] = motionValue(object.value[key]);\n      }\n\n      return values;\n    }\n  );\n\n  const motionValuesWithStudio = useMemo(\n    (): MotionValueObjectWithStudio<Props> => ({\n      ...motionValues,\n      $studio: {\n        isSelected: selectedObject === object,\n        select: () => {\n          if (!studio) {\n            return;\n          }\n          studio.setSelection([object]);\n        },\n        createGizmo:\n          (options = {}) =>\n          (element: HTMLElement | null) => {\n            if (!element) {\n              return;\n            }\n            setSelectionTarget({ element, options });\n          },\n      },\n    }),\n    [motionValues, object, selectedObject, studio]\n  );\n\n  useEffect(() => {\n    if (selectionTarget) {\n      const options = selectionTarget.options;\n      const deregister = registerGizmoTarget({\n        sheetObject: object,\n        target: selectionTarget.element,\n        options,\n        axesMap: {\n          translate: {\n            x:\n              Object.entries(motionValues).find(\n                (e) => e[1] === (options.translate?.x as MotionValue)\n              )?.[0] ?? null,\n            y:\n              Object.entries(motionValues).find(\n                (e) => e[1] === (options.translate?.y as MotionValue)\n              )?.[0] ?? null,\n          },\n        },\n      });\n\n      return deregister;\n    }\n  }, [motionValues, object, registerGizmoTarget, selectionTarget]);\n\n  useEffect(() => {\n    setMotionValues((prev) => {\n      // ensure motion values object matches sheet object\n      const newMotionValues = {} as MotionValueObject<Props>;\n      for (const key in object.value) {\n        if (!prev[key]) {\n          newMotionValues[key] = motionValue(object.value[key]);\n        } else {\n          newMotionValues[key] = prev[key];\n        }\n      }\n\n      // destroy any motion value in prev that is not in new\n      for (const key in prev) {\n        if (!newMotionValues[key]) {\n          prev[key].destroy();\n        }\n      }\n\n      return newMotionValues;\n    });\n  }, [object]);\n\n  useEffect(() => {\n    const unsubscribe = onChange(\n      object.props,\n      (values: any) => {\n        for (const key in values) {\n          if (motionValues[key]) {\n            motionValues[key].set(values[key]);\n          }\n        }\n      },\n      framerMotionRafDriver\n    );\n\n    return unsubscribe;\n  }, [object, motionValues]);\n\n  useEffect(() => {\n    setObject(sheet.object(objectId, initial, { reconfigure: true }));\n  }, [initial, objectId, sheet]);\n\n  return motionValuesWithStudio;\n}\n","import { createRafDriver } from \"@theatre/core\";\nimport { cancelFrame, frame } from \"framer-motion\";\n\nconst update: Parameters<typeof frame.update>[0] = ({ timestamp }) => {\n  framerMotionRafDriver.tick(timestamp);\n};\n\nconst start = (): void => {\n  frame.update(update, true);\n};\n\nconst stop = (): void => {\n  cancelFrame(update);\n};\n\nexport const framerMotionRafDriver = createRafDriver({\n  name: \"framer-motion-theatre\",\n  start,\n  stop,\n});\n","import { useContext } from \"react\";\nimport { theatreContext } from \"./theatreContext\";\n\nexport function useTheatre() {\n  const { project, studio } = useContext(theatreContext);\n\n  return { project, studio };\n}\n","import React, { useContext, useMemo, useState } from \"react\";\nimport { theatreContext } from \"./theatreContext\";\nimport { theatreComponentContext } from \"./theatreComponentContext\";\n\nexport function withTheatre<P>(componentId: string, Component: React.FC<P>) {\n  return (props: P & { instanceId: string }) => {\n    const { project } = useContext(theatreContext);\n\n    const [sheet] = useState(() =>\n      project.sheet(componentId, props.instanceId)\n    );\n\n    const contextValue = useMemo(() => ({ sheet }), [sheet]);\n\n    return (\n      <theatreComponentContext.Provider value={contextValue}>\n        <Component {...props} />\n      </theatreComponentContext.Provider>\n    );\n  };\n}\n"],"mappings":"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","names":["main_exports","__export","TheatreProvider","useControls","useSheetObject","useTheatre","withTheatre","__toCommonJS","import_react","import_react","import_react","theatreContext","import_react","import_framer_motion","import_framer_motion","import_jsx_runtime","Gizmo","gizmoTarget","theme","studio","selectedObject","theatreContext","target","options","axesMap","sheetObject","isHovered","setIsHovered","isSelected","color","zIndex","x","y","width","height","bounds","scrubRef","initialRef","initialStylesRef","event","info","xKey","yKey","set","import_jsx_runtime","keyFromAddress","object","key","part","InnerTheatreProvider","project","studio","children","theme","defaultGizmoTheme","gizmoTargets","setGizmoTargets","isGizmoActive","setIsGizmoActive","selectedObject","setSelectedObject","registerGizmoTarget","gizmoTarget","e","selection","keyDown","keyUp","theatreContext","Gizmo","import_jsx_runtime","TheatreProvider","project","userStudio","children","theme","actualStudio","InnerTheatreProvider","import_react","import_react","theatreComponentContext","useControls","sheet","theatreComponentContext","import_react","import_core","import_framer_motion","import_core","import_framer_motion","update","timestamp","framerMotionRafDriver","start","stop","useSheetObject","objectId","initial","sheet","theatreComponentContext","studio","selectedObject","registerGizmoTarget","theatreContext","selectionTarget","setSelectionTarget","object","setObject","motionValues","setMotionValues","values","key","motionValuesWithStudio","options","element","e","prev","newMotionValues","framerMotionRafDriver","import_react","useTheatre","project","studio","theatreContext","import_react","import_jsx_runtime","withTheatre","componentId","Component","props","project","theatreContext","sheet","contextValue","theatreComponentContext"]}