@fivepixels-js/react 0.1.0

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 (387) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +648 -0
  3. package/dist/components/ShortcutHint.d.ts +8 -0
  4. package/dist/components/ShortcutHint.d.ts.map +1 -0
  5. package/dist/components/ShortcutHint.js +9 -0
  6. package/dist/components/ShortcutHint.js.map +1 -0
  7. package/dist/components/icons/Icons.d.ts +70 -0
  8. package/dist/components/icons/Icons.d.ts.map +1 -0
  9. package/dist/components/icons/Icons.js +127 -0
  10. package/dist/components/icons/Icons.js.map +1 -0
  11. package/dist/components/icons/MaterialIcon.d.ts +8 -0
  12. package/dist/components/icons/MaterialIcon.d.ts.map +1 -0
  13. package/dist/components/icons/MaterialIcon.js +5 -0
  14. package/dist/components/icons/MaterialIcon.js.map +1 -0
  15. package/dist/components/motion/index.d.ts +48 -0
  16. package/dist/components/motion/index.d.ts.map +1 -0
  17. package/dist/components/motion/index.js +910 -0
  18. package/dist/components/motion/index.js.map +1 -0
  19. package/dist/components/overlay/ReportOverlayLayer.d.ts +7 -0
  20. package/dist/components/overlay/ReportOverlayLayer.d.ts.map +1 -0
  21. package/dist/components/overlay/ReportOverlayLayer.js +14 -0
  22. package/dist/components/overlay/ReportOverlayLayer.js.map +1 -0
  23. package/dist/components/overlay/TargetHighlights.d.ts +9 -0
  24. package/dist/components/overlay/TargetHighlights.d.ts.map +1 -0
  25. package/dist/components/overlay/TargetHighlights.js +24 -0
  26. package/dist/components/overlay/TargetHighlights.js.map +1 -0
  27. package/dist/components/panel/PanelDockGuides.d.ts +8 -0
  28. package/dist/components/panel/PanelDockGuides.d.ts.map +1 -0
  29. package/dist/components/panel/PanelDockGuides.js +15 -0
  30. package/dist/components/panel/PanelDockGuides.js.map +1 -0
  31. package/dist/components/panel/PanelDropdownMenu.d.ts +19 -0
  32. package/dist/components/panel/PanelDropdownMenu.d.ts.map +1 -0
  33. package/dist/components/panel/PanelDropdownMenu.js +132 -0
  34. package/dist/components/panel/PanelDropdownMenu.js.map +1 -0
  35. package/dist/components/panel/PanelMoreMenu.d.ts +20 -0
  36. package/dist/components/panel/PanelMoreMenu.d.ts.map +1 -0
  37. package/dist/components/panel/PanelMoreMenu.js +20 -0
  38. package/dist/components/panel/PanelMoreMenu.js.map +1 -0
  39. package/dist/components/panel/PanelOptionSwitch.d.ts +14 -0
  40. package/dist/components/panel/PanelOptionSwitch.d.ts.map +1 -0
  41. package/dist/components/panel/PanelOptionSwitch.js +10 -0
  42. package/dist/components/panel/PanelOptionSwitch.js.map +1 -0
  43. package/dist/components/panel/ReportCommandPanel.d.ts +18 -0
  44. package/dist/components/panel/ReportCommandPanel.d.ts.map +1 -0
  45. package/dist/components/panel/ReportCommandPanel.js +43 -0
  46. package/dist/components/panel/ReportCommandPanel.js.map +1 -0
  47. package/dist/components/panel/ReportCommandReplaceConfirmDialog.d.ts +9 -0
  48. package/dist/components/panel/ReportCommandReplaceConfirmDialog.d.ts.map +1 -0
  49. package/dist/components/panel/ReportCommandReplaceConfirmDialog.js +7 -0
  50. package/dist/components/panel/ReportCommandReplaceConfirmDialog.js.map +1 -0
  51. package/dist/components/panel/ReportControlPanel.d.ts +2 -0
  52. package/dist/components/panel/ReportControlPanel.d.ts.map +1 -0
  53. package/dist/components/panel/ReportControlPanel.js +119 -0
  54. package/dist/components/panel/ReportControlPanel.js.map +1 -0
  55. package/dist/components/panel/ReportDraftForm.d.ts +2 -0
  56. package/dist/components/panel/ReportDraftForm.d.ts.map +1 -0
  57. package/dist/components/panel/ReportDraftForm.js +33 -0
  58. package/dist/components/panel/ReportDraftForm.js.map +1 -0
  59. package/dist/components/panel/ReportFeedbackList.d.ts +2 -0
  60. package/dist/components/panel/ReportFeedbackList.d.ts.map +1 -0
  61. package/dist/components/panel/ReportFeedbackList.js +165 -0
  62. package/dist/components/panel/ReportFeedbackList.js.map +1 -0
  63. package/dist/components/panel/ReportImportConfirmDialog.d.ts +8 -0
  64. package/dist/components/panel/ReportImportConfirmDialog.d.ts.map +1 -0
  65. package/dist/components/panel/ReportImportConfirmDialog.js +7 -0
  66. package/dist/components/panel/ReportImportConfirmDialog.js.map +1 -0
  67. package/dist/components/panel/ReportImportProjectMismatchDialog.d.ts +12 -0
  68. package/dist/components/panel/ReportImportProjectMismatchDialog.d.ts.map +1 -0
  69. package/dist/components/panel/ReportImportProjectMismatchDialog.js +19 -0
  70. package/dist/components/panel/ReportImportProjectMismatchDialog.js.map +1 -0
  71. package/dist/components/panel/ReportPersonalKeyDialog.d.ts +8 -0
  72. package/dist/components/panel/ReportPersonalKeyDialog.d.ts.map +1 -0
  73. package/dist/components/panel/ReportPersonalKeyDialog.js +60 -0
  74. package/dist/components/panel/ReportPersonalKeyDialog.js.map +1 -0
  75. package/dist/components/panel/ReportRouteDetails.d.ts +2 -0
  76. package/dist/components/panel/ReportRouteDetails.d.ts.map +1 -0
  77. package/dist/components/panel/ReportRouteDetails.js +18 -0
  78. package/dist/components/panel/ReportRouteDetails.js.map +1 -0
  79. package/dist/components/panel/feedback/AuthorSelector.d.ts +9 -0
  80. package/dist/components/panel/feedback/AuthorSelector.d.ts.map +1 -0
  81. package/dist/components/panel/feedback/AuthorSelector.js +17 -0
  82. package/dist/components/panel/feedback/AuthorSelector.js.map +1 -0
  83. package/dist/components/panel/feedback/FeedbackComposer.d.ts +23 -0
  84. package/dist/components/panel/feedback/FeedbackComposer.d.ts.map +1 -0
  85. package/dist/components/panel/feedback/FeedbackComposer.js +48 -0
  86. package/dist/components/panel/feedback/FeedbackComposer.js.map +1 -0
  87. package/dist/components/panel/feedback/FeedbackCreatorBadge.d.ts +2 -0
  88. package/dist/components/panel/feedback/FeedbackCreatorBadge.d.ts.map +1 -0
  89. package/dist/components/panel/feedback/FeedbackCreatorBadge.js +7 -0
  90. package/dist/components/panel/feedback/FeedbackCreatorBadge.js.map +1 -0
  91. package/dist/components/panel/feedback/FeedbackFieldTags.d.ts +9 -0
  92. package/dist/components/panel/feedback/FeedbackFieldTags.d.ts.map +1 -0
  93. package/dist/components/panel/feedback/FeedbackFieldTags.js +8 -0
  94. package/dist/components/panel/feedback/FeedbackFieldTags.js.map +1 -0
  95. package/dist/components/panel/feedback/FeedbackHoverCard.d.ts +11 -0
  96. package/dist/components/panel/feedback/FeedbackHoverCard.d.ts.map +1 -0
  97. package/dist/components/panel/feedback/FeedbackHoverCard.js +14 -0
  98. package/dist/components/panel/feedback/FeedbackHoverCard.js.map +1 -0
  99. package/dist/components/panel/feedback/FeedbackIssueHeader.d.ts +12 -0
  100. package/dist/components/panel/feedback/FeedbackIssueHeader.d.ts.map +1 -0
  101. package/dist/components/panel/feedback/FeedbackIssueHeader.js +10 -0
  102. package/dist/components/panel/feedback/FeedbackIssueHeader.js.map +1 -0
  103. package/dist/components/panel/feedback/FeedbackStatusBadge.d.ts +8 -0
  104. package/dist/components/panel/feedback/FeedbackStatusBadge.d.ts.map +1 -0
  105. package/dist/components/panel/feedback/FeedbackStatusBadge.js +10 -0
  106. package/dist/components/panel/feedback/FeedbackStatusBadge.js.map +1 -0
  107. package/dist/components/panel/feedback/FeedbackThread.d.ts +21 -0
  108. package/dist/components/panel/feedback/FeedbackThread.d.ts.map +1 -0
  109. package/dist/components/panel/feedback/FeedbackThread.js +90 -0
  110. package/dist/components/panel/feedback/FeedbackThread.js.map +1 -0
  111. package/dist/components/panel/feedback/FieldTagSelector.d.ts +9 -0
  112. package/dist/components/panel/feedback/FieldTagSelector.d.ts.map +1 -0
  113. package/dist/components/panel/feedback/FieldTagSelector.js +15 -0
  114. package/dist/components/panel/feedback/FieldTagSelector.js.map +1 -0
  115. package/dist/components/panel/feedback/GitIssueButton.d.ts +12 -0
  116. package/dist/components/panel/feedback/GitIssueButton.d.ts.map +1 -0
  117. package/dist/components/panel/feedback/GitIssueButton.js +43 -0
  118. package/dist/components/panel/feedback/GitIssueButton.js.map +1 -0
  119. package/dist/components/panel/feedback/GitIssuedThreadEntry.d.ts +8 -0
  120. package/dist/components/panel/feedback/GitIssuedThreadEntry.d.ts.map +1 -0
  121. package/dist/components/panel/feedback/GitIssuedThreadEntry.js +25 -0
  122. package/dist/components/panel/feedback/GitIssuedThreadEntry.js.map +1 -0
  123. package/dist/components/point/ReportDraftMarker.d.ts +2 -0
  124. package/dist/components/point/ReportDraftMarker.d.ts.map +1 -0
  125. package/dist/components/point/ReportDraftMarker.js +28 -0
  126. package/dist/components/point/ReportDraftMarker.js.map +1 -0
  127. package/dist/components/point/ReportMarkersLayer.d.ts +2 -0
  128. package/dist/components/point/ReportMarkersLayer.d.ts.map +1 -0
  129. package/dist/components/point/ReportMarkersLayer.js +129 -0
  130. package/dist/components/point/ReportMarkersLayer.js.map +1 -0
  131. package/dist/components/report/FivePixels.d.ts +50 -0
  132. package/dist/components/report/FivePixels.d.ts.map +1 -0
  133. package/dist/components/report/FivePixels.js +15 -0
  134. package/dist/components/report/FivePixels.js.map +1 -0
  135. package/dist/components/report/ReportView.d.ts +2 -0
  136. package/dist/components/report/ReportView.d.ts.map +1 -0
  137. package/dist/components/report/ReportView.js +14 -0
  138. package/dist/components/report/ReportView.js.map +1 -0
  139. package/dist/components/report/ShadowReportRoot.d.ts +9 -0
  140. package/dist/components/report/ShadowReportRoot.d.ts.map +1 -0
  141. package/dist/components/report/ShadowReportRoot.js +80 -0
  142. package/dist/components/report/ShadowReportRoot.js.map +1 -0
  143. package/dist/components/report/index.d.ts +13 -0
  144. package/dist/components/report/index.d.ts.map +1 -0
  145. package/dist/components/report/index.js +9 -0
  146. package/dist/components/report/index.js.map +1 -0
  147. package/dist/components/ui/HoverTooltip.d.ts +10 -0
  148. package/dist/components/ui/HoverTooltip.d.ts.map +1 -0
  149. package/dist/components/ui/HoverTooltip.js +64 -0
  150. package/dist/components/ui/HoverTooltip.js.map +1 -0
  151. package/dist/components/ui/IconTooltipButton.d.ts +12 -0
  152. package/dist/components/ui/IconTooltipButton.d.ts.map +1 -0
  153. package/dist/components/ui/IconTooltipButton.js +7 -0
  154. package/dist/components/ui/IconTooltipButton.js.map +1 -0
  155. package/dist/constants/feedbackStatus.d.ts +6 -0
  156. package/dist/constants/feedbackStatus.d.ts.map +1 -0
  157. package/dist/constants/feedbackStatus.js +27 -0
  158. package/dist/constants/feedbackStatus.js.map +1 -0
  159. package/dist/constants/project.d.ts +2 -0
  160. package/dist/constants/project.d.ts.map +1 -0
  161. package/dist/constants/project.js +2 -0
  162. package/dist/constants/project.js.map +1 -0
  163. package/dist/constants/report.d.ts +7 -0
  164. package/dist/constants/report.d.ts.map +1 -0
  165. package/dist/constants/report.js +14 -0
  166. package/dist/constants/report.js.map +1 -0
  167. package/dist/constants/reportShortcuts.d.ts +31 -0
  168. package/dist/constants/reportShortcuts.d.ts.map +1 -0
  169. package/dist/constants/reportShortcuts.js +9 -0
  170. package/dist/constants/reportShortcuts.js.map +1 -0
  171. package/dist/constants/storageKeys.d.ts +5 -0
  172. package/dist/constants/storageKeys.d.ts.map +1 -0
  173. package/dist/constants/storageKeys.js +16 -0
  174. package/dist/constants/storageKeys.js.map +1 -0
  175. package/dist/hooks/report.api.d.ts +8 -0
  176. package/dist/hooks/report.api.d.ts.map +1 -0
  177. package/dist/hooks/report.api.js +20 -0
  178. package/dist/hooks/report.api.js.map +1 -0
  179. package/dist/hooks/report.query.d.ts +27 -0
  180. package/dist/hooks/report.query.d.ts.map +1 -0
  181. package/dist/hooks/report.query.js +137 -0
  182. package/dist/hooks/report.query.js.map +1 -0
  183. package/dist/hooks/useAppearancePreference.d.ts +6 -0
  184. package/dist/hooks/useAppearancePreference.d.ts.map +1 -0
  185. package/dist/hooks/useAppearancePreference.js +40 -0
  186. package/dist/hooks/useAppearancePreference.js.map +1 -0
  187. package/dist/hooks/useCurrentPathname.d.ts +2 -0
  188. package/dist/hooks/useCurrentPathname.d.ts.map +1 -0
  189. package/dist/hooks/useCurrentPathname.js +18 -0
  190. package/dist/hooks/useCurrentPathname.js.map +1 -0
  191. package/dist/hooks/useIsMobileViewport.d.ts +2 -0
  192. package/dist/hooks/useIsMobileViewport.d.ts.map +1 -0
  193. package/dist/hooks/useIsMobileViewport.js +12 -0
  194. package/dist/hooks/useIsMobileViewport.js.map +1 -0
  195. package/dist/hooks/useLocalePreference.d.ts +6 -0
  196. package/dist/hooks/useLocalePreference.d.ts.map +1 -0
  197. package/dist/hooks/useLocalePreference.js +40 -0
  198. package/dist/hooks/useLocalePreference.js.map +1 -0
  199. package/dist/hooks/useNativeHover.d.ts +7 -0
  200. package/dist/hooks/useNativeHover.d.ts.map +1 -0
  201. package/dist/hooks/useNativeHover.js +28 -0
  202. package/dist/hooks/useNativeHover.js.map +1 -0
  203. package/dist/hooks/usePanelDock.d.ts +29 -0
  204. package/dist/hooks/usePanelDock.d.ts.map +1 -0
  205. package/dist/hooks/usePanelDock.js +279 -0
  206. package/dist/hooks/usePanelDock.js.map +1 -0
  207. package/dist/hooks/usePanelFeedbackTransfer.d.ts +59 -0
  208. package/dist/hooks/usePanelFeedbackTransfer.d.ts.map +1 -0
  209. package/dist/hooks/usePanelFeedbackTransfer.js +250 -0
  210. package/dist/hooks/usePanelFeedbackTransfer.js.map +1 -0
  211. package/dist/hooks/usePersonalKey.d.ts +30 -0
  212. package/dist/hooks/usePersonalKey.d.ts.map +1 -0
  213. package/dist/hooks/usePersonalKey.js +72 -0
  214. package/dist/hooks/usePersonalKey.js.map +1 -0
  215. package/dist/hooks/useReportPersistence.d.ts +63 -0
  216. package/dist/hooks/useReportPersistence.d.ts.map +1 -0
  217. package/dist/hooks/useReportPersistence.js +142 -0
  218. package/dist/hooks/useReportPersistence.js.map +1 -0
  219. package/dist/hooks/useReportShortcuts.d.ts +5 -0
  220. package/dist/hooks/useReportShortcuts.d.ts.map +1 -0
  221. package/dist/hooks/useReportShortcuts.js +117 -0
  222. package/dist/hooks/useReportShortcuts.js.map +1 -0
  223. package/dist/hooks/useReportState.d.ts +177 -0
  224. package/dist/hooks/useReportState.d.ts.map +1 -0
  225. package/dist/hooks/useReportState.js +904 -0
  226. package/dist/hooks/useReportState.js.map +1 -0
  227. package/dist/hooks/useResolvedAppearance.d.ts +4 -0
  228. package/dist/hooks/useResolvedAppearance.d.ts.map +1 -0
  229. package/dist/hooks/useResolvedAppearance.js +23 -0
  230. package/dist/hooks/useResolvedAppearance.js.map +1 -0
  231. package/dist/hooks/useTooltipLayout.d.ts +21 -0
  232. package/dist/hooks/useTooltipLayout.d.ts.map +1 -0
  233. package/dist/hooks/useTooltipLayout.js +45 -0
  234. package/dist/hooks/useTooltipLayout.js.map +1 -0
  235. package/dist/i18n/en.d.ts +3 -0
  236. package/dist/i18n/en.d.ts.map +1 -0
  237. package/dist/i18n/en.js +277 -0
  238. package/dist/i18n/en.js.map +1 -0
  239. package/dist/i18n/index.d.ts +20 -0
  240. package/dist/i18n/index.d.ts.map +1 -0
  241. package/dist/i18n/index.js +77 -0
  242. package/dist/i18n/index.js.map +1 -0
  243. package/dist/i18n/ko.d.ts +3 -0
  244. package/dist/i18n/ko.d.ts.map +1 -0
  245. package/dist/i18n/ko.js +277 -0
  246. package/dist/i18n/ko.js.map +1 -0
  247. package/dist/i18n/types.d.ts +267 -0
  248. package/dist/i18n/types.d.ts.map +1 -0
  249. package/dist/i18n/types.js +2 -0
  250. package/dist/i18n/types.js.map +1 -0
  251. package/dist/index.d.ts +4 -0
  252. package/dist/index.d.ts.map +1 -0
  253. package/dist/index.js +3 -0
  254. package/dist/index.js.map +1 -0
  255. package/dist/providers/ReportProvider.d.ts +52 -0
  256. package/dist/providers/ReportProvider.d.ts.map +1 -0
  257. package/dist/providers/ReportProvider.js +49 -0
  258. package/dist/providers/ReportProvider.js.map +1 -0
  259. package/dist/providers/reportContext.d.ts +286 -0
  260. package/dist/providers/reportContext.d.ts.map +1 -0
  261. package/dist/providers/reportContext.js +11 -0
  262. package/dist/providers/reportContext.js.map +1 -0
  263. package/dist/storage/local/localStorageAdapter.d.ts +12 -0
  264. package/dist/storage/local/localStorageAdapter.d.ts.map +1 -0
  265. package/dist/storage/local/localStorageAdapter.js +187 -0
  266. package/dist/storage/local/localStorageAdapter.js.map +1 -0
  267. package/dist/styles/reportStylesheet.d.ts +2 -0
  268. package/dist/styles/reportStylesheet.d.ts.map +1 -0
  269. package/dist/styles/reportStylesheet.js +3 -0
  270. package/dist/styles/reportStylesheet.js.map +1 -0
  271. package/dist/types/report-ui.d.ts +47 -0
  272. package/dist/types/report-ui.d.ts.map +1 -0
  273. package/dist/types/report-ui.js +2 -0
  274. package/dist/types/report-ui.js.map +1 -0
  275. package/dist/types/report.d.ts +177 -0
  276. package/dist/types/report.d.ts.map +1 -0
  277. package/dist/types/report.js +8 -0
  278. package/dist/types/report.js.map +1 -0
  279. package/dist/utils/coordinates.d.ts +63 -0
  280. package/dist/utils/coordinates.d.ts.map +1 -0
  281. package/dist/utils/coordinates.js +236 -0
  282. package/dist/utils/coordinates.js.map +1 -0
  283. package/dist/utils/dom.d.ts +14 -0
  284. package/dist/utils/dom.d.ts.map +1 -0
  285. package/dist/utils/dom.js +104 -0
  286. package/dist/utils/dom.js.map +1 -0
  287. package/dist/utils/env.d.ts +6 -0
  288. package/dist/utils/env.d.ts.map +1 -0
  289. package/dist/utils/env.js +18 -0
  290. package/dist/utils/env.js.map +1 -0
  291. package/dist/utils/feedbackDataTransfer.d.ts +31 -0
  292. package/dist/utils/feedbackDataTransfer.d.ts.map +1 -0
  293. package/dist/utils/feedbackDataTransfer.js +195 -0
  294. package/dist/utils/feedbackDataTransfer.js.map +1 -0
  295. package/dist/utils/feedbackThread.d.ts +14 -0
  296. package/dist/utils/feedbackThread.d.ts.map +1 -0
  297. package/dist/utils/feedbackThread.js +57 -0
  298. package/dist/utils/feedbackThread.js.map +1 -0
  299. package/dist/utils/feedbackTransferSchema.d.ts +37 -0
  300. package/dist/utils/feedbackTransferSchema.d.ts.map +1 -0
  301. package/dist/utils/feedbackTransferSchema.js +162 -0
  302. package/dist/utils/feedbackTransferSchema.js.map +1 -0
  303. package/dist/utils/fields.d.ts +11 -0
  304. package/dist/utils/fields.d.ts.map +1 -0
  305. package/dist/utils/fields.js +43 -0
  306. package/dist/utils/fields.js.map +1 -0
  307. package/dist/utils/format.d.ts +6 -0
  308. package/dist/utils/format.d.ts.map +1 -0
  309. package/dist/utils/format.js +46 -0
  310. package/dist/utils/format.js.map +1 -0
  311. package/dist/utils/formatStatCount.d.ts +2 -0
  312. package/dist/utils/formatStatCount.d.ts.map +1 -0
  313. package/dist/utils/formatStatCount.js +4 -0
  314. package/dist/utils/formatStatCount.js.map +1 -0
  315. package/dist/utils/githubIntegration.d.ts +12 -0
  316. package/dist/utils/githubIntegration.d.ts.map +1 -0
  317. package/dist/utils/githubIntegration.js +56 -0
  318. package/dist/utils/githubIntegration.js.map +1 -0
  319. package/dist/utils/hoverTooltipLayout.d.ts +8 -0
  320. package/dist/utils/hoverTooltipLayout.d.ts.map +1 -0
  321. package/dist/utils/hoverTooltipLayout.js +30 -0
  322. package/dist/utils/hoverTooltipLayout.js.map +1 -0
  323. package/dist/utils/locateFeedback.d.ts +11 -0
  324. package/dist/utils/locateFeedback.d.ts.map +1 -0
  325. package/dist/utils/locateFeedback.js +16 -0
  326. package/dist/utils/locateFeedback.js.map +1 -0
  327. package/dist/utils/panelTypography.d.ts +4 -0
  328. package/dist/utils/panelTypography.d.ts.map +1 -0
  329. package/dist/utils/panelTypography.js +4 -0
  330. package/dist/utils/panelTypography.js.map +1 -0
  331. package/dist/utils/pathname.d.ts +2 -0
  332. package/dist/utils/pathname.d.ts.map +1 -0
  333. package/dist/utils/pathname.js +10 -0
  334. package/dist/utils/pathname.js.map +1 -0
  335. package/dist/utils/pathnameNavigation.d.ts +4 -0
  336. package/dist/utils/pathnameNavigation.d.ts.map +1 -0
  337. package/dist/utils/pathnameNavigation.js +52 -0
  338. package/dist/utils/pathnameNavigation.js.map +1 -0
  339. package/dist/utils/personalKey.d.ts +45 -0
  340. package/dist/utils/personalKey.d.ts.map +1 -0
  341. package/dist/utils/personalKey.js +180 -0
  342. package/dist/utils/personalKey.js.map +1 -0
  343. package/dist/utils/projectId.d.ts +2 -0
  344. package/dist/utils/projectId.d.ts.map +1 -0
  345. package/dist/utils/projectId.js +14 -0
  346. package/dist/utils/projectId.js.map +1 -0
  347. package/dist/utils/reportCallbacks.d.ts +20 -0
  348. package/dist/utils/reportCallbacks.d.ts.map +1 -0
  349. package/dist/utils/reportCallbacks.js +42 -0
  350. package/dist/utils/reportCallbacks.js.map +1 -0
  351. package/dist/utils/reportProject.d.ts +17 -0
  352. package/dist/utils/reportProject.d.ts.map +1 -0
  353. package/dist/utils/reportProject.js +9 -0
  354. package/dist/utils/reportProject.js.map +1 -0
  355. package/dist/utils/reportTeam.d.ts +15 -0
  356. package/dist/utils/reportTeam.d.ts.map +1 -0
  357. package/dist/utils/reportTeam.js +8 -0
  358. package/dist/utils/reportTeam.js.map +1 -0
  359. package/dist/utils/reportUi.d.ts +24 -0
  360. package/dist/utils/reportUi.d.ts.map +1 -0
  361. package/dist/utils/reportUi.js +19 -0
  362. package/dist/utils/reportUi.js.map +1 -0
  363. package/dist/utils/reportVisibility.d.ts +19 -0
  364. package/dist/utils/reportVisibility.d.ts.map +1 -0
  365. package/dist/utils/reportVisibility.js +12 -0
  366. package/dist/utils/reportVisibility.js.map +1 -0
  367. package/dist/utils/reportVisual.d.ts +12 -0
  368. package/dist/utils/reportVisual.d.ts.map +1 -0
  369. package/dist/utils/reportVisual.js +31 -0
  370. package/dist/utils/reportVisual.js.map +1 -0
  371. package/dist/utils/routeDetailStatus.d.ts +7 -0
  372. package/dist/utils/routeDetailStatus.d.ts.map +1 -0
  373. package/dist/utils/routeDetailStatus.js +29 -0
  374. package/dist/utils/routeDetailStatus.js.map +1 -0
  375. package/dist/utils/shortcuts.d.ts +12 -0
  376. package/dist/utils/shortcuts.d.ts.map +1 -0
  377. package/dist/utils/shortcuts.js +59 -0
  378. package/dist/utils/shortcuts.js.map +1 -0
  379. package/dist/utils/storage.d.ts +17 -0
  380. package/dist/utils/storage.d.ts.map +1 -0
  381. package/dist/utils/storage.js +36 -0
  382. package/dist/utils/storage.js.map +1 -0
  383. package/dist/utils/validateFeedbackImport.d.ts +4 -0
  384. package/dist/utils/validateFeedbackImport.d.ts.map +1 -0
  385. package/dist/utils/validateFeedbackImport.js +187 -0
  386. package/dist/utils/validateFeedbackImport.js.map +1 -0
  387. package/package.json +68 -0
@@ -0,0 +1,30 @@
1
+ import type { ReportAuthAction, ReportAuthor, ReportIdentify } from "../types/report.js";
2
+ type UsePersonalKeyOptions = {
3
+ enabled: boolean;
4
+ projectId: string;
5
+ environment?: string;
6
+ identify?: ReportIdentify;
7
+ authors: ReportAuthor[];
8
+ };
9
+ export declare function usePersonalKey({ enabled, projectId, environment, identify, authors }: UsePersonalKeyOptions): {
10
+ personalKey: string | null;
11
+ publicKey: string | null;
12
+ personalKeyRequired: boolean;
13
+ personalKeyPendingRegistration: boolean;
14
+ personalKeyCandidates: ReportAuthor[];
15
+ authorizedAuthors: ReportIdentify[];
16
+ issuePersonalKey: (authorId?: string) => Promise<{
17
+ privateKey: string;
18
+ publicKey: string;
19
+ } | null>;
20
+ rotatePersonalKey: () => Promise<{
21
+ privateKey: string;
22
+ publicKey: string;
23
+ } | null>;
24
+ insertPersonalKey: (key: string) => Promise<{
25
+ authorized: boolean;
26
+ } | null>;
27
+ signPayload: (action: ReportAuthAction, payload: unknown) => Promise<import("../types/report.js").ReportAuthProof | null>;
28
+ };
29
+ export {};
30
+ //# sourceMappingURL=usePersonalKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersonalKey.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersonalKey.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYxF,KAAK,qBAAqB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB;;;;;;;kCAqBjD,MAAM;;;;;;;;6BAyB7C,MAAM;;;0BAkBH,gBAAgB,WAAW,OAAO;EA2BxD"}
@@ -0,0 +1,72 @@
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
+ import { createReviewerKeyPair, getPublicKeyFromPrivateKey, parsePrivateKeyBundle, readPersonalKey, resolvePersonalKeyAuthor, resolvePersonalKeyOwner, savePersonalKey, signReportPayload, } from "../utils/personalKey.js";
3
+ export function usePersonalKey({ enabled, projectId, environment, identify, authors }) {
4
+ const [personalKey, setPersonalKey] = useState(null);
5
+ const [isReady, setIsReady] = useState(!enabled);
6
+ useEffect(() => {
7
+ if (!enabled) {
8
+ setPersonalKey(null);
9
+ setIsReady(true);
10
+ return;
11
+ }
12
+ setPersonalKey(readPersonalKey(projectId, environment));
13
+ setIsReady(true);
14
+ }, [enabled, environment, projectId]);
15
+ const keyBundle = useMemo(() => (personalKey ? parsePrivateKeyBundle(personalKey) : null), [personalKey]);
16
+ const authorizedAuthor = useMemo(() => (keyBundle ? resolvePersonalKeyAuthor(keyBundle, identify, authors) : undefined), [authors, identify, keyBundle]);
17
+ const issuePersonalKey = useCallback(async (authorId) => {
18
+ const owner = authors.find((author) => author.id === authorId) ?? resolvePersonalKeyOwner(identify, authors);
19
+ if (!owner) {
20
+ return null;
21
+ }
22
+ const issued = await createReviewerKeyPair(projectId, environment, owner.id);
23
+ savePersonalKey(projectId, environment, issued.privateKey);
24
+ setPersonalKey(issued.privateKey);
25
+ return issued;
26
+ }, [authors, environment, identify, projectId]);
27
+ const rotatePersonalKey = useCallback(async () => {
28
+ if (!authorizedAuthor) {
29
+ return null;
30
+ }
31
+ const issued = await createReviewerKeyPair(projectId, environment, authorizedAuthor.id);
32
+ savePersonalKey(projectId, environment, issued.privateKey);
33
+ setPersonalKey(issued.privateKey);
34
+ return issued;
35
+ }, [authorizedAuthor, environment, projectId]);
36
+ const insertPersonalKey = useCallback(async (key) => {
37
+ const saved = savePersonalKey(projectId, environment, key);
38
+ if (saved) {
39
+ setPersonalKey(key.trim());
40
+ }
41
+ const bundle = saved ? parsePrivateKeyBundle(key) : null;
42
+ return bundle
43
+ ? {
44
+ authorized: Boolean(resolvePersonalKeyAuthor(bundle, identify, authors)),
45
+ }
46
+ : null;
47
+ }, [authors, environment, identify, projectId]);
48
+ const signPayload = useCallback(async (action, payload) => {
49
+ if (!personalKey || !authorizedAuthor) {
50
+ return null;
51
+ }
52
+ return signReportPayload(personalKey, {
53
+ projectId,
54
+ environment,
55
+ action,
56
+ payload,
57
+ });
58
+ }, [authorizedAuthor, environment, personalKey, projectId]);
59
+ return {
60
+ personalKey,
61
+ publicKey: personalKey ? getPublicKeyFromPrivateKey(personalKey) : null,
62
+ personalKeyRequired: enabled && isReady && !authorizedAuthor,
63
+ personalKeyPendingRegistration: enabled && Boolean(personalKey) && !authorizedAuthor,
64
+ personalKeyCandidates: authors,
65
+ authorizedAuthors: enabled ? (authorizedAuthor ? [authorizedAuthor] : []) : authors,
66
+ issuePersonalKey,
67
+ rotatePersonalKey,
68
+ insertPersonalKey,
69
+ signPayload,
70
+ };
71
+ }
72
+ //# sourceMappingURL=usePersonalKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePersonalKey.js","sourceRoot":"","sources":["../../src/hooks/usePersonalKey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { CreateReportFeedbackPayload, ReportFeedback, ReportField, ReportPersistenceHandlers, ReportStorageAdapter, UpdateReportFeedbackPayload } from "../types/report.js";
2
+ import type { ReportFilters, ReportListScope } from "../types/report-ui.js";
3
+ export type ReportPersistenceConfig = {
4
+ projectId: string;
5
+ environment?: string;
6
+ appVersion?: string;
7
+ fields: ReportField[];
8
+ onList?: (params: {
9
+ pathname: string;
10
+ }) => Promise<ReportFeedback[]>;
11
+ onListAll?: ReportPersistenceHandlers["onListAll"];
12
+ onCreate?: (payload: CreateReportFeedbackPayload) => Promise<ReportFeedback>;
13
+ onUpdate?: (id: string, payload: UpdateReportFeedbackPayload) => Promise<ReportFeedback>;
14
+ onDelete?: (id: string) => Promise<void>;
15
+ routeKey?: string;
16
+ };
17
+ export declare function useReportPersistence({ projectId, environment, appVersion, fields, onList, onListAll, onCreate, onUpdate, onDelete, routeKey, }: ReportPersistenceConfig): {
18
+ storageAdapterInstance: ReportStorageAdapter;
19
+ canTransferFeedback: boolean;
20
+ canListAllFeedback: boolean;
21
+ currentPathname: string;
22
+ listScope: ReportListScope;
23
+ setListScope: import("react").Dispatch<import("react").SetStateAction<ReportListScope>>;
24
+ filters: ReportFilters;
25
+ setFilters: import("react").Dispatch<import("react").SetStateAction<ReportFilters>>;
26
+ selectedReportId: string | null;
27
+ setSelectedReportId: import("react").Dispatch<import("react").SetStateAction<string | null>>;
28
+ reports: ReportFeedback[];
29
+ filteredReports: ReportFeedback[];
30
+ currentPageFilteredReports: ReportFeedback[];
31
+ routeDetailsStats: {
32
+ pathname: string;
33
+ statusRows: {
34
+ status: import("../constants/feedbackStatus.js").FeedbackDisplayStatus;
35
+ all: number;
36
+ today: number;
37
+ }[];
38
+ fieldCounts: {
39
+ key: string;
40
+ label: string;
41
+ type: "textarea" | "checkbox";
42
+ count: number;
43
+ }[];
44
+ };
45
+ selectedReport: ReportFeedback;
46
+ isError: boolean;
47
+ isFetching: boolean;
48
+ hasNextPage: boolean;
49
+ isFetchingNextPage: boolean;
50
+ fetchNextPage: () => Promise<void>;
51
+ isCreating: boolean;
52
+ isUpdating: boolean;
53
+ isDeleting: boolean;
54
+ queryErrorMessage: string | undefined;
55
+ refetch: () => Promise<ReportFeedback[]>;
56
+ createFeedback: (payload: CreateReportFeedbackPayload) => Promise<ReportFeedback>;
57
+ updateFeedback: (id: string, payload: UpdateReportFeedbackPayload) => Promise<ReportFeedback>;
58
+ deleteFeedback: (id: string) => Promise<void>;
59
+ };
60
+ export type ReportPersistenceState = ReturnType<typeof useReportPersistence> & {
61
+ storageAdapterInstance: ReportStorageAdapter;
62
+ };
63
+ //# sourceMappingURL=useReportPersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReportPersistence.d.ts","sourceRoot":"","sources":["../../src/hooks/useReportPersistence.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,2BAA2B,EAC3B,cAAc,EACd,WAAW,EACX,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM3E,MAAM,MAAM,uBAAuB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACrE,SAAS,CAAC,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,2BAA2B,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACzF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAqBF,wBAAgB,oBAAoB,CAAC,EACjC,SAAS,EACT,WAAW,EACX,UAAU,EACV,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,GACX,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkJzB;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,GAAG;IAC3E,sBAAsB,EAAE,oBAAoB,CAAC;CAChD,CAAC"}
@@ -0,0 +1,142 @@
1
+ import { useEffect, useMemo, useState } from "react";
2
+ import { useCreateReportMutation, useDeleteReportMutation, useReportsQuery, useUpdateReportMutation } from "./report.query.js";
3
+ import { useCurrentPathname } from "./useCurrentPathname.js";
4
+ import { getRouteDetailStatus, isCreatedToday } from "../utils/routeDetailStatus.js";
5
+ import { getFeedbackDisplayStatus } from "../utils/feedbackThread.js";
6
+ import { FEEDBACK_DISPLAY_STATUS_ORDER } from "../constants/feedbackStatus.js";
7
+ import { resolveStorageAdapter } from "../utils/storage.js";
8
+ function filterReports(reports, filters) {
9
+ return reports.filter((report) => {
10
+ if (filters.status !== "all" && getRouteDetailStatus(report) !== filters.status) {
11
+ return false;
12
+ }
13
+ if (filters.reportType !== "all" && report.report_type !== filters.reportType) {
14
+ return false;
15
+ }
16
+ if (!filters.keyword.trim()) {
17
+ return true;
18
+ }
19
+ const keyword = filters.keyword.trim().toLowerCase();
20
+ return [report.message, report.report_id, report.status, report.pathname].join(" ").toLowerCase().includes(keyword);
21
+ });
22
+ }
23
+ export function useReportPersistence({ projectId, environment, appVersion, fields, onList, onListAll, onCreate, onUpdate, onDelete, routeKey, }) {
24
+ const { adapter: storageAdapterInstance, usesLocalStorage } = useMemo(() => resolveStorageAdapter({ projectId, environment, appVersion, onList, onListAll, onCreate, onUpdate, onDelete }), [appVersion, environment, onCreate, onDelete, onList, onListAll, onUpdate, projectId]);
25
+ const canTransferFeedback = usesLocalStorage;
26
+ const currentPathname = useCurrentPathname(routeKey);
27
+ const [filters, setFilters] = useState({
28
+ keyword: "",
29
+ status: "all",
30
+ reportType: "all",
31
+ });
32
+ const [selectedReportId, setSelectedReportId] = useState(null);
33
+ const [listScope, setListScope] = useState("current");
34
+ const currentReportsQuery = useReportsQuery(storageAdapterInstance, currentPathname, "current", true);
35
+ const allReportsQuery = useReportsQuery(storageAdapterInstance, currentPathname, "all", listScope === "all" && Boolean(storageAdapterInstance.listAll));
36
+ const activeReportsQuery = listScope === "all" ? allReportsQuery : currentReportsQuery;
37
+ const reports = activeReportsQuery.data;
38
+ const { error, isError, isFetching, hasNextPage, isFetchingNextPage, fetchNextPage, refetch } = activeReportsQuery;
39
+ const { mutateAsync: createFeedback, isPending: isCreating } = useCreateReportMutation(storageAdapterInstance, () => {
40
+ void refetch();
41
+ if (listScope === "all") {
42
+ void currentReportsQuery.refetch();
43
+ }
44
+ });
45
+ const { mutateAsync: updateFeedback, isPending: isUpdating } = useUpdateReportMutation(storageAdapterInstance, () => {
46
+ void refetch();
47
+ if (listScope === "all") {
48
+ void currentReportsQuery.refetch();
49
+ }
50
+ });
51
+ const { mutateAsync: deleteFeedback, isPending: isDeleting } = useDeleteReportMutation(storageAdapterInstance, () => {
52
+ void refetch();
53
+ if (listScope === "all") {
54
+ void currentReportsQuery.refetch();
55
+ }
56
+ });
57
+ const filteredReports = useMemo(() => filterReports(reports, filters), [filters, reports]);
58
+ const currentPageFilteredReports = useMemo(() => filterReports(currentReportsQuery.data, filters), [currentReportsQuery.data, filters]);
59
+ const routeDetailsStats = useMemo(() => {
60
+ const currentPageReports = currentReportsQuery.data;
61
+ const statusRows = FEEDBACK_DISPLAY_STATUS_ORDER.map((status) => ({
62
+ status,
63
+ all: 0,
64
+ today: 0,
65
+ }));
66
+ const statusIndex = new Map(statusRows.map((row, index) => [row.status, index]));
67
+ for (const report of currentPageReports) {
68
+ const status = getFeedbackDisplayStatus(report, true);
69
+ const index = statusIndex.get(status);
70
+ if (index === undefined) {
71
+ continue;
72
+ }
73
+ statusRows[index].all += 1;
74
+ if (isCreatedToday(report.created_at)) {
75
+ statusRows[index].today += 1;
76
+ }
77
+ }
78
+ const fieldCounts = fields
79
+ .filter((field) => field.key !== "message")
80
+ .map((field) => {
81
+ const count = currentPageReports.filter((report) => {
82
+ if (field.type === "checkbox") {
83
+ return report.field_values[field.key] === true;
84
+ }
85
+ return String(report.field_values[field.key] ?? "").trim().length > 0;
86
+ }).length;
87
+ return {
88
+ key: field.key,
89
+ label: field.label,
90
+ type: field.type,
91
+ count,
92
+ };
93
+ });
94
+ return {
95
+ pathname: currentPathname,
96
+ statusRows,
97
+ fieldCounts,
98
+ };
99
+ }, [currentPathname, currentReportsQuery.data, fields]);
100
+ const selectedReport = useMemo(() => {
101
+ return filteredReports.find((report) => report.id === selectedReportId) ?? filteredReports[0] ?? null;
102
+ }, [filteredReports, selectedReportId]);
103
+ useEffect(() => {
104
+ if (!selectedReportId) {
105
+ return;
106
+ }
107
+ if (!filteredReports.some((report) => report.id === selectedReportId)) {
108
+ setSelectedReportId(filteredReports[0]?.id ?? null);
109
+ }
110
+ }, [filteredReports, selectedReportId]);
111
+ return {
112
+ storageAdapterInstance,
113
+ canTransferFeedback,
114
+ canListAllFeedback: Boolean(storageAdapterInstance.listAll),
115
+ currentPathname,
116
+ listScope,
117
+ setListScope,
118
+ filters,
119
+ setFilters,
120
+ selectedReportId,
121
+ setSelectedReportId,
122
+ reports,
123
+ filteredReports,
124
+ currentPageFilteredReports,
125
+ routeDetailsStats,
126
+ selectedReport,
127
+ isError,
128
+ isFetching,
129
+ hasNextPage,
130
+ isFetchingNextPage,
131
+ fetchNextPage,
132
+ isCreating,
133
+ isUpdating,
134
+ isDeleting,
135
+ queryErrorMessage: error?.message,
136
+ refetch,
137
+ createFeedback,
138
+ updateFeedback,
139
+ deleteFeedback,
140
+ };
141
+ }
142
+ //# sourceMappingURL=useReportPersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReportPersistence.js","sourceRoot":"","sources":["../../src/hooks/useReportPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAU7D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAe3D,SAAS,aAAa,CAAC,OAAyB,EAAE,OAAsB;IACpE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,oBAAoB,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9E,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5E,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrD,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,EACjC,SAAS,EACT,WAAW,EACX,UAAU,EACV,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,GACc;IACtB,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,GAAG,OAAO,CACjE,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EACpH,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CACxF,CAAC;IACF,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;IAC7C,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAErD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB;QAClD,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAkB,SAAS,CAAC,CAAC;IAEvE,MAAM,mBAAmB,GAAG,eAAe,CAAC,sBAAsB,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACtG,MAAM,eAAe,GAAG,eAAe,CACnC,sBAAsB,EACtB,eAAe,EACf,KAAK,EACL,SAAS,KAAK,KAAK,IAAI,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CACjE,CAAC;IACF,MAAM,kBAAkB,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACvF,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC;IACxC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC;IACnH,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,uBAAuB,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChH,KAAK,OAAO,EAAE,CAAC;QACf,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACtB,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,uBAAuB,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChH,KAAK,OAAO,EAAE,CAAC;QACf,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACtB,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,uBAAuB,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChH,KAAK,OAAO,EAAE,CAAC;QACf,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACtB,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3F,MAAM,0BAA0B,GAAG,OAAO,CACtC,GAAG,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,EACtD,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CACtC,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,IAAI,CAAC;QACpD,MAAM,UAAU,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9D,MAAM;YACN,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,CAAC;SACX,CAAC,CAAC,CAAC;QAEJ,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACtB,SAAS;YACb,CAAC;YAED,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAE3B,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACjC,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,MAAM;aACrB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC;aAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACX,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC5B,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;gBACnD,CAAC;gBAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC,MAAM,CAAC;YAEV,OAAO;gBACH,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK;aACR,CAAC;QACN,CAAC,CAAC,CAAC;QAEP,OAAO;YACH,QAAQ,EAAE,eAAe;YACzB,UAAU;YACV,WAAW;SACd,CAAC;IACN,CAAC,EAAE,CAAC,eAAe,EAAE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,gBAAgB,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC1G,CAAC,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,gBAAgB,CAAC,EAAE,CAAC;YACpE,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;QACxD,CAAC;IACL,CAAC,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAExC,OAAO;QACH,sBAAsB;QACtB,mBAAmB;QACnB,kBAAkB,EAAE,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAC3D,eAAe;QACf,SAAS;QACT,YAAY;QACZ,OAAO;QACP,UAAU;QACV,gBAAgB;QAChB,mBAAmB;QACnB,OAAO;QACP,eAAe;QACf,0BAA0B;QAC1B,iBAAiB;QACjB,cAAc;QACd,OAAO;QACP,UAAU;QACV,WAAW;QACX,kBAAkB;QAClB,aAAa;QACb,UAAU;QACV,UAAU;QACV,UAAU;QACV,iBAAiB,EAAE,KAAK,EAAE,OAAO;QACjC,OAAO;QACP,cAAc;QACd,cAAc;QACd,cAAc;KACjB,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { useReportState } from "./useReportState.js";
2
+ type ReportShortcutHandlers = Pick<ReturnType<typeof useReportState>, "mode" | "draft" | "editingReportId" | "panelTab" | "showTargetPreview" | "activeReplyReportId" | "pendingComposer" | "toggleReportMode" | "toggleTargetPreview" | "toggleIssueMode" | "cancelDraft" | "cancelPendingComposer" | "closeReplyComposer" | "handleCreateSubmit" | "stopEditing" | "handleUpdateSubmit" | "focusSearchInput" | "selectAdjacentReport">;
3
+ export declare function useReportShortcuts(handlers: ReportShortcutHandlers): void;
4
+ export {};
5
+ //# sourceMappingURL=useReportShortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReportShortcuts.d.ts","sourceRoot":"","sources":["../../src/hooks/useReportShortcuts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,KAAK,sBAAsB,GAAG,IAAI,CAC9B,UAAU,CAAC,OAAO,cAAc,CAAC,EAC/B,MAAM,GACN,OAAO,GACP,iBAAiB,GACjB,UAAU,GACV,mBAAmB,GACnB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,aAAa,GACb,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,aAAa,GACb,oBAAoB,GACpB,kBAAkB,GAClB,sBAAsB,CAC3B,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,QAwJlE"}
@@ -0,0 +1,117 @@
1
+ import { useEffect } from "react";
2
+ import { REPORT_SHORTCUTS } from "../constants/reportShortcuts.js";
3
+ import { isEditableTarget, matchesShortcut } from "../utils/shortcuts.js";
4
+ export function useReportShortcuts(handlers) {
5
+ const { mode, draft, editingReportId, panelTab, showTargetPreview, activeReplyReportId, pendingComposer, toggleReportMode, toggleTargetPreview, toggleIssueMode, cancelDraft, cancelPendingComposer, closeReplyComposer, handleCreateSubmit, stopEditing, handleUpdateSubmit, focusSearchInput, selectAdjacentReport, } = handlers;
6
+ useEffect(() => {
7
+ const handleKeyDown = (event) => {
8
+ const inEditable = isEditableTarget(event.target);
9
+ const isFeedbackListOpen = panelTab === "feedback-list";
10
+ if (matchesShortcut(event, REPORT_SHORTCUTS.submit)) {
11
+ if (draft) {
12
+ event.preventDefault();
13
+ void handleCreateSubmit();
14
+ return;
15
+ }
16
+ if (editingReportId) {
17
+ event.preventDefault();
18
+ void handleUpdateSubmit();
19
+ return;
20
+ }
21
+ return;
22
+ }
23
+ if (matchesShortcut(event, REPORT_SHORTCUTS.cancel)) {
24
+ if (draft) {
25
+ event.preventDefault();
26
+ cancelDraft();
27
+ return;
28
+ }
29
+ if (editingReportId) {
30
+ event.preventDefault();
31
+ stopEditing();
32
+ return;
33
+ }
34
+ if (mode === "report") {
35
+ event.preventDefault();
36
+ toggleReportMode();
37
+ return;
38
+ }
39
+ if (pendingComposer) {
40
+ event.preventDefault();
41
+ cancelPendingComposer();
42
+ return;
43
+ }
44
+ if (activeReplyReportId) {
45
+ event.preventDefault();
46
+ closeReplyComposer();
47
+ return;
48
+ }
49
+ if (mode === "view") {
50
+ event.preventDefault();
51
+ toggleIssueMode();
52
+ return;
53
+ }
54
+ if (showTargetPreview) {
55
+ event.preventDefault();
56
+ toggleTargetPreview();
57
+ return;
58
+ }
59
+ return;
60
+ }
61
+ if (isFeedbackListOpen && matchesShortcut(event, REPORT_SHORTCUTS.focusSearch)) {
62
+ event.preventDefault();
63
+ focusSearchInput();
64
+ return;
65
+ }
66
+ if (isFeedbackListOpen && !inEditable && (event.key === "ArrowUp" || event.key === "ArrowDown")) {
67
+ event.preventDefault();
68
+ selectAdjacentReport(event.key === "ArrowDown" ? "down" : "up");
69
+ return;
70
+ }
71
+ if (inEditable) {
72
+ return;
73
+ }
74
+ if (matchesShortcut(event, REPORT_SHORTCUTS.toggleReportMode)) {
75
+ event.preventDefault();
76
+ toggleReportMode();
77
+ return;
78
+ }
79
+ if (matchesShortcut(event, REPORT_SHORTCUTS.toggleTargetPreview)) {
80
+ if (mode !== "idle") {
81
+ return;
82
+ }
83
+ event.preventDefault();
84
+ toggleTargetPreview();
85
+ return;
86
+ }
87
+ if (matchesShortcut(event, REPORT_SHORTCUTS.toggleViewMode)) {
88
+ event.preventDefault();
89
+ toggleIssueMode();
90
+ }
91
+ };
92
+ window.addEventListener("keydown", handleKeyDown);
93
+ return () => {
94
+ window.removeEventListener("keydown", handleKeyDown);
95
+ };
96
+ }, [
97
+ mode,
98
+ draft,
99
+ editingReportId,
100
+ panelTab,
101
+ showTargetPreview,
102
+ activeReplyReportId,
103
+ pendingComposer,
104
+ toggleReportMode,
105
+ toggleTargetPreview,
106
+ toggleIssueMode,
107
+ cancelDraft,
108
+ cancelPendingComposer,
109
+ closeReplyComposer,
110
+ handleCreateSubmit,
111
+ stopEditing,
112
+ handleUpdateSubmit,
113
+ focusSearchInput,
114
+ selectAdjacentReport,
115
+ ]);
116
+ }
117
+ //# sourceMappingURL=useReportShortcuts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReportShortcuts.js","sourceRoot":"","sources":["../../src/hooks/useReportShortcuts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ import { type MouseEvent } from "react";
2
+ import type { DeepPartialReportMessages } from "../i18n/types.js";
3
+ import type { ReportLocale } from "../i18n/types.js";
4
+ import type { CreateReportFeedbackPayload, ReportAppearance, ReportAuthor, ReportEvent, ReportFeedback, ReportField, ReportGitHubConfig, ReportIdentify, ReportListAllParams, ReportListAllResult, UpdateReportFeedbackPayload } from "../types/report.js";
5
+ import type { DraftReport, EditableDraft, Marker, PendingFeedbackComposer, ReportMode, ReportPanelTab, TargetSnapshot } from "../types/report-ui.js";
6
+ export type ReportStateConfig = {
7
+ projectId: string;
8
+ environment?: string;
9
+ appVersion?: string;
10
+ appearance: ReportAppearance;
11
+ fields: ReportField[];
12
+ authors?: ReportAuthor[];
13
+ requireReviewerKey?: boolean;
14
+ shortcut?: string;
15
+ identify?: ReportIdentify;
16
+ onList?: (params: {
17
+ pathname: string;
18
+ }) => Promise<ReportFeedback[]>;
19
+ onListAll?: (params: ReportListAllParams) => Promise<ReportListAllResult>;
20
+ onNavigate?: (pathname: string) => void | Promise<void>;
21
+ onCreate?: (payload: CreateReportFeedbackPayload) => Promise<ReportFeedback>;
22
+ onUpdate?: (id: string, payload: UpdateReportFeedbackPayload) => Promise<ReportFeedback>;
23
+ onDelete?: (id: string) => Promise<void>;
24
+ onEvent?: (event: ReportEvent) => void | Promise<void>;
25
+ onReply?: (params: {
26
+ feedbackId: string;
27
+ message: string;
28
+ }) => void | Promise<void>;
29
+ github?: ReportGitHubConfig;
30
+ routeKey?: string;
31
+ showFeedbackList: boolean;
32
+ visibleShortcutKeys?: boolean;
33
+ initialLocale: ReportLocale;
34
+ messageOverrides?: DeepPartialReportMessages;
35
+ };
36
+ export declare function useReportState({ projectId, environment, appVersion, appearance, fields, authors, requireReviewerKey, shortcut: _shortcut, identify, onList, onListAll, onNavigate, onCreate, onUpdate, onDelete, onEvent, onReply, github, routeKey, showFeedbackList, visibleShortcutKeys, initialLocale, messageOverrides, }: ReportStateConfig): {
37
+ appearance: ReportAppearance;
38
+ setAppearance: (nextAppearance: ReportAppearance) => void;
39
+ locale: ReportLocale;
40
+ setLocale: (nextLocale: ReportLocale) => void;
41
+ messages: import("../i18n/types.js").ReportMessages;
42
+ fields: ReportField[];
43
+ authors: ReportIdentify[];
44
+ projectId: string;
45
+ environment: string | undefined;
46
+ appVersion: string | undefined;
47
+ currentPathname: string;
48
+ showFeedbackList: boolean;
49
+ panelTab: ReportPanelTab | null;
50
+ routeDetailsStats: {
51
+ pathname: string;
52
+ statusRows: {
53
+ status: import("../constants/feedbackStatus.js").FeedbackDisplayStatus;
54
+ all: number;
55
+ today: number;
56
+ }[];
57
+ fieldCounts: {
58
+ key: string;
59
+ label: string;
60
+ type: "textarea" | "checkbox";
61
+ count: number;
62
+ }[];
63
+ };
64
+ canTransferFeedback: boolean;
65
+ personalKey: string | null;
66
+ publicKey: string | null;
67
+ personalKeyRequired: boolean;
68
+ personalKeyPendingRegistration: boolean;
69
+ personalKeyCandidates: ReportAuthor[];
70
+ issuePersonalKey: (authorId?: string) => Promise<{
71
+ privateKey: string;
72
+ publicKey: string;
73
+ } | null>;
74
+ rotatePersonalKey: () => Promise<{
75
+ privateKey: string;
76
+ publicKey: string;
77
+ } | null>;
78
+ insertPersonalKey: (key: string) => Promise<{
79
+ authorized: boolean;
80
+ } | null>;
81
+ canListAllFeedback: boolean;
82
+ visibleShortcutKeys: boolean;
83
+ searchInputRef: import("react").MutableRefObject<HTMLInputElement | null>;
84
+ resolvedAppearance: import("../types/report-ui.js").ResolvedAppearance;
85
+ isMobileViewport: boolean;
86
+ mode: ReportMode;
87
+ showTargetPreview: boolean;
88
+ selectableTargets: TargetSnapshot[];
89
+ filters: import("../types/report-ui.js").ReportFilters;
90
+ setFilters: import("react").Dispatch<import("react").SetStateAction<import("../types/report-ui.js").ReportFilters>>;
91
+ listScope: import("../types/report-ui.js").ReportListScope;
92
+ setListScope: import("react").Dispatch<import("react").SetStateAction<import("../types/report-ui.js").ReportListScope>>;
93
+ reports: ReportFeedback[];
94
+ filteredReports: ReportFeedback[];
95
+ isError: boolean;
96
+ isFetching: boolean;
97
+ hasNextPage: boolean;
98
+ isFetchingNextPage: boolean;
99
+ fetchNextPage: () => Promise<void>;
100
+ isCreating: boolean;
101
+ isUpdating: boolean;
102
+ isDeleting: boolean;
103
+ queryErrorMessage: string | undefined;
104
+ refetch: () => Promise<ReportFeedback[]>;
105
+ errorMessage: string;
106
+ setErrorMessage: import("react").Dispatch<import("react").SetStateAction<string>>;
107
+ draft: DraftReport | null;
108
+ hoveredTarget: TargetSnapshot | null;
109
+ selectedTarget: TargetSnapshot | null;
110
+ markers: Marker[];
111
+ selectedReport: ReportFeedback;
112
+ editingReportId: string | null;
113
+ editableDraft: EditableDraft | null;
114
+ setEditableDraft: import("react").Dispatch<import("react").SetStateAction<EditableDraft | null>>;
115
+ overlayRef: import("react").MutableRefObject<HTMLDivElement | null>;
116
+ activeReplyReportId: string | null;
117
+ activeReplyReport: ReportFeedback | null;
118
+ tooltipReport: ReportFeedback | null;
119
+ tooltipAnchor: Marker | null;
120
+ tooltipFieldTags: {
121
+ key: string;
122
+ label: string;
123
+ }[];
124
+ replyDraft: string;
125
+ setReplyDraft: import("react").Dispatch<import("react").SetStateAction<string>>;
126
+ draftAuthorName: string;
127
+ setDraftAuthorName: import("react").Dispatch<import("react").SetStateAction<string>>;
128
+ replyAuthorName: string;
129
+ setReplyAuthorName: import("react").Dispatch<import("react").SetStateAction<string>>;
130
+ pendingComposer: PendingFeedbackComposer;
131
+ startDenyReview: () => void;
132
+ startCheckoutReview: (replyId: string) => void;
133
+ cancelPendingComposer: () => void;
134
+ confirmAuthorName: string;
135
+ setConfirmAuthorName: import("react").Dispatch<import("react").SetStateAction<string>>;
136
+ showConfirmAuthorSelect: boolean;
137
+ toggleConfirmAuthorSelect: () => void;
138
+ handleConfirmResolution: () => Promise<void>;
139
+ targetStats: {
140
+ found: number;
141
+ group: number;
142
+ item: number;
143
+ };
144
+ statusText: string;
145
+ toggleReportMode: () => void;
146
+ toggleTargetPreview: () => void;
147
+ toggleIssueMode: () => void;
148
+ openPanelTab: (nextTab: ReportPanelTab) => void;
149
+ togglePanelTab: (nextTab: ReportPanelTab) => void;
150
+ selectReport: (reportId: string) => void;
151
+ locateFeedback: (reportId: string) => Promise<void>;
152
+ focusSearchInput: () => void;
153
+ selectAdjacentReport: (direction: "up" | "down") => void;
154
+ openReplyComposer: (report: ReportFeedback) => void;
155
+ closeReplyComposer: () => void;
156
+ clearHoverLeaveTimeout: () => void;
157
+ scheduleHoverLeave: (markerId: string) => void;
158
+ setHoveredMarkerId: import("react").Dispatch<import("react").SetStateAction<string | null>>;
159
+ handleOverlayMove: (event: MouseEvent<HTMLDivElement>) => void;
160
+ handleOverlayClick: (event: MouseEvent<HTMLDivElement>) => void;
161
+ cancelDraft: () => void;
162
+ updateDraftMessage: (nextMessage: string) => void;
163
+ updateDraftField: (key: string, nextValue: string | boolean) => void;
164
+ handleCreateSubmit: () => Promise<void>;
165
+ startEditing: (report: ReportFeedback) => void;
166
+ stopEditing: () => void;
167
+ handleUpdateSubmit: () => Promise<void>;
168
+ handleReplySubmit: () => Promise<void>;
169
+ handleDelete: (id: string) => Promise<void>;
170
+ canCreateGitHubIssueFromList: boolean;
171
+ canCreateGitHubIssueOnCreate: boolean;
172
+ creatingGitHubIssueId: string | null;
173
+ handleCreateGitHubIssue: (report: ReportFeedback) => Promise<void>;
174
+ handleCreateSubmitWithGitHubIssue: () => Promise<void>;
175
+ isDraftGitHubIssueSubmitting: boolean;
176
+ };
177
+ //# sourceMappingURL=useReportState.d.ts.map