@labelbee/lb-components 1.6.0-alpha.0 → 1.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/assets/annotation/lineTool/icon_line.svg.js +1 -0
  2. package/dist/assets/annotation/pointCloudTool/changePointCloudValid.svg.js +1 -0
  3. package/dist/assets/annotation/pointCloudTool/copy.svg.js +1 -0
  4. package/dist/assets/annotation/pointCloudTool/nextBox.svg.js +1 -0
  5. package/dist/assets/annotation/pointCloudTool/patse.svg.js +1 -0
  6. package/dist/assets/annotation/pointCloudTool/prevBox.svg.js +1 -0
  7. package/dist/assets/annotation/pointCloudTool/rotate180_black.svg.js +1 -0
  8. package/dist/assets/annotation/pointCloudTool/selectAll.svg.js +1 -0
  9. package/dist/assets/annotation/pointCloudTool/selectMultiple.svg.js +1 -0
  10. package/dist/assets/annotation/pointTool/icon_point.svg.js +1 -0
  11. package/dist/assets/annotation/polygonTool/icon_polygon.svg.js +1 -0
  12. package/dist/assets/annotation/rectTool/icon_rect.svg.js +1 -0
  13. package/dist/assets/annotation/rectTool/{icon_rectPattern.svg.js → icon_rect_a.svg.js} +0 -0
  14. package/dist/assets/{cssIcon/annotation/icon_clearSmall.svg → icons/25541b4d.svg} +0 -0
  15. package/dist/assets/icons/25ef334b.svg +8 -0
  16. package/dist/assets/icons/7eadb9c4.svg +5 -0
  17. package/dist/assets/icons/9d70807.svg +5 -0
  18. package/dist/assets/icons/c5b4262e.png +0 -0
  19. package/dist/assets/{cssIcon/slide_btn.svg → icons/cc550fff.svg} +0 -0
  20. package/dist/assets/{cssIcon/annotation/icon_clearSmall_a.svg → icons/dc9b6bfc.svg} +0 -0
  21. package/dist/assets/icons/e4f0b7fe.png +0 -0
  22. package/dist/components/AnnotationView/index.js +1 -1
  23. package/dist/components/customResizeHook/index.js +1 -1
  24. package/dist/components/pointCloudView/PointCloud2DView.js +1 -0
  25. package/dist/components/pointCloudView/PointCloud3DView.js +1 -0
  26. package/dist/components/pointCloudView/PointCloudBackView.js +1 -0
  27. package/dist/components/pointCloudView/PointCloudContext.js +1 -0
  28. package/dist/components/pointCloudView/PointCloudInfos.js +1 -0
  29. package/dist/components/pointCloudView/PointCloudLayout.js +1 -0
  30. package/dist/components/pointCloudView/PointCloudListener.js +1 -0
  31. package/dist/components/pointCloudView/PointCloudSideView.js +1 -0
  32. package/dist/components/pointCloudView/PointCloudTopView.js +1 -0
  33. package/dist/components/pointCloudView/hooks/useBoxes.js +1 -0
  34. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -0
  35. package/dist/components/pointCloudView/hooks/useRotate.js +1 -0
  36. package/dist/components/pointCloudView/hooks/useSingleBox.js +1 -0
  37. package/dist/components/pointCloudView/index.js +1 -0
  38. package/dist/hooks/annotation.js +1 -0
  39. package/dist/index.css +259 -43
  40. package/dist/index.js +1 -1
  41. package/dist/store/annotation/map.js +1 -0
  42. package/dist/store/annotation/reducer.js +1 -1
  43. package/dist/types/App.d.ts +2 -2
  44. package/dist/types/components/AnnotationView/index.d.ts +2 -2
  45. package/dist/types/components/pointCloudView/PointCloud2DView.d.ts +6 -0
  46. package/dist/types/components/pointCloudView/PointCloud3DView.d.ts +6 -0
  47. package/dist/types/components/pointCloudView/PointCloudBackView.d.ts +3 -0
  48. package/dist/types/components/pointCloudView/PointCloudContext.d.ts +29 -0
  49. package/dist/types/components/pointCloudView/PointCloudInfos.d.ts +19 -0
  50. package/dist/types/components/pointCloudView/PointCloudLayout.d.ts +6 -0
  51. package/dist/types/components/pointCloudView/PointCloudListener.d.ts +6 -0
  52. package/dist/types/components/pointCloudView/PointCloudSideView.d.ts +6 -0
  53. package/dist/types/components/pointCloudView/PointCloudTopView.d.ts +6 -0
  54. package/dist/types/components/pointCloudView/hooks/useBoxes.d.ts +10 -0
  55. package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +55 -0
  56. package/dist/types/components/pointCloudView/hooks/useRotate.d.ts +8 -0
  57. package/dist/types/components/pointCloudView/hooks/useSingleBox.d.ts +13 -0
  58. package/dist/types/components/pointCloudView/index.d.ts +15 -0
  59. package/dist/types/components/videoPlayer/TagToolInstanceAdaptor.d.ts +1 -1
  60. package/dist/types/components/videoPlayer/index.d.ts +1 -1
  61. package/dist/types/hooks/annotation.d.ts +20 -0
  62. package/dist/types/index.d.ts +1 -0
  63. package/dist/types/store/annotation/actionCreators.d.ts +4 -4
  64. package/dist/types/store/annotation/map.d.ts +13 -0
  65. package/dist/types/store/annotation/reducer.d.ts +1 -1
  66. package/dist/types/utils/PageOperator.d.ts +1 -1
  67. package/dist/types/utils/StepUtils.d.ts +7 -0
  68. package/dist/types/utils/ToolUtils.d.ts +10 -0
  69. package/dist/types/utils/dom.d.ts +1 -1
  70. package/dist/types/utils/index.d.ts +1 -1
  71. package/dist/types/views/MainView/sidebar/GeneralOperation/ActionsConfirm.d.ts +12 -0
  72. package/dist/types/views/MainView/sidebar/GeneralOperation/index.d.ts +5 -1
  73. package/dist/types/views/MainView/sidebar/GeneralOperation/useOperationList.d.ts +12 -0
  74. package/dist/types/views/MainView/sidebar/PointCloudToolSidebar/index.d.ts +11 -0
  75. package/dist/types/views/MainView/sidebar/ToolIcons.d.ts +11 -0
  76. package/dist/types/views/MainView/sidebar/ToolStyle/index.d.ts +1 -1
  77. package/dist/types/views/MainView/sidebar/index.d.ts +1 -0
  78. package/dist/types/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.d.ts +3 -0
  79. package/dist/types/views/MainView/toolFooter/Pagination.d.ts +12 -2
  80. package/dist/types/views/MainView/toolFooter/ZoomController/index.d.ts +14 -4
  81. package/dist/types/views/MainView/toolFooter/index.d.ts +5 -8
  82. package/dist/types/views/MainView/toolHeader/ExportData/index.d.ts +1 -1
  83. package/dist/utils/StepUtils.js +1 -1
  84. package/dist/utils/ToolUtils.js +1 -0
  85. package/dist/utils/dom.js +1 -1
  86. package/dist/utils/index.js +1 -1
  87. package/dist/views/MainView/index.js +1 -1
  88. package/dist/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -0
  89. package/dist/views/MainView/sidebar/GeneralOperation/index.js +1 -1
  90. package/dist/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -0
  91. package/dist/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -0
  92. package/dist/views/MainView/sidebar/ToolIcons.js +1 -0
  93. package/dist/views/MainView/sidebar/index.js +1 -1
  94. package/dist/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js +1 -1
  95. package/dist/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js +1 -0
  96. package/dist/views/MainView/toolFooter/Pagination.js +1 -1
  97. package/dist/views/MainView/toolFooter/ZoomController/index.js +1 -1
  98. package/dist/views/MainView/toolFooter/index.js +1 -1
  99. package/es/App.js.map +1 -1
  100. package/es/assets/annotation/lineTool/icon_line.svg.js +1 -0
  101. package/es/assets/annotation/lineTool/icon_line.svg.js.map +1 -0
  102. package/es/assets/annotation/pointCloudTool/changePointCloudValid.svg.js +1 -0
  103. package/es/assets/annotation/pointCloudTool/changePointCloudValid.svg.js.map +1 -0
  104. package/es/assets/annotation/pointCloudTool/copy.svg.js +1 -0
  105. package/es/assets/annotation/pointCloudTool/copy.svg.js.map +1 -0
  106. package/es/assets/annotation/pointCloudTool/nextBox.svg.js +1 -0
  107. package/es/assets/annotation/pointCloudTool/nextBox.svg.js.map +1 -0
  108. package/es/assets/annotation/pointCloudTool/patse.svg.js +1 -0
  109. package/es/assets/annotation/pointCloudTool/patse.svg.js.map +1 -0
  110. package/es/assets/annotation/pointCloudTool/prevBox.svg.js +1 -0
  111. package/es/assets/annotation/pointCloudTool/prevBox.svg.js.map +1 -0
  112. package/es/assets/annotation/pointCloudTool/rotate180_black.svg.js +1 -0
  113. package/es/assets/annotation/pointCloudTool/rotate180_black.svg.js.map +1 -0
  114. package/es/assets/annotation/pointCloudTool/selectAll.svg.js +1 -0
  115. package/es/assets/annotation/pointCloudTool/selectAll.svg.js.map +1 -0
  116. package/es/assets/annotation/pointCloudTool/selectMultiple.svg.js +1 -0
  117. package/es/assets/annotation/pointCloudTool/selectMultiple.svg.js.map +1 -0
  118. package/es/assets/annotation/pointTool/icon_point.svg.js +1 -0
  119. package/es/assets/annotation/pointTool/icon_point.svg.js.map +1 -0
  120. package/es/assets/annotation/polygonTool/icon_polygon.svg.js +1 -0
  121. package/es/assets/annotation/polygonTool/icon_polygon.svg.js.map +1 -0
  122. package/es/assets/annotation/rectTool/icon_rect.svg.js +1 -0
  123. package/es/assets/annotation/rectTool/icon_rect.svg.js.map +1 -0
  124. package/es/assets/annotation/rectTool/icon_rectPattern.svg.js +4 -1
  125. package/es/assets/annotation/rectTool/icon_rect_a.svg.js +1 -0
  126. package/es/assets/annotation/rectTool/icon_rect_a.svg.js.map +1 -0
  127. package/es/components/AnnotationView/index.js +1 -1
  128. package/es/components/AnnotationView/index.js.map +1 -1
  129. package/es/components/customResizeHook/index.js +1 -1
  130. package/es/components/customResizeHook/index.js.map +1 -1
  131. package/es/components/pointCloudView/PointCloud2DView.js +1 -0
  132. package/es/components/pointCloudView/PointCloud2DView.js.map +1 -0
  133. package/es/components/pointCloudView/PointCloud3DView.js +1 -1
  134. package/es/components/pointCloudView/PointCloud3DView.js.map +1 -0
  135. package/es/components/pointCloudView/PointCloudBackView.js +1 -0
  136. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -0
  137. package/es/components/pointCloudView/PointCloudContext.js +1 -0
  138. package/es/components/pointCloudView/PointCloudContext.js.map +1 -0
  139. package/es/components/pointCloudView/PointCloudInfos.js +1 -0
  140. package/es/components/pointCloudView/PointCloudInfos.js.map +1 -0
  141. package/es/components/pointCloudView/PointCloudLayout.js +1 -1
  142. package/es/components/pointCloudView/PointCloudLayout.js.map +1 -0
  143. package/es/components/pointCloudView/PointCloudListener.js +1 -0
  144. package/es/components/pointCloudView/PointCloudListener.js.map +1 -0
  145. package/es/components/pointCloudView/PointCloudSideView.js +1 -0
  146. package/es/components/pointCloudView/PointCloudSideView.js.map +1 -0
  147. package/es/components/pointCloudView/PointCloudTopView.js +1 -1
  148. package/es/components/pointCloudView/PointCloudTopView.js.map +1 -0
  149. package/es/components/pointCloudView/data.js +4 -0
  150. package/es/components/pointCloudView/data.js.map +1 -0
  151. package/es/components/pointCloudView/hooks/useBoxes.js +1 -0
  152. package/es/components/pointCloudView/hooks/useBoxes.js.map +1 -0
  153. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -0
  154. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -0
  155. package/es/components/pointCloudView/hooks/useRotate.js +1 -0
  156. package/es/components/pointCloudView/hooks/useRotate.js.map +1 -0
  157. package/es/components/pointCloudView/hooks/useSingleBox.js +1 -0
  158. package/es/components/pointCloudView/hooks/useSingleBox.js.map +1 -0
  159. package/es/components/pointCloudView/index.js +1 -1
  160. package/es/components/pointCloudView/index.js.map +1 -0
  161. package/es/hooks/annotation.js +1 -0
  162. package/es/hooks/annotation.js.map +1 -0
  163. package/es/hooks/useSize.js.map +1 -1
  164. package/es/index.css +1350 -0
  165. package/es/index.js +1 -1
  166. package/es/index.js.map +1 -1
  167. package/es/store/annotation/map.js +1 -0
  168. package/es/store/annotation/map.js.map +1 -0
  169. package/es/store/annotation/reducer.js +1 -1
  170. package/es/store/annotation/reducer.js.map +1 -1
  171. package/es/utils/StepUtils.js +1 -1
  172. package/es/utils/StepUtils.js.map +1 -1
  173. package/es/utils/ToolUtils.js.map +1 -0
  174. package/es/utils/dom.js +1 -1
  175. package/es/utils/dom.js.map +1 -1
  176. package/es/utils/index.js +1 -1
  177. package/es/utils/index.js.map +1 -1
  178. package/es/views/MainView/index.js +1 -1
  179. package/es/views/MainView/index.js.map +1 -1
  180. package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -0
  181. package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js.map +1 -0
  182. package/es/views/MainView/sidebar/GeneralOperation/index.js +1 -1
  183. package/es/views/MainView/sidebar/GeneralOperation/index.js.map +1 -1
  184. package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -0
  185. package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js.map +1 -0
  186. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -0
  187. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js.map +1 -0
  188. package/es/views/MainView/sidebar/ToolIcons.js +1 -0
  189. package/es/views/MainView/sidebar/ToolIcons.js.map +1 -0
  190. package/es/views/MainView/sidebar/index.js +1 -1
  191. package/es/views/MainView/sidebar/index.js.map +1 -1
  192. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js +1 -1
  193. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js.map +1 -1
  194. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js +1 -0
  195. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js.map +1 -0
  196. package/es/views/MainView/toolFooter/Pagination.js +1 -1
  197. package/es/views/MainView/toolFooter/Pagination.js.map +1 -1
  198. package/es/views/MainView/toolFooter/ZoomController/index.js +1 -1
  199. package/es/views/MainView/toolFooter/ZoomController/index.js.map +1 -1
  200. package/es/views/MainView/toolFooter/index.js +1 -1
  201. package/es/views/MainView/toolFooter/index.js.map +1 -1
  202. package/package.json +11 -9
  203. package/dist/index.css.map +0 -1
@@ -0,0 +1 @@
1
+ import{useContext as m,useState as D,useMemo as x,useCallback as l}from"react";import f from"lodash";import{message as i}from"antd";import{usePointCloudViews as E}from"./usePointCloudViews.js";import{PointCloudContext as h}from"../PointCloudContext.js";const F=()=>{const{selectedIDs:t,pointCloudBoxList:u,setPointCloudResult:c}=m(h),[e,s]=D([]),{pointCloudBoxListUpdated:n}=E(),d=o=>u.some(a=>o.some(C=>C.id===a.id)),r=x(()=>u.filter(o=>t.includes(o.id)),[t,u]),p=l(()=>{r.length>0?s(f.cloneDeep(r)):(s([]),i.error("\u590D\u5236\u5185\u5BB9\u4E3A\u7A7A\uFF0C\u8BF7\u9009\u62E9\u5BF9\u5E94\u7684\u70B9\u4E91\u6570\u636E"))},[t,u]),B=l(()=>{if(e.length===0){i.error("\u9009\u8005\u5BF9\u5E94\u7684\u70B9\u4E91\u6570\u636E\u5E76\u8FDB\u884C\u590D\u5236");return}d(e)?i.error("\u5B58\u5728\u91CD\u590DID,\u590D\u5236\u5931\u8D25"):(c(e),n==null||n(e),s([]))},[e,u]);return{copySelectedBoxes:p,pasteSelectedBoxes:B,copiedBoxes:e,selectedBoxes:r}};export{F as useBoxes};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBoxes.js","sources":["../../../../src/components/pointCloudView/hooks/useBoxes.tsx"],"sourcesContent":["import { IPointCloudBoxList } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport _ from 'lodash';\nimport { message } from 'antd';\nimport { usePointCloudViews } from './usePointCloudViews';\nimport { PointCloudContext } from '../PointCloudContext';\n\n/**\n * Actions for selected boxes\n */\nexport const useBoxes = () => {\n const { selectedIDs, pointCloudBoxList, setPointCloudResult } = useContext(PointCloudContext);\n const [copiedBoxes, setCopiedBoxes] = useState<IPointCloudBoxList>([]);\n const { pointCloudBoxListUpdated } = usePointCloudViews();\n\n const hasDuplicateID = (checkBoxList: IPointCloudBoxList) => {\n return pointCloudBoxList.some((item) => {\n return checkBoxList.some((i) => i.id === item.id);\n });\n };\n\n const selectedBoxes = useMemo(() => {\n return pointCloudBoxList.filter((i) => selectedIDs.includes(i.id));\n }, [selectedIDs, pointCloudBoxList]);\n\n const copySelectedBoxes = useCallback(() => {\n if (selectedBoxes.length > 0) {\n setCopiedBoxes(_.cloneDeep(selectedBoxes));\n } else {\n setCopiedBoxes([]);\n message.error('复制内容为空,请选择对应的点云数据');\n }\n }, [selectedIDs, pointCloudBoxList]);\n\n const pasteSelectedBoxes = useCallback(() => {\n if (copiedBoxes.length === 0) {\n message.error('选者对应的点云数据并进行复制');\n return;\n }\n\n const hasDuplicate = hasDuplicateID(copiedBoxes);\n\n if (hasDuplicate) {\n message.error('存在重复ID,复制失败');\n } else {\n /** Paste succeed and empty */\n setPointCloudResult(copiedBoxes);\n pointCloudBoxListUpdated?.(copiedBoxes);\n setCopiedBoxes([]);\n }\n }, [copiedBoxes, pointCloudBoxList]);\n\n return { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes, selectedBoxes };\n};\n"],"names":[],"mappings":";;;;;;AAUO,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,CAAE,WAAA,EAAa,iBAAmB,EAAA,mBAAA,CAAA,GAAwB,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,CAAC,WAAa,EAAA,cAAA,CAAA,GAAkB,QAA6B,CAAA,EAAA,CAAA,CAAA;AACnE,EAAA,MAAM,CAAE,wBAA6B,CAAA,GAAA,kBAAA,EAAA,CAAA;AAErC,EAAM,MAAA,cAAA,GAAiB,CAAC,YAAqC,KAAA;AAC3D,IAAO,OAAA,iBAAA,CAAkB,IAAK,CAAA,CAAC,IAAS,KAAA;AACtC,MAAA,OAAO,aAAa,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,IAAK,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAIlD,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO,kBAAkB,MAAO,CAAA,CAAC,CAAM,KAAA,WAAA,CAAY,SAAS,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,EAC7D,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,MAAA,cAAA,CAAe,EAAE,SAAU,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,KACtB,MAAA;AACL,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AACf,MAAA,OAAA,CAAQ,KAAM,CAAA,wGAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEf,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAI,IAAA,WAAA,CAAY,WAAW,CAAG,EAAA;AAC5B,MAAA,OAAA,CAAQ,KAAM,CAAA,sFAAA,CAAA,CAAA;AACd,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,eAAe,cAAe,CAAA,WAAA,CAAA,CAAA;AAEpC,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,OAAA,CAAQ,KAAM,CAAA,qDAAA,CAAA,CAAA;AAAA,KACT,MAAA;AAEL,MAAoB,mBAAA,CAAA,WAAA,CAAA,CAAA;AACpB,MAA2B,wBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,wBAAA,CAAA,WAAA,CAAA,CAAA;AAC3B,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEhB,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAO,OAAA,CAAE,iBAAmB,EAAA,kBAAA,EAAoB,WAAa,EAAA,aAAA,CAAA,CAAA;AAAA;;;;"}
@@ -0,0 +1 @@
1
+ import{MathUtils as x}from"@labelbee/lb-annotation";import{EPerspectiveView as O}from"@labelbee/lb-utils";import{useContext as Z}from"react";import{PointCloudContext as E}from"../PointCloudContext.js";import{useSingleBox as U}from"./useSingleBox.js";import F from"lodash";import{useSelector as W}from"react-redux";const I=5,f={"3D":"3D",Top:"Top",Side:"Side",Back:"Back"},A=(o,s)=>{const{width:d,height:e}=s,{x:i,y:n}=o;return{x:-n+e/2,y:-(i-d/2)}},b=(o,s,d,e)=>{const[i,n,l,p]=o.pointList.map(h=>A(h,s)),r=x.getLineCenterPoint([i,l]),B=x.getLineLength(i,n),g=x.getLineLength(n,l),u=x.getRadiusFromQuadrangle(o.pointList);let m=0,L=1;if(d){const h=d.getSensesPointZAxisInPolygon([i,n,l,p]);m=(h.maxZ+h.minZ)/2,L=h.maxZ-h.minZ}return e&&(m=e.center.z,L=e.depth),{center:{x:r.x,y:r.y,z:m},width:g,height:B,depth:L,rotation:u,id:o.id,attribute:"",valid:!0}},_=(o,s,d,e)=>{const[i,n,l]=o.pointList,[p,r,B]=s.pointList,g=x.getLineCenterPoint([i,l]),u=x.getLineCenterPoint([p,B]),m={x:g.x-u.x,y:g.y-u.y},L=Math.cos(d.rotation),D=Math.sin(d.rotation),h={x:m.x,y:m.x*D+m.y*L,z:g.y-u.y},v=x.getLineLength(i,n),S=x.getLineLength(p,r),w=v-S,V=x.getLineLength(n,l),k=x.getLineLength(r,B),y=V-k,{newBoxParams:z}=e.getNewBoxBySideUpdate(h,y,w,d);return z},j=(o,s,d,e)=>{if(!d)return;const{pointCloud2dOperation:i,pointCloudInstance:n}=d;n.loadPCDFileByBox(e,o,{width:I,depth:I});const{cameraPositionVector:l}=n.updateOrthoCamera(o,O.Left);n.setInitCameraPosition(l);const{polygon2d:p,zoom:r}=n.getBoxSidePolygon2DCoordinate(o);n.camera.zoom=r,n.camera.updateProjectionMatrix(),n.render(),i.initPosition(),i.zoomChangeOnCenter(r),i.setResultAndSelectedID([{id:s.id,pointList:p,textAttribute:"",isRect:!0}],s.id)},R=(o,s,d,e)=>{if(!d)return;const{pointCloud2dOperation:i,pointCloudInstance:n}=d;n.loadPCDFileByBox(e,o,{height:I,depth:I});const{cameraPositionVector:l}=n.updateOrthoCamera(o,O.Back);n.setInitCameraPosition(l);const{polygon2d:p,zoom:r}=n.getBoxBackPolygon2DCoordinate(o);n.camera.zoom=r,n.camera.updateProjectionMatrix(),n.render(),i.initPosition(),i.zoomChangeOnCenter(r),i.setResultAndSelectedID([{id:s.id,pointList:p,textAttribute:"",isRect:!0}],s.id)},M=(o,s,d,e)=>{if(!d||!e)return;e.generateBox(o,s.id),e.updateCameraByBox(o,O.Top),e.render();const{pointCloud2dOperation:i,pointCloudInstance:n}=d,{polygon2d:l}=n.getBoxTopPolygon2DCoordinate(o),p=[...i.polygonList],r=p.find(B=>B.id===s.id);r?r.pointList=l:p.push({id:s.id,pointList:l,textAttribute:"",isRect:!0}),i.setResultAndSelectedID(p,s.id)},H=()=>{const{topViewInstance:o,sideViewInstance:s,backViewInstance:d,mainViewInstance:e,addPointCloudBox:i,setSelectedIDs:n,selectedIDs:l,pointCloudBoxList:p}=Z(E),{updateSelectedBox:r}=U(),B=W(t=>t.annotation.imgList[t.annotation.imgIndex]),{selectedBox:g}=U(),u=g==null?void 0:g.info;if(!o||!s)return{topViewAddBox:()=>{},topViewSelectedChanged:()=>{},sideViewUpdateBox:()=>{}};const{pointCloudInstance:m}=o,L=()=>{var t;return p.length>0?((t=p.sort((a,C)=>a.trackID-C.trackID).slice(-1)[0])==null?void 0:t.trackID)+1:1},D=t=>{e==null||e.generateBox(t),e==null||e.controls.update(),e==null||e.render()},h=(t,c)=>{const a=b(t,c,m),C=o==null?void 0:o.pointCloud2dOperation,P=Object.assign(a,{trackID:L()});C.setSelectedIDs([t.id]),n(P.id),y(f.Top,t,P),i(P)},v=()=>{const t=g==null?void 0:g.info,c=o==null?void 0:o.pointCloud2dOperation;if(c.setSelectedIDs(l),!t||!c)return;const a=c.selectedPolygon;y(f.Top,a,t)},S=(t,c,a)=>{if(u){const C=_(t,c,u,s.pointCloudInstance);r(C),y(a,t,C)}},w=(t,c)=>{S(t,c,f.Side)},V=(t,c)=>{S(t,c,f.Back)},k=(t,c)=>{if(u){const a=b(t,c,void 0,u);Object.assign(u,F.pickBy(a,(C,P)=>["width","height","x","y"])),r(a),y(f.Top,t,u)}},y=(t,c,a)=>{const C=B==null?void 0:B.url,P={[f.Side]:()=>{j(a,c,s,C)},[f.Back]:()=>{d&&R(a,c,d,C)},[f.Top]:()=>{M(a,c,o,e)}};Object.keys(P).forEach(T=>{T!==t&&P[T]()}),D(a),e==null||e.hightLightOriginPointCloud(a)};return{topViewAddBox:h,topViewSelectedChanged:v,topViewUpdateBox:k,sideViewUpdateBox:w,backViewUpdateBox:V,pointCloudBoxListUpdated:t=>{o.updatePolygonList(t),e==null||e.generateBoxes(t)}}};export{R as synchronizeBackView,j as synchronizeSideView,M as synchronizeTopView,b as topViewPolygon2PointCloud,A as transferCanvas2World,H as usePointCloudViews};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePointCloudViews.js","sources":["../../../../src/components/pointCloudView/hooks/usePointCloudViews.tsx"],"sourcesContent":["/**\n * @file Point cloud interface for crud\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @createdate 2022-08-17\n */\nimport { PointCloudAnnotation, PointCloud, MathUtils } from '@labelbee/lb-annotation';\nimport { IPointCloudBox, EPerspectiveView } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { useSingleBox } from './useSingleBox';\nimport { ISize } from '@/types/main';\nimport _ from 'lodash';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '@/store';\n\nconst DEFAULT_SCOPE = 5;\n\nconst PointCloudView = {\n '3D': '3D',\n Top: 'Top',\n Side: 'Side',\n Back: 'Back',\n};\n\n/**\n * Get the coordinate from canvas2d-coordinate to world coordinate\n */\nexport const transferCanvas2World = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n) => {\n const { width: w, height: h } = size;\n const { x, y } = currentPos;\n\n // x-Axis is the Positive Direction, so the x-coordinates need to be swapped with the y-coordinates\n return {\n x: -y + h / 2,\n y: -(x - w / 2),\n };\n};\n\nexport const topViewPolygon2PointCloud = (\n newPolygon: any,\n size: ISize,\n pointCloud?: PointCloud,\n selectedPointCloud?: IPointCloudBox,\n) => {\n const [point1, point2, point3, point4] = newPolygon.pointList.map((v: any) =>\n transferCanvas2World(v, size),\n );\n\n const centerPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const height = MathUtils.getLineLength(point1, point2);\n const width = MathUtils.getLineLength(point2, point3);\n const rotation = MathUtils.getRadiusFromQuadrangle(newPolygon.pointList);\n let z = 0;\n let depth = 1;\n if (pointCloud) {\n const zInfo = pointCloud.getSensesPointZAxisInPolygon([point1, point2, point3, point4]);\n z = (zInfo.maxZ + zInfo.minZ) / 2;\n depth = zInfo.maxZ - zInfo.minZ;\n }\n\n if (selectedPointCloud) {\n z = selectedPointCloud.center.z;\n depth = selectedPointCloud.depth;\n }\n\n /** TrackID will append before it pushed */\n const boxParams: Omit<IPointCloudBox, 'trackID'> = {\n center: {\n x: centerPoint.x,\n y: centerPoint.y,\n z,\n },\n width,\n height,\n depth,\n rotation: rotation,\n id: newPolygon.id,\n attribute: '',\n valid: true,\n };\n\n return boxParams;\n};\n\nconst sideViewPolygon2PointCloud = (\n newPolygon: any,\n originPolygon: any,\n selectedPointCloudBox: IPointCloudBox,\n pointCloudInstance: PointCloud,\n) => {\n const [point1, point2, point3] = newPolygon.pointList;\n const [op1, op2, op3] = originPolygon.pointList;\n\n // 2D centerPoint => 3D x & z\n const newCenterPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const oldCenterPoint = MathUtils.getLineCenterPoint([op1, op3]);\n\n const offset = {\n x: newCenterPoint.x - oldCenterPoint.x,\n y: newCenterPoint.y - oldCenterPoint.y,\n };\n\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n\n const offsetCenterPoint = {\n x: offset.x,\n y: offset.x * sin + offset.y * cos,\n z: newCenterPoint.y - oldCenterPoint.y,\n };\n\n // 2D height => 3D depth\n const height = MathUtils.getLineLength(point1, point2);\n const oldHeight = MathUtils.getLineLength(op1, op2);\n const offsetHeight = height - oldHeight; // 3D depth\n\n // 2D width => 3D width\n const width = MathUtils.getLineLength(point2, point3);\n const oldWidth = MathUtils.getLineLength(op2, op3);\n const offsetWidth = width - oldWidth; // 3D width\n\n const { newBoxParams } = pointCloudInstance.getNewBoxBySideUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n selectedPointCloudBox,\n );\n\n return newBoxParams;\n};\n\n/**\n * NewBox synchronize sideView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeSideView = (\n boxParams: IPointCloudBox,\n newPolygon: any,\n sideViewInstance: PointCloudAnnotation | undefined,\n url: string,\n) => {\n if (!sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation, pointCloudInstance } = sideViewInstance;\n\n // Create PointCloud\n pointCloudInstance.loadPCDFileByBox(url, boxParams, {\n width: DEFAULT_SCOPE,\n depth: DEFAULT_SCOPE,\n });\n const { cameraPositionVector } = pointCloudInstance.updateOrthoCamera(\n boxParams,\n EPerspectiveView.Left,\n );\n\n pointCloudInstance.setInitCameraPosition(cameraPositionVector);\n\n // Create Draw Polygon\n const { polygon2d, zoom } = pointCloudInstance.getBoxSidePolygon2DCoordinate(boxParams);\n\n // Synchronize SidePointCloud zoom with PointCloud2dOperation\n pointCloudInstance.camera.zoom = zoom;\n pointCloudInstance.camera.updateProjectionMatrix();\n pointCloudInstance.render();\n\n // Update PolygonView to default zoom and currentPos.\n pointCloud2dOperation.initPosition();\n pointCloud2dOperation.zoomChangeOnCenter(zoom);\n pointCloud2dOperation.setResultAndSelectedID(\n [\n {\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n },\n ],\n newPolygon.id,\n );\n};\n\n/**\n * NewBox synchronize backView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeBackView = (\n boxParams: IPointCloudBox,\n newPolygon: any,\n BackViewInstance: PointCloudAnnotation,\n url: string,\n) => {\n if (!BackViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = BackViewInstance;\n\n // Create PointCloud\n backPointCloud.loadPCDFileByBox(url, boxParams, { height: DEFAULT_SCOPE, depth: DEFAULT_SCOPE });\n const { cameraPositionVector } = backPointCloud.updateOrthoCamera(\n boxParams,\n EPerspectiveView.Back,\n );\n\n backPointCloud.setInitCameraPosition(cameraPositionVector);\n\n // Create Draw Polygon\n const { polygon2d, zoom } = backPointCloud.getBoxBackPolygon2DCoordinate(boxParams);\n\n // Synchronize SidePointCloud zoom with PointCloud2dOperation\n backPointCloud.camera.zoom = zoom;\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n\n // Update PolygonView to default zoom and currentPos.\n backPointCloudPolygonOperation.initPosition();\n backPointCloudPolygonOperation.zoomChangeOnCenter(zoom);\n backPointCloudPolygonOperation.setResultAndSelectedID(\n [\n {\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n },\n ],\n newPolygon.id,\n );\n};\n\n/**\n * NewBox synchronize TopView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeTopView = (\n newBoxParams: IPointCloudBox,\n newPolygon: any,\n topViewInstance?: PointCloudAnnotation,\n mainViewInstance?: PointCloud,\n) => {\n if (!topViewInstance || !mainViewInstance) {\n return;\n }\n\n // Control the 3D view data to create box\n mainViewInstance.generateBox(newBoxParams, newPolygon.id);\n mainViewInstance.updateCameraByBox(newBoxParams, EPerspectiveView.Top);\n mainViewInstance.render();\n\n const { pointCloud2dOperation, pointCloudInstance } = topViewInstance;\n\n const { polygon2d } = pointCloudInstance.getBoxTopPolygon2DCoordinate(newBoxParams);\n\n const newPolygonList = [...pointCloud2dOperation.polygonList];\n const oldPolygon = newPolygonList.find((v) => v.id === newPolygon.id);\n if (oldPolygon) {\n oldPolygon.pointList = polygon2d;\n } else {\n newPolygonList.push({\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n });\n }\n\n pointCloud2dOperation.setResultAndSelectedID(newPolygonList, newPolygon.id);\n};\n\nexport const usePointCloudViews = () => {\n const {\n topViewInstance,\n sideViewInstance,\n backViewInstance,\n mainViewInstance,\n addPointCloudBox,\n setSelectedIDs,\n selectedIDs,\n pointCloudBoxList,\n } = useContext(PointCloudContext);\n const { updateSelectedBox } = useSingleBox();\n\n const currentData = useSelector(\n (state: AppState) => state.annotation.imgList[state.annotation.imgIndex],\n );\n\n const { selectedBox } = useSingleBox();\n\n const selectedPointCloudBox = selectedBox?.info;\n\n if (!topViewInstance || !sideViewInstance) {\n return {\n topViewAddBox: () => {},\n topViewSelectedChanged: () => {},\n sideViewUpdateBox: () => {},\n };\n }\n\n const { pointCloudInstance: topViewPointCloud } = topViewInstance;\n\n const getNextTrackID = () => {\n if (pointCloudBoxList.length > 0) {\n const sortedPcList = pointCloudBoxList.sort((a, b) => a.trackID - b.trackID);\n return sortedPcList.slice(-1)[0]?.trackID + 1;\n }\n\n return 1;\n };\n\n const mainViewGenBox = (boxParams: IPointCloudBox) => {\n mainViewInstance?.generateBox(boxParams);\n mainViewInstance?.controls.update();\n mainViewInstance?.render();\n };\n\n /** Top-view create box from 2D */\n const topViewAddBox = (newPolygon: any, size: ISize) => {\n const newParams = topViewPolygon2PointCloud(newPolygon, size, topViewPointCloud);\n const polygonOperation = topViewInstance?.pointCloud2dOperation;\n\n const boxParams: IPointCloudBox = Object.assign(newParams, {\n trackID: getNextTrackID(),\n });\n\n polygonOperation.setSelectedIDs([newPolygon.id]);\n setSelectedIDs(boxParams.id);\n syncPointCloudViews(PointCloudView.Top, newPolygon, boxParams);\n addPointCloudBox(boxParams);\n };\n\n /** Top-view selected changed and render to other view */\n const topViewSelectedChanged = () => {\n const boxParams = selectedBox?.info;\n const polygonOperation = topViewInstance?.pointCloud2dOperation;\n\n polygonOperation.setSelectedIDs(selectedIDs);\n if (!boxParams || !polygonOperation) {\n return;\n }\n\n const polygon = polygonOperation.selectedPolygon;\n syncPointCloudViews(PointCloudView.Top, polygon, boxParams);\n };\n\n /**\n * Update box from view\n * @param newPolygon\n * @param originPolygon\n * @param fromView Back or Side\n */\n const viewUpdateBox = (newPolygon: any, originPolygon: any, fromView: string) => {\n if (selectedPointCloudBox) {\n const newBoxParams = sideViewPolygon2PointCloud(\n newPolygon,\n originPolygon,\n selectedPointCloudBox,\n sideViewInstance.pointCloudInstance,\n );\n\n updateSelectedBox(newBoxParams);\n syncPointCloudViews(fromView, newPolygon, newBoxParams);\n }\n };\n\n const sideViewUpdateBox = (newPolygon: any, originPolygon: any) => {\n viewUpdateBox(newPolygon, originPolygon, PointCloudView.Side);\n };\n\n const backViewUpdateBox = (newPolygon: any, originPolygon: any) => {\n viewUpdateBox(newPolygon, originPolygon, PointCloudView.Back);\n };\n\n /**\n * Top view box updated and sync views\n * @param polygon\n * @param size\n */\n const topViewUpdateBox = (polygon: any, size: ISize) => {\n if (selectedPointCloudBox) {\n const newBoxParams = topViewPolygon2PointCloud(\n polygon,\n size,\n undefined,\n selectedPointCloudBox,\n );\n\n Object.assign(\n selectedPointCloudBox,\n _.pickBy(newBoxParams, (v, k) => ['width', 'height', 'x', 'y']),\n );\n\n updateSelectedBox(newBoxParams);\n syncPointCloudViews(PointCloudView.Top, polygon, selectedPointCloudBox);\n }\n };\n\n /**\n * Sync views' data from omit view, regenerate and highlight box on 3D-view\n * @param omitView\n * @param polygon\n * @param boxParams\n */\n const syncPointCloudViews = (omitView: string, polygon: any, boxParams: IPointCloudBox) => {\n const dataUrl = currentData?.url;\n\n const viewToBeUpdated = {\n [PointCloudView.Side]: () => {\n synchronizeSideView(boxParams, polygon, sideViewInstance, dataUrl);\n },\n [PointCloudView.Back]: () => {\n if (backViewInstance) {\n synchronizeBackView(boxParams, polygon, backViewInstance, dataUrl);\n }\n },\n [PointCloudView.Top]: () => {\n synchronizeTopView(boxParams, polygon, topViewInstance, mainViewInstance);\n },\n };\n\n Object.keys(viewToBeUpdated).forEach((key) => {\n if (key !== omitView) {\n viewToBeUpdated[key]();\n }\n });\n mainViewGenBox(boxParams);\n mainViewInstance?.hightLightOriginPointCloud(boxParams);\n };\n\n const pointCloudBoxListUpdated = (newBoxes: IPointCloudBox[]) => {\n topViewInstance.updatePolygonList(newBoxes);\n mainViewInstance?.generateBoxes(newBoxes);\n };\n\n return {\n topViewAddBox,\n topViewSelectedChanged,\n topViewUpdateBox,\n sideViewUpdateBox,\n backViewUpdateBox,\n pointCloudBoxListUpdated,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{useContext as u,useCallback as a}from"react";import{synchronizeSideView as p,synchronizeBackView as C}from"./usePointCloudViews.js";import{useSingleBox as m}from"./useSingleBox.js";import{PointCloudContext as x}from"../PointCloudContext.js";import{cAnnotation as P}from"@labelbee/lb-annotation";const{ERotateDirection:w}=P,g=({currentData:e})=>{const o=u(x),{selectedBox:i,updateSelectedBox:d}=m();return{updateRotate:a(s=>{const{topViewInstance:l,mainViewInstance:n}=o;if(!l||!n)return;const{pointCloud2dOperation:c}=l,t=i==null?void 0:i.info;if(!t||!(e==null?void 0:e.url)||!o.backViewInstance)return;d({rotation:t.rotation+Number(Math.PI*s)/180}),c.rotatePolygon(s,w.Anticlockwise);const r=c.selectedPolygon;n.generateBox(t),n.hightLightOriginPointCloud(t),p(t,r,o.sideViewInstance,e.url),C(t,r,o.backViewInstance,e.url),n.render()},[o.selectedID,o.pointCloudBoxList,o.setPointCloudResult,o.topViewInstance,e])}};export{g as useRotate};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRotate.js","sources":["../../../../src/components/pointCloudView/hooks/useRotate.tsx"],"sourcesContent":["import { useCallback, useContext } from 'react';\nimport { IAnnotationStateProps } from '@/store/annotation/map';\nimport { synchronizeBackView, synchronizeSideView } from './usePointCloudViews';\nimport { useSingleBox } from './useSingleBox';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\n\nconst { ERotateDirection } = cAnnotation;\n\n/**\n * PointCloud Rotate Hook\n * @returns\n */\nexport const useRotate = ({ currentData }: IAnnotationStateProps) => {\n const ptCtx = useContext(PointCloudContext);\n const { selectedBox, updateSelectedBox } = useSingleBox();\n\n const updateRotate = useCallback(\n (angle: number) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance || !mainViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n const selectedPointCloudBox = selectedBox?.info;\n\n if (!selectedPointCloudBox || !currentData?.url || !ptCtx.backViewInstance) {\n return;\n }\n\n updateSelectedBox({\n rotation: selectedPointCloudBox.rotation + Number(Math.PI * angle) / 180,\n });\n\n TopPointCloudPolygonOperation.rotatePolygon(angle, ERotateDirection.Anticlockwise);\n const selectedPolygon = TopPointCloudPolygonOperation.selectedPolygon;\n\n mainViewInstance.generateBox(selectedPointCloudBox);\n mainViewInstance.hightLightOriginPointCloud(selectedPointCloudBox);\n synchronizeSideView(\n selectedPointCloudBox,\n selectedPolygon,\n ptCtx.sideViewInstance,\n currentData.url,\n );\n synchronizeBackView(\n selectedPointCloudBox,\n selectedPolygon,\n ptCtx.backViewInstance,\n currentData.url,\n );\n mainViewInstance.render();\n },\n [\n ptCtx.selectedID,\n ptCtx.pointCloudBoxList,\n ptCtx.setPointCloudResult,\n ptCtx.topViewInstance,\n currentData,\n ],\n );\n\n return { updateRotate };\n};\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,CAAE,gBAAqB,CAAA,GAAA,WAAA,CAAA;AAMhB,MAAA,SAAA,GAAY,CAAC,CAAE,WAAyC,CAAA,KAAA;AACnE,EAAA,MAAM,QAAQ,UAAW,CAAA,iBAAA,CAAA,CAAA;AACzB,EAAM,MAAA,CAAE,aAAa,iBAAsB,CAAA,GAAA,YAAA,EAAA,CAAA;AAE3C,EAAM,MAAA,YAAA,GAAe,WACnB,CAAA,CAAC,KAAkB,KAAA;AACjB,IAAM,MAAA,CAAE,iBAAiB,gBAAqB,CAAA,GAAA,KAAA,CAAA;AAC9C,IAAI,IAAA,CAAC,eAAmB,IAAA,CAAC,gBAAkB,EAAA;AACzC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAM,MAAA,CAAE,uBAAuB,6BAAkC,CAAA,GAAA,eAAA,CAAA;AAEjE,IAAA,MAAM,wBAAwB,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAA;AAE3C,IAAA,IAAI,CAAC,qBAAyB,IAAA,6CAAc,GAAO,CAAA,IAAA,CAAC,MAAM,gBAAkB,EAAA;AAC1E,MAAA,OAAA;AAAA,KAAA;AAGF,IAAkB,iBAAA,CAAA;AAAA,MAChB,UAAU,qBAAsB,CAAA,QAAA,GAAW,MAAO,CAAA,IAAA,CAAK,KAAK,KAAS,CAAA,GAAA,GAAA;AAAA,KAAA,CAAA,CAAA;AAGvE,IAA8B,6BAAA,CAAA,aAAA,CAAc,OAAO,gBAAiB,CAAA,aAAA,CAAA,CAAA;AACpE,IAAA,MAAM,kBAAkB,6BAA8B,CAAA,eAAA,CAAA;AAEtD,IAAA,gBAAA,CAAiB,WAAY,CAAA,qBAAA,CAAA,CAAA;AAC7B,IAAA,gBAAA,CAAiB,0BAA2B,CAAA,qBAAA,CAAA,CAAA;AAC5C,IAAA,mBAAA,CACE,qBACA,EAAA,eAAA,EACA,KAAM,CAAA,gBAAA,EACN,WAAY,CAAA,GAAA,CAAA,CAAA;AAEd,IAAA,mBAAA,CACE,qBACA,EAAA,eAAA,EACA,KAAM,CAAA,gBAAA,EACN,WAAY,CAAA,GAAA,CAAA,CAAA;AAEd,IAAiB,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAEnB,EAAA;AAAA,IACE,KAAM,CAAA,UAAA;AAAA,IACN,KAAM,CAAA,iBAAA;AAAA,IACN,KAAM,CAAA,mBAAA;AAAA,IACN,KAAM,CAAA,eAAA;AAAA,IACN,WAAA;AAAA,GAAA,CAAA,CAAA;AAIJ,EAAA,OAAO,CAAE,YAAA,CAAA,CAAA;AAAA;;;;"}
@@ -0,0 +1 @@
1
+ import{useContext as p,useMemo as B,useCallback as s}from"react";import u from"lodash";import{PointCloudContext as C}from"../PointCloudContext.js";import{cAnnotation as v}from"@labelbee/lb-annotation";const{ESortDirection:a}=v,P=()=>{const{pointCloudBoxList:t,setPointCloudResult:c,topViewInstance:d,selectedIDs:f,selectedID:i,mainViewInstance:l}=p(C),o=B(()=>{const e=t.findIndex(n=>n.id===i);if(e>-1)return{info:t[e],index:e}},[i,t]),r=s(e=>{(o==null?void 0:o.info)&&(t.splice(o.index,1,u.merge(o.info,e)),c(u.cloneDeep(t)))},[i,t]),m=s(()=>{(o==null?void 0:o.info)&&r({valid:!o.info.valid})},[i]),x=s((e=a.ascend)=>{if(!d||f.length>1)return;const{pointCloud2dOperation:n}=d;n.switchToNextPolygon(e)},[d]);return{selectedBox:o,updateSelectedBox:r,changeSelectedBoxValid:m,selectNextBox:x,selectPrevBox:()=>{x(a.descend)},deletePointCloudBox:e=>{c(t.filter(n=>n.id!==e)),l==null||l.removeObjectByName(e),l==null||l.render()}}};export{P as useSingleBox};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSingleBox.js","sources":["../../../../src/components/pointCloudView/hooks/useSingleBox.tsx"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo } from 'react';\nimport _ from 'lodash';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\n\nconst { ESortDirection } = cAnnotation;\n\n/** Actions for single selected box */\nexport const useSingleBox = () => {\n const {\n pointCloudBoxList,\n setPointCloudResult,\n topViewInstance,\n selectedIDs,\n selectedID,\n mainViewInstance,\n } = useContext(PointCloudContext);\n\n /** Returns { info: selected box, index: selected box index } */\n const selectedBox = useMemo(() => {\n const boxIndex = pointCloudBoxList.findIndex((i: { id: string }) => i.id === selectedID);\n if (boxIndex > -1) {\n return { info: pointCloudBoxList[boxIndex], index: boxIndex };\n }\n }, [selectedID, pointCloudBoxList]);\n\n /** Use Partial<IPointCloudBox> to update selected box */\n const updateSelectedBox = useCallback(\n (params: Partial<IPointCloudBox>) => {\n if (selectedBox?.info) {\n pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));\n setPointCloudResult(_.cloneDeep(pointCloudBoxList));\n }\n },\n [selectedID, pointCloudBoxList],\n );\n\n /** Toggle selected box‘s validity */\n const changeSelectedBoxValid = useCallback(() => {\n if (selectedBox?.info) {\n updateSelectedBox({ valid: !selectedBox.info.valid });\n }\n }, [selectedID]);\n\n /** PointCloud select next/prev one */\n const switchToNextBox = useCallback(\n (sort = ESortDirection.ascend) => {\n if (!topViewInstance || selectedIDs.length > 1) {\n return;\n }\n\n const { pointCloud2dOperation } = topViewInstance;\n\n pointCloud2dOperation.switchToNextPolygon(sort);\n },\n [topViewInstance],\n );\n\n const selectPrevBox = () => {\n switchToNextBox(ESortDirection.descend);\n };\n\n const deletePointCloudBox = (id: string) => {\n setPointCloudResult(pointCloudBoxList.filter((v) => v.id !== id));\n mainViewInstance?.removeObjectByName(id);\n mainViewInstance?.render();\n // TODO Clear Highlight.\n };\n\n return {\n selectedBox,\n updateSelectedBox,\n changeSelectedBoxValid,\n selectNextBox: switchToNextBox,\n selectPrevBox,\n deletePointCloudBox,\n };\n};\n"],"names":[],"mappings":";;;;;AAMA,MAAM,CAAE,cAAmB,CAAA,GAAA,WAAA,CAAA;AAGpB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AAGf,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,WAAW,iBAAkB,CAAA,SAAA,CAAU,CAAC,CAAA,KAAsB,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAC7E,IAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,MAAA,OAAO,CAAE,IAAA,EAAM,iBAAkB,CAAA,QAAA,CAAA,EAAW,KAAO,EAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEpD,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAGhB,EAAM,MAAA,iBAAA,GAAoB,WACxB,CAAA,CAAC,MAAoC,KAAA;AACnC,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,OAAO,WAAY,CAAA,KAAA,EAAO,GAAG,CAAE,CAAA,KAAA,CAAM,YAAY,IAAM,EAAA,MAAA,CAAA,CAAA,CAAA;AACzE,MAAA,mBAAA,CAAoB,EAAE,SAAU,CAAA,iBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGpC,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAIf,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,CAAE,KAAA,EAAO,CAAC,WAAA,CAAY,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAE9C,CAAC,UAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,eAAkB,GAAA,WAAA,CACtB,CAAC,IAAA,GAAO,eAAe,MAAW,KAAA;AAChC,IAAA,IAAI,CAAC,eAAA,IAAmB,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,CAAE,qBAA0B,CAAA,GAAA,eAAA,CAAA;AAElC,IAAA,qBAAA,CAAsB,mBAAoB,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,EAE5C,CAAC,eAAA,CAAA,CAAA,CAAA;AAGH,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,CAAgB,cAAe,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAM,MAAA,mBAAA,GAAsB,CAAC,EAAe,KAAA;AAC1C,IAAA,mBAAA,CAAoB,iBAAkB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA,CAAA;AAC7D,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,kBAAmB,CAAA,EAAA,CAAA,CAAA;AACrC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAIpB,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,aAAe,EAAA,eAAA;AAAA,IACf,aAAA;AAAA,IACA,mBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{getClassName as t}from"../../utils/dom.js";import e from"react";import l from"./PointCloud3DView.js";import{PointCloudContainer as o}from"./PointCloudLayout.js";import i from"./PointCloudTopView.js";const n=()=>e.createElement("div",{className:t("point-cloud-wrapper")},e.createElement("div",{className:t("point-cloud-container","left")},e.createElement(o,{className:t("point-cloud-2d-container"),title:"2D\u89C6\u56FE"},e.createElement("div",{className:t("point-cloud-2d-image")},e.createElement("img",{src:"http://10.53.25.142:8001/1/000001.jpg",width:"100%"}))),e.createElement(o,{className:t("point-cloud-3d-container"),title:"3D\u89C6\u56FE"},e.createElement(l,null))),e.createElement("div",{className:t("point-cloud-container","right")},e.createElement(o,{className:t("point-cloud-container","top-view"),title:"\u4FEF\u89C6\u56FE"},e.createElement(i,null)),e.createElement("div",{className:t("point-cloud-container","right-bottom")},e.createElement(o,{className:t("point-cloud-container","side-view"),title:"\u4FA7\u89C6\u56FE"},e.createElement("div",null)),e.createElement(o,{className:t("point-cloud-container","back-view"),title:"\u80CC\u89C6\u56FE"},e.createElement("div",null)))));export{n as default};
1
+ import{getClassName as t}from"../../utils/dom.js";import e from"react";import i from"./PointCloud3DView.js";import l from"./PointCloudBackView.js";import n from"./PointCloudTopView.js";import r from"./PointCloudSideView.js";import a from"./PointCloud2DView.js";import m from"./PointCloudListener.js";import{connect as c}from"react-redux";const u=({imgList:o})=>o.length===0?null:e.createElement(e.Fragment,null,e.createElement(m,null),e.createElement("div",{className:t("point-cloud-layout")},e.createElement("div",{className:t("point-cloud-wrapper")},e.createElement("div",{className:t("point-cloud-container","left")},e.createElement(a,null),e.createElement(i,null)),e.createElement("div",{className:t("point-cloud-container","right")},e.createElement(n,null),e.createElement("div",{className:t("point-cloud-container","right-bottom")},e.createElement(r,null),e.createElement(l,null)))))),d=o=>({imgList:o.annotation.imgList});var s=c(d)(u);export{s as default};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/pointCloudView/index.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-07-04 14:39:44\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 10:01:08\n */\n/**\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @file Point cloud tool view\n * Includes 2D-view、3Dview、top-view、side-view、back-view\n * @date 2022-06-21\n */\n\nimport { getClassName } from '@/utils/dom';\nimport React from 'react';\nimport PointCloud3DView from './PointCloud3DView';\nimport PointCloudBackView from './PointCloudBackView';\nimport PointCloudTopView from './PointCloudTopView';\nimport PointCloudSideView from './PointCloudSideView';\nimport PointCloud2DView from './PointCloud2DView';\nimport PointCloudListener from './PointCloudListener';\nimport { AppState } from '@/store';\nimport { connect } from 'react-redux';\nimport { IFileItem } from '@/types/data';\n\ninterface IProps {\n imgList: IFileItem[];\n}\n\nconst PointCloudView: React.FC<IProps> = ({ imgList }) => {\n if (imgList.length === 0) {\n return null;\n }\n\n return (\n <>\n <PointCloudListener />\n <div className={getClassName('point-cloud-layout')}>\n <div className={getClassName('point-cloud-wrapper')}>\n <div className={getClassName('point-cloud-container', 'left')}>\n <PointCloud2DView />\n <PointCloud3DView />\n </div>\n\n <div className={getClassName('point-cloud-container', 'right')}>\n <PointCloudTopView />\n <div className={getClassName('point-cloud-container', 'right-bottom')}>\n <PointCloudSideView />\n <PointCloudBackView />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n imgList: state.annotation.imgList,\n});\n\nexport default connect(mapStateToProps)(PointCloudView);\n"],"names":[],"mappings":";;;;;;;;;;AA6BA,MAAM,cAAA,GAAmC,CAAC,CAAE,OAAc,CAAA,KAAA;AACxD,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA;AAGT,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,kBAAD,EAAA,IAAA,CAAA,sCACC,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,oBAAA,CAAA;AAAA,GAAA,sCAC1B,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,qBAAA,CAAA;AAAA,GAAA,sCAC1B,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,MAAA,CAAA;AAAA,GAAA,sCACnD,gBAAD,EAAA,IAAA,CAAA,sCACC,gBAAD,EAAA,IAAA,CAAA,CAAA,sCAGD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,OAAA,CAAA;AAAA,GAAA,kBACnD,KAAA,CAAA,aAAA,CAAA,iBAAA,EAAD,IACA,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,cAAA,CAAA;AAAA,GAAA,kBACnD,KAAA,CAAA,aAAA,CAAA,kBAAA,EAAD,IACA,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,kBAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AASd,MAAM,eAAA,GAAkB,CAAC,KAAqB,MAAA;AAAA,EAC5C,OAAA,EAAS,MAAM,UAAW,CAAA,OAAA;AAAA,CAAA,CAAA,CAAA;AAG5B,uBAAe,QAAQ,eAAiB,CAAA,CAAA,cAAA,CAAA;;;;"}
@@ -0,0 +1 @@
1
+ import{useRef as u,useEffect as a}from"react";import{useDispatch as c}from"react-redux";import{ANNOTATION_ACTIONS as n}from"../store/Actions.js";const i=()=>{const e=c(),o=u({exportData:()=>[[],{}],singleOn:()=>{},on:()=>{},setResult:()=>{},history:{initRecord:()=>{}},setDefaultAttribute:t=>{},setSubAttribute:(t,p)=>{}}),r=t=>{e({type:n.SET_TOOL,payload:{instance:t}})},s=()=>{e({type:n.SET_TOOL,payload:{instance:void 0}})};return a(()=>(r(o.current),()=>{s()}),[]),{toolInstanceRef:o}};export{i as useCustomToolInstance};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation.js","sources":["../../src/hooks/annotation.ts"],"sourcesContent":["/**\n * @file Annotation related hook\n * @createDate 2022-08-04\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport { useEffect, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { ANNOTATION_ACTIONS } from '@/store/Actions';\n\nexport interface ICustomToolInstance {\n exportData: () => [any[], {}];\n singleOn: () => void;\n on: () => void;\n setResult: () => void;\n history: {\n initRecord: () => void;\n };\n setDefaultAttribute: (attribute: string) => void;\n\n // PointCloud Exclusive function\n setSubAttribute: (key: string, value: string) => void;\n}\n\n/**\n * Custom an empty toolInstance to adapt old use.\n * @returns\n */\nconst useCustomToolInstance = () => {\n const dispatch = useDispatch();\n const toolInstanceRef = useRef<ICustomToolInstance>({\n exportData: () => {\n return [[], {}];\n },\n singleOn: () => {},\n on: () => {},\n setResult: () => {\n // Rerender Data\n },\n history: {\n initRecord: () => {},\n },\n setDefaultAttribute: (attribute: string) => {},\n\n // PointCloud Exclusive function\n setSubAttribute: (key: string, value: string) => {},\n });\n\n const onMounted = (instance: any) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TOOL,\n payload: {\n instance,\n },\n });\n };\n\n const onUnmounted = () => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TOOL,\n payload: {\n instance: undefined,\n },\n });\n };\n\n useEffect(() => {\n // Initial toolInstance\n onMounted(toolInstanceRef.current);\n return () => {\n onUnmounted();\n };\n }, []);\n\n return {\n toolInstanceRef,\n };\n};\n\nexport { useCustomToolInstance };\n"],"names":[],"mappings":";;;;AA2BA,MAAM,wBAAwB,MAAM;AAClC,EAAA,MAAM,QAAW,GAAA,WAAA,EAAA,CAAA;AACjB,EAAA,MAAM,kBAAkB,MAA4B,CAAA;AAAA,IAClD,YAAY,MAAM;AAChB,MAAA,OAAO,CAAC,EAAI,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAEd,UAAU,MAAM;AAAA,KAAA;AAAA,IAChB,IAAI,MAAM;AAAA,KAAA;AAAA,IACV,WAAW,MAAM;AAAA,KAAA;AAAA,IAGjB,OAAS,EAAA;AAAA,MACP,YAAY,MAAM;AAAA,OAAA;AAAA,KAAA;AAAA,IAEpB,mBAAA,EAAqB,CAAC,SAAsB,KAAA;AAAA,KAAA;AAAA,IAG5C,eAAA,EAAiB,CAAC,GAAA,EAAa,KAAkB,KAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAGnD,EAAM,MAAA,SAAA,GAAY,CAAC,QAAkB,KAAA;AACnC,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,kBAAmB,CAAA,QAAA;AAAA,MACzB,OAAS,EAAA;AAAA,QACP,QAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKN,EAAA,MAAM,cAAc,MAAM;AACxB,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,kBAAmB,CAAA,QAAA;AAAA,MACzB,OAAS,EAAA;AAAA,QACP,QAAU,EAAA,KAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKhB,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,SAAA,CAAU,eAAgB,CAAA,OAAA,CAAA,CAAA;AAC1B,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAED,EAAA,EAAA,CAAA,CAAA;AAEH,EAAO,OAAA;AAAA,IACL,eAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSize.js","sources":["../../src/hooks/useSize.ts"],"sourcesContent":["import { useLayoutEffect } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport type { BasicTarget } from '../utils/dom';\nimport { getTargetElement } from '../utils/dom';\nimport useRafState from './useRafState';\n\ninterface Size {\n width?: number;\n height?: number;\n}\n\nfunction useSize(target: BasicTarget): Size {\n const [state, setState] = useRafState<Size>(() => {\n const el = getTargetElement(target);\n return {\n width: ((el || {}) as HTMLElement).clientWidth,\n height: ((el || {}) as HTMLElement).clientHeight,\n };\n });\n\n useLayoutEffect(() => {\n const el = getTargetElement(target);\n if (!el) {\n return () => {};\n }\n\n const resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n entries.forEach((entry) => {\n setState({\n width: entry.target.clientWidth,\n height: entry.target.clientHeight,\n });\n });\n });\n\n resizeObserver.observe(el as HTMLElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [target]);\n\n return state;\n}\n\nexport default useSize;\n"],"names":[],"mappings":";;;;;AAWA,SAAA,OAAA,CAAiB,MAA2B,EAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAY,CAAA,GAAA,WAAA,CAAkB,MAAM;AAChD,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAO,OAAA;AAAA,MACL,KAAA,EAAS,OAAM,EAAoB,EAAA,WAAA;AAAA,MACnC,MAAA,EAAU,OAAM,EAAoB,EAAA,YAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAIxC,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAO,MAAM;AAAA,OAAA,CAAA;AAAA,KAAA;AAGf,IAAA,MAAM,cAAiB,GAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5E,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACzB,QAAS,QAAA,CAAA;AAAA,UACP,KAAA,EAAO,MAAM,MAAO,CAAA,WAAA;AAAA,UACpB,MAAA,EAAQ,MAAM,MAAO,CAAA,YAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAK3B,IAAA,cAAA,CAAe,OAAQ,CAAA,EAAA,CAAA,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAe,cAAA,CAAA,UAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAEhB,CAAC,MAAA,CAAA,CAAA,CAAA;AAEJ,EAAO,OAAA,KAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"useSize.js","sources":["../../src/hooks/useSize.ts"],"sourcesContent":["import { useLayoutEffect } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport type { BasicTarget } from '../utils/dom';\nimport { getTargetElement } from '../utils/dom';\nimport useRafState from './useRafState';\n\ninterface Size {\n width?: number;\n height?: number;\n}\n\nfunction useSize(target: BasicTarget): Size {\n const [state, setState] = useRafState<Size>(() => {\n const el = getTargetElement(target);\n return {\n width: ((el || {}) as HTMLElement).clientWidth,\n height: ((el || {}) as HTMLElement).clientHeight,\n };\n });\n\n useLayoutEffect(() => {\n const el = getTargetElement(target);\n if (!el) {\n return () => {};\n }\n\n const resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n entries.forEach((entry: ResizeObserverEntry) => {\n setState({\n width: entry.target.clientWidth,\n height: entry.target.clientHeight,\n });\n });\n });\n\n resizeObserver.observe(el as HTMLElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [target]);\n\n return state;\n}\n\nexport default useSize;\n"],"names":[],"mappings":";;;;;AAWA,SAAA,OAAA,CAAiB,MAA2B,EAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAY,CAAA,GAAA,WAAA,CAAkB,MAAM;AAChD,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAO,OAAA;AAAA,MACL,KAAA,EAAS,OAAM,EAAoB,EAAA,WAAA;AAAA,MACnC,MAAA,EAAU,OAAM,EAAoB,EAAA,YAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAIxC,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAO,MAAM;AAAA,OAAA,CAAA;AAAA,KAAA;AAGf,IAAA,MAAM,cAAiB,GAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5E,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,KAA+B,KAAA;AAC9C,QAAS,QAAA,CAAA;AAAA,UACP,KAAA,EAAO,MAAM,MAAO,CAAA,WAAA;AAAA,UACpB,MAAA,EAAQ,MAAM,MAAO,CAAA,YAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAK3B,IAAA,cAAA,CAAe,OAAQ,CAAA,EAAA,CAAA,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAe,cAAA,CAAA,UAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAEhB,CAAC,MAAA,CAAA,CAAA,CAAA;AAEJ,EAAO,OAAA,KAAA,CAAA;AAAA;;;;"}