{"version":3,"file":"Selection.cjs","sources":["../src/Selection.tsx"],"sourcesContent":["import * as THREE from 'three'\nimport React, { createContext, useState, useContext, useEffect, useRef, useMemo } from 'react'\n\nexport type Api = {\n  selected: THREE.Object3D[]\n  select: React.Dispatch<React.SetStateAction<THREE.Object3D[]>>\n  enabled: boolean\n}\nexport type SelectApi = JSX.IntrinsicElements['group'] & {\n  enabled?: boolean\n}\n\nexport const selectionContext = createContext<Api | null>(null)\n\nexport function Selection({ children, enabled = true }: { enabled?: boolean; children: React.ReactNode }) {\n  const [selected, select] = useState<THREE.Object3D[]>([])\n  const value = useMemo(() => ({ selected, select, enabled }), [selected, select, enabled])\n  return <selectionContext.Provider value={value}>{children}</selectionContext.Provider>\n}\n\nexport function Select({ enabled = false, children, ...props }: SelectApi) {\n  const group = useRef<THREE.Group>(null!)\n  const api = useContext(selectionContext)\n  useEffect(() => {\n    if (api && enabled) {\n      let changed = false\n      const current: THREE.Object3D<THREE.Event>[] = []\n      group.current.traverse((o) => {\n        o.type === 'Mesh' && current.push(o)\n        if (api.selected.indexOf(o) === -1) changed = true\n      })\n      if (changed) {\n        api.select((state) => [...state, ...current])\n        return () => {\n          api.select((state) => state.filter((selected) => !current.includes(selected)))\n        }\n      }\n    }\n  }, [enabled, children, api])\n  return (\n    <group ref={group} {...props}>\n      {children}\n    </group>\n  )\n}\n"],"names":["createContext","useState","useMemo","jsx","useRef","useContext","useEffect"],"mappings":";;;;AAYa,MAAA,mBAAmBA,oBAA0B,IAAI;AAEvD,SAAS,UAAU,EAAE,UAAU,UAAU,QAA0D;AACxG,QAAM,CAAC,UAAU,MAAM,IAAIC,MAAA,SAA2B,CAAE,CAAA;AACxD,QAAM,QAAQC,MAAAA,QAAQ,OAAO,EAAE,UAAU,QAAQ,QAAQ,IAAI,CAAC,UAAU,QAAQ,OAAO,CAAC;AACxF,SAAQC,2BAAAA,IAAA,iBAAiB,UAAjB,EAA0B,OAAe,SAAS,CAAA;AAC5D;AAEO,SAAS,OAAO,EAAE,UAAU,OAAO,UAAU,GAAG,SAAoB;AACnE,QAAA,QAAQC,aAAoB,IAAK;AACjC,QAAA,MAAMC,iBAAW,gBAAgB;AACvCC,QAAAA,UAAU,MAAM;AACd,QAAI,OAAO,SAAS;AAClB,UAAI,UAAU;AACd,YAAM,UAAyC,CAAA;AACzC,YAAA,QAAQ,SAAS,CAAC,MAAM;AAC5B,UAAE,SAAS,UAAU,QAAQ,KAAK,CAAC;AACnC,YAAI,IAAI,SAAS,QAAQ,CAAC,MAAM;AAAc,oBAAA;AAAA,MAAA,CAC/C;AACD,UAAI,SAAS;AACP,YAAA,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC;AAC5C,eAAO,MAAM;AACX,cAAI,OAAO,CAAC,UAAU,MAAM,OAAO,CAAC,aAAa,CAAC,QAAQ,SAAS,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAEjF;AAAA,IACF;AAAA,EACC,GAAA,CAAC,SAAS,UAAU,GAAG,CAAC;AAC3B,wCACG,SAAM,EAAA,KAAK,OAAQ,GAAG,OACpB,SACH,CAAA;AAEJ;;;;"}