@fivepixels-js/react 0.2.2 → 0.2.4
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/README.md +2 -0
- package/dist/components/icons/Icons.d.ts +9 -0
- package/dist/components/icons/Icons.d.ts.map +1 -1
- package/dist/components/icons/Icons.js +12 -0
- package/dist/components/icons/Icons.js.map +1 -1
- package/dist/components/overlay/DotWaveOverlay.d.ts.map +1 -1
- package/dist/components/overlay/DotWaveOverlay.js +1 -0
- package/dist/components/overlay/DotWaveOverlay.js.map +1 -1
- package/dist/components/overlay/ReportOverlayLayer.d.ts.map +1 -1
- package/dist/components/overlay/ReportOverlayLayer.js +3 -3
- package/dist/components/overlay/ReportOverlayLayer.js.map +1 -1
- package/dist/components/overlay/TargetHighlights.d.ts +2 -1
- package/dist/components/overlay/TargetHighlights.d.ts.map +1 -1
- package/dist/components/overlay/TargetHighlights.js +3 -2
- package/dist/components/overlay/TargetHighlights.js.map +1 -1
- package/dist/components/panel/PanelProjectFooter.d.ts.map +1 -1
- package/dist/components/panel/PanelProjectFooter.js +1 -4
- package/dist/components/panel/PanelProjectFooter.js.map +1 -1
- package/dist/components/panel/PanelSettings.d.ts.map +1 -1
- package/dist/components/panel/PanelSettings.js +2 -2
- package/dist/components/panel/PanelSettings.js.map +1 -1
- package/dist/components/panel/ReportDraftForm.d.ts.map +1 -1
- package/dist/components/panel/ReportDraftForm.js +75 -34
- package/dist/components/panel/ReportDraftForm.js.map +1 -1
- package/dist/components/panel/ReportFeedbackList.d.ts.map +1 -1
- package/dist/components/panel/ReportFeedbackList.js +5 -4
- package/dist/components/panel/ReportFeedbackList.js.map +1 -1
- package/dist/components/panel/ReportImportConfirmDialog.d.ts +3 -2
- package/dist/components/panel/ReportImportConfirmDialog.d.ts.map +1 -1
- package/dist/components/panel/ReportImportConfirmDialog.js +8 -1
- package/dist/components/panel/ReportImportConfirmDialog.js.map +1 -1
- package/dist/components/panel/experimental/ReportPageBriefPanel.js +1 -1
- package/dist/components/panel/experimental/ReportPageBriefPanel.js.map +1 -1
- package/dist/components/panel/feedback/AssigneeThreadEntry.d.ts.map +1 -1
- package/dist/components/panel/feedback/AssigneeThreadEntry.js +11 -2
- package/dist/components/panel/feedback/AssigneeThreadEntry.js.map +1 -1
- package/dist/components/panel/feedback/DraftComposerToolbar.d.ts +25 -0
- package/dist/components/panel/feedback/DraftComposerToolbar.d.ts.map +1 -0
- package/dist/components/panel/feedback/DraftComposerToolbar.js +63 -0
- package/dist/components/panel/feedback/DraftComposerToolbar.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackCaseEditor.d.ts +7 -2
- package/dist/components/panel/feedback/FeedbackCaseEditor.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackCaseEditor.js +28 -9
- package/dist/components/panel/feedback/FeedbackCaseEditor.js.map +1 -1
- package/dist/components/panel/feedback/FeedbackCaseList.d.ts +4 -2
- package/dist/components/panel/feedback/FeedbackCaseList.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackCaseList.js +5 -4
- package/dist/components/panel/feedback/FeedbackCaseList.js.map +1 -1
- package/dist/components/panel/feedback/FeedbackCategorySelector.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackCategorySelector.js +10 -7
- package/dist/components/panel/feedback/FeedbackCategorySelector.js.map +1 -1
- package/dist/components/panel/feedback/FeedbackComposer.d.ts +12 -2
- package/dist/components/panel/feedback/FeedbackComposer.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackComposer.js +135 -20
- package/dist/components/panel/feedback/FeedbackComposer.js.map +1 -1
- package/dist/components/panel/feedback/FeedbackDeleteAction.d.ts +16 -0
- package/dist/components/panel/feedback/FeedbackDeleteAction.d.ts.map +1 -0
- package/dist/components/panel/feedback/FeedbackDeleteAction.js +28 -0
- package/dist/components/panel/feedback/FeedbackDeleteAction.js.map +1 -0
- package/dist/components/panel/feedback/FeedbackHoverCard.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackHoverCard.js +5 -4
- package/dist/components/panel/feedback/FeedbackHoverCard.js.map +1 -1
- package/dist/components/panel/feedback/FeedbackListItem.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackListItem.js +8 -26
- package/dist/components/panel/feedback/FeedbackListItem.js.map +1 -1
- package/dist/components/panel/feedback/FeedbackThread.d.ts.map +1 -1
- package/dist/components/panel/feedback/FeedbackThread.js +29 -10
- package/dist/components/panel/feedback/FeedbackThread.js.map +1 -1
- package/dist/components/panel/feedback/GitIssuedThreadEntry.js +1 -1
- package/dist/components/panel/feedback/GitIssuedThreadEntry.js.map +1 -1
- package/dist/components/panel/feedback/MentionComposerInput.d.ts +17 -0
- package/dist/components/panel/feedback/MentionComposerInput.d.ts.map +1 -0
- package/dist/components/panel/feedback/MentionComposerInput.js +343 -0
- package/dist/components/panel/feedback/MentionComposerInput.js.map +1 -0
- package/dist/components/panel/feedback/MentionMessage.d.ts +9 -0
- package/dist/components/panel/feedback/MentionMessage.d.ts.map +1 -0
- package/dist/components/panel/feedback/MentionMessage.js +27 -0
- package/dist/components/panel/feedback/MentionMessage.js.map +1 -0
- package/dist/components/panel/feedback/PickTargetSnippet.d.ts +3 -2
- package/dist/components/panel/feedback/PickTargetSnippet.d.ts.map +1 -1
- package/dist/components/panel/feedback/PickTargetSnippet.js +12 -4
- package/dist/components/panel/feedback/PickTargetSnippet.js.map +1 -1
- package/dist/components/panel/feedback/ThreadAuthorMeta.d.ts.map +1 -1
- package/dist/components/panel/feedback/ThreadAuthorMeta.js +4 -1
- package/dist/components/panel/feedback/ThreadAuthorMeta.js.map +1 -1
- package/dist/components/panel/feedback/ThreadChildReply.d.ts.map +1 -1
- package/dist/components/panel/feedback/ThreadChildReply.js +2 -1
- package/dist/components/panel/feedback/ThreadChildReply.js.map +1 -1
- package/dist/components/panel/feedback/ThreadEntryActions.d.ts +3 -1
- package/dist/components/panel/feedback/ThreadEntryActions.d.ts.map +1 -1
- package/dist/components/panel/feedback/ThreadEntryActions.js +26 -6
- package/dist/components/panel/feedback/ThreadEntryActions.js.map +1 -1
- package/dist/components/point/MarkerCaseSidebar.d.ts.map +1 -1
- package/dist/components/point/MarkerCaseSidebar.js +9 -3
- package/dist/components/point/MarkerCaseSidebar.js.map +1 -1
- package/dist/components/point/MarkerFeedbackWindow.d.ts.map +1 -1
- package/dist/components/point/MarkerFeedbackWindow.js +14 -6
- package/dist/components/point/MarkerFeedbackWindow.js.map +1 -1
- package/dist/components/point/ReportDraftMarker.d.ts.map +1 -1
- package/dist/components/point/ReportDraftMarker.js +3 -2
- package/dist/components/point/ReportDraftMarker.js.map +1 -1
- package/dist/components/point/ReportMarkersLayer.d.ts.map +1 -1
- package/dist/components/point/ReportMarkersLayer.js +2 -2
- package/dist/components/point/ReportMarkersLayer.js.map +1 -1
- package/dist/components/report/ReportView.d.ts.map +1 -1
- package/dist/components/report/ReportView.js +4 -7
- package/dist/components/report/ReportView.js.map +1 -1
- package/dist/constants/threadActionStyles.d.ts +16 -0
- package/dist/constants/threadActionStyles.d.ts.map +1 -0
- package/dist/constants/threadActionStyles.js +52 -0
- package/dist/constants/threadActionStyles.js.map +1 -0
- package/dist/hooks/report/assembleReportContextValue.d.ts +27 -19
- package/dist/hooks/report/assembleReportContextValue.d.ts.map +1 -1
- package/dist/hooks/report/assembleReportContextValue.js +8 -2
- package/dist/hooks/report/assembleReportContextValue.js.map +1 -1
- package/dist/hooks/report/useReplyCaseEdit.d.ts +8 -2
- package/dist/hooks/report/useReplyCaseEdit.d.ts.map +1 -1
- package/dist/hooks/report/useReplyCaseEdit.js +40 -4
- package/dist/hooks/report/useReplyCaseEdit.js.map +1 -1
- package/dist/hooks/report/useReportAuthSession.d.ts +1 -1
- package/dist/hooks/report/useReportDraftSession.d.ts +4 -2
- package/dist/hooks/report/useReportDraftSession.d.ts.map +1 -1
- package/dist/hooks/report/useReportDraftSession.js +30 -2
- package/dist/hooks/report/useReportDraftSession.js.map +1 -1
- package/dist/hooks/report/useReportMarkers.d.ts +2 -3
- package/dist/hooks/report/useReportMarkers.d.ts.map +1 -1
- package/dist/hooks/report/useReportMarkers.js +11 -9
- package/dist/hooks/report/useReportMarkers.js.map +1 -1
- package/dist/hooks/report/useReportMutations.d.ts +6 -1
- package/dist/hooks/report/useReportMutations.d.ts.map +1 -1
- package/dist/hooks/report/useReportMutations.js +43 -2
- package/dist/hooks/report/useReportMutations.js.map +1 -1
- package/dist/hooks/report/useReportPanelShell.js +8 -8
- package/dist/hooks/report/useReportPanelShell.js.map +1 -1
- package/dist/hooks/report/useReportReplyReview.d.ts +8 -1
- package/dist/hooks/report/useReportReplyReview.d.ts.map +1 -1
- package/dist/hooks/report/useReportReplyReview.js +37 -20
- package/dist/hooks/report/useReportReplyReview.js.map +1 -1
- package/dist/hooks/report/useReportState.d.ts +8 -2
- package/dist/hooks/report/useReportState.d.ts.map +1 -1
- package/dist/hooks/report/useReportState.js +31 -3
- package/dist/hooks/report/useReportState.js.map +1 -1
- package/dist/hooks/usePanelFeedbackTransfer.d.ts +4 -4
- package/dist/hooks/usePanelFeedbackTransfer.d.ts.map +1 -1
- package/dist/hooks/usePanelFeedbackTransfer.js +24 -17
- package/dist/hooks/usePanelFeedbackTransfer.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +46 -9
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +53 -16
- package/dist/i18n/ko.js.map +1 -1
- package/dist/i18n/types.d.ts +35 -3
- package/dist/i18n/types.d.ts.map +1 -1
- package/dist/providers/ReportProvider.d.ts.map +1 -1
- package/dist/providers/ReportProvider.js +1 -0
- package/dist/providers/ReportProvider.js.map +1 -1
- package/dist/providers/reportContext.d.ts +42 -12
- package/dist/providers/reportContext.d.ts.map +1 -1
- package/dist/providers/reportContext.js +1 -0
- package/dist/providers/reportContext.js.map +1 -1
- package/dist/providers/reportContextPartitions.d.ts +1 -1
- package/dist/providers/reportContextPartitions.d.ts.map +1 -1
- package/dist/providers/reportContextPartitions.js +6 -0
- package/dist/providers/reportContextPartitions.js.map +1 -1
- package/dist/storage/local/localStorageAdapter.d.ts.map +1 -1
- package/dist/storage/local/localStorageAdapter.js +2 -0
- package/dist/storage/local/localStorageAdapter.js.map +1 -1
- package/dist/styles/reportStylesheet.d.ts +1 -1
- package/dist/styles/reportStylesheet.d.ts.map +1 -1
- package/dist/styles/reportStylesheet.js +1 -1
- package/dist/styles/reportStylesheet.js.map +1 -1
- package/dist/types/mention.d.ts +17 -0
- package/dist/types/mention.d.ts.map +1 -0
- package/dist/types/mention.js +11 -0
- package/dist/types/mention.js.map +1 -0
- package/dist/types/report.d.ts +6 -0
- package/dist/types/report.d.ts.map +1 -1
- package/dist/types/report.js.map +1 -1
- package/dist/utils/feedback/feedbackDataTransfer.d.ts +9 -2
- package/dist/utils/feedback/feedbackDataTransfer.d.ts.map +1 -1
- package/dist/utils/feedback/feedbackDataTransfer.js +24 -16
- package/dist/utils/feedback/feedbackDataTransfer.js.map +1 -1
- package/dist/utils/feedback/feedbackImportMerge.d.ts +26 -0
- package/dist/utils/feedback/feedbackImportMerge.d.ts.map +1 -0
- package/dist/utils/feedback/feedbackImportMerge.js +97 -0
- package/dist/utils/feedback/feedbackImportMerge.js.map +1 -0
- package/dist/utils/feedback/feedbackPermissions.d.ts +8 -0
- package/dist/utils/feedback/feedbackPermissions.d.ts.map +1 -0
- package/dist/utils/feedback/feedbackPermissions.js +30 -0
- package/dist/utils/feedback/feedbackPermissions.js.map +1 -0
- package/dist/utils/feedback/validateFeedbackImport.d.ts.map +1 -1
- package/dist/utils/feedback/validateFeedbackImport.js +3 -1
- package/dist/utils/feedback/validateFeedbackImport.js.map +1 -1
- package/dist/utils/mention/elementMentions.d.ts +45 -0
- package/dist/utils/mention/elementMentions.d.ts.map +1 -0
- package/dist/utils/mention/elementMentions.js +286 -0
- package/dist/utils/mention/elementMentions.js.map +1 -0
- package/dist/utils/mention/mentionComposerDom.d.ts +31 -0
- package/dist/utils/mention/mentionComposerDom.d.ts.map +1 -0
- package/dist/utils/mention/mentionComposerDom.js +253 -0
- package/dist/utils/mention/mentionComposerDom.js.map +1 -0
- package/dist/utils/report/buildDraftFromReport.d.ts +5 -0
- package/dist/utils/report/buildDraftFromReport.d.ts.map +1 -0
- package/dist/utils/report/buildDraftFromReport.js +33 -0
- package/dist/utils/report/buildDraftFromReport.js.map +1 -0
- package/dist/utils/report/reportCases.d.ts +1 -1
- package/dist/utils/report/reportCases.d.ts.map +1 -1
- package/dist/utils/report/reportCases.js +6 -2
- package/dist/utils/report/reportCases.js.map +1 -1
- package/dist/utils/shared/format.d.ts +2 -0
- package/dist/utils/shared/format.d.ts.map +1 -1
- package/dist/utils/shared/format.js +19 -0
- package/dist/utils/shared/format.js.map +1 -1
- package/package.json +3 -2
- package/dist/components/panel/feedback/ComposerFooterWarning.d.ts +0 -6
- package/dist/components/panel/feedback/ComposerFooterWarning.d.ts.map +0 -1
- package/dist/components/panel/feedback/ComposerFooterWarning.js +0 -6
- package/dist/components/panel/feedback/ComposerFooterWarning.js.map +0 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { FEEDBACK_CATEGORIES } from "../../../constants/feedbackCategory.js";
|
|
4
|
+
import { ChevronDownIcon, SendIcon } from "../../../components/icons/Icons.js";
|
|
5
|
+
import { HoverTooltip } from "../../../components/ui/HoverTooltip.js";
|
|
6
|
+
import { PanelDropdownMenu, PanelDropdownMenuItem } from "../../../components/panel/PanelDropdownMenu.js";
|
|
7
|
+
import { useReportPreferences } from "../../../providers/reportContext.js";
|
|
8
|
+
import { mentionMessageToPlainText } from "../../../utils/mention/elementMentions.js";
|
|
9
|
+
const TOOLBAR_TRIGGER_CLASS = "inline-flex max-w-[140px] items-center gap-[4px] rounded-[8px] py-[2px] px-[4px] text-[12px] font-semibold text-[var(--adaptive-black600)] transition-colors hover:bg-[var(--adaptive-tintOpacity100)] hover:text-[var(--adaptive-black900)]";
|
|
10
|
+
function truncateLabel(text, fallback) {
|
|
11
|
+
const trimmed = text.trim();
|
|
12
|
+
if (!trimmed) {
|
|
13
|
+
return fallback;
|
|
14
|
+
}
|
|
15
|
+
return trimmed.length > 18 ? `${trimmed.slice(0, 18)}…` : trimmed;
|
|
16
|
+
}
|
|
17
|
+
export function DraftComposerToolbar({ cases, activeCaseId, onSelectCase, onAddCase, onRemoveCase, onInsertAtMention, category, onCategoryChange, categoryNeedsAttention = false, onSubmit, isSubmitting = false, submitLabel, submittingLabel, showGitHubIssueOnCreate = false, onGitHubIssueSubmit, isGitHubIssueSubmitting = false, isGitHubIssueConfirming = false, onGitHubIssueConfirmingChange, }) {
|
|
18
|
+
const { messages } = useReportPreferences();
|
|
19
|
+
const [casesOpen, setCasesOpen] = useState(false);
|
|
20
|
+
const [categoryOpen, setCategoryOpen] = useState(false);
|
|
21
|
+
const isActionDisabled = isSubmitting || isGitHubIssueSubmitting;
|
|
22
|
+
const resolvedSubmitLabel = submitLabel ?? messages.composer.draftComplete;
|
|
23
|
+
const resolvedSubmittingLabel = submittingLabel ?? messages.composer.draftCompleting;
|
|
24
|
+
const activeCaseIndex = Math.max(0, cases.findIndex((item) => item.id === activeCaseId));
|
|
25
|
+
const activeCase = cases[activeCaseIndex] ?? cases[0] ?? null;
|
|
26
|
+
const casesLabel = activeCase
|
|
27
|
+
? truncateLabel(mentionMessageToPlainText(activeCase.text, activeCase.mentions), messages.composer.caseTabLabel(activeCaseIndex + 1))
|
|
28
|
+
: messages.composer.casesDropdownLabel;
|
|
29
|
+
const categoryLabel = category ? messages.composer.categoryOption[category] : messages.composer.categoryLabel;
|
|
30
|
+
const handleGitHubIssueClick = () => {
|
|
31
|
+
if (isActionDisabled || !onGitHubIssueSubmit) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!isGitHubIssueConfirming) {
|
|
35
|
+
onGitHubIssueConfirmingChange?.(true);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
onGitHubIssueConfirmingChange?.(false);
|
|
39
|
+
onGitHubIssueSubmit();
|
|
40
|
+
};
|
|
41
|
+
return (_jsxs("div", { className: "flex shrink-0 items-center gap-[6px] px-[8px] py-[6px]", children: [_jsx(HoverTooltip, { label: messages.composer.addCase, children: _jsx("button", { type: "button", "data-fivepixels-interactive": "", onClick: onAddCase, disabled: isActionDisabled, "aria-label": messages.composer.addCaseTabAriaLabel, className: "inline-flex h-[28px] w-[28px] shrink-0 items-center justify-center rounded-[8px] text-[18px] font-medium leading-none text-[var(--adaptive-black600)] transition-colors hover:bg-[var(--adaptive-tintOpacity100)] hover:text-[var(--adaptive-black900)] disabled:opacity-50", children: "+" }) }), _jsxs("section", { className: "flex flex-col gap-[4px]", children: [_jsxs("section", { className: "flex items-center", children: [_jsx("p", { className: "text-[12px] text-[var(--adaptive-black500)]", children: "case" }), _jsx(PanelDropdownMenu, { open: casesOpen, onClose: () => setCasesOpen(false), align: "left", menuClassName: "min-w-[180px] rounded-[10px]", trigger: _jsxs("button", { type: "button", "data-fivepixels-interactive": "", "aria-expanded": casesOpen, "aria-label": messages.composer.casesDropdownAriaLabel, disabled: isActionDisabled, onClick: () => {
|
|
42
|
+
setCategoryOpen(false);
|
|
43
|
+
setCasesOpen((current) => !current);
|
|
44
|
+
}, className: `${TOOLBAR_TRIGGER_CLASS} disabled:opacity-50`, children: [_jsx("span", { className: "min-w-0 truncate text-[12px]", children: casesLabel }), _jsx(ChevronDownIcon, { className: "h-[12px] w-[12px] shrink-0" })] }), children: cases.map((item, index) => {
|
|
45
|
+
const isActive = item.id === activeCaseId;
|
|
46
|
+
return (_jsxs("div", { className: "flex items-stretch", children: [_jsx(PanelDropdownMenuItem, { active: isActive, onClick: () => {
|
|
47
|
+
onSelectCase(item.id);
|
|
48
|
+
setCasesOpen(false);
|
|
49
|
+
}, children: _jsx("span", { className: "min-w-0 flex-1 truncate", children: truncateLabel(mentionMessageToPlainText(item.text, item.mentions), messages.composer.caseTabLabel(index + 1)) }) }), cases.length > 1 ? (_jsx("button", { type: "button", "data-fivepixels-interactive": "", onClick: () => {
|
|
50
|
+
onRemoveCase(item.id);
|
|
51
|
+
if (cases.length <= 2) {
|
|
52
|
+
setCasesOpen(false);
|
|
53
|
+
}
|
|
54
|
+
}, "aria-label": messages.composer.removeCaseAriaLabel(index + 1), className: "inline-flex w-[28px] shrink-0 items-center justify-center text-[14px] text-[var(--adaptive-black500)] hover:bg-[var(--adaptive-black100)] hover:text-[var(--adaptive-black900)]", children: "\u00D7" })) : null] }, item.id));
|
|
55
|
+
}) })] }), _jsxs("section", { className: "flex items-center", children: [_jsx("p", { className: "text-[12px] text-[var(--adaptive-black500)]", children: "category" }), _jsx(PanelDropdownMenu, { open: categoryOpen, onClose: () => setCategoryOpen(false), align: "left", menuClassName: "min-w-[140px] rounded-[10px]", trigger: _jsxs("button", { type: "button", "data-fivepixels-interactive": "", "aria-expanded": categoryOpen, "aria-label": messages.composer.categoryAriaLabel, "aria-invalid": categoryNeedsAttention || undefined, disabled: isActionDisabled, onClick: () => {
|
|
56
|
+
setCasesOpen(false);
|
|
57
|
+
setCategoryOpen((current) => !current);
|
|
58
|
+
}, className: `${TOOLBAR_TRIGGER_CLASS} disabled:opacity-50 ` + (categoryNeedsAttention ? "fivepixels-validation-attention text-rose-500 hover:text-rose-600" : ""), children: [_jsx("span", { className: "min-w-0 truncate text-[12px]", children: categoryLabel }), _jsx(ChevronDownIcon, { className: "h-[12px] w-[12px] shrink-0" })] }), children: FEEDBACK_CATEGORIES.map((item) => (_jsx(PanelDropdownMenuItem, { active: category === item, onClick: () => {
|
|
59
|
+
onCategoryChange(item);
|
|
60
|
+
setCategoryOpen(false);
|
|
61
|
+
}, children: messages.composer.categoryOption[item] }, item))) })] })] }), _jsx("div", { className: "min-w-[8px] flex-1" }), showGitHubIssueOnCreate && onGitHubIssueSubmit ? (_jsxs("button", { type: "button", "data-fivepixels-interactive": "", disabled: isActionDisabled, onClick: handleGitHubIssueClick, className: "inline-flex h-[28px] items-center justify-center rounded-full border border-[var(--adaptive-border-subtle)] px-[10px] text-[12px] font-semibold text-[var(--adaptive-black500)] disabled:opacity-50", "aria-label": isGitHubIssueConfirming ? messages.feedbackList.gitIssueConfirmAriaLabel : messages.composer.gitIssueSendAriaLabel, title: isGitHubIssueConfirming ? messages.feedbackList.gitIssueConfirmTitle : messages.composer.gitIssueSendTitle, children: ["+ ", isGitHubIssueSubmitting ? messages.composer.gitIssueSendingLabel : isGitHubIssueConfirming ? messages.feedbackList.gitIssueConfirmLabel : messages.composer.gitIssueSendLabel] })) : null, _jsx(HoverTooltip, { label: resolvedSubmitLabel, disabled: isActionDisabled, children: _jsx("button", { type: "button", "data-fivepixels-interactive": "", disabled: isActionDisabled, onClick: onSubmit, className: "inline-flex h-[32px] w-[32px] shrink-0 items-center justify-center rounded-full bg-[var(--adaptive-black900)] text-[var(--adaptive-black50)] disabled:opacity-50", "aria-label": isSubmitting ? resolvedSubmittingLabel : resolvedSubmitLabel, children: _jsx(SendIcon, { className: "h-[14px] w-[14px]" }) }) })] }));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=DraftComposerToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DraftComposerToolbar.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/DraftComposerToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ReportCase } from "../../../types/report.js";
|
|
2
|
+
import type { ElementMention } from "../../../types/mention.js";
|
|
2
3
|
type FeedbackCaseEditorProps = {
|
|
3
4
|
cases: ReportCase[];
|
|
4
|
-
onCaseChange: (caseId: string, text: string) => void;
|
|
5
|
+
onCaseChange: (caseId: string, text: string, mentions?: ElementMention[]) => void;
|
|
5
6
|
onAddCase: () => void;
|
|
6
7
|
onRemoveCase: (caseId: string) => void;
|
|
7
8
|
autoFocus?: boolean;
|
|
@@ -9,7 +10,11 @@ type FeedbackCaseEditorProps = {
|
|
|
9
10
|
needsAttention?: boolean;
|
|
10
11
|
attentionKey?: number;
|
|
11
12
|
emptyCaseIds?: string[];
|
|
13
|
+
showTabBar?: boolean;
|
|
14
|
+
activeCaseId?: string | null;
|
|
15
|
+
onActiveCaseIdChange?: (caseId: string) => void;
|
|
16
|
+
enableElementMentions?: boolean;
|
|
12
17
|
};
|
|
13
|
-
export declare function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCase, autoFocus, onSubmitShortcut, needsAttention, attentionKey, emptyCaseIds, }: FeedbackCaseEditorProps): import("react").JSX.Element | null;
|
|
18
|
+
export declare function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCase, autoFocus, onSubmitShortcut, needsAttention, attentionKey, emptyCaseIds, showTabBar, activeCaseId: controlledActiveCaseId, onActiveCaseIdChange, enableElementMentions, }: FeedbackCaseEditorProps): import("react").JSX.Element | null;
|
|
14
19
|
export {};
|
|
15
20
|
//# sourceMappingURL=FeedbackCaseEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackCaseEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackCaseEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseEditor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,KAAK,uBAAuB,GAAG;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAClF,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AA2FF,wBAAgB,kBAAkB,CAAC,EAC/B,KAAK,EACL,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAiB,EACjB,gBAAgB,EAChB,cAAsB,EACtB,YAAgB,EAChB,YAAiB,EACjB,UAAiB,EACjB,YAAY,EAAE,sBAAsB,EACpC,oBAAoB,EACpB,qBAA6B,GAChC,EAAE,uBAAuB,sCAsJzB"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
3
|
import { useReportPreferences } from "../../../providers/reportContext.js";
|
|
4
4
|
import { FeedbackCaseTabBar } from "./FeedbackCaseTabBar.js";
|
|
5
|
+
import { MentionComposerInput } from "./MentionComposerInput.js";
|
|
5
6
|
const CASE_INPUT_MIN_HEIGHT = 56;
|
|
6
7
|
const CASE_INPUT_CLASS = "min-h-[56px] w-full flex-1 resize-none overflow-hidden px-[12px] py-[6px] text-[16px] leading-[1.5] text-[var(--adaptive-text-primary)] outline-none placeholder:text-[var(--adaptive-text-muted)] focus:border-[var(--adaptive-blue500)]";
|
|
7
8
|
function syncCaseTextareaHeight(textarea) {
|
|
@@ -46,11 +47,29 @@ function resolveActiveCaseId(cases, activeCaseId) {
|
|
|
46
47
|
}
|
|
47
48
|
return cases[cases.length - 1]?.id ?? cases[0].id;
|
|
48
49
|
}
|
|
49
|
-
|
|
50
|
+
function focusCaseInput(caseId) {
|
|
51
|
+
const root = document.getElementById(`fivepixels-case-input-${caseId}`) ??
|
|
52
|
+
document.querySelector(`[data-fivepixels-case-input="${CSS.escape(caseId)}"]`);
|
|
53
|
+
const editable = root?.querySelector("[contenteditable='true']");
|
|
54
|
+
(editable ?? (root instanceof HTMLElement ? root : null))?.focus();
|
|
55
|
+
}
|
|
56
|
+
export function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCase, autoFocus = false, onSubmitShortcut, needsAttention = false, attentionKey = 0, emptyCaseIds = [], showTabBar = true, activeCaseId: controlledActiveCaseId, onActiveCaseIdChange, enableElementMentions = false, }) {
|
|
50
57
|
const { messages } = useReportPreferences();
|
|
51
58
|
const previousCaseCountRef = useRef(cases.length);
|
|
52
59
|
const containerRef = useRef(null);
|
|
53
|
-
const [
|
|
60
|
+
const [uncontrolledActiveCaseId, setUncontrolledActiveCaseId] = useState(() => cases[0]?.id ?? null);
|
|
61
|
+
const isActiveCaseControlled = controlledActiveCaseId !== undefined;
|
|
62
|
+
const activeCaseId = isActiveCaseControlled ? controlledActiveCaseId : uncontrolledActiveCaseId;
|
|
63
|
+
const setActiveCaseId = useCallback((caseId) => {
|
|
64
|
+
if (!caseId) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (isActiveCaseControlled) {
|
|
68
|
+
onActiveCaseIdChange?.(caseId);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
setUncontrolledActiveCaseId(caseId);
|
|
72
|
+
}, [isActiveCaseControlled, onActiveCaseIdChange]);
|
|
54
73
|
const resolvedActiveCaseId = resolveActiveCaseId(cases, activeCaseId);
|
|
55
74
|
const activeCase = cases.find((item) => item.id === resolvedActiveCaseId) ?? null;
|
|
56
75
|
const activeCaseIndex = activeCase ? cases.findIndex((item) => item.id === activeCase.id) : -1;
|
|
@@ -58,10 +77,10 @@ export function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCas
|
|
|
58
77
|
const getCaseInputPlaceholder = useCallback((index) => messages.composer.caseInputPlaceholder(index), [messages.composer]);
|
|
59
78
|
useEffect(() => {
|
|
60
79
|
const nextActiveCaseId = resolveActiveCaseId(cases, activeCaseId);
|
|
61
|
-
if (nextActiveCaseId !== activeCaseId) {
|
|
80
|
+
if (nextActiveCaseId && nextActiveCaseId !== activeCaseId) {
|
|
62
81
|
setActiveCaseId(nextActiveCaseId);
|
|
63
82
|
}
|
|
64
|
-
}, [activeCaseId, cases]);
|
|
83
|
+
}, [activeCaseId, cases, setActiveCaseId]);
|
|
65
84
|
useEffect(() => {
|
|
66
85
|
if (cases.length <= previousCaseCountRef.current) {
|
|
67
86
|
previousCaseCountRef.current = cases.length;
|
|
@@ -71,11 +90,11 @@ export function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCas
|
|
|
71
90
|
if (lastCase) {
|
|
72
91
|
setActiveCaseId(lastCase.id);
|
|
73
92
|
window.requestAnimationFrame(() => {
|
|
74
|
-
|
|
93
|
+
focusCaseInput(lastCase.id);
|
|
75
94
|
});
|
|
76
95
|
}
|
|
77
96
|
previousCaseCountRef.current = cases.length;
|
|
78
|
-
}, [cases]);
|
|
97
|
+
}, [cases, setActiveCaseId]);
|
|
79
98
|
useEffect(() => {
|
|
80
99
|
if (!needsAttention || attentionKey <= 0 || emptyCaseIds.length === 0) {
|
|
81
100
|
return;
|
|
@@ -89,9 +108,9 @@ export function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCas
|
|
|
89
108
|
}
|
|
90
109
|
containerRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
91
110
|
window.requestAnimationFrame(() => {
|
|
92
|
-
|
|
111
|
+
focusCaseInput(targetCaseId);
|
|
93
112
|
});
|
|
94
|
-
}, [needsAttention, attentionKey, emptyCaseIds, resolvedActiveCaseId]);
|
|
113
|
+
}, [needsAttention, attentionKey, emptyCaseIds, resolvedActiveCaseId, setActiveCaseId]);
|
|
95
114
|
const handleRemoveCase = (caseId) => {
|
|
96
115
|
const removeIndex = cases.findIndex((item) => item.id === caseId);
|
|
97
116
|
if (removeIndex < 0) {
|
|
@@ -106,6 +125,6 @@ export function FeedbackCaseEditor({ cases, onCaseChange, onAddCase, onRemoveCas
|
|
|
106
125
|
if (!activeCase || activeCaseIndex < 0) {
|
|
107
126
|
return null;
|
|
108
127
|
}
|
|
109
|
-
return (_jsxs("div", { ref: containerRef, className: "flex h-full min-h-0 flex-1 flex-col", children: [_jsx(FeedbackCaseTabBar, { variant: "editor", cases: cases, activeCaseId: resolvedActiveCaseId, onSelectCase: setActiveCaseId, onAddCase: onAddCase, onRemoveCase: handleRemoveCase, invalidCaseIds: needsAttention ? emptyCaseIds : [] }), _jsx("div", { role: "tabpanel", id: `fivepixels-case-panel-${activeCase.id}`, "aria-labelledby": `fivepixels-case-tab-${activeCase.id}`, className: "flex min-h-0 flex-1 flex-col overflow-y-auto px-[4px] py-[4px]", children: _jsx(CaseTextarea, { id: `fivepixels-case-input-${activeCase.id}`, autoFocus: autoFocus && activeCaseIndex === 0, value: activeCase.text, placeholder: getCaseInputPlaceholder(activeCaseIndex + 1), onChange: (text) => onCaseChange(activeCase.id, text), onSubmitShortcut: onSubmitShortcut, needsAttention: activeCaseNeedsAttention }) })] }));
|
|
128
|
+
return (_jsxs("div", { ref: containerRef, className: "flex h-full min-h-0 flex-1 flex-col", children: [showTabBar ? (_jsx(FeedbackCaseTabBar, { variant: "editor", cases: cases, activeCaseId: resolvedActiveCaseId, onSelectCase: setActiveCaseId, onAddCase: onAddCase, onRemoveCase: handleRemoveCase, invalidCaseIds: needsAttention ? emptyCaseIds : [] })) : null, _jsx("div", { role: "tabpanel", id: `fivepixels-case-panel-${activeCase.id}`, "aria-labelledby": `fivepixels-case-tab-${activeCase.id}`, className: "flex min-h-0 flex-1 flex-col overflow-y-auto px-[4px] py-[4px]", children: enableElementMentions ? (_jsx("div", { id: `fivepixels-case-input-${activeCase.id}`, "data-fivepixels-case-input": activeCase.id, className: activeCaseNeedsAttention ? "fivepixels-validation-attention rounded-[8px] bg-rose-500/10" : undefined, children: _jsx(MentionComposerInput, { value: activeCase.text, mentions: activeCase.mentions ?? [], onChange: ({ message, mentions }) => onCaseChange(activeCase.id, message, mentions), placeholder: getCaseInputPlaceholder(activeCaseIndex + 1), autoFocus: autoFocus && activeCaseIndex === 0, onSubmitShortcut: onSubmitShortcut }) })) : (_jsx(CaseTextarea, { id: `fivepixels-case-input-${activeCase.id}`, autoFocus: autoFocus && activeCaseIndex === 0, value: activeCase.text, placeholder: getCaseInputPlaceholder(activeCaseIndex + 1), onChange: (text) => onCaseChange(activeCase.id, text), onSubmitShortcut: onSubmitShortcut, needsAttention: activeCaseNeedsAttention })) })] }));
|
|
110
129
|
}
|
|
111
130
|
//# sourceMappingURL=FeedbackCaseEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackCaseEditor.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseEditor.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackCaseEditor.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReportCase, ReportFeedback } from "../../../types/report.js";
|
|
2
|
+
import type { ElementMention } from "../../../types/mention.js";
|
|
2
3
|
type FeedbackCaseListProps = {
|
|
3
4
|
report: Pick<ReportFeedback, "id" | "cases" | "replies" | "author_name">;
|
|
4
5
|
cases: ReportCase[];
|
|
@@ -12,10 +13,11 @@ type FeedbackCaseListProps = {
|
|
|
12
13
|
onBeginEdit?: () => void;
|
|
13
14
|
onCancelEdit?: () => void;
|
|
14
15
|
onSaveEdit?: () => void;
|
|
15
|
-
onCaseChange?: (caseId: string, text: string) => void;
|
|
16
|
+
onCaseChange?: (caseId: string, text: string, mentions?: ElementMention[]) => void;
|
|
16
17
|
onAddCase?: () => void;
|
|
17
18
|
onRemoveCase?: (caseId: string) => void;
|
|
19
|
+
enableElementMentions?: boolean;
|
|
18
20
|
};
|
|
19
|
-
export declare function FeedbackCaseList({ report, cases, isEditing, canEdit, isSaving, errorMessage, focusedCaseId, onSelectCase, onAllTabActiveChange, onBeginEdit, onCancelEdit, onSaveEdit, onCaseChange, onAddCase, onRemoveCase, }: FeedbackCaseListProps): import("react").JSX.Element;
|
|
21
|
+
export declare function FeedbackCaseList({ report, cases, isEditing, canEdit, isSaving, errorMessage, focusedCaseId, onSelectCase, onAllTabActiveChange, onBeginEdit, onCancelEdit, onSaveEdit, onCaseChange, onAddCase, onRemoveCase, enableElementMentions, }: FeedbackCaseListProps): import("react").JSX.Element;
|
|
20
22
|
export {};
|
|
21
23
|
//# sourceMappingURL=FeedbackCaseList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackCaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackCaseList.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOzD,KAAK,qBAAqB,GAAG;IACzB,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC,CAAC;IACzE,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACnF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAyDF,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EACN,KAAK,EACL,SAAiB,EACjB,OAAe,EACf,QAAgB,EAChB,YAAiB,EACjB,aAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,qBAA6B,GAChC,EAAE,qBAAqB,+BAqHvB"}
|
|
@@ -2,6 +2,7 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
3
|
import { useReportPreferences } from "../../../providers/reportContext.js";
|
|
4
4
|
import { getCaseHandlerName } from "../../../utils/report/reportCases.js";
|
|
5
|
+
import { mentionMessageToPlainText } from "../../../utils/mention/elementMentions.js";
|
|
5
6
|
import { FeedbackCaseEditor } from "./FeedbackCaseEditor.js";
|
|
6
7
|
import { CASE_SELECTOR_ALL_TAB, CaseResolvedBadge, FeedbackCaseTabBar } from "./FeedbackCaseTabBar.js";
|
|
7
8
|
function resolveFocusedCaseId(cases, focusedCaseId) {
|
|
@@ -15,10 +16,10 @@ function AllCasesList({ report, cases, onSelectCase }) {
|
|
|
15
16
|
return (_jsx("ul", { className: "flex flex-col gap-[6px] px-[8px] py-[4px]", children: cases.map((item, index) => {
|
|
16
17
|
const isOpen = item.status === "open";
|
|
17
18
|
const handlerName = getCaseHandlerName(report, item.id);
|
|
18
|
-
return (_jsx("li", { children: _jsxs("button", { type: "button", "data-fivepixels-interactive": "", onClick: () => onSelectCase(item.id), className: "flex w-full items-start gap-[6px] rounded-[8px] px-[4px] py-[6px] text-left hover:bg-[var(--adaptive-surface-muted)]/60", children: [_jsxs("span", { className: "w-[20px] shrink-0 tabular-nums text-[12px] text-[var(--adaptive-black500)]", children: [index + 1, "."] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("span", { className: `text-[14px] leading-[1.5] text-[var(--adaptive-text-primary)] ${item.status === "resolved" ? "text-[var(--adaptive-black600)] line-through" : ""}`, children: item.text }), isOpen ? (_jsxs("p", { className: "mt-[2px] text-[11px] text-[var(--adaptive-black500)]", children: [messages.cases.assignee, ": ", handlerName ?? messages.cases.unassigned] })) : null] }), _jsx(CaseResolvedBadge, { resolved: item.status === "resolved", resolvedLabel: messages.cases.resolved, openLabel: messages.cases.open })] }) }, item.id));
|
|
19
|
+
return (_jsx("li", { children: _jsxs("button", { type: "button", "data-fivepixels-interactive": "", onClick: () => onSelectCase(item.id), className: "flex w-full items-start gap-[6px] rounded-[8px] px-[4px] py-[6px] text-left hover:bg-[var(--adaptive-surface-muted)]/60", children: [_jsxs("span", { className: "w-[20px] shrink-0 tabular-nums text-[12px] text-[var(--adaptive-black500)]", children: [index + 1, "."] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("span", { className: `text-[14px] leading-[1.5] text-[var(--adaptive-text-primary)] ${item.status === "resolved" ? "text-[var(--adaptive-black600)] line-through" : ""}`, children: mentionMessageToPlainText(item.text, item.mentions) }), isOpen ? (_jsxs("p", { className: "mt-[2px] text-[11px] text-[var(--adaptive-black500)]", children: [messages.cases.assignee, ": ", handlerName ?? messages.cases.unassigned] })) : null] }), _jsx(CaseResolvedBadge, { resolved: item.status === "resolved", resolvedLabel: messages.cases.resolved, openLabel: messages.cases.open })] }) }, item.id));
|
|
19
20
|
}) }));
|
|
20
21
|
}
|
|
21
|
-
export function FeedbackCaseList({ report, cases, isEditing = false, canEdit = false, isSaving = false, errorMessage = "", focusedCaseId = null, onSelectCase, onAllTabActiveChange, onBeginEdit, onCancelEdit, onSaveEdit, onCaseChange, onAddCase, onRemoveCase, }) {
|
|
22
|
+
export function FeedbackCaseList({ report, cases, isEditing = false, canEdit = false, isSaving = false, errorMessage = "", focusedCaseId = null, onSelectCase, onAllTabActiveChange, onBeginEdit, onCancelEdit, onSaveEdit, onCaseChange, onAddCase, onRemoveCase, enableElementMentions = false, }) {
|
|
22
23
|
const { messages } = useReportPreferences();
|
|
23
24
|
const resolvedFocusedCaseId = resolveFocusedCaseId(cases, focusedCaseId);
|
|
24
25
|
const [selectorTab, setSelectorTab] = useState(() => resolvedFocusedCaseId ?? CASE_SELECTOR_ALL_TAB);
|
|
@@ -41,8 +42,8 @@ export function FeedbackCaseList({ report, cases, isEditing = false, canEdit = f
|
|
|
41
42
|
onSelectCase?.(caseId);
|
|
42
43
|
};
|
|
43
44
|
if (isEditing && onCaseChange && onAddCase && onRemoveCase) {
|
|
44
|
-
return (_jsxs("div", { className: "flex flex-col gap-[8px]", children: [errorMessage ? (_jsx("p", { role: "alert", className: "rounded-[8px] border border-rose-200 bg-rose-50 px-[8px] py-[4px] text-[12px] leading-[1.4] text-rose-700", children: errorMessage })) : null, _jsx(FeedbackCaseEditor, { cases: cases, onCaseChange: onCaseChange, onAddCase: onAddCase, onRemoveCase: onRemoveCase, onSubmitShortcut: onSaveEdit }), _jsxs("div", { className: "flex justify-end gap-[6px] px-[8px] pb-[4px]", children: [_jsx("button", { type: "button", "data-fivepixels-interactive": "", disabled: isSaving, onClick: onCancelEdit, className: "rounded-full border border-[var(--adaptive-border-subtle)] px-[10px] py-[4px] text-[12px] font-semibold text-[var(--adaptive-text-primary)] disabled:opacity-50", children: messages.common.cancel }), _jsx("button", { type: "button", "data-fivepixels-interactive": "", disabled: isSaving, onClick: onSaveEdit, className: "rounded-full bg-[var(--adaptive-blue500)] px-[10px] py-[4px] text-[12px] font-semibold text-white disabled:opacity-50", children: isSaving ? messages.cases.saving : messages.cases.save })] })] }));
|
|
45
|
+
return (_jsxs("div", { className: "flex flex-col gap-[8px]", children: [errorMessage ? (_jsx("p", { role: "alert", className: "rounded-[8px] border border-rose-200 bg-rose-50 px-[8px] py-[4px] text-[12px] leading-[1.4] text-rose-700", children: errorMessage })) : null, _jsx(FeedbackCaseEditor, { cases: cases, onCaseChange: onCaseChange, onAddCase: onAddCase, onRemoveCase: onRemoveCase, onSubmitShortcut: onSaveEdit, enableElementMentions: enableElementMentions }), _jsxs("div", { className: "flex justify-end gap-[6px] px-[8px] pb-[4px]", children: [_jsx("button", { type: "button", "data-fivepixels-interactive": "", disabled: isSaving, onClick: onCancelEdit, className: "rounded-full border border-[var(--adaptive-border-subtle)] px-[10px] py-[4px] text-[12px] font-semibold text-[var(--adaptive-text-primary)] disabled:opacity-50", children: messages.common.cancel }), _jsx("button", { type: "button", "data-fivepixels-interactive": "", disabled: isSaving, onClick: onSaveEdit, className: "rounded-full bg-[var(--adaptive-blue500)] px-[10px] py-[4px] text-[12px] font-semibold text-white disabled:opacity-50", children: isSaving ? messages.cases.saving : messages.cases.save })] })] }));
|
|
45
46
|
}
|
|
46
|
-
return (_jsxs("div", { className: "flex flex-col gap-[8px]", children: [_jsx(FeedbackCaseTabBar, { variant: "selector", cases: cases, activeTab: selectorTab, onSelectAll: handleSelectAll, onSelectCase: handleSelectCase, showResolvedStatus: true, idPrefix: "fivepixels-thread-case", trailing: canEdit && onBeginEdit ? (_jsx("button", { type: "button", "data-fivepixels-interactive": "", onClick: onBeginEdit, className: "rounded-full border border-[var(--adaptive-border-subtle)] px-[8px] py-[4px] text-[11px] font-semibold whitespace-nowrap text-[var(--adaptive-blue500)] hover:bg-[var(--adaptive-blue100)]", children: messages.cases.edit })) : null }), isAllTabActive ? (_jsx(AllCasesList, { report: report, cases: cases, onSelectCase: handleSelectCase })) : focusedCase ? (_jsxs("div", { className: "flex flex-col gap-[4px] px-[16px]", children: [_jsx("p", { className: `text-[16px] font-semibold leading-[1.5] text-[var(--adaptive-text-primary)] ${focusedCase.status === "resolved" ? "text-[var(--adaptive-black600)] line-through" : ""}`, children: focusedCase.text }), focusedCase.status === "open" ? (_jsxs("p", { className: "text-[14px] text-[var(--adaptive-black500)]", children: [messages.cases.assignee, ": ", getCaseHandlerName(report, focusedCase.id) ?? messages.cases.unassigned] })) : null] })) : null] }));
|
|
47
|
+
return (_jsxs("div", { className: "flex flex-col gap-[8px]", children: [_jsx(FeedbackCaseTabBar, { variant: "selector", cases: cases, activeTab: selectorTab, onSelectAll: handleSelectAll, onSelectCase: handleSelectCase, showResolvedStatus: true, idPrefix: "fivepixels-thread-case", trailing: canEdit && onBeginEdit ? (_jsx("button", { type: "button", "data-fivepixels-interactive": "", onClick: onBeginEdit, className: "rounded-full border border-[var(--adaptive-border-subtle)] px-[8px] py-[4px] text-[11px] font-semibold whitespace-nowrap text-[var(--adaptive-blue500)] hover:bg-[var(--adaptive-blue100)]", children: messages.cases.edit })) : null }), isAllTabActive ? (_jsx(AllCasesList, { report: report, cases: cases, onSelectCase: handleSelectCase })) : focusedCase ? (_jsxs("div", { className: "flex flex-col gap-[4px] px-[16px]", children: [_jsx("p", { className: `text-[16px] font-semibold leading-[1.5] text-[var(--adaptive-text-primary)] ${focusedCase.status === "resolved" ? "text-[var(--adaptive-black600)] line-through" : ""}`, children: mentionMessageToPlainText(focusedCase.text, focusedCase.mentions) }), focusedCase.status === "open" ? (_jsxs("p", { className: "text-[14px] text-[var(--adaptive-black500)]", children: [messages.cases.assignee, ": ", getCaseHandlerName(report, focusedCase.id) ?? messages.cases.unassigned] })) : null] })) : null] }));
|
|
47
48
|
}
|
|
48
49
|
//# sourceMappingURL=FeedbackCaseList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackCaseList.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackCaseList.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCaseList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackCategorySelector.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCategorySelector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FeedbackCategorySelector.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCategorySelector.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,KAAK,6BAA6B,GAAG;IACjC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,cAAc,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAsB,EAAE,YAAgB,EAAE,EAAE,6BAA6B,+BAyD9I"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef } from "react";
|
|
3
|
+
import { HoverTooltip } from "../../../components/ui/HoverTooltip.js";
|
|
3
4
|
import { FEEDBACK_CATEGORIES } from "../../../constants/feedbackCategory.js";
|
|
4
5
|
export function FeedbackCategorySelector({ value, onChange, messages, needsAttention = false, attentionKey = 0 }) {
|
|
5
6
|
const containerRef = useRef(null);
|
|
@@ -11,15 +12,17 @@ export function FeedbackCategorySelector({ value, onChange, messages, needsAtten
|
|
|
11
12
|
containerRef.current?.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
12
13
|
firstButtonRef.current?.focus();
|
|
13
14
|
}, [needsAttention, attentionKey]);
|
|
14
|
-
return (_jsx("div", { ref: containerRef, className:
|
|
15
|
+
return (_jsx("div", { ref: containerRef, className:
|
|
16
|
+
// "flex flex-wrap items-center gap-[4px] border-t border-[var(--adaptive-tintOpacity100)] p-[4px] transition-[box-shadow,background-color] duration-200 " +
|
|
17
|
+
"flex flex-wrap items-center gap-[4px] p-[4px] transition-[box-shadow,background-color] duration-200 " +
|
|
15
18
|
(needsAttention ? "fivepixels-validation-attention rounded-b-[12px] bg-rose-500/10" : ""), role: "group", "aria-label": messages.composer.categoryAriaLabel, "aria-invalid": needsAttention || undefined, children: FEEDBACK_CATEGORIES.map((category, index) => {
|
|
16
19
|
const selected = value === category;
|
|
17
|
-
return (_jsx("button", { ref: index === 0 ? firstButtonRef : undefined, type: "button", "data-fivepixels-interactive": "", "aria-pressed": selected, onClick: () => onChange(category), className: "rounded-[8px] border px-[12px] py-[4px] text-[12px] font-semibold " +
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
return (_jsx(HoverTooltip, { label: messages.composer.categoryTooltip[category], multiline: true, children: _jsx("button", { ref: index === 0 ? firstButtonRef : undefined, type: "button", "data-fivepixels-interactive": "", "aria-pressed": selected, "aria-label": `${messages.composer.categoryOption[category]}. ${messages.composer.categoryTooltip[category]}`, onClick: () => onChange(category), className: "rounded-[8px] border px-[12px] py-[4px] text-[12px] font-semibold " +
|
|
21
|
+
(selected
|
|
22
|
+
? "border-[var(--adaptive-border-subtle)] bg-[var(--adaptive-surface-inverse)] text-[var(--adaptive-text-inverse)]"
|
|
23
|
+
: needsAttention
|
|
24
|
+
? "border-rose-400 text-[var(--adaptive-text-primary)]"
|
|
25
|
+
: "border-[var(--adaptive-border-subtle)] text-[var(--adaptive-text-muted)]"), children: messages.composer.categoryOption[category] }) }, category));
|
|
23
26
|
}) }));
|
|
24
27
|
}
|
|
25
28
|
//# sourceMappingURL=FeedbackCategorySelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackCategorySelector.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCategorySelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAyB,MAAM,iCAAiC,CAAC;AAW7F,MAAM,UAAU,wBAAwB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,KAAK,EAAE,YAAY,GAAG,CAAC,EAAiC;IAC3I,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,cAAc,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/E,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;IAEnC,OAAO,CACH,cACI,GAAG,EAAE,YAAY,EACjB,SAAS,
|
|
1
|
+
{"version":3,"file":"FeedbackCategorySelector.js","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackCategorySelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAyB,MAAM,iCAAiC,CAAC;AAW7F,MAAM,UAAU,wBAAwB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,KAAK,EAAE,YAAY,GAAG,CAAC,EAAiC;IAC3I,MAAM,YAAY,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,cAAc,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/E,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;IAEnC,OAAO,CACH,cACI,GAAG,EAAE,YAAY,EACjB,SAAS;QACL,4JAA4J;QAC5J,sGAAsG;YACtG,CAAC,cAAc,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,EAAE,CAAC,EAE7F,IAAI,EAAC,OAAO,gBACA,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,kBACjC,cAAc,IAAI,SAAS,YAExC,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,KAAK,KAAK,QAAQ,CAAC;YAEpC,OAAO,CACH,KAAC,YAAY,IAET,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,EAClD,SAAS,kBAET,iBACI,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAC7C,IAAI,EAAC,QAAQ,iCACe,EAAE,kBAChB,QAAQ,gBACV,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAC3G,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACjC,SAAS,EACL,oEAAoE;wBACpE,CAAC,QAAQ;4BACL,CAAC,CAAC,iHAAiH;4BACnH,CAAC,CAAC,cAAc;gCACd,CAAC,CAAC,qDAAqD;gCACvD,CAAC,CAAC,0EAA0E,CAAC,YAGtF,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,GACtC,IArBJ,QAAQ,CAsBF,CAClB,CAAC;QACN,CAAC,CAAC,GACA,CACT,CAAC;AACN,CAAC"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import type { ReportField, ReportFieldValues, ReportCase } from "../../../types/report.js";
|
|
2
2
|
import type { ReportAuthor } from "../../../types/report.js";
|
|
3
3
|
import type { FeedbackCategory } from "../../../constants/feedbackCategory.js";
|
|
4
|
+
import type { ElementMention } from "../../../types/mention.js";
|
|
5
|
+
export type ComposerMode = "deny" | "recheck" | "checkout" | "question";
|
|
4
6
|
type FeedbackComposerProps = {
|
|
5
7
|
message?: string;
|
|
6
8
|
onMessageChange?: (value: string) => void;
|
|
9
|
+
mentions?: ElementMention[];
|
|
10
|
+
onMentionsChange?: (mentions: ElementMention[]) => void;
|
|
11
|
+
enableElementMentions?: boolean;
|
|
7
12
|
cases?: ReportCase[];
|
|
8
|
-
onCaseChange?: (caseId: string, text: string) => void;
|
|
13
|
+
onCaseChange?: (caseId: string, text: string, mentions?: ElementMention[]) => void;
|
|
9
14
|
onAddCase?: () => void;
|
|
10
15
|
onRemoveCase?: (caseId: string) => void;
|
|
11
16
|
authorName: string;
|
|
@@ -30,6 +35,8 @@ type FeedbackComposerProps = {
|
|
|
30
35
|
askQuestionChecked?: boolean;
|
|
31
36
|
onAskQuestionChange?: (checked: boolean) => void;
|
|
32
37
|
askQuestionForced?: boolean;
|
|
38
|
+
composerMode?: ComposerMode | null;
|
|
39
|
+
onCancelComposerMode?: () => void;
|
|
33
40
|
hideAuthorSelector?: boolean;
|
|
34
41
|
lockedAuthorName?: string;
|
|
35
42
|
onFooterWarningChange?: (message: string | null) => void;
|
|
@@ -37,7 +44,10 @@ type FeedbackComposerProps = {
|
|
|
37
44
|
hideActions?: boolean;
|
|
38
45
|
hidePrimarySubmitAction?: boolean;
|
|
39
46
|
categoryPrompt?: string;
|
|
47
|
+
showCaseTabBar?: boolean;
|
|
48
|
+
activeCaseId?: string | null;
|
|
49
|
+
onActiveCaseIdChange?: (caseId: string) => void;
|
|
40
50
|
};
|
|
41
|
-
export declare function FeedbackComposer({ message, onMessageChange, cases, onCaseChange, onAddCase, onRemoveCase, authorName, onAuthorNameChange, authors, fields: _fields, fieldValues: _fieldValues, onFieldChange: _onFieldChange, category, onCategoryChange, showCategory, showTags: _showTags, onSubmit, isSubmitting, showGitHubIssueOnCreate, onGitHubIssueSubmit, isGitHubIssueSubmitting, placeholder, autoFocus, errorMessage, showAskQuestionToggle, askQuestionChecked, onAskQuestionChange, askQuestionForced, hideAuthorSelector, lockedAuthorName, onFooterWarningChange, hideEditor, hideActions, hidePrimarySubmitAction, categoryPrompt, }: FeedbackComposerProps): import("react").JSX.Element;
|
|
51
|
+
export declare function FeedbackComposer({ message, onMessageChange, mentions, onMentionsChange, enableElementMentions, cases, onCaseChange, onAddCase, onRemoveCase, authorName, onAuthorNameChange, authors, fields: _fields, fieldValues: _fieldValues, onFieldChange: _onFieldChange, category, onCategoryChange, showCategory, showTags: _showTags, onSubmit, isSubmitting, showGitHubIssueOnCreate, onGitHubIssueSubmit, isGitHubIssueSubmitting, placeholder, autoFocus, errorMessage, showAskQuestionToggle, askQuestionChecked, onAskQuestionChange, askQuestionForced, composerMode, onCancelComposerMode, hideAuthorSelector, lockedAuthorName, onFooterWarningChange, hideEditor, hideActions, hidePrimarySubmitAction, categoryPrompt, showCaseTabBar, activeCaseId, onActiveCaseIdChange, }: FeedbackComposerProps): import("react").JSX.Element;
|
|
42
52
|
export {};
|
|
43
53
|
//# sourceMappingURL=FeedbackComposer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackComposer.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackComposer.d.ts","sourceRoot":"","sources":["../../../../src/components/panel/feedback/FeedbackComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAUxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAExE,KAAK,qBAAqB,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACxD,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACnF,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,IAAI,CAAC;IAC9D,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAyNF,wBAAgB,gBAAgB,CAAC,EAC7B,OAAY,EACZ,eAAe,EACf,QAAa,EACb,gBAAgB,EAChB,qBAA6B,EAC7B,KAAK,EACL,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,OAAO,EACP,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,cAAc,EAC7B,QAAe,EACf,gBAAgB,EAChB,YAAoB,EACpB,QAAQ,EAAE,SAAiB,EAC3B,QAAQ,EACR,YAAoB,EACpB,uBAA+B,EAC/B,mBAAmB,EACnB,uBAA+B,EAC/B,WAAW,EACX,SAAiB,EACjB,YAAiB,EACjB,qBAA6B,EAC7B,kBAA0B,EAC1B,mBAAmB,EACnB,iBAAyB,EACzB,YAAmB,EACnB,oBAAoB,EACpB,kBAA0B,EAC1B,gBAAgB,EAChB,qBAAqB,EACrB,UAAkB,EAClB,WAAmB,EACnB,uBAA+B,EAC/B,cAAc,EACd,cAAqB,EACrB,YAAY,EACZ,oBAAoB,GACvB,EAAE,qBAAqB,+BAuSvB"}
|