@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.
- package/LICENSE +21 -0
- package/README.md +648 -0
- package/dist/components/ShortcutHint.d.ts +8 -0
- package/dist/components/ShortcutHint.d.ts.map +1 -0
- package/dist/components/ShortcutHint.js +9 -0
- package/dist/components/ShortcutHint.js.map +1 -0
- package/dist/components/icons/Icons.d.ts +70 -0
- package/dist/components/icons/Icons.d.ts.map +1 -0
- package/dist/components/icons/Icons.js +127 -0
- package/dist/components/icons/Icons.js.map +1 -0
- package/dist/components/icons/MaterialIcon.d.ts +8 -0
- package/dist/components/icons/MaterialIcon.d.ts.map +1 -0
- package/dist/components/icons/MaterialIcon.js +5 -0
- package/dist/components/icons/MaterialIcon.js.map +1 -0
- package/dist/components/motion/index.d.ts +48 -0
- package/dist/components/motion/index.d.ts.map +1 -0
- package/dist/components/motion/index.js +910 -0
- package/dist/components/motion/index.js.map +1 -0
- package/dist/components/overlay/ReportOverlayLayer.d.ts +7 -0
- package/dist/components/overlay/ReportOverlayLayer.d.ts.map +1 -0
- package/dist/components/overlay/ReportOverlayLayer.js +14 -0
- package/dist/components/overlay/ReportOverlayLayer.js.map +1 -0
- package/dist/components/overlay/TargetHighlights.d.ts +9 -0
- package/dist/components/overlay/TargetHighlights.d.ts.map +1 -0
- package/dist/components/overlay/TargetHighlights.js +24 -0
- package/dist/components/overlay/TargetHighlights.js.map +1 -0
- package/dist/components/panel/PanelDockGuides.d.ts +8 -0
- package/dist/components/panel/PanelDockGuides.d.ts.map +1 -0
- package/dist/components/panel/PanelDockGuides.js +15 -0
- package/dist/components/panel/PanelDockGuides.js.map +1 -0
- package/dist/components/panel/PanelDropdownMenu.d.ts +19 -0
- package/dist/components/panel/PanelDropdownMenu.d.ts.map +1 -0
- package/dist/components/panel/PanelDropdownMenu.js +132 -0
- package/dist/components/panel/PanelDropdownMenu.js.map +1 -0
- package/dist/components/panel/PanelMoreMenu.d.ts +20 -0
- package/dist/components/panel/PanelMoreMenu.d.ts.map +1 -0
- package/dist/components/panel/PanelMoreMenu.js +20 -0
- package/dist/components/panel/PanelMoreMenu.js.map +1 -0
- package/dist/components/panel/PanelOptionSwitch.d.ts +14 -0
- package/dist/components/panel/PanelOptionSwitch.d.ts.map +1 -0
- package/dist/components/panel/PanelOptionSwitch.js +10 -0
- package/dist/components/panel/PanelOptionSwitch.js.map +1 -0
- package/dist/components/panel/ReportCommandPanel.d.ts +18 -0
- package/dist/components/panel/ReportCommandPanel.d.ts.map +1 -0
- package/dist/components/panel/ReportCommandPanel.js +43 -0
- package/dist/components/panel/ReportCommandPanel.js.map +1 -0
- package/dist/components/panel/ReportCommandReplaceConfirmDialog.d.ts +9 -0
- package/dist/components/panel/ReportCommandReplaceConfirmDialog.d.ts.map +1 -0
- package/dist/components/panel/ReportCommandReplaceConfirmDialog.js +7 -0
- package/dist/components/panel/ReportCommandReplaceConfirmDialog.js.map +1 -0
- package/dist/components/panel/ReportControlPanel.d.ts +2 -0
- package/dist/components/panel/ReportControlPanel.d.ts.map +1 -0
- package/dist/components/panel/ReportControlPanel.js +119 -0
- package/dist/components/panel/ReportControlPanel.js.map +1 -0
- package/dist/components/panel/ReportDraftForm.d.ts +2 -0
- package/dist/components/panel/ReportDraftForm.d.ts.map +1 -0
- package/dist/components/panel/ReportDraftForm.js +33 -0
- package/dist/components/panel/ReportDraftForm.js.map +1 -0
- package/dist/components/panel/ReportFeedbackList.d.ts +2 -0
- package/dist/components/panel/ReportFeedbackList.d.ts.map +1 -0
- package/dist/components/panel/ReportFeedbackList.js +165 -0
- package/dist/components/panel/ReportFeedbackList.js.map +1 -0
- package/dist/components/panel/ReportImportConfirmDialog.d.ts +8 -0
- package/dist/components/panel/ReportImportConfirmDialog.d.ts.map +1 -0
- package/dist/components/panel/ReportImportConfirmDialog.js +7 -0
- package/dist/components/panel/ReportImportConfirmDialog.js.map +1 -0
- package/dist/components/panel/ReportImportProjectMismatchDialog.d.ts +12 -0
- package/dist/components/panel/ReportImportProjectMismatchDialog.d.ts.map +1 -0
- package/dist/components/panel/ReportImportProjectMismatchDialog.js +19 -0
- package/dist/components/panel/ReportImportProjectMismatchDialog.js.map +1 -0
- package/dist/components/panel/ReportPersonalKeyDialog.d.ts +8 -0
- package/dist/components/panel/ReportPersonalKeyDialog.d.ts.map +1 -0
- package/dist/components/panel/ReportPersonalKeyDialog.js +60 -0
- package/dist/components/panel/ReportPersonalKeyDialog.js.map +1 -0
- package/dist/components/panel/ReportRouteDetails.d.ts +2 -0
- package/dist/components/panel/ReportRouteDetails.d.ts.map +1 -0
- package/dist/components/panel/ReportRouteDetails.js +18 -0
- package/dist/components/panel/ReportRouteDetails.js.map +1 -0
- package/dist/components/panel/feedback/AuthorSelector.d.ts +9 -0
- package/dist/components/panel/feedback/AuthorSelector.d.ts.map +1 -0
- package/dist/components/panel/feedback/AuthorSelector.js +17 -0
- package/dist/components/panel/feedback/AuthorSelector.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackComposer.d.ts +23 -0
- package/dist/components/panel/feedback/FeedbackComposer.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackComposer.js +48 -0
- package/dist/components/panel/feedback/FeedbackComposer.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackCreatorBadge.d.ts +2 -0
- package/dist/components/panel/feedback/FeedbackCreatorBadge.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackCreatorBadge.js +7 -0
- package/dist/components/panel/feedback/FeedbackCreatorBadge.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackFieldTags.d.ts +9 -0
- package/dist/components/panel/feedback/FeedbackFieldTags.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackFieldTags.js +8 -0
- package/dist/components/panel/feedback/FeedbackFieldTags.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackHoverCard.d.ts +11 -0
- package/dist/components/panel/feedback/FeedbackHoverCard.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackHoverCard.js +14 -0
- package/dist/components/panel/feedback/FeedbackHoverCard.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackIssueHeader.d.ts +12 -0
- package/dist/components/panel/feedback/FeedbackIssueHeader.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackIssueHeader.js +10 -0
- package/dist/components/panel/feedback/FeedbackIssueHeader.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackStatusBadge.d.ts +8 -0
- package/dist/components/panel/feedback/FeedbackStatusBadge.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackStatusBadge.js +10 -0
- package/dist/components/panel/feedback/FeedbackStatusBadge.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackThread.d.ts +21 -0
- package/dist/components/panel/feedback/FeedbackThread.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackThread.js +90 -0
- package/dist/components/panel/feedback/FeedbackThread.js.map +1 -0
- package/dist/components/panel/feedback/FieldTagSelector.d.ts +9 -0
- package/dist/components/panel/feedback/FieldTagSelector.d.ts.map +1 -0
- package/dist/components/panel/feedback/FieldTagSelector.js +15 -0
- package/dist/components/panel/feedback/FieldTagSelector.js.map +1 -0
- package/dist/components/panel/feedback/GitIssueButton.d.ts +12 -0
- package/dist/components/panel/feedback/GitIssueButton.d.ts.map +1 -0
- package/dist/components/panel/feedback/GitIssueButton.js +43 -0
- package/dist/components/panel/feedback/GitIssueButton.js.map +1 -0
- package/dist/components/panel/feedback/GitIssuedThreadEntry.d.ts +8 -0
- package/dist/components/panel/feedback/GitIssuedThreadEntry.d.ts.map +1 -0
- package/dist/components/panel/feedback/GitIssuedThreadEntry.js +25 -0
- package/dist/components/panel/feedback/GitIssuedThreadEntry.js.map +1 -0
- package/dist/components/point/ReportDraftMarker.d.ts +2 -0
- package/dist/components/point/ReportDraftMarker.d.ts.map +1 -0
- package/dist/components/point/ReportDraftMarker.js +28 -0
- package/dist/components/point/ReportDraftMarker.js.map +1 -0
- package/dist/components/point/ReportMarkersLayer.d.ts +2 -0
- package/dist/components/point/ReportMarkersLayer.d.ts.map +1 -0
- package/dist/components/point/ReportMarkersLayer.js +129 -0
- package/dist/components/point/ReportMarkersLayer.js.map +1 -0
- package/dist/components/report/FivePixels.d.ts +50 -0
- package/dist/components/report/FivePixels.d.ts.map +1 -0
- package/dist/components/report/FivePixels.js +15 -0
- package/dist/components/report/FivePixels.js.map +1 -0
- package/dist/components/report/ReportView.d.ts +2 -0
- package/dist/components/report/ReportView.d.ts.map +1 -0
- package/dist/components/report/ReportView.js +14 -0
- package/dist/components/report/ReportView.js.map +1 -0
- package/dist/components/report/ShadowReportRoot.d.ts +9 -0
- package/dist/components/report/ShadowReportRoot.d.ts.map +1 -0
- package/dist/components/report/ShadowReportRoot.js +80 -0
- package/dist/components/report/ShadowReportRoot.js.map +1 -0
- package/dist/components/report/index.d.ts +13 -0
- package/dist/components/report/index.d.ts.map +1 -0
- package/dist/components/report/index.js +9 -0
- package/dist/components/report/index.js.map +1 -0
- package/dist/components/ui/HoverTooltip.d.ts +10 -0
- package/dist/components/ui/HoverTooltip.d.ts.map +1 -0
- package/dist/components/ui/HoverTooltip.js +64 -0
- package/dist/components/ui/HoverTooltip.js.map +1 -0
- package/dist/components/ui/IconTooltipButton.d.ts +12 -0
- package/dist/components/ui/IconTooltipButton.d.ts.map +1 -0
- package/dist/components/ui/IconTooltipButton.js +7 -0
- package/dist/components/ui/IconTooltipButton.js.map +1 -0
- package/dist/constants/feedbackStatus.d.ts +6 -0
- package/dist/constants/feedbackStatus.d.ts.map +1 -0
- package/dist/constants/feedbackStatus.js +27 -0
- package/dist/constants/feedbackStatus.js.map +1 -0
- package/dist/constants/project.d.ts +2 -0
- package/dist/constants/project.d.ts.map +1 -0
- package/dist/constants/project.js +2 -0
- package/dist/constants/project.js.map +1 -0
- package/dist/constants/report.d.ts +7 -0
- package/dist/constants/report.d.ts.map +1 -0
- package/dist/constants/report.js +14 -0
- package/dist/constants/report.js.map +1 -0
- package/dist/constants/reportShortcuts.d.ts +31 -0
- package/dist/constants/reportShortcuts.d.ts.map +1 -0
- package/dist/constants/reportShortcuts.js +9 -0
- package/dist/constants/reportShortcuts.js.map +1 -0
- package/dist/constants/storageKeys.d.ts +5 -0
- package/dist/constants/storageKeys.d.ts.map +1 -0
- package/dist/constants/storageKeys.js +16 -0
- package/dist/constants/storageKeys.js.map +1 -0
- package/dist/hooks/report.api.d.ts +8 -0
- package/dist/hooks/report.api.d.ts.map +1 -0
- package/dist/hooks/report.api.js +20 -0
- package/dist/hooks/report.api.js.map +1 -0
- package/dist/hooks/report.query.d.ts +27 -0
- package/dist/hooks/report.query.d.ts.map +1 -0
- package/dist/hooks/report.query.js +137 -0
- package/dist/hooks/report.query.js.map +1 -0
- package/dist/hooks/useAppearancePreference.d.ts +6 -0
- package/dist/hooks/useAppearancePreference.d.ts.map +1 -0
- package/dist/hooks/useAppearancePreference.js +40 -0
- package/dist/hooks/useAppearancePreference.js.map +1 -0
- package/dist/hooks/useCurrentPathname.d.ts +2 -0
- package/dist/hooks/useCurrentPathname.d.ts.map +1 -0
- package/dist/hooks/useCurrentPathname.js +18 -0
- package/dist/hooks/useCurrentPathname.js.map +1 -0
- package/dist/hooks/useIsMobileViewport.d.ts +2 -0
- package/dist/hooks/useIsMobileViewport.d.ts.map +1 -0
- package/dist/hooks/useIsMobileViewport.js +12 -0
- package/dist/hooks/useIsMobileViewport.js.map +1 -0
- package/dist/hooks/useLocalePreference.d.ts +6 -0
- package/dist/hooks/useLocalePreference.d.ts.map +1 -0
- package/dist/hooks/useLocalePreference.js +40 -0
- package/dist/hooks/useLocalePreference.js.map +1 -0
- package/dist/hooks/useNativeHover.d.ts +7 -0
- package/dist/hooks/useNativeHover.d.ts.map +1 -0
- package/dist/hooks/useNativeHover.js +28 -0
- package/dist/hooks/useNativeHover.js.map +1 -0
- package/dist/hooks/usePanelDock.d.ts +29 -0
- package/dist/hooks/usePanelDock.d.ts.map +1 -0
- package/dist/hooks/usePanelDock.js +279 -0
- package/dist/hooks/usePanelDock.js.map +1 -0
- package/dist/hooks/usePanelFeedbackTransfer.d.ts +59 -0
- package/dist/hooks/usePanelFeedbackTransfer.d.ts.map +1 -0
- package/dist/hooks/usePanelFeedbackTransfer.js +250 -0
- package/dist/hooks/usePanelFeedbackTransfer.js.map +1 -0
- package/dist/hooks/usePersonalKey.d.ts +30 -0
- package/dist/hooks/usePersonalKey.d.ts.map +1 -0
- package/dist/hooks/usePersonalKey.js +72 -0
- package/dist/hooks/usePersonalKey.js.map +1 -0
- package/dist/hooks/useReportPersistence.d.ts +63 -0
- package/dist/hooks/useReportPersistence.d.ts.map +1 -0
- package/dist/hooks/useReportPersistence.js +142 -0
- package/dist/hooks/useReportPersistence.js.map +1 -0
- package/dist/hooks/useReportShortcuts.d.ts +5 -0
- package/dist/hooks/useReportShortcuts.d.ts.map +1 -0
- package/dist/hooks/useReportShortcuts.js +117 -0
- package/dist/hooks/useReportShortcuts.js.map +1 -0
- package/dist/hooks/useReportState.d.ts +177 -0
- package/dist/hooks/useReportState.d.ts.map +1 -0
- package/dist/hooks/useReportState.js +904 -0
- package/dist/hooks/useReportState.js.map +1 -0
- package/dist/hooks/useResolvedAppearance.d.ts +4 -0
- package/dist/hooks/useResolvedAppearance.d.ts.map +1 -0
- package/dist/hooks/useResolvedAppearance.js +23 -0
- package/dist/hooks/useResolvedAppearance.js.map +1 -0
- package/dist/hooks/useTooltipLayout.d.ts +21 -0
- package/dist/hooks/useTooltipLayout.d.ts.map +1 -0
- package/dist/hooks/useTooltipLayout.js +45 -0
- package/dist/hooks/useTooltipLayout.js.map +1 -0
- package/dist/i18n/en.d.ts +3 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +277 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +20 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +77 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/ko.d.ts +3 -0
- package/dist/i18n/ko.d.ts.map +1 -0
- package/dist/i18n/ko.js +277 -0
- package/dist/i18n/ko.js.map +1 -0
- package/dist/i18n/types.d.ts +267 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +2 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/ReportProvider.d.ts +52 -0
- package/dist/providers/ReportProvider.d.ts.map +1 -0
- package/dist/providers/ReportProvider.js +49 -0
- package/dist/providers/ReportProvider.js.map +1 -0
- package/dist/providers/reportContext.d.ts +286 -0
- package/dist/providers/reportContext.d.ts.map +1 -0
- package/dist/providers/reportContext.js +11 -0
- package/dist/providers/reportContext.js.map +1 -0
- package/dist/storage/local/localStorageAdapter.d.ts +12 -0
- package/dist/storage/local/localStorageAdapter.d.ts.map +1 -0
- package/dist/storage/local/localStorageAdapter.js +187 -0
- package/dist/storage/local/localStorageAdapter.js.map +1 -0
- package/dist/styles/reportStylesheet.d.ts +2 -0
- package/dist/styles/reportStylesheet.d.ts.map +1 -0
- package/dist/styles/reportStylesheet.js +3 -0
- package/dist/styles/reportStylesheet.js.map +1 -0
- package/dist/types/report-ui.d.ts +47 -0
- package/dist/types/report-ui.d.ts.map +1 -0
- package/dist/types/report-ui.js +2 -0
- package/dist/types/report-ui.js.map +1 -0
- package/dist/types/report.d.ts +177 -0
- package/dist/types/report.d.ts.map +1 -0
- package/dist/types/report.js +8 -0
- package/dist/types/report.js.map +1 -0
- package/dist/utils/coordinates.d.ts +63 -0
- package/dist/utils/coordinates.d.ts.map +1 -0
- package/dist/utils/coordinates.js +236 -0
- package/dist/utils/coordinates.js.map +1 -0
- package/dist/utils/dom.d.ts +14 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/dom.js +104 -0
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/env.d.ts +6 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +18 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/feedbackDataTransfer.d.ts +31 -0
- package/dist/utils/feedbackDataTransfer.d.ts.map +1 -0
- package/dist/utils/feedbackDataTransfer.js +195 -0
- package/dist/utils/feedbackDataTransfer.js.map +1 -0
- package/dist/utils/feedbackThread.d.ts +14 -0
- package/dist/utils/feedbackThread.d.ts.map +1 -0
- package/dist/utils/feedbackThread.js +57 -0
- package/dist/utils/feedbackThread.js.map +1 -0
- package/dist/utils/feedbackTransferSchema.d.ts +37 -0
- package/dist/utils/feedbackTransferSchema.d.ts.map +1 -0
- package/dist/utils/feedbackTransferSchema.js +162 -0
- package/dist/utils/feedbackTransferSchema.js.map +1 -0
- package/dist/utils/fields.d.ts +11 -0
- package/dist/utils/fields.d.ts.map +1 -0
- package/dist/utils/fields.js +43 -0
- package/dist/utils/fields.js.map +1 -0
- package/dist/utils/format.d.ts +6 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +46 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/formatStatCount.d.ts +2 -0
- package/dist/utils/formatStatCount.d.ts.map +1 -0
- package/dist/utils/formatStatCount.js +4 -0
- package/dist/utils/formatStatCount.js.map +1 -0
- package/dist/utils/githubIntegration.d.ts +12 -0
- package/dist/utils/githubIntegration.d.ts.map +1 -0
- package/dist/utils/githubIntegration.js +56 -0
- package/dist/utils/githubIntegration.js.map +1 -0
- package/dist/utils/hoverTooltipLayout.d.ts +8 -0
- package/dist/utils/hoverTooltipLayout.d.ts.map +1 -0
- package/dist/utils/hoverTooltipLayout.js +30 -0
- package/dist/utils/hoverTooltipLayout.js.map +1 -0
- package/dist/utils/locateFeedback.d.ts +11 -0
- package/dist/utils/locateFeedback.d.ts.map +1 -0
- package/dist/utils/locateFeedback.js +16 -0
- package/dist/utils/locateFeedback.js.map +1 -0
- package/dist/utils/panelTypography.d.ts +4 -0
- package/dist/utils/panelTypography.d.ts.map +1 -0
- package/dist/utils/panelTypography.js +4 -0
- package/dist/utils/panelTypography.js.map +1 -0
- package/dist/utils/pathname.d.ts +2 -0
- package/dist/utils/pathname.d.ts.map +1 -0
- package/dist/utils/pathname.js +10 -0
- package/dist/utils/pathname.js.map +1 -0
- package/dist/utils/pathnameNavigation.d.ts +4 -0
- package/dist/utils/pathnameNavigation.d.ts.map +1 -0
- package/dist/utils/pathnameNavigation.js +52 -0
- package/dist/utils/pathnameNavigation.js.map +1 -0
- package/dist/utils/personalKey.d.ts +45 -0
- package/dist/utils/personalKey.d.ts.map +1 -0
- package/dist/utils/personalKey.js +180 -0
- package/dist/utils/personalKey.js.map +1 -0
- package/dist/utils/projectId.d.ts +2 -0
- package/dist/utils/projectId.d.ts.map +1 -0
- package/dist/utils/projectId.js +14 -0
- package/dist/utils/projectId.js.map +1 -0
- package/dist/utils/reportCallbacks.d.ts +20 -0
- package/dist/utils/reportCallbacks.d.ts.map +1 -0
- package/dist/utils/reportCallbacks.js +42 -0
- package/dist/utils/reportCallbacks.js.map +1 -0
- package/dist/utils/reportProject.d.ts +17 -0
- package/dist/utils/reportProject.d.ts.map +1 -0
- package/dist/utils/reportProject.js +9 -0
- package/dist/utils/reportProject.js.map +1 -0
- package/dist/utils/reportTeam.d.ts +15 -0
- package/dist/utils/reportTeam.d.ts.map +1 -0
- package/dist/utils/reportTeam.js +8 -0
- package/dist/utils/reportTeam.js.map +1 -0
- package/dist/utils/reportUi.d.ts +24 -0
- package/dist/utils/reportUi.d.ts.map +1 -0
- package/dist/utils/reportUi.js +19 -0
- package/dist/utils/reportUi.js.map +1 -0
- package/dist/utils/reportVisibility.d.ts +19 -0
- package/dist/utils/reportVisibility.d.ts.map +1 -0
- package/dist/utils/reportVisibility.js +12 -0
- package/dist/utils/reportVisibility.js.map +1 -0
- package/dist/utils/reportVisual.d.ts +12 -0
- package/dist/utils/reportVisual.d.ts.map +1 -0
- package/dist/utils/reportVisual.js +31 -0
- package/dist/utils/reportVisual.js.map +1 -0
- package/dist/utils/routeDetailStatus.d.ts +7 -0
- package/dist/utils/routeDetailStatus.d.ts.map +1 -0
- package/dist/utils/routeDetailStatus.js +29 -0
- package/dist/utils/routeDetailStatus.js.map +1 -0
- package/dist/utils/shortcuts.d.ts +12 -0
- package/dist/utils/shortcuts.d.ts.map +1 -0
- package/dist/utils/shortcuts.js +59 -0
- package/dist/utils/shortcuts.js.map +1 -0
- package/dist/utils/storage.d.ts +17 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +36 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/validateFeedbackImport.d.ts +4 -0
- package/dist/utils/validateFeedbackImport.d.ts.map +1 -0
- package/dist/utils/validateFeedbackImport.js +187 -0
- package/dist/utils/validateFeedbackImport.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type CSSProperties, type PointerEvent as ReactPointerEvent } from "react";
|
|
2
|
+
export type PanelCorner = "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
3
|
+
/** @deprecated Edge docking replaced by corner placement; kept for storage migration. */
|
|
4
|
+
export type PanelEdge = "top" | "bottom" | "left" | "right";
|
|
5
|
+
export type PanelPlacement = {
|
|
6
|
+
corner: PanelCorner;
|
|
7
|
+
};
|
|
8
|
+
declare const PANEL_CORNERS: PanelCorner[];
|
|
9
|
+
export declare function getNearestPanelCorner(clientX: number, clientY: number): PanelCorner;
|
|
10
|
+
export declare function clampPanelPlacement(placement: PanelPlacement): PanelPlacement;
|
|
11
|
+
export declare function projectPointerToPlacement(clientX: number, clientY: number): PanelPlacement;
|
|
12
|
+
export declare function placementToPanelStyle(placement: PanelPlacement): CSSProperties;
|
|
13
|
+
export declare function placementToCollapsedPanelStyle(placement: PanelPlacement): CSSProperties;
|
|
14
|
+
export declare function getMobilePanelStyle(): CSSProperties;
|
|
15
|
+
export declare function usePanelDock({ enabled, measureKey }: {
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
measureKey?: unknown;
|
|
18
|
+
}): {
|
|
19
|
+
panelRef: import("react").RefObject<HTMLDivElement>;
|
|
20
|
+
panelStyle: CSSProperties;
|
|
21
|
+
placementCorner: PanelCorner;
|
|
22
|
+
isDragging: boolean;
|
|
23
|
+
activeCorner: PanelCorner | null;
|
|
24
|
+
handleDragHandlePointerDown: (event: ReactPointerEvent<HTMLElement>) => void;
|
|
25
|
+
};
|
|
26
|
+
export declare function panelHeaderAlignModifier(corner: PanelCorner): "align-left" | "align-right";
|
|
27
|
+
export declare function panelAnchorSide(corner: PanelCorner): "left" | "right";
|
|
28
|
+
export { PANEL_CORNERS };
|
|
29
|
+
//# sourceMappingURL=usePanelDock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanelDock.d.ts","sourceRoot":"","sources":["../../src/hooks/usePanelDock.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6D,KAAK,aAAa,EAAE,KAAK,YAAY,IAAI,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9I,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;AAEpF,yFAAyF;AACzF,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,EAAE,WAAW,CAAC;CACvB,CAAC;AAYF,QAAA,MAAM,aAAa,EAAE,WAAW,EAA6D,CAAC;AA+F9F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAsBnF;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,CAE7E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAE1F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,cAAc,GAAG,aAAa,CA+B9E;AAED,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,cAAc,GAAG,aAAa,CA8BvF;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAQnD;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;yCA2FhF,iBAAiB,CAAC,WAAW,CAAC;EAwB7C;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,aAAa,CAE1F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAErE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
const STORAGE_KEY = "fivepixels:panel-placement";
|
|
3
|
+
const LEGACY_STORAGE_KEY = "fivepixels:panel-dock-position";
|
|
4
|
+
const EDGE_MARGIN = 16;
|
|
5
|
+
const DEFAULT_PLACEMENT = { corner: "top-left" };
|
|
6
|
+
const PANEL_CORNERS = ["top-left", "top-right", "bottom-left", "bottom-right"];
|
|
7
|
+
function isPanelCorner(value) {
|
|
8
|
+
return value === "top-left" || value === "top-right" || value === "bottom-left" || value === "bottom-right";
|
|
9
|
+
}
|
|
10
|
+
function isPanelEdge(value) {
|
|
11
|
+
return value === "top" || value === "bottom" || value === "left" || value === "right";
|
|
12
|
+
}
|
|
13
|
+
function isPanelPlacement(value) {
|
|
14
|
+
return typeof value === "object" && value !== null && "corner" in value && isPanelCorner(String(value.corner));
|
|
15
|
+
}
|
|
16
|
+
function isLegacyPanelPlacement(value) {
|
|
17
|
+
return (typeof value === "object" &&
|
|
18
|
+
value !== null &&
|
|
19
|
+
"edge" in value &&
|
|
20
|
+
"offset" in value &&
|
|
21
|
+
isPanelEdge(String(value.edge)) &&
|
|
22
|
+
typeof value.offset === "number");
|
|
23
|
+
}
|
|
24
|
+
function edgeOffsetToCorner(edge, offset) {
|
|
25
|
+
if (typeof window === "undefined") {
|
|
26
|
+
return DEFAULT_PLACEMENT.corner;
|
|
27
|
+
}
|
|
28
|
+
const viewportWidth = window.innerWidth;
|
|
29
|
+
const viewportHeight = window.innerHeight;
|
|
30
|
+
switch (edge) {
|
|
31
|
+
case "top":
|
|
32
|
+
return offset < viewportWidth / 2 ? "top-left" : "top-right";
|
|
33
|
+
case "bottom":
|
|
34
|
+
return offset < viewportWidth / 2 ? "bottom-left" : "bottom-right";
|
|
35
|
+
case "left":
|
|
36
|
+
return offset < viewportHeight / 2 ? "top-left" : "bottom-left";
|
|
37
|
+
case "right":
|
|
38
|
+
return offset < viewportHeight / 2 ? "top-right" : "bottom-right";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function legacyEdgeToCorner(edge) {
|
|
42
|
+
switch (edge) {
|
|
43
|
+
case "top":
|
|
44
|
+
return "top-left";
|
|
45
|
+
case "bottom":
|
|
46
|
+
return "bottom-left";
|
|
47
|
+
case "left":
|
|
48
|
+
return "top-left";
|
|
49
|
+
case "right":
|
|
50
|
+
return "top-right";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function readStoredPlacement() {
|
|
54
|
+
if (typeof window === "undefined") {
|
|
55
|
+
return DEFAULT_PLACEMENT;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const stored = window.localStorage.getItem(STORAGE_KEY);
|
|
59
|
+
if (stored) {
|
|
60
|
+
const parsed = JSON.parse(stored);
|
|
61
|
+
if (isPanelPlacement(parsed)) {
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
if (isLegacyPanelPlacement(parsed)) {
|
|
65
|
+
return { corner: edgeOffsetToCorner(parsed.edge, parsed.offset) };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const legacy = window.localStorage.getItem(LEGACY_STORAGE_KEY);
|
|
69
|
+
if (isPanelEdge(legacy)) {
|
|
70
|
+
return { corner: legacyEdgeToCorner(legacy) };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Ignore storage failures in restricted environments.
|
|
75
|
+
}
|
|
76
|
+
return DEFAULT_PLACEMENT;
|
|
77
|
+
}
|
|
78
|
+
function persistPlacement(placement) {
|
|
79
|
+
try {
|
|
80
|
+
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(placement));
|
|
81
|
+
window.localStorage.removeItem(LEGACY_STORAGE_KEY);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Ignore storage failures in restricted environments.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function getNearestPanelCorner(clientX, clientY) {
|
|
88
|
+
const viewportWidth = window.innerWidth;
|
|
89
|
+
const viewportHeight = window.innerHeight;
|
|
90
|
+
const cornerPoints = [
|
|
91
|
+
["top-left", EDGE_MARGIN, EDGE_MARGIN],
|
|
92
|
+
["top-right", viewportWidth - EDGE_MARGIN, EDGE_MARGIN],
|
|
93
|
+
["bottom-left", EDGE_MARGIN, viewportHeight - EDGE_MARGIN],
|
|
94
|
+
["bottom-right", viewportWidth - EDGE_MARGIN, viewportHeight - EDGE_MARGIN],
|
|
95
|
+
];
|
|
96
|
+
let nearest = cornerPoints[0][0];
|
|
97
|
+
let nearestDistance = Number.POSITIVE_INFINITY;
|
|
98
|
+
for (const [corner, x, y] of cornerPoints) {
|
|
99
|
+
const distance = (clientX - x) ** 2 + (clientY - y) ** 2;
|
|
100
|
+
if (distance < nearestDistance) {
|
|
101
|
+
nearestDistance = distance;
|
|
102
|
+
nearest = corner;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return nearest;
|
|
106
|
+
}
|
|
107
|
+
export function clampPanelPlacement(placement) {
|
|
108
|
+
return isPanelCorner(placement.corner) ? placement : DEFAULT_PLACEMENT;
|
|
109
|
+
}
|
|
110
|
+
export function projectPointerToPlacement(clientX, clientY) {
|
|
111
|
+
return { corner: getNearestPanelCorner(clientX, clientY) };
|
|
112
|
+
}
|
|
113
|
+
export function placementToPanelStyle(placement) {
|
|
114
|
+
const style = {
|
|
115
|
+
top: "auto",
|
|
116
|
+
right: "auto",
|
|
117
|
+
bottom: "auto",
|
|
118
|
+
left: "auto",
|
|
119
|
+
// maxHeight: "none",
|
|
120
|
+
};
|
|
121
|
+
switch (placement.corner) {
|
|
122
|
+
case "top-left":
|
|
123
|
+
style.top = EDGE_MARGIN;
|
|
124
|
+
style.left = EDGE_MARGIN;
|
|
125
|
+
break;
|
|
126
|
+
case "top-right":
|
|
127
|
+
style.top = EDGE_MARGIN;
|
|
128
|
+
style.right = EDGE_MARGIN;
|
|
129
|
+
break;
|
|
130
|
+
case "bottom-left":
|
|
131
|
+
style.bottom = EDGE_MARGIN;
|
|
132
|
+
style.left = EDGE_MARGIN;
|
|
133
|
+
style.maxHeight = "min(68vh, 560px)";
|
|
134
|
+
break;
|
|
135
|
+
case "bottom-right":
|
|
136
|
+
style.bottom = EDGE_MARGIN;
|
|
137
|
+
style.right = EDGE_MARGIN;
|
|
138
|
+
style.maxHeight = "min(68vh, 560px)";
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
return style;
|
|
142
|
+
}
|
|
143
|
+
export function placementToCollapsedPanelStyle(placement) {
|
|
144
|
+
const style = {
|
|
145
|
+
top: "auto",
|
|
146
|
+
right: "auto",
|
|
147
|
+
bottom: "auto",
|
|
148
|
+
left: "auto",
|
|
149
|
+
maxHeight: "none",
|
|
150
|
+
maxWidth: "none",
|
|
151
|
+
};
|
|
152
|
+
switch (placement.corner) {
|
|
153
|
+
case "top-left":
|
|
154
|
+
style.top = EDGE_MARGIN;
|
|
155
|
+
style.left = 0;
|
|
156
|
+
break;
|
|
157
|
+
case "top-right":
|
|
158
|
+
style.top = EDGE_MARGIN;
|
|
159
|
+
style.right = 0;
|
|
160
|
+
break;
|
|
161
|
+
case "bottom-left":
|
|
162
|
+
style.bottom = EDGE_MARGIN;
|
|
163
|
+
style.left = 0;
|
|
164
|
+
break;
|
|
165
|
+
case "bottom-right":
|
|
166
|
+
style.bottom = EDGE_MARGIN;
|
|
167
|
+
style.right = 0;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
return style;
|
|
171
|
+
}
|
|
172
|
+
export function getMobilePanelStyle() {
|
|
173
|
+
return {
|
|
174
|
+
top: "auto",
|
|
175
|
+
right: EDGE_MARGIN,
|
|
176
|
+
bottom: EDGE_MARGIN,
|
|
177
|
+
left: EDGE_MARGIN,
|
|
178
|
+
maxHeight: "min(68vh, 560px)",
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
export function usePanelDock({ enabled, measureKey }) {
|
|
182
|
+
const panelRef = useRef(null);
|
|
183
|
+
const [placement, setPlacement] = useState(() => readStoredPlacement());
|
|
184
|
+
const [previewPlacement, setPreviewPlacement] = useState(null);
|
|
185
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
186
|
+
const dragPointerIdRef = useRef(null);
|
|
187
|
+
const currentPlacement = previewPlacement ?? placement;
|
|
188
|
+
const activeCorner = isDragging ? currentPlacement.corner : null;
|
|
189
|
+
useEffect(() => {
|
|
190
|
+
if (enabled) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
setPreviewPlacement(null);
|
|
194
|
+
setIsDragging(false);
|
|
195
|
+
}, [enabled]);
|
|
196
|
+
useLayoutEffect(() => {
|
|
197
|
+
if (!enabled) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
setPlacement((current) => clampPanelPlacement(current));
|
|
201
|
+
}, [enabled, measureKey]);
|
|
202
|
+
const updatePlacementFromPointer = useCallback((clientX, clientY) => {
|
|
203
|
+
setPreviewPlacement(projectPointerToPlacement(clientX, clientY));
|
|
204
|
+
}, []);
|
|
205
|
+
const finishDrag = useCallback(() => {
|
|
206
|
+
setPreviewPlacement((currentPreview) => {
|
|
207
|
+
if (currentPreview) {
|
|
208
|
+
setPlacement(currentPreview);
|
|
209
|
+
persistPlacement(currentPreview);
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
});
|
|
213
|
+
dragPointerIdRef.current = null;
|
|
214
|
+
setIsDragging(false);
|
|
215
|
+
}, []);
|
|
216
|
+
useEffect(() => {
|
|
217
|
+
if (!enabled) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const handleResize = () => {
|
|
221
|
+
setPlacement((current) => clampPanelPlacement(current));
|
|
222
|
+
setPreviewPlacement((current) => (current ? clampPanelPlacement(current) : current));
|
|
223
|
+
};
|
|
224
|
+
window.addEventListener("resize", handleResize);
|
|
225
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
226
|
+
}, [enabled]);
|
|
227
|
+
useEffect(() => {
|
|
228
|
+
if (!isDragging) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const handlePointerMove = (event) => {
|
|
232
|
+
if (dragPointerIdRef.current !== event.pointerId) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
updatePlacementFromPointer(event.clientX, event.clientY);
|
|
236
|
+
};
|
|
237
|
+
const handlePointerUp = (event) => {
|
|
238
|
+
if (dragPointerIdRef.current !== event.pointerId) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
finishDrag();
|
|
242
|
+
};
|
|
243
|
+
window.addEventListener("pointermove", handlePointerMove);
|
|
244
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
245
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
246
|
+
return () => {
|
|
247
|
+
window.removeEventListener("pointermove", handlePointerMove);
|
|
248
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
249
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
250
|
+
};
|
|
251
|
+
}, [finishDrag, isDragging, updatePlacementFromPointer]);
|
|
252
|
+
const handleDragHandlePointerDown = useCallback((event) => {
|
|
253
|
+
if (!enabled || event.button !== 0) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
event.preventDefault();
|
|
257
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
258
|
+
dragPointerIdRef.current = event.pointerId;
|
|
259
|
+
setIsDragging(true);
|
|
260
|
+
updatePlacementFromPointer(event.clientX, event.clientY);
|
|
261
|
+
}, [enabled, updatePlacementFromPointer]);
|
|
262
|
+
const panelStyle = enabled ? placementToPanelStyle(currentPlacement) : getMobilePanelStyle();
|
|
263
|
+
return {
|
|
264
|
+
panelRef,
|
|
265
|
+
panelStyle,
|
|
266
|
+
placementCorner: currentPlacement.corner,
|
|
267
|
+
isDragging,
|
|
268
|
+
activeCorner,
|
|
269
|
+
handleDragHandlePointerDown,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
export function panelHeaderAlignModifier(corner) {
|
|
273
|
+
return corner.endsWith("left") ? "align-left" : "align-right";
|
|
274
|
+
}
|
|
275
|
+
export function panelAnchorSide(corner) {
|
|
276
|
+
return corner.endsWith("left") ? "left" : "right";
|
|
277
|
+
}
|
|
278
|
+
export { PANEL_CORNERS };
|
|
279
|
+
//# sourceMappingURL=usePanelDock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanelDock.js","sourceRoot":"","sources":["../../src/hooks/usePanelDock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type DragEvent } from "react";
|
|
2
|
+
import type { ReportMessages } from "../i18n/types.js";
|
|
3
|
+
import { type FeedbackImportPayload, type FeedbackInsertConflict } from "../utils/feedbackDataTransfer.js";
|
|
4
|
+
export type FeedbackTransferScope = {
|
|
5
|
+
projectId: string;
|
|
6
|
+
environment?: string;
|
|
7
|
+
appVersion?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ImportStep = "none" | "project-mismatch" | "confirm";
|
|
10
|
+
export type CommandStep = "none" | "replace-confirm";
|
|
11
|
+
type UsePanelFeedbackTransferOptions = {
|
|
12
|
+
transferScope: FeedbackTransferScope;
|
|
13
|
+
canTransferFeedback: boolean;
|
|
14
|
+
messages: ReportMessages;
|
|
15
|
+
setErrorMessage: (message: string) => void;
|
|
16
|
+
refetch: () => Promise<unknown>;
|
|
17
|
+
openPanelTab: (tab: "command") => void;
|
|
18
|
+
onMoreMenuClose?: () => void;
|
|
19
|
+
isRecording: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare function usePanelFeedbackTransfer({ transferScope, canTransferFeedback, messages, setErrorMessage, refetch, openPanelTab, onMoreMenuClose, isRecording, }: UsePanelFeedbackTransferOptions): {
|
|
22
|
+
isDragOver: boolean;
|
|
23
|
+
pendingImport: FeedbackImportPayload | null;
|
|
24
|
+
importStep: ImportStep;
|
|
25
|
+
pendingCommand: FeedbackImportPayload | null;
|
|
26
|
+
commandConflicts: FeedbackInsertConflict[];
|
|
27
|
+
commandStep: CommandStep;
|
|
28
|
+
commandNotice: {
|
|
29
|
+
message: string;
|
|
30
|
+
isError: boolean;
|
|
31
|
+
} | null;
|
|
32
|
+
setCommandNotice: import("react").Dispatch<import("react").SetStateAction<{
|
|
33
|
+
message: string;
|
|
34
|
+
isError: boolean;
|
|
35
|
+
} | null>>;
|
|
36
|
+
handleExport: () => void;
|
|
37
|
+
handleImportFromMenu: () => void;
|
|
38
|
+
handleOpenCommand: () => void;
|
|
39
|
+
handleCloseCommand: () => void;
|
|
40
|
+
handleCommandExecute: (raw: string) => Promise<{
|
|
41
|
+
status: "pending";
|
|
42
|
+
message?: undefined;
|
|
43
|
+
} | {
|
|
44
|
+
status: "success";
|
|
45
|
+
message: string;
|
|
46
|
+
}>;
|
|
47
|
+
handleCancelCommandReplace: () => void;
|
|
48
|
+
handleConfirmCommandReplace: () => void;
|
|
49
|
+
handleCancelImport: () => void;
|
|
50
|
+
handleProceedImportAfterMismatch: () => void;
|
|
51
|
+
handleApplyImport: () => void;
|
|
52
|
+
handleBackupAndApplyImport: () => void;
|
|
53
|
+
handleDragEnter: (event: DragEvent<HTMLDivElement>) => void;
|
|
54
|
+
handleDragLeave: (event: DragEvent<HTMLDivElement>) => void;
|
|
55
|
+
handleDragOver: (event: DragEvent<HTMLDivElement>) => void;
|
|
56
|
+
handleDrop: (event: DragEvent<HTMLDivElement>) => void;
|
|
57
|
+
};
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=usePanelFeedbackTransfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanelFeedbackTransfer.d.ts","sourceRoot":"","sources":["../../src/hooks/usePanelFeedbackTransfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAaH,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC9B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,MAAM,qBAAqB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAwBrD,KAAK,+BAA+B,GAAG;IACnC,aAAa,EAAE,qBAAqB,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,YAAY,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EACrC,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,eAAe,EACf,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,GACd,EAAE,+BAA+B;;;;;;;;iBAQgC,MAAM;iBAAW,OAAO;;;iBAAxB,MAAM;iBAAW,OAAO;;;;;;gCAiGtE,MAAM;;;;;;;;;;;;;6BAyGV,SAAS,CAAC,cAAc,CAAC;6BAiBzB,SAAS,CAAC,cAAc,CAAC;4BAgBzB,SAAS,CAAC,cAAc,CAAC;wBAgBzB,SAAS,CAAC,cAAc,CAAC;EA8CxC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { useCallback, useRef, useState } from "react";
|
|
2
|
+
import { createFeedbackBackupFilename, downloadFeedbackJson, findFeedbackInsertConflicts, insertFeedbackItems, isImportProjectCompatible, parseFeedbackCommandJson, pickFeedbackJsonFile, readAllFeedback, readFeedbackJsonFile, toReportProject, upsertFeedbackItems, writeAllFeedback, } from "../utils/feedbackDataTransfer.js";
|
|
3
|
+
function buildCommandSuccessMessage(messages, inserted, replaced) {
|
|
4
|
+
if (replaced > 0 && inserted > 0) {
|
|
5
|
+
return messages.errors.commandSuccessInsertedReplaced(inserted, replaced);
|
|
6
|
+
}
|
|
7
|
+
if (replaced > 0) {
|
|
8
|
+
return messages.errors.commandSuccessReplaced(replaced);
|
|
9
|
+
}
|
|
10
|
+
return messages.errors.commandSuccessInserted(inserted);
|
|
11
|
+
}
|
|
12
|
+
function isJsonDragEvent(event) {
|
|
13
|
+
const types = Array.from(event.dataTransfer.types);
|
|
14
|
+
return types.includes("Files") || types.includes("application/json");
|
|
15
|
+
}
|
|
16
|
+
function isJsonFile(file) {
|
|
17
|
+
return file.type === "application/json" || file.name.toLowerCase().endsWith(".json");
|
|
18
|
+
}
|
|
19
|
+
export function usePanelFeedbackTransfer({ transferScope, canTransferFeedback, messages, setErrorMessage, refetch, openPanelTab, onMoreMenuClose, isRecording, }) {
|
|
20
|
+
const { projectId, environment, appVersion } = transferScope;
|
|
21
|
+
const [isDragOver, setIsDragOver] = useState(false);
|
|
22
|
+
const [pendingImport, setPendingImport] = useState(null);
|
|
23
|
+
const [importStep, setImportStep] = useState("none");
|
|
24
|
+
const [pendingCommand, setPendingCommand] = useState(null);
|
|
25
|
+
const [commandConflicts, setCommandConflicts] = useState([]);
|
|
26
|
+
const [commandStep, setCommandStep] = useState("none");
|
|
27
|
+
const [commandNotice, setCommandNotice] = useState(null);
|
|
28
|
+
const dragDepthRef = useRef(0);
|
|
29
|
+
const closeMoreMenu = useCallback(() => {
|
|
30
|
+
onMoreMenuClose?.();
|
|
31
|
+
}, [onMoreMenuClose]);
|
|
32
|
+
const queueImport = useCallback((payload) => {
|
|
33
|
+
closeMoreMenu();
|
|
34
|
+
setPendingImport(payload);
|
|
35
|
+
setImportStep(isImportProjectCompatible(transferScope, payload.project) ? "confirm" : "project-mismatch");
|
|
36
|
+
setErrorMessage("");
|
|
37
|
+
}, [closeMoreMenu, setErrorMessage, transferScope]);
|
|
38
|
+
const handleImportFile = useCallback(async (file) => {
|
|
39
|
+
if (!canTransferFeedback) {
|
|
40
|
+
setErrorMessage(messages.errors.localStorageTransferOnly);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const payload = await readFeedbackJsonFile(file);
|
|
45
|
+
queueImport(payload);
|
|
46
|
+
}
|
|
47
|
+
catch (nextError) {
|
|
48
|
+
setErrorMessage(nextError instanceof Error ? nextError.message : messages.errors.jsonImportFailed);
|
|
49
|
+
}
|
|
50
|
+
}, [canTransferFeedback, messages.errors, queueImport, setErrorMessage]);
|
|
51
|
+
const handleExport = useCallback(() => {
|
|
52
|
+
if (!canTransferFeedback) {
|
|
53
|
+
setErrorMessage(messages.errors.localStorageTransferOnly);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
closeMoreMenu();
|
|
57
|
+
const items = readAllFeedback(transferScope);
|
|
58
|
+
void downloadFeedbackJson(createFeedbackBackupFilename(projectId, environment, appVersion), toReportProject(transferScope), items).then((result) => {
|
|
59
|
+
if (result === "failed") {
|
|
60
|
+
setErrorMessage(messages.errors.jsonExportFailed);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (result === "cancelled") {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
setErrorMessage("");
|
|
67
|
+
});
|
|
68
|
+
}, [canTransferFeedback, closeMoreMenu, environment, messages.errors, projectId, setErrorMessage, transferScope, appVersion]);
|
|
69
|
+
const handleImportFromMenu = useCallback(() => {
|
|
70
|
+
if (!canTransferFeedback) {
|
|
71
|
+
setErrorMessage(messages.errors.localStorageTransferOnly);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
closeMoreMenu();
|
|
75
|
+
void pickFeedbackJsonFile()
|
|
76
|
+
.then((file) => {
|
|
77
|
+
if (!file) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
return handleImportFile(file);
|
|
81
|
+
})
|
|
82
|
+
.catch((error) => {
|
|
83
|
+
setErrorMessage(error instanceof Error ? error.message : messages.errors.jsonImportFailed);
|
|
84
|
+
});
|
|
85
|
+
}, [canTransferFeedback, closeMoreMenu, handleImportFile, messages.errors, setErrorMessage]);
|
|
86
|
+
const handleOpenCommand = useCallback(() => {
|
|
87
|
+
if (!canTransferFeedback) {
|
|
88
|
+
setErrorMessage(messages.errors.localStorageCommandOnly);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
closeMoreMenu();
|
|
92
|
+
setErrorMessage("");
|
|
93
|
+
openPanelTab("command");
|
|
94
|
+
}, [canTransferFeedback, closeMoreMenu, messages.errors, openPanelTab, setErrorMessage]);
|
|
95
|
+
const handleCloseCommand = useCallback(() => {
|
|
96
|
+
setCommandStep("none");
|
|
97
|
+
setPendingCommand(null);
|
|
98
|
+
setCommandConflicts([]);
|
|
99
|
+
openPanelTab("command");
|
|
100
|
+
}, [openPanelTab]);
|
|
101
|
+
const handleCommandExecute = useCallback(async (raw) => {
|
|
102
|
+
if (!canTransferFeedback) {
|
|
103
|
+
throw new Error(messages.errors.localStorageCommandOnly);
|
|
104
|
+
}
|
|
105
|
+
const payload = parseFeedbackCommandJson(raw);
|
|
106
|
+
const conflicts = findFeedbackInsertConflicts(transferScope, payload.items);
|
|
107
|
+
if (conflicts.length > 0) {
|
|
108
|
+
setPendingCommand(payload);
|
|
109
|
+
setCommandConflicts(conflicts);
|
|
110
|
+
setCommandStep("replace-confirm");
|
|
111
|
+
return { status: "pending" };
|
|
112
|
+
}
|
|
113
|
+
const result = insertFeedbackItems(transferScope, payload.items);
|
|
114
|
+
await refetch();
|
|
115
|
+
setErrorMessage("");
|
|
116
|
+
return {
|
|
117
|
+
status: "success",
|
|
118
|
+
message: buildCommandSuccessMessage(messages, result.inserted, result.replaced),
|
|
119
|
+
};
|
|
120
|
+
}, [canTransferFeedback, messages, refetch, setErrorMessage, transferScope]);
|
|
121
|
+
const handleCancelCommandReplace = useCallback(() => {
|
|
122
|
+
setPendingCommand(null);
|
|
123
|
+
setCommandConflicts([]);
|
|
124
|
+
setCommandStep("none");
|
|
125
|
+
}, []);
|
|
126
|
+
const handleConfirmCommandReplace = useCallback(() => {
|
|
127
|
+
if (!pendingCommand) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const payload = pendingCommand;
|
|
131
|
+
void (async () => {
|
|
132
|
+
const result = upsertFeedbackItems(transferScope, payload.items);
|
|
133
|
+
await refetch();
|
|
134
|
+
setErrorMessage("");
|
|
135
|
+
setPendingCommand(null);
|
|
136
|
+
setCommandConflicts([]);
|
|
137
|
+
setCommandStep("none");
|
|
138
|
+
setCommandNotice({
|
|
139
|
+
message: buildCommandSuccessMessage(messages, result.inserted, result.replaced),
|
|
140
|
+
isError: false,
|
|
141
|
+
});
|
|
142
|
+
})();
|
|
143
|
+
}, [messages, pendingCommand, refetch, setErrorMessage, transferScope]);
|
|
144
|
+
const applyImport = useCallback(async (payload) => {
|
|
145
|
+
writeAllFeedback(transferScope, payload.items);
|
|
146
|
+
setPendingImport(null);
|
|
147
|
+
setImportStep("none");
|
|
148
|
+
await refetch();
|
|
149
|
+
}, [refetch, transferScope]);
|
|
150
|
+
const handleCancelImport = useCallback(() => {
|
|
151
|
+
setPendingImport(null);
|
|
152
|
+
setImportStep("none");
|
|
153
|
+
}, []);
|
|
154
|
+
const handleProceedImportAfterMismatch = useCallback(() => {
|
|
155
|
+
setImportStep("confirm");
|
|
156
|
+
}, []);
|
|
157
|
+
const handleApplyImport = useCallback(() => {
|
|
158
|
+
if (!pendingImport) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
void applyImport(pendingImport);
|
|
162
|
+
}, [applyImport, pendingImport]);
|
|
163
|
+
const handleBackupAndApplyImport = useCallback(() => {
|
|
164
|
+
if (!pendingImport) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const currentItems = readAllFeedback(transferScope);
|
|
168
|
+
const pending = pendingImport;
|
|
169
|
+
void downloadFeedbackJson(createFeedbackBackupFilename(projectId, environment, appVersion), toReportProject(transferScope), currentItems).then((result) => {
|
|
170
|
+
if (result === "cancelled" || result === "failed") {
|
|
171
|
+
if (result === "failed") {
|
|
172
|
+
setErrorMessage(messages.errors.backupExportFailedAbortImport);
|
|
173
|
+
}
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
void applyImport(pending);
|
|
177
|
+
});
|
|
178
|
+
}, [applyImport, environment, messages.errors, pendingImport, projectId, setErrorMessage, transferScope, appVersion]);
|
|
179
|
+
const handleDragEnter = useCallback((event) => {
|
|
180
|
+
if (isRecording || !canTransferFeedback || importStep !== "none" || commandStep !== "none") {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!isJsonDragEvent(event)) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
event.preventDefault();
|
|
187
|
+
dragDepthRef.current += 1;
|
|
188
|
+
setIsDragOver(true);
|
|
189
|
+
}, [canTransferFeedback, commandStep, importStep, isRecording]);
|
|
190
|
+
const handleDragLeave = useCallback((event) => {
|
|
191
|
+
if (isRecording || !canTransferFeedback) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
event.preventDefault();
|
|
195
|
+
dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);
|
|
196
|
+
if (dragDepthRef.current === 0) {
|
|
197
|
+
setIsDragOver(false);
|
|
198
|
+
}
|
|
199
|
+
}, [canTransferFeedback, isRecording]);
|
|
200
|
+
const handleDragOver = useCallback((event) => {
|
|
201
|
+
if (isRecording || !canTransferFeedback || importStep !== "none" || commandStep !== "none") {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (!isJsonDragEvent(event)) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
event.preventDefault();
|
|
208
|
+
event.dataTransfer.dropEffect = "copy";
|
|
209
|
+
}, [canTransferFeedback, commandStep, importStep, isRecording]);
|
|
210
|
+
const handleDrop = useCallback((event) => {
|
|
211
|
+
if (isRecording || !canTransferFeedback || importStep !== "none" || commandStep !== "none") {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
event.preventDefault();
|
|
215
|
+
dragDepthRef.current = 0;
|
|
216
|
+
setIsDragOver(false);
|
|
217
|
+
const file = Array.from(event.dataTransfer.files).find(isJsonFile);
|
|
218
|
+
if (!file) {
|
|
219
|
+
setErrorMessage(messages.errors.jsonFileOnly);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
void handleImportFile(file);
|
|
223
|
+
}, [canTransferFeedback, commandStep, handleImportFile, importStep, isRecording, messages.errors, setErrorMessage]);
|
|
224
|
+
return {
|
|
225
|
+
isDragOver,
|
|
226
|
+
pendingImport,
|
|
227
|
+
importStep,
|
|
228
|
+
pendingCommand,
|
|
229
|
+
commandConflicts,
|
|
230
|
+
commandStep,
|
|
231
|
+
commandNotice,
|
|
232
|
+
setCommandNotice,
|
|
233
|
+
handleExport,
|
|
234
|
+
handleImportFromMenu,
|
|
235
|
+
handleOpenCommand,
|
|
236
|
+
handleCloseCommand,
|
|
237
|
+
handleCommandExecute,
|
|
238
|
+
handleCancelCommandReplace,
|
|
239
|
+
handleConfirmCommandReplace,
|
|
240
|
+
handleCancelImport,
|
|
241
|
+
handleProceedImportAfterMismatch,
|
|
242
|
+
handleApplyImport,
|
|
243
|
+
handleBackupAndApplyImport,
|
|
244
|
+
handleDragEnter,
|
|
245
|
+
handleDragLeave,
|
|
246
|
+
handleDragOver,
|
|
247
|
+
handleDrop,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=usePanelFeedbackTransfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanelFeedbackTransfer.js","sourceRoot":"","sources":["../../src/hooks/usePanelFeedbackTransfer.ts"],"names":[],"mappings":"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"}
|