@parhelia/core 0.3.12831 → 0.3.12832
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/dist/editor/agent-changes/agentChangeTargets.d.ts +58 -0
- package/dist/editor/agent-changes/agentChangeTargets.js +174 -0
- package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -0
- package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +57 -0
- package/dist/editor/agent-changes/agentChangeTextHighlight.js +109 -0
- package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -0
- package/dist/editor/ai/activityRowNavigation.d.ts +28 -0
- package/dist/editor/ai/activityRowNavigation.js +53 -0
- package/dist/editor/ai/activityRowNavigation.js.map +1 -0
- package/dist/editor/ai/terminal/activeReasoningModel.d.ts +9 -0
- package/dist/editor/ai/terminal/activeReasoningModel.js +20 -0
- package/dist/editor/ai/terminal/activeReasoningModel.js.map +1 -0
- package/dist/editor/ai/terminal/agentDurations.d.ts +27 -0
- package/dist/editor/ai/terminal/agentDurations.js +89 -0
- package/dist/editor/ai/terminal/agentDurations.js.map +1 -0
- package/dist/editor/ai/terminal/agentTurnTiming.d.ts +35 -0
- package/dist/editor/ai/terminal/agentTurnTiming.js +128 -0
- package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.d.ts +9 -0
- package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js +75 -0
- package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js.map +1 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.d.ts +10 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.js +12 -0
- package/dist/editor/ai/terminal/components/AgentProfileRecovery.js.map +1 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.d.ts +3 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +47 -0
- package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.d.ts +15 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +63 -0
- package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -0
- package/dist/editor/ai/terminal/components/toolCallResultJson.d.ts +1 -0
- package/dist/editor/ai/terminal/components/toolCallResultJson.js +46 -0
- package/dist/editor/ai/terminal/components/toolCallResultJson.js.map +1 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.d.ts +8 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.js +54 -0
- package/dist/editor/ai/terminal/reasoningEffortLevels.js.map +1 -0
- package/dist/editor/ai/terminal/requestUsage.d.ts +3 -0
- package/dist/editor/ai/terminal/requestUsage.js +22 -0
- package/dist/editor/ai/terminal/requestUsage.js.map +1 -0
- package/dist/editor/ai/terminal/useAgentProviderWait.d.ts +18 -0
- package/dist/editor/ai/terminal/useAgentProviderWait.js +23 -0
- package/dist/editor/ai/terminal/useAgentProviderWait.js.map +1 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.d.ts +5 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.js +10 -0
- package/dist/editor/ai/terminal/useAgentReasoningEffortState.js.map +1 -0
- package/dist/editor/bridge/bridgeKeys.d.ts +5 -0
- package/dist/editor/bridge/bridgeKeys.js +8 -0
- package/dist/editor/bridge/bridgeKeys.js.map +1 -0
- package/dist/editor/client/SessionsDialog.d.ts +2 -0
- package/dist/editor/client/SessionsDialog.js +27 -0
- package/dist/editor/client/SessionsDialog.js.map +1 -0
- package/dist/editor/client/agentLoadItemPolicy.d.ts +22 -0
- package/dist/editor/client/agentLoadItemPolicy.js +60 -0
- package/dist/editor/client/agentLoadItemPolicy.js.map +1 -0
- package/dist/editor/client/localUserEditActivity.d.ts +3 -0
- package/dist/editor/client/localUserEditActivity.js +12 -0
- package/dist/editor/client/localUserEditActivity.js.map +1 -0
- package/dist/editor/commands/mediaCommands.d.ts +5 -0
- package/dist/editor/commands/mediaCommands.js +59 -0
- package/dist/editor/commands/mediaCommands.js.map +1 -0
- package/dist/editor/componentVisualMode.d.ts +14 -0
- package/dist/editor/componentVisualMode.js +43 -0
- package/dist/editor/componentVisualMode.js.map +1 -0
- package/dist/editor/field-types/FieldHistoryBoundary.d.ts +7 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js +19 -0
- package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +18 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js +57 -0
- package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -0
- package/dist/editor/itemContextMenuGroups.d.ts +16 -0
- package/dist/editor/itemContextMenuGroups.js +48 -0
- package/dist/editor/itemContextMenuGroups.js.map +1 -0
- package/dist/editor/media-selector/UploadMediaFileDialog.d.ts +5 -0
- package/dist/editor/media-selector/UploadMediaFileDialog.js +14 -0
- package/dist/editor/media-selector/UploadMediaFileDialog.js.map +1 -0
- package/dist/editor/menubar/OpenPublishedPageButton.d.ts +1 -0
- package/dist/editor/menubar/OpenPublishedPageButton.js +22 -0
- package/dist/editor/menubar/OpenPublishedPageButton.js.map +1 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +20 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +31 -0
- package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +33 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +290 -0
- package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -0
- package/dist/editor/page-editor-chrome/diffRulerSegments.d.ts +18 -0
- package/dist/editor/page-editor-chrome/diffRulerSegments.js +37 -0
- package/dist/editor/page-editor-chrome/diffRulerSegments.js.map +1 -0
- package/dist/editor/page-viewer/PreviewModeNotice.d.ts +7 -0
- package/dist/editor/page-viewer/PreviewModeNotice.js +19 -0
- package/dist/editor/page-viewer/PreviewModeNotice.js.map +1 -0
- package/dist/editor/page-viewer/previewEditAttempt.d.ts +31 -0
- package/dist/editor/page-viewer/previewEditAttempt.js +68 -0
- package/dist/editor/page-viewer/previewEditAttempt.js.map +1 -0
- package/dist/editor/services/migrationService.d.ts +31 -0
- package/dist/editor/services/migrationService.js +22 -0
- package/dist/editor/services/migrationService.js.map +1 -0
- package/dist/editor/services/publicSiteService.d.ts +40 -0
- package/dist/editor/services/publicSiteService.js +5 -0
- package/dist/editor/services/publicSiteService.js.map +1 -0
- package/dist/editor/settings/MigrationJournalCard.d.ts +12 -0
- package/dist/editor/settings/MigrationJournalCard.js +114 -0
- package/dist/editor/settings/MigrationJournalCard.js.map +1 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.d.ts +8 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.js +113 -0
- package/dist/editor/settings/panels/PublicSiteEntryDialog.js.map +1 -0
- package/dist/editor/settings/panels/PublicSitesPanel.d.ts +1 -0
- package/dist/editor/settings/panels/PublicSitesPanel.js +153 -0
- package/dist/editor/settings/panels/PublicSitesPanel.js.map +1 -0
- package/dist/editor/settings/panels/publicSiteHelpers.d.ts +6 -0
- package/dist/editor/settings/panels/publicSiteHelpers.js +30 -0
- package/dist/editor/settings/panels/publicSiteHelpers.js.map +1 -0
- package/dist/editor/sidebar/OperationDetailsContent.d.ts +14 -0
- package/dist/editor/sidebar/OperationDetailsContent.js +521 -0
- package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -0
- package/dist/editor/sidebar/liveComponentThumbnails.d.ts +53 -0
- package/dist/editor/sidebar/liveComponentThumbnails.js +204 -0
- package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -0
- package/dist/editor/ui/PublishReadinessSummary.d.ts +12 -0
- package/dist/editor/ui/PublishReadinessSummary.js +34 -0
- package/dist/editor/ui/PublishReadinessSummary.js.map +1 -0
- package/dist/editor/ui/publishReadiness.d.ts +98 -0
- package/dist/editor/ui/publishReadiness.js +307 -0
- package/dist/editor/ui/publishReadiness.js.map +1 -0
- package/dist/editor/ui/usePublishingItem.d.ts +8 -0
- package/dist/editor/ui/usePublishingItem.js +47 -0
- package/dist/editor/ui/usePublishingItem.js.map +1 -0
- package/dist/editor/utils/linkDisplay.d.ts +12 -0
- package/dist/editor/utils/linkDisplay.js +23 -0
- package/dist/editor/utils/linkDisplay.js.map +1 -0
- package/dist/editor/validation/ValidationIssuesPopover.d.ts +39 -0
- package/dist/editor/validation/ValidationIssuesPopover.js +51 -0
- package/dist/editor/validation/ValidationIssuesPopover.js.map +1 -0
- package/dist/editor/validation/navigateToValidationIssue.d.ts +13 -0
- package/dist/editor/validation/navigateToValidationIssue.js +43 -0
- package/dist/editor/validation/navigateToValidationIssue.js.map +1 -0
- package/dist/editor/validation/validationFixAgent.d.ts +26 -0
- package/dist/editor/validation/validationFixAgent.js +124 -0
- package/dist/editor/validation/validationFixAgent.js.map +1 -0
- package/dist/editor/validation/validationSeverity.d.ts +15 -0
- package/dist/editor/validation/validationSeverity.js +47 -0
- package/dist/editor/validation/validationSeverity.js.map +1 -0
- package/dist/lib/viewportClip.d.ts +18 -0
- package/dist/lib/viewportClip.js +22 -0
- package/dist/lib/viewportClip.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/task-board/components/ProjectProgressIndicator.d.ts +8 -0
- package/dist/task-board/components/ProjectProgressIndicator.js +17 -0
- package/dist/task-board/components/ProjectProgressIndicator.js.map +1 -0
- package/dist/task-board/components/commentAuthor.d.ts +14 -0
- package/dist/task-board/components/commentAuthor.js +25 -0
- package/dist/task-board/components/commentAuthor.js.map +1 -0
- package/dist/task-board/utils/projectDashboardModel.d.ts +68 -0
- package/dist/task-board/utils/projectDashboardModel.js +355 -0
- package/dist/task-board/utils/projectDashboardModel.js.map +1 -0
- package/dist/task-board/views/ProjectDashboardView.d.ts +28 -0
- package/dist/task-board/views/ProjectDashboardView.js +316 -0
- package/dist/task-board/views/ProjectDashboardView.js.map +1 -0
- package/dist/tour/TourInputBoundary.d.ts +6 -0
- package/dist/tour/TourInputBoundary.js +82 -0
- package/dist/tour/TourInputBoundary.js.map +1 -0
- package/dist/tour/sandbox-tour.js +5 -3
- package/dist/tour/sandbox-tour.js.map +1 -1
- package/dist/tour/tour-utils.d.ts +6 -0
- package/dist/tour/tour-utils.js +10 -0
- package/dist/tour/tour-utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logical groups of the content-tree item context menu, in display order.
|
|
3
|
+
* Entries are command ids (see `allItemCommands` in config.tsx) plus the
|
|
4
|
+
* synthetic "insert" entry the menu factory prepends. Commands that are not
|
|
5
|
+
* listed here (e.g. those registered by extension packages such as
|
|
6
|
+
* localization) are collected in a trailing group.
|
|
7
|
+
*/
|
|
8
|
+
export const ITEM_CONTEXT_MENU_GROUPS = [
|
|
9
|
+
// Structure of the item itself
|
|
10
|
+
["insert", "renameItem", "deleteItem"],
|
|
11
|
+
// Copying and moving
|
|
12
|
+
["duplicateItem", "copyItems", "cloneItems", "uncloneItem", "moveItems"],
|
|
13
|
+
// Data exchange and template maintenance
|
|
14
|
+
["exportItem", "importItems", "addStandardValues", "changeTemplate"],
|
|
15
|
+
// Publishing and review
|
|
16
|
+
["publishItem", "publishRestrictions", "reviewItems"],
|
|
17
|
+
];
|
|
18
|
+
function groupIndexOf(id, groups) {
|
|
19
|
+
const index = groups.findIndex((group) => group.includes(id));
|
|
20
|
+
return index === -1 ? groups.length : index;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Orders `menuItems` by their group and inserts a separator between
|
|
24
|
+
* consecutive non-empty groups. Existing separators in the input are dropped
|
|
25
|
+
* so the result never contains leading, trailing or doubled dividers. The
|
|
26
|
+
* relative order of items within a group is preserved.
|
|
27
|
+
*/
|
|
28
|
+
export function withItemContextMenuGroupSeparators(menuItems, groups = ITEM_CONTEXT_MENU_GROUPS) {
|
|
29
|
+
const ranked = menuItems
|
|
30
|
+
.filter((item) => !item.separator)
|
|
31
|
+
.map((item, position) => ({
|
|
32
|
+
item,
|
|
33
|
+
position,
|
|
34
|
+
group: groupIndexOf(item.id, groups),
|
|
35
|
+
}))
|
|
36
|
+
.sort((a, b) => a.group - b.group || a.position - b.position);
|
|
37
|
+
const result = [];
|
|
38
|
+
let previousGroup;
|
|
39
|
+
for (const { item, group } of ranked) {
|
|
40
|
+
if (previousGroup !== undefined && group !== previousGroup) {
|
|
41
|
+
result.push({ id: `sep-group-${group}`, separator: true });
|
|
42
|
+
}
|
|
43
|
+
result.push(item);
|
|
44
|
+
previousGroup = group;
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=itemContextMenuGroups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"itemContextMenuGroups.js","sourceRoot":"","sources":["../../src/editor/itemContextMenuGroups.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAmC;IACtE,+BAA+B;IAC/B,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC;IACtC,qBAAqB;IACrB,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC;IACxE,yCAAyC;IACzC,CAAC,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;IACpE,wBAAwB;IACxB,CAAC,aAAa,EAAE,qBAAqB,EAAE,aAAa,CAAC;CACtD,CAAC;AAEF,SAAS,YAAY,CACnB,EAAU,EACV,MAAsC;IAEtC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kCAAkC,CAChD,SAAqB,EACrB,MAAM,GAAmC,wBAAwB;IAEjE,MAAM,MAAM,GAAG,SAAS;SACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxB,IAAI;QACJ,QAAQ;QACR,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC;KACrC,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,aAAiC,CAAC;IACtC,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QACrC,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DialogProps } from "../client/editContext";
|
|
2
|
+
export type UploadMediaFileDialogProps = {
|
|
3
|
+
parentPath: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function UploadMediaFileDialog({ parentPath, onClose, }: UploadMediaFileDialogProps & DialogProps<File>): import("react").JSX.Element;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Upload } from "lucide-react";
|
|
3
|
+
import { Dialog, DialogContent } from "../../components/ui/dialog";
|
|
4
|
+
import { StyledDialogTitle } from "../../components/ui/styled-dialog-title";
|
|
5
|
+
import { Button } from "../../components/ui/button";
|
|
6
|
+
import DialogButtons from "../ui/DialogButtons";
|
|
7
|
+
export function UploadMediaFileDialog({ parentPath, onClose, }) {
|
|
8
|
+
return (_jsx(Dialog, { open: true, onOpenChange: (open) => !open && onClose(null), children: _jsxs(DialogContent, { children: [_jsx(StyledDialogTitle, { icon: _jsx(Upload, { strokeWidth: 1 }), title: "Upload file", subtitle: `Upload to ${parentPath}` }), _jsx("div", { className: "px-8 py-6", children: _jsx("input", { type: "file", "aria-label": "File to upload", onChange: (event) => {
|
|
9
|
+
const file = event.target.files?.[0];
|
|
10
|
+
if (file)
|
|
11
|
+
onClose(file);
|
|
12
|
+
} }) }), _jsx(DialogButtons, { children: _jsx(Button, { variant: "outline", onClick: () => onClose(null), children: "Cancel" }) })] }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=UploadMediaFileDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadMediaFileDialog.js","sourceRoot":"","sources":["../../../src/editor/media-selector/UploadMediaFileDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAIhD,MAAM,UAAU,qBAAqB,CAAC,EACpC,UAAU,EACV,OAAO,GACwC;IAC/C,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,QAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,YACzD,MAAC,aAAa,eACZ,KAAC,iBAAiB,IAChB,IAAI,EAAE,KAAC,MAAM,IAAC,WAAW,EAAE,CAAC,GAAI,EAChC,KAAK,EAAC,aAAa,EACnB,QAAQ,EAAE,aAAa,UAAU,EAAE,GACnC,EACF,cAAK,SAAS,EAAC,WAAW,YACxB,gBACE,IAAI,EAAC,MAAM,gBACA,gBAAgB,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;4BACrC,IAAI,IAAI;gCAAE,OAAO,CAAC,IAAI,CAAC,CAAC;wBAC1B,CAAC,GACD,GACE,EACN,KAAC,aAAa,cACZ,KAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,uBAE7C,GACK,IACF,GACT,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function OpenPublishedPageButton(): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ExternalLink } from "lucide-react";
|
|
3
|
+
import { Button } from "../../components/ui/button";
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip";
|
|
5
|
+
import { useEditContext } from "../client/editContext";
|
|
6
|
+
import { usePageResolvedSignal } from "../page-viewer/pageViewContext";
|
|
7
|
+
import { publicSiteSourcePhrases } from "../settings/panels/publicSiteHelpers";
|
|
8
|
+
export function OpenPublishedPageButton() {
|
|
9
|
+
const editContext = useEditContext();
|
|
10
|
+
usePageResolvedSignal();
|
|
11
|
+
if (!editContext ||
|
|
12
|
+
editContext.workspaceId !== "editor" ||
|
|
13
|
+
editContext.isMobile)
|
|
14
|
+
return null;
|
|
15
|
+
const context = editContext.getActiveSlotContext()?.primaryPageViewContext;
|
|
16
|
+
const url = context?.publishedUrl;
|
|
17
|
+
if (!url)
|
|
18
|
+
return null;
|
|
19
|
+
const source = context.publicSite?.source;
|
|
20
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { size: "iconSm", variant: "ghost", asChild: true, children: _jsx("a", { href: url, target: "_blank", rel: "noreferrer noopener", "aria-label": "Open published page", "data-testid": "open-published-page", "data-published-url": url, "data-public-site-source": source, children: _jsx(ExternalLink, { strokeWidth: 1, className: "h-4 w-4" }) }) }) }), _jsxs(TooltipContent, { children: [_jsxs("div", { children: ["Open published page", source ? ` — via ${publicSiteSourcePhrases[source] ?? source}` : ""] }), _jsx("div", { className: "mt-1 max-w-md font-mono text-xs break-all", dir: "ltr", children: url })] })] }));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=OpenPublishedPageButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenPublishedPageButton.js","sourceRoot":"","sources":["../../../src/editor/menubar/OpenPublishedPageButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,MAAM,UAAU,uBAAuB;IACrC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,qBAAqB,EAAE,CAAC;IACxB,IACE,CAAC,WAAW;QACZ,WAAW,CAAC,WAAW,KAAK,QAAQ;QACpC,WAAW,CAAC,QAAQ;QAEpB,OAAO,IAAI,CAAC;IACd,MAAM,OAAO,GAAG,WAAW,CAAC,oBAAoB,EAAE,EAAE,sBAAsB,CAAC;IAC3E,MAAM,GAAG,GAAG,OAAO,EAAE,YAAY,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;IAC1C,OAAO,CACL,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,kBAC3C,YACE,IAAI,EAAE,GAAG,EACT,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,gBACd,qBAAqB,iBACpB,qBAAqB,wBACb,GAAG,6BACE,MAAM,YAE/B,KAAC,YAAY,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,GAAG,GAClD,GACG,GACM,EACjB,MAAC,cAAc,eACb,iDAEG,MAAM,CAAC,CAAC,CAAC,UAAU,uBAAuB,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAChE,EACN,cAAK,SAAS,EAAC,2CAA2C,EAAC,GAAG,EAAC,KAAK,YACjE,GAAG,GACA,IACS,IACT,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PageViewContext } from "../page-viewer/pageViewContext";
|
|
2
|
+
import type { VersionDiffVariant } from "../version-diff/versionDiffGeometryKeys";
|
|
3
|
+
import { type DiffHighlightRuler } from "./DiffHighlightOverlay";
|
|
4
|
+
export declare const AGENT_CHANGE_HIGHLIGHT_TEST_ID = "agent-change-highlight";
|
|
5
|
+
export declare const AGENT_CHANGE_RULER_TEST_ID = "agent-change-ruler";
|
|
6
|
+
export declare function getAgentChangeScope(variant: VersionDiffVariant): string;
|
|
7
|
+
type AgentChangeHighlightingsProps = {
|
|
8
|
+
pageViewContext: PageViewContext;
|
|
9
|
+
variant?: VersionDiffVariant;
|
|
10
|
+
/** Overview ruler geometry (minimap only). */
|
|
11
|
+
ruler?: Omit<DiffHighlightRuler, "testId">;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Marks everything the highlighted agent changed on the rendered page: added
|
|
15
|
+
* text ranges inside edited fields and boxes around components it introduced.
|
|
16
|
+
* Driven by editContext.agentChangeHighlighting (the terminal's "Changes" tray
|
|
17
|
+
* checkbox) and rendered through the same overlay as the compare highlights.
|
|
18
|
+
*/
|
|
19
|
+
export declare function AgentChangeHighlightings({ pageViewContext, variant, ruler, }: AgentChangeHighlightingsProps): import("react").JSX.Element;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useEditContext } from "../client/editContext";
|
|
4
|
+
import { resolveAgentChangeTargets } from "../agent-changes/agentChangeTargets";
|
|
5
|
+
import { DiffHighlightOverlay, } from "./DiffHighlightOverlay";
|
|
6
|
+
export const AGENT_CHANGE_HIGHLIGHT_TEST_ID = "agent-change-highlight";
|
|
7
|
+
export const AGENT_CHANGE_RULER_TEST_ID = "agent-change-ruler";
|
|
8
|
+
export function getAgentChangeScope(variant) {
|
|
9
|
+
return `agent-changes:${variant}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Marks everything the highlighted agent changed on the rendered page: added
|
|
13
|
+
* text ranges inside edited fields and boxes around components it introduced.
|
|
14
|
+
* Driven by editContext.agentChangeHighlighting (the terminal's "Changes" tray
|
|
15
|
+
* checkbox) and rendered through the same overlay as the compare highlights.
|
|
16
|
+
*/
|
|
17
|
+
export function AgentChangeHighlightings({ pageViewContext, variant = "default", ruler, }) {
|
|
18
|
+
const editContext = useEditContext();
|
|
19
|
+
const highlighting = editContext?.agentChangeHighlighting;
|
|
20
|
+
const operations = highlighting?.operations;
|
|
21
|
+
const pageItem = pageViewContext.page?.item.descriptor;
|
|
22
|
+
const bridgeStructure = pageViewContext.bridgeStructure;
|
|
23
|
+
const resolved = useMemo(() => {
|
|
24
|
+
if (!operations || !pageItem) {
|
|
25
|
+
return { fieldTargets: [], componentTargets: [] };
|
|
26
|
+
}
|
|
27
|
+
return resolveAgentChangeTargets({ operations, bridgeStructure, pageItem });
|
|
28
|
+
}, [operations, bridgeStructure, pageItem]);
|
|
29
|
+
return (_jsx(DiffHighlightOverlay, { pageViewContext: pageViewContext, variant: variant, scope: getAgentChangeScope(variant), targets: resolved.fieldTargets, componentTargets: resolved.componentTargets, testId: AGENT_CHANGE_HIGHLIGHT_TEST_ID, ruler: ruler ? { ...ruler, testId: AGENT_CHANGE_RULER_TEST_ID } : undefined }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=AgentChangeHighlightings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentChangeHighlightings.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/AgentChangeHighlightings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,EACL,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CAAC,OAA2B;IAC7D,OAAO,iBAAiB,OAAO,EAAE,CAAC;AACpC,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,EACvC,eAAe,EACf,OAAO,GAAG,SAAS,EACnB,KAAK,GACyB;IAC9B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,WAAW,EAAE,uBAAuB,CAAC;IAC1D,MAAM,UAAU,GAAG,YAAY,EAAE,UAAU,CAAC;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;IACvD,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;IAExD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;QACpD,CAAC;QACD,OAAO,yBAAyB,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL,KAAC,oBAAoB,IACnB,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EACnC,OAAO,EAAE,QAAQ,CAAC,YAAY,EAC9B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAC3C,MAAM,EAAE,8BAA8B,EACtC,KAAK,EACH,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,SAAS,GAEtE,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { PageViewContext } from "../page-viewer/pageViewContext";
|
|
2
|
+
import { type ComponentDiffTarget, type DiffTarget } from "../version-diff/versionDiffTargets";
|
|
3
|
+
import { type VersionDiffVariant } from "../version-diff/versionDiffGeometryKeys";
|
|
4
|
+
/**
|
|
5
|
+
* An overview ruler next to the highlights: a vertical bar with one dash per
|
|
6
|
+
* run of changes, so edits are visible even where the thumbnail is too small
|
|
7
|
+
* to show the highlight itself. Positioned in overlay-layer pixels.
|
|
8
|
+
*/
|
|
9
|
+
export type DiffHighlightRuler = {
|
|
10
|
+
left: number;
|
|
11
|
+
width: number;
|
|
12
|
+
testId?: string;
|
|
13
|
+
};
|
|
14
|
+
export type DiffHighlightOverlayProps = {
|
|
15
|
+
pageViewContext: PageViewContext;
|
|
16
|
+
variant?: VersionDiffVariant;
|
|
17
|
+
/**
|
|
18
|
+
* Unique per feature AND variant (e.g. "version-diff:minimap"): it names
|
|
19
|
+
* this instance's entry in the bridge geometry union and prefixes its text
|
|
20
|
+
* range keys, so several overlays can coexist on one pageViewContext.
|
|
21
|
+
*/
|
|
22
|
+
scope: string;
|
|
23
|
+
targets: DiffTarget[];
|
|
24
|
+
componentTargets: ComponentDiffTarget[];
|
|
25
|
+
testId?: string;
|
|
26
|
+
ruler?: DiffHighlightRuler;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Publishes diff targets to the bridge geometry union and paints the measured
|
|
30
|
+
* rects: shared by the version-diff (compare) highlights and the agent-change
|
|
31
|
+
* highlights, which only differ in how they resolve their targets.
|
|
32
|
+
*/
|
|
33
|
+
export declare function DiffHighlightOverlay({ pageViewContext, variant, scope, targets, componentTargets, testId, ruler, }: DiffHighlightOverlayProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useRef } from "react";
|
|
3
|
+
import { fieldKey, } from "../version-diff/versionDiffTargets";
|
|
4
|
+
import { versionDiffHighlightClasses } from "../version-diff/versionDiffHighlightStyles";
|
|
5
|
+
import { getDiffBridgeSource, getDiffInnerRangeKey, getDiffTextRangeKey, } from "../version-diff/versionDiffGeometryKeys";
|
|
6
|
+
import { bridgeRectToOverlayRect, measureBridgeFieldRect, measureBridgeTextRangeRects, rectListEquals, } from "./overlay/geometry";
|
|
7
|
+
import { useOverlayMeasurement } from "./overlay/useOverlayMeasurement";
|
|
8
|
+
import { normalizeMarkerId } from "../utils";
|
|
9
|
+
import { buildDiffRulerSegments } from "./diffRulerSegments";
|
|
10
|
+
import { cn } from "../../lib/utils";
|
|
11
|
+
function measuredDiffHighlightsEqual(previous, next) {
|
|
12
|
+
if (previous.length !== next.length)
|
|
13
|
+
return false;
|
|
14
|
+
for (let i = 0; i < previous.length; i++) {
|
|
15
|
+
const previousItem = previous[i];
|
|
16
|
+
const nextItem = next[i];
|
|
17
|
+
if (previousItem.key !== nextItem.key ||
|
|
18
|
+
previousItem.className !== nextItem.className ||
|
|
19
|
+
previousItem.kind !== nextItem.kind ||
|
|
20
|
+
previousItem.tier !== nextItem.tier ||
|
|
21
|
+
!rectListEquals(previousItem.rects, nextItem.rects)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Publishes diff targets to the bridge geometry union and paints the measured
|
|
29
|
+
* rects: shared by the version-diff (compare) highlights and the agent-change
|
|
30
|
+
* highlights, which only differ in how they resolve their targets.
|
|
31
|
+
*/
|
|
32
|
+
export function DiffHighlightOverlay({ pageViewContext, variant = "default", scope, targets, componentTargets, testId = "version-diff-highlight", ruler, }) {
|
|
33
|
+
const bridgeSource = getDiffBridgeSource(scope);
|
|
34
|
+
const rangesByTargetKey = useMemo(() => new Map(targets.map((target) => [
|
|
35
|
+
fieldKey(target.descriptor),
|
|
36
|
+
target.hasDeletionOnlyChange
|
|
37
|
+
? []
|
|
38
|
+
: target.ranges.filter((range) => range.start < range.end),
|
|
39
|
+
])), [targets]);
|
|
40
|
+
const lastBridgeTextRangeSignatureRef = useRef("");
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!pageViewContext.bridgeReady) {
|
|
43
|
+
lastBridgeTextRangeSignatureRef.current = "";
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const textRanges = targets.flatMap((target) => {
|
|
47
|
+
if (target.hasDeletionOnlyChange)
|
|
48
|
+
return [];
|
|
49
|
+
const targetKey = fieldKey(target.descriptor);
|
|
50
|
+
const ranges = rangesByTargetKey.get(targetKey) || [];
|
|
51
|
+
return ranges.flatMap((range, index) => {
|
|
52
|
+
const entries = [
|
|
53
|
+
{
|
|
54
|
+
key: getDiffTextRangeKey(scope, targetKey, index),
|
|
55
|
+
fieldId: target.descriptor.fieldId,
|
|
56
|
+
item: target.descriptor.item,
|
|
57
|
+
start: range.start,
|
|
58
|
+
end: range.end,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
// Char-tier detail is invisible at minimap scale; a uniform range's
|
|
62
|
+
// inner span would just re-measure the outer rect.
|
|
63
|
+
if (variant !== "minimap" && !isUniformRange(range)) {
|
|
64
|
+
range.innerRanges.forEach(([start, end], innerIndex) => {
|
|
65
|
+
entries.push({
|
|
66
|
+
key: getDiffInnerRangeKey(scope, targetKey, index, innerIndex),
|
|
67
|
+
fieldId: target.descriptor.fieldId,
|
|
68
|
+
item: target.descriptor.item,
|
|
69
|
+
start,
|
|
70
|
+
end,
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return entries;
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
// Empty maps to "" so an initial empty set is a no-op, while going from
|
|
78
|
+
// ranges back to empty still emits a clearing update.
|
|
79
|
+
const signature = textRanges.length > 0 ? JSON.stringify(textRanges) : "";
|
|
80
|
+
if (signature === lastBridgeTextRangeSignatureRef.current)
|
|
81
|
+
return;
|
|
82
|
+
let cancelled = false;
|
|
83
|
+
let retryTimer;
|
|
84
|
+
let retryCount = 0;
|
|
85
|
+
const publishTextRanges = () => {
|
|
86
|
+
if (cancelled)
|
|
87
|
+
return;
|
|
88
|
+
// Contribute to the shared geometry union so our ranges merge with
|
|
89
|
+
// comments/suggestions/locks instead of clobbering them, and so highlights
|
|
90
|
+
// clear when the diff goes away. Child effects can run before the frame has
|
|
91
|
+
// installed its bridge request function, and a reconnect can briefly reject
|
|
92
|
+
// commands. Only remember a signature after the bridge accepted it; otherwise
|
|
93
|
+
// an unchanged diff would never be published for that iframe.
|
|
94
|
+
const accepted = pageViewContext.requestBridgeGeometry?.({
|
|
95
|
+
source: bridgeSource,
|
|
96
|
+
textRanges,
|
|
97
|
+
});
|
|
98
|
+
if (accepted) {
|
|
99
|
+
lastBridgeTextRangeSignatureRef.current = signature;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const delay = Math.min(50 * 2 ** retryCount, 500);
|
|
103
|
+
retryCount += 1;
|
|
104
|
+
retryTimer = window.setTimeout(publishTextRanges, delay);
|
|
105
|
+
};
|
|
106
|
+
publishTextRanges();
|
|
107
|
+
return () => {
|
|
108
|
+
cancelled = true;
|
|
109
|
+
if (retryTimer !== undefined)
|
|
110
|
+
window.clearTimeout(retryTimer);
|
|
111
|
+
};
|
|
112
|
+
}, [
|
|
113
|
+
pageViewContext,
|
|
114
|
+
pageViewContext.bridgeReady,
|
|
115
|
+
rangesByTargetKey,
|
|
116
|
+
targets,
|
|
117
|
+
variant,
|
|
118
|
+
scope,
|
|
119
|
+
bridgeSource,
|
|
120
|
+
]);
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
return () => {
|
|
123
|
+
// Drop this instance's entry from the geometry union on unmount so a
|
|
124
|
+
// departing overlay doesn't leave stale ranges behind.
|
|
125
|
+
pageViewContext.requestBridgeGeometry?.({
|
|
126
|
+
source: bridgeSource,
|
|
127
|
+
textRanges: [],
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
}, [pageViewContext, bridgeSource]);
|
|
131
|
+
const highlights = useOverlayMeasurement((metrics) => {
|
|
132
|
+
const bridgeGeometry = pageViewContext.bridgeGeometry;
|
|
133
|
+
const bridgeStructure = pageViewContext.bridgeStructure;
|
|
134
|
+
if (!bridgeGeometry)
|
|
135
|
+
return [];
|
|
136
|
+
const isMini = variant === "minimap";
|
|
137
|
+
const measured = [];
|
|
138
|
+
for (const target of componentTargets) {
|
|
139
|
+
const overlayRect = measureBridgeComponentDiffRect(bridgeGeometry, target, metrics);
|
|
140
|
+
if (!overlayRect)
|
|
141
|
+
continue;
|
|
142
|
+
measured.push({
|
|
143
|
+
key: `component-${target.id}`,
|
|
144
|
+
className: target.kind === "removed"
|
|
145
|
+
? isMini
|
|
146
|
+
? versionDiffHighlightClasses.componentRemovedMini
|
|
147
|
+
: versionDiffHighlightClasses.componentRemoved
|
|
148
|
+
: isMini
|
|
149
|
+
? versionDiffHighlightClasses.componentMini
|
|
150
|
+
: versionDiffHighlightClasses.component,
|
|
151
|
+
kind: target.kind,
|
|
152
|
+
rects: [overlayRect],
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
for (const target of targets) {
|
|
156
|
+
const targetKey = fieldKey(target.descriptor);
|
|
157
|
+
const strongClass = target.rangeKind === "removed"
|
|
158
|
+
? isMini
|
|
159
|
+
? versionDiffHighlightClasses.removedTextMini
|
|
160
|
+
: versionDiffHighlightClasses.removedText
|
|
161
|
+
: isMini
|
|
162
|
+
? versionDiffHighlightClasses.textMini
|
|
163
|
+
: versionDiffHighlightClasses.text;
|
|
164
|
+
const softClass = target.rangeKind === "removed"
|
|
165
|
+
? versionDiffHighlightClasses.removedTextSoft
|
|
166
|
+
: versionDiffHighlightClasses.textSoft;
|
|
167
|
+
if (target.hasDeletionOnlyChange) {
|
|
168
|
+
const rect = measureBridgeFieldRect(bridgeGeometry, bridgeStructure, target.descriptor, metrics);
|
|
169
|
+
if (!rect)
|
|
170
|
+
continue;
|
|
171
|
+
measured.push({
|
|
172
|
+
key: targetKey,
|
|
173
|
+
className: isMini
|
|
174
|
+
? versionDiffHighlightClasses.deletionOnlyMini
|
|
175
|
+
: versionDiffHighlightClasses.deletionOnly,
|
|
176
|
+
kind: target.rangeKind,
|
|
177
|
+
rects: [rect],
|
|
178
|
+
});
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const wordRects = [];
|
|
182
|
+
const softRects = [];
|
|
183
|
+
const charRects = [];
|
|
184
|
+
const ranges = rangesByTargetKey.get(targetKey) || [];
|
|
185
|
+
ranges.forEach((range, index) => {
|
|
186
|
+
const rangeRects = measureBridgeTextRangeRects(bridgeGeometry, getDiffTextRangeKey(scope, targetKey, index), metrics);
|
|
187
|
+
if (rangeRects.length === 0) {
|
|
188
|
+
const fallbackRect = measureBridgeFieldRect(bridgeGeometry, bridgeStructure, target.descriptor, metrics);
|
|
189
|
+
if (fallbackRect)
|
|
190
|
+
wordRects.push(fallbackRect);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (isMini || isUniformRange(range)) {
|
|
194
|
+
wordRects.push(...rangeRects);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
softRects.push(...rangeRects);
|
|
198
|
+
range.innerRanges.forEach((_, innerIndex) => {
|
|
199
|
+
charRects.push(...measureBridgeTextRangeRects(bridgeGeometry, getDiffInnerRangeKey(scope, targetKey, index, innerIndex), metrics));
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
if (softRects.length > 0) {
|
|
203
|
+
measured.push({
|
|
204
|
+
key: `${targetKey}:soft`,
|
|
205
|
+
className: softClass,
|
|
206
|
+
kind: target.rangeKind,
|
|
207
|
+
tier: "word",
|
|
208
|
+
rects: softRects,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (charRects.length > 0) {
|
|
212
|
+
measured.push({
|
|
213
|
+
key: `${targetKey}:char`,
|
|
214
|
+
className: strongClass,
|
|
215
|
+
kind: target.rangeKind,
|
|
216
|
+
tier: "char",
|
|
217
|
+
rects: charRects,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (wordRects.length > 0) {
|
|
221
|
+
measured.push({
|
|
222
|
+
key: targetKey,
|
|
223
|
+
className: strongClass,
|
|
224
|
+
kind: target.rangeKind,
|
|
225
|
+
tier: "word",
|
|
226
|
+
rects: wordRects,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return measured;
|
|
231
|
+
}, [
|
|
232
|
+
pageViewContext.bridgeGeometry,
|
|
233
|
+
pageViewContext.bridgeStructure,
|
|
234
|
+
targets,
|
|
235
|
+
componentTargets,
|
|
236
|
+
rangesByTargetKey,
|
|
237
|
+
variant,
|
|
238
|
+
scope,
|
|
239
|
+
], {
|
|
240
|
+
initialValue: [],
|
|
241
|
+
equals: measuredDiffHighlightsEqual,
|
|
242
|
+
interests: ["viewport", "layout", "text", "adornment-data"],
|
|
243
|
+
});
|
|
244
|
+
const rulerSegments = useMemo(() => (ruler ? buildDiffRulerSegments(highlights) : []), [ruler, highlights]);
|
|
245
|
+
if (highlights.length === 0 && !ruler)
|
|
246
|
+
return null;
|
|
247
|
+
return (_jsxs(_Fragment, { children: [ruler && (_jsx("div", { className: "bg-neutral-grey-10 pointer-events-none absolute top-0 bottom-0", "data-testid": ruler.testId ?? `${testId}-ruler`, style: { left: ruler.left, width: ruler.width }, children: rulerSegments.map((segment, index) => (_jsx("div", { className: cn("absolute inset-x-0 rounded-full", segment.kind === "removed"
|
|
248
|
+
? "bg-feedback-red"
|
|
249
|
+
: "bg-feedback-green"), "data-testid": `${ruler.testId ?? `${testId}-ruler`}-dash`, "data-diff-kind": segment.kind, style: { top: segment.top, height: segment.height } }, index))) })), highlights.flatMap((highlight) => highlight.rects.map((rect, index) => (_jsx("div", { className: highlight.className, "data-testid": testId, "data-diff-kind": highlight.kind, "data-diff-tier": highlight.tier, style: {
|
|
250
|
+
top: rect.y,
|
|
251
|
+
left: rect.x,
|
|
252
|
+
width: Math.max(rect.width, 2),
|
|
253
|
+
height: Math.max(rect.height, 2),
|
|
254
|
+
} }, `${highlight.key}-${index}`))))] }));
|
|
255
|
+
}
|
|
256
|
+
function isUniformRange(range) {
|
|
257
|
+
return (range.innerRanges.length === 1 &&
|
|
258
|
+
range.innerRanges[0][0] === range.start &&
|
|
259
|
+
range.innerRanges[0][1] === range.end);
|
|
260
|
+
}
|
|
261
|
+
function measureBridgeComponentDiffRect(geometry, target, metrics) {
|
|
262
|
+
if (!geometry)
|
|
263
|
+
return null;
|
|
264
|
+
const candidateIds = [
|
|
265
|
+
target.visualId,
|
|
266
|
+
target.id,
|
|
267
|
+
target.dataItemId,
|
|
268
|
+
target.dataLayoutId,
|
|
269
|
+
target.dataTypeId,
|
|
270
|
+
target.providerRenderingItemId,
|
|
271
|
+
]
|
|
272
|
+
.filter((id) => !!id)
|
|
273
|
+
.map(normalizeMarkerId);
|
|
274
|
+
const geometryTarget = geometry.targets.find((candidate) => {
|
|
275
|
+
if (candidate.kind !== "component")
|
|
276
|
+
return false;
|
|
277
|
+
const candidateKeys = [
|
|
278
|
+
candidate.componentId,
|
|
279
|
+
candidate.key,
|
|
280
|
+
candidate.elementKey,
|
|
281
|
+
]
|
|
282
|
+
.filter((id) => !!id)
|
|
283
|
+
.map(normalizeMarkerId);
|
|
284
|
+
return candidateKeys.some((key) => candidateIds.includes(key));
|
|
285
|
+
});
|
|
286
|
+
if (!geometryTarget?.rect)
|
|
287
|
+
return null;
|
|
288
|
+
return bridgeRectToOverlayRect(geometry, geometryTarget.rect, metrics);
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=DiffHighlightOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffHighlightOverlay.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/DiffHighlightOverlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DiffRangeKind } from "../version-diff/versionDiffTargets";
|
|
2
|
+
import type { OverlayRect } from "./overlay/geometry";
|
|
3
|
+
export type DiffRulerSegment = {
|
|
4
|
+
top: number;
|
|
5
|
+
height: number;
|
|
6
|
+
kind: "added" | "removed";
|
|
7
|
+
};
|
|
8
|
+
export declare const DIFF_RULER_MIN_SEGMENT_HEIGHT = 3;
|
|
9
|
+
/**
|
|
10
|
+
* Collapses highlight rects into the vertical dashes of an overview ruler:
|
|
11
|
+
* one dash per run of changes, so a paragraph of edits reads as a single
|
|
12
|
+
* mark instead of a stack of overlapping slivers. Removals keep their own
|
|
13
|
+
* colour and are merged separately from additions.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildDiffRulerSegments(highlights: ReadonlyArray<{
|
|
16
|
+
kind: DiffRangeKind;
|
|
17
|
+
rects: OverlayRect[];
|
|
18
|
+
}>): DiffRulerSegment[];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export const DIFF_RULER_MIN_SEGMENT_HEIGHT = 3;
|
|
2
|
+
/**
|
|
3
|
+
* Collapses highlight rects into the vertical dashes of an overview ruler:
|
|
4
|
+
* one dash per run of changes, so a paragraph of edits reads as a single
|
|
5
|
+
* mark instead of a stack of overlapping slivers. Removals keep their own
|
|
6
|
+
* colour and are merged separately from additions.
|
|
7
|
+
*/
|
|
8
|
+
export function buildDiffRulerSegments(highlights) {
|
|
9
|
+
const byKind = {
|
|
10
|
+
added: [],
|
|
11
|
+
removed: [],
|
|
12
|
+
};
|
|
13
|
+
for (const highlight of highlights) {
|
|
14
|
+
const kind = highlight.kind === "removed" ? "removed" : "added";
|
|
15
|
+
for (const rect of highlight.rects) {
|
|
16
|
+
const top = Math.round(rect.y);
|
|
17
|
+
const height = Math.max(Math.round(rect.height), DIFF_RULER_MIN_SEGMENT_HEIGHT);
|
|
18
|
+
byKind[kind].push({ top, height, kind });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const merged = [];
|
|
22
|
+
for (const kind of ["added", "removed"]) {
|
|
23
|
+
const sorted = byKind[kind].sort((a, b) => a.top - b.top);
|
|
24
|
+
for (const segment of sorted) {
|
|
25
|
+
const last = merged[merged.length - 1];
|
|
26
|
+
if (last &&
|
|
27
|
+
last.kind === kind &&
|
|
28
|
+
segment.top <= last.top + last.height + 1) {
|
|
29
|
+
last.height = Math.max(last.height, segment.top + segment.height - last.top);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
merged.push({ ...segment });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return merged;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=diffRulerSegments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffRulerSegments.js","sourceRoot":"","sources":["../../../src/editor/page-editor-chrome/diffRulerSegments.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAwE;IAExE,MAAM,MAAM,GAAyD;QACnE,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAChE,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EACvB,6BAA6B,CAC9B,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,CAAU,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1D,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvC,IACE,IAAI;gBACJ,IAAI,CAAC,IAAI,KAAK,IAAI;gBAClB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EACzC,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,MAAM,EACX,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACxC,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const PREVIEW_MODE_NOTICE_MODE_CHANGE_REASON = "editor-form-notice";
|
|
2
|
+
/**
|
|
3
|
+
* Sits at the top of the editor form while the editor previews. Every field
|
|
4
|
+
* below it is disabled, and nothing else in the form says why; this names the
|
|
5
|
+
* cause and offers the way back to editing without a trip to the toolbar.
|
|
6
|
+
*/
|
|
7
|
+
export declare function PreviewModeNotice(): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EyeIcon } from "lucide-react";
|
|
3
|
+
import { Button } from "../../components/ui/button";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
export const PREVIEW_MODE_NOTICE_MODE_CHANGE_REASON = "editor-form-notice";
|
|
6
|
+
/**
|
|
7
|
+
* Sits at the top of the editor form while the editor previews. Every field
|
|
8
|
+
* below it is disabled, and nothing else in the form says why; this names the
|
|
9
|
+
* cause and offers the way back to editing without a trip to the toolbar.
|
|
10
|
+
*/
|
|
11
|
+
export function PreviewModeNotice() {
|
|
12
|
+
const editContext = useEditContext();
|
|
13
|
+
if (!editContext || editContext.mode !== "preview")
|
|
14
|
+
return null;
|
|
15
|
+
return (_jsxs("div", { role: "status", "data-testid": "preview-mode-notice", className: "bg-feedback-blue-light border-border-default text-neutral-grey-100 flex shrink-0 items-start gap-2 border-b px-3 py-2 text-xs", children: [_jsx(EyeIcon, { className: "text-feedback-blue h-4 w-4 shrink-0", strokeWidth: 1.5, "aria-hidden": "true" }), _jsxs("div", { className: "flex min-w-0 flex-wrap items-baseline gap-x-2 gap-y-0.5", children: [_jsx("span", { className: "whitespace-nowrap", children: "Preview mode is read-only." }), _jsx(Button, { variant: "link", size: "xs", className: "h-auto p-0 text-xs", "data-testid": "preview-mode-notice-switch", onClick: () => void editContext.changeMode("edit", {
|
|
16
|
+
reason: PREVIEW_MODE_NOTICE_MODE_CHANGE_REASON,
|
|
17
|
+
}), children: "Switch to edit mode" })] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=PreviewModeNotice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewModeNotice.js","sourceRoot":"","sources":["../../../src/editor/page-viewer/PreviewModeNotice.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,sCAAsC,GAAG,oBAAoB,CAAC;AAE3E;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEhE,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,iBACD,qBAAqB,EACjC,SAAS,EAAC,+HAA+H,aAEzI,KAAC,OAAO,IACN,SAAS,EAAC,qCAAqC,EAC/C,WAAW,EAAE,GAAG,iBACJ,MAAM,GAClB,EACF,eAAK,SAAS,EAAC,yDAAyD,aACtE,eAAM,SAAS,EAAC,mBAAmB,2CAAkC,EACrE,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,oBAAoB,iBAClB,4BAA4B,EACxC,OAAO,EAAE,GAAG,EAAE,CACZ,KAAK,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE;4BAClC,MAAM,EAAE,sCAAsC;yBAC/C,CAAC,oCAIG,IACL,IACF,CACP,CAAC;AACJ,CAAC"}
|