@parhelia/core 0.3.12827 → 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.
Files changed (171) hide show
  1. package/dist/editor/agent-changes/agentChangeTargets.d.ts +58 -0
  2. package/dist/editor/agent-changes/agentChangeTargets.js +174 -0
  3. package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -0
  4. package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +57 -0
  5. package/dist/editor/agent-changes/agentChangeTextHighlight.js +109 -0
  6. package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -0
  7. package/dist/editor/ai/activityRowNavigation.d.ts +28 -0
  8. package/dist/editor/ai/activityRowNavigation.js +53 -0
  9. package/dist/editor/ai/activityRowNavigation.js.map +1 -0
  10. package/dist/editor/ai/terminal/activeReasoningModel.d.ts +9 -0
  11. package/dist/editor/ai/terminal/activeReasoningModel.js +20 -0
  12. package/dist/editor/ai/terminal/activeReasoningModel.js.map +1 -0
  13. package/dist/editor/ai/terminal/agentDurations.d.ts +27 -0
  14. package/dist/editor/ai/terminal/agentDurations.js +89 -0
  15. package/dist/editor/ai/terminal/agentDurations.js.map +1 -0
  16. package/dist/editor/ai/terminal/agentTurnTiming.d.ts +35 -0
  17. package/dist/editor/ai/terminal/agentTurnTiming.js +128 -0
  18. package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -0
  19. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.d.ts +9 -0
  20. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js +75 -0
  21. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js.map +1 -0
  22. package/dist/editor/ai/terminal/components/AgentProfileRecovery.d.ts +10 -0
  23. package/dist/editor/ai/terminal/components/AgentProfileRecovery.js +12 -0
  24. package/dist/editor/ai/terminal/components/AgentProfileRecovery.js.map +1 -0
  25. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.d.ts +3 -0
  26. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +47 -0
  27. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -0
  28. package/dist/editor/ai/terminal/components/ResponseTurnDuration.d.ts +15 -0
  29. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +63 -0
  30. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -0
  31. package/dist/editor/ai/terminal/components/toolCallResultJson.d.ts +1 -0
  32. package/dist/editor/ai/terminal/components/toolCallResultJson.js +46 -0
  33. package/dist/editor/ai/terminal/components/toolCallResultJson.js.map +1 -0
  34. package/dist/editor/ai/terminal/reasoningEffortLevels.d.ts +8 -0
  35. package/dist/editor/ai/terminal/reasoningEffortLevels.js +54 -0
  36. package/dist/editor/ai/terminal/reasoningEffortLevels.js.map +1 -0
  37. package/dist/editor/ai/terminal/requestUsage.d.ts +3 -0
  38. package/dist/editor/ai/terminal/requestUsage.js +22 -0
  39. package/dist/editor/ai/terminal/requestUsage.js.map +1 -0
  40. package/dist/editor/ai/terminal/useAgentProviderWait.d.ts +18 -0
  41. package/dist/editor/ai/terminal/useAgentProviderWait.js +23 -0
  42. package/dist/editor/ai/terminal/useAgentProviderWait.js.map +1 -0
  43. package/dist/editor/ai/terminal/useAgentReasoningEffortState.d.ts +5 -0
  44. package/dist/editor/ai/terminal/useAgentReasoningEffortState.js +10 -0
  45. package/dist/editor/ai/terminal/useAgentReasoningEffortState.js.map +1 -0
  46. package/dist/editor/bridge/bridgeKeys.d.ts +5 -0
  47. package/dist/editor/bridge/bridgeKeys.js +8 -0
  48. package/dist/editor/bridge/bridgeKeys.js.map +1 -0
  49. package/dist/editor/client/SessionsDialog.d.ts +2 -0
  50. package/dist/editor/client/SessionsDialog.js +27 -0
  51. package/dist/editor/client/SessionsDialog.js.map +1 -0
  52. package/dist/editor/client/agentLoadItemPolicy.d.ts +22 -0
  53. package/dist/editor/client/agentLoadItemPolicy.js +60 -0
  54. package/dist/editor/client/agentLoadItemPolicy.js.map +1 -0
  55. package/dist/editor/client/localUserEditActivity.d.ts +3 -0
  56. package/dist/editor/client/localUserEditActivity.js +12 -0
  57. package/dist/editor/client/localUserEditActivity.js.map +1 -0
  58. package/dist/editor/commands/mediaCommands.d.ts +5 -0
  59. package/dist/editor/commands/mediaCommands.js +59 -0
  60. package/dist/editor/commands/mediaCommands.js.map +1 -0
  61. package/dist/editor/componentVisualMode.d.ts +14 -0
  62. package/dist/editor/componentVisualMode.js +43 -0
  63. package/dist/editor/componentVisualMode.js.map +1 -0
  64. package/dist/editor/field-types/FieldHistoryBoundary.d.ts +7 -0
  65. package/dist/editor/field-types/FieldHistoryBoundary.js +19 -0
  66. package/dist/editor/field-types/FieldHistoryBoundary.js.map +1 -0
  67. package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +18 -0
  68. package/dist/editor/field-types/richtext/utils/changeHighlight.js +57 -0
  69. package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -0
  70. package/dist/editor/itemContextMenuGroups.d.ts +16 -0
  71. package/dist/editor/itemContextMenuGroups.js +48 -0
  72. package/dist/editor/itemContextMenuGroups.js.map +1 -0
  73. package/dist/editor/media-selector/UploadMediaFileDialog.d.ts +5 -0
  74. package/dist/editor/media-selector/UploadMediaFileDialog.js +14 -0
  75. package/dist/editor/media-selector/UploadMediaFileDialog.js.map +1 -0
  76. package/dist/editor/menubar/OpenPublishedPageButton.d.ts +1 -0
  77. package/dist/editor/menubar/OpenPublishedPageButton.js +22 -0
  78. package/dist/editor/menubar/OpenPublishedPageButton.js.map +1 -0
  79. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +20 -0
  80. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +31 -0
  81. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -0
  82. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +33 -0
  83. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +290 -0
  84. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -0
  85. package/dist/editor/page-editor-chrome/diffRulerSegments.d.ts +18 -0
  86. package/dist/editor/page-editor-chrome/diffRulerSegments.js +37 -0
  87. package/dist/editor/page-editor-chrome/diffRulerSegments.js.map +1 -0
  88. package/dist/editor/page-viewer/PreviewModeNotice.d.ts +7 -0
  89. package/dist/editor/page-viewer/PreviewModeNotice.js +19 -0
  90. package/dist/editor/page-viewer/PreviewModeNotice.js.map +1 -0
  91. package/dist/editor/page-viewer/previewEditAttempt.d.ts +31 -0
  92. package/dist/editor/page-viewer/previewEditAttempt.js +68 -0
  93. package/dist/editor/page-viewer/previewEditAttempt.js.map +1 -0
  94. package/dist/editor/services/migrationService.d.ts +31 -0
  95. package/dist/editor/services/migrationService.js +22 -0
  96. package/dist/editor/services/migrationService.js.map +1 -0
  97. package/dist/editor/services/publicSiteService.d.ts +40 -0
  98. package/dist/editor/services/publicSiteService.js +5 -0
  99. package/dist/editor/services/publicSiteService.js.map +1 -0
  100. package/dist/editor/settings/MigrationJournalCard.d.ts +12 -0
  101. package/dist/editor/settings/MigrationJournalCard.js +114 -0
  102. package/dist/editor/settings/MigrationJournalCard.js.map +1 -0
  103. package/dist/editor/settings/panels/PublicSiteEntryDialog.d.ts +8 -0
  104. package/dist/editor/settings/panels/PublicSiteEntryDialog.js +113 -0
  105. package/dist/editor/settings/panels/PublicSiteEntryDialog.js.map +1 -0
  106. package/dist/editor/settings/panels/PublicSitesPanel.d.ts +1 -0
  107. package/dist/editor/settings/panels/PublicSitesPanel.js +153 -0
  108. package/dist/editor/settings/panels/PublicSitesPanel.js.map +1 -0
  109. package/dist/editor/settings/panels/publicSiteHelpers.d.ts +6 -0
  110. package/dist/editor/settings/panels/publicSiteHelpers.js +30 -0
  111. package/dist/editor/settings/panels/publicSiteHelpers.js.map +1 -0
  112. package/dist/editor/sidebar/OperationDetailsContent.d.ts +14 -0
  113. package/dist/editor/sidebar/OperationDetailsContent.js +521 -0
  114. package/dist/editor/sidebar/OperationDetailsContent.js.map +1 -0
  115. package/dist/editor/sidebar/liveComponentThumbnails.d.ts +53 -0
  116. package/dist/editor/sidebar/liveComponentThumbnails.js +204 -0
  117. package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -0
  118. package/dist/editor/ui/PublishReadinessSummary.d.ts +12 -0
  119. package/dist/editor/ui/PublishReadinessSummary.js +34 -0
  120. package/dist/editor/ui/PublishReadinessSummary.js.map +1 -0
  121. package/dist/editor/ui/publishReadiness.d.ts +98 -0
  122. package/dist/editor/ui/publishReadiness.js +307 -0
  123. package/dist/editor/ui/publishReadiness.js.map +1 -0
  124. package/dist/editor/ui/usePublishingItem.d.ts +8 -0
  125. package/dist/editor/ui/usePublishingItem.js +47 -0
  126. package/dist/editor/ui/usePublishingItem.js.map +1 -0
  127. package/dist/editor/utils/linkDisplay.d.ts +12 -0
  128. package/dist/editor/utils/linkDisplay.js +23 -0
  129. package/dist/editor/utils/linkDisplay.js.map +1 -0
  130. package/dist/editor/validation/ValidationIssuesPopover.d.ts +39 -0
  131. package/dist/editor/validation/ValidationIssuesPopover.js +51 -0
  132. package/dist/editor/validation/ValidationIssuesPopover.js.map +1 -0
  133. package/dist/editor/validation/navigateToValidationIssue.d.ts +13 -0
  134. package/dist/editor/validation/navigateToValidationIssue.js +43 -0
  135. package/dist/editor/validation/navigateToValidationIssue.js.map +1 -0
  136. package/dist/editor/validation/validationFixAgent.d.ts +26 -0
  137. package/dist/editor/validation/validationFixAgent.js +124 -0
  138. package/dist/editor/validation/validationFixAgent.js.map +1 -0
  139. package/dist/editor/validation/validationSeverity.d.ts +15 -0
  140. package/dist/editor/validation/validationSeverity.js +47 -0
  141. package/dist/editor/validation/validationSeverity.js.map +1 -0
  142. package/dist/lib/viewportClip.d.ts +18 -0
  143. package/dist/lib/viewportClip.js +22 -0
  144. package/dist/lib/viewportClip.js.map +1 -0
  145. package/dist/revision.d.ts +2 -2
  146. package/dist/revision.js +2 -2
  147. package/dist/task-board/components/ProjectProgressIndicator.d.ts +8 -0
  148. package/dist/task-board/components/ProjectProgressIndicator.js +17 -0
  149. package/dist/task-board/components/ProjectProgressIndicator.js.map +1 -0
  150. package/dist/task-board/components/commentAuthor.d.ts +14 -0
  151. package/dist/task-board/components/commentAuthor.js +25 -0
  152. package/dist/task-board/components/commentAuthor.js.map +1 -0
  153. package/dist/task-board/utils/projectDashboardModel.d.ts +68 -0
  154. package/dist/task-board/utils/projectDashboardModel.js +355 -0
  155. package/dist/task-board/utils/projectDashboardModel.js.map +1 -0
  156. package/dist/task-board/views/ProjectDashboardView.d.ts +28 -0
  157. package/dist/task-board/views/ProjectDashboardView.js +316 -0
  158. package/dist/task-board/views/ProjectDashboardView.js.map +1 -0
  159. package/dist/tour/TourInputBoundary.d.ts +6 -0
  160. package/dist/tour/TourInputBoundary.js +82 -0
  161. package/dist/tour/TourInputBoundary.js.map +1 -0
  162. package/dist/tour/sandbox-tour-copy.d.ts +48 -0
  163. package/dist/tour/sandbox-tour-copy.js +48 -0
  164. package/dist/tour/sandbox-tour-copy.js.map +1 -0
  165. package/dist/tour/sandbox-tour.d.ts +3 -0
  166. package/dist/tour/sandbox-tour.js +212 -0
  167. package/dist/tour/sandbox-tour.js.map +1 -0
  168. package/dist/tour/tour-utils.d.ts +32 -0
  169. package/dist/tour/tour-utils.js +148 -0
  170. package/dist/tour/tour-utils.js.map +1 -0
  171. package/package.json +1 -1
@@ -0,0 +1,54 @@
1
+ export const REASONING_EFFORT_LADDER = [
2
+ "none",
3
+ "minimal",
4
+ "low",
5
+ "medium",
6
+ "high",
7
+ "xhigh",
8
+ "max",
9
+ ];
10
+ export function getReasoningEffortOptions(model) {
11
+ return [
12
+ {
13
+ value: "",
14
+ label: `Model default (${model?.reasoningEffort || "provider default"})`,
15
+ },
16
+ ...REASONING_EFFORT_LADDER.map((value) => ({ value, label: value })),
17
+ ];
18
+ }
19
+ export function getEffectiveReasoningEffort(selected, model) {
20
+ return model?.effectiveReasoningEfforts?.[selected];
21
+ }
22
+ export function getReasoningEffortHint(selected, model, activeModel) {
23
+ // The selected model's hint always accompanies the select (its lock is what disables it).
24
+ const selectedHint = describeModelEffort(selected, model);
25
+ if (!activeModel ||
26
+ !model ||
27
+ activeModel.id.toLowerCase() === model.id.toLowerCase()) {
28
+ return selectedHint;
29
+ }
30
+ const activeEffective = getEffectiveReasoningEffort(selected, activeModel);
31
+ const activeHint = describeModelEffort(selected, activeModel) ||
32
+ (activeEffective === undefined
33
+ ? "effort mapping unavailable"
34
+ : activeEffective
35
+ ? `sent as ${activeEffective}`
36
+ : "not sent, provider default");
37
+ return `current run uses ${activeModel.name}: ${activeHint}; ${model.name} applies from the next run${selectedHint ? ` (${selectedHint})` : ""}`;
38
+ }
39
+ function describeModelEffort(selected, model) {
40
+ const effective = getEffectiveReasoningEffort(selected, model);
41
+ const locked = model?.reasoningEffortLocked;
42
+ if (locked) {
43
+ let hint = `Locked to ${locked} by the model's Additional Parameters`;
44
+ if (effective !== undefined && effective !== locked)
45
+ hint += `, sent as ${effective || "nothing"}`;
46
+ return hint;
47
+ }
48
+ if (model?.supportedReasoningLevels?.length === 0)
49
+ return "not sent, model ignores effort";
50
+ if (effective !== undefined && effective !== selected)
51
+ return effective ? `sent as ${effective}` : "not sent, provider default";
52
+ return "";
53
+ }
54
+ //# sourceMappingURL=reasoningEffortLevels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoningEffortLevels.js","sourceRoot":"","sources":["../../../../src/editor/ai/terminal/reasoningEffortLevels.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,MAAM;IACN,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;CACG,CAAC;AAEX,MAAM,UAAU,yBAAyB,CAAC,KAAe;IACvD,OAAO;QACL;YACE,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,kBAAkB,KAAK,EAAE,eAAe,IAAI,kBAAkB,GAAG;SACzE;QACD,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAgB,EAAE,KAAe;IAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,KAAe,EACf,WAAqB;IAErB,0FAA0F;IAC1F,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1D,IACE,CAAC,WAAW;QACZ,CAAC,KAAK;QACN,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,EACvD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,eAAe,GAAG,2BAA2B,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,UAAU,GACd,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC1C,CAAC,eAAe,KAAK,SAAS;YAC5B,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,eAAe;gBACf,CAAC,CAAC,WAAW,eAAe,EAAE;gBAC9B,CAAC,CAAC,4BAA4B,CAAC,CAAC;IACtC,OAAO,oBAAoB,WAAW,CAAC,IAAI,KAAK,UAAU,KAAK,KAAK,CAAC,IAAI,6BAA6B,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,KAAe;IAC5D,MAAM,SAAS,GAAG,2BAA2B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,KAAK,EAAE,qBAAqB,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,IAAI,GAAG,aAAa,MAAM,uCAAuC,CAAC;QACtE,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM;YACjD,IAAI,IAAI,aAAa,SAAS,IAAI,SAAS,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,EAAE,wBAAwB,EAAE,MAAM,KAAK,CAAC;QAC/C,OAAO,gCAAgC,CAAC;IAC1C,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ;QACnD,OAAO,SAAS,CAAC,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC;IAC3E,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentDetails } from "../../services/agentService";
2
+ export type UsageSnapshots = Pick<AgentDetails, "requestUsage" | "conversationUsage">;
3
+ export declare function mergeUsage(previous: UsageSnapshots, incoming: UsageSnapshots): UsageSnapshots;
@@ -0,0 +1,22 @@
1
+ export function mergeUsage(previous, incoming) {
2
+ const oldRequest = previous.requestUsage;
3
+ const nextRequest = incoming.requestUsage;
4
+ const acceptRequest = nextRequest &&
5
+ (!oldRequest ||
6
+ (nextRequest.requestId === oldRequest.requestId
7
+ ? nextRequest.revision >= oldRequest.revision
8
+ : incoming.conversationUsage && previous.conversationUsage
9
+ ? incoming.conversationUsage.revision >
10
+ previous.conversationUsage.revision
11
+ : nextRequest.createdAt > oldRequest.createdAt));
12
+ const nextConversation = incoming.conversationUsage;
13
+ return {
14
+ requestUsage: acceptRequest ? nextRequest : oldRequest,
15
+ conversationUsage: nextConversation &&
16
+ (!previous.conversationUsage ||
17
+ nextConversation.revision >= previous.conversationUsage.revision)
18
+ ? nextConversation
19
+ : previous.conversationUsage,
20
+ };
21
+ }
22
+ //# sourceMappingURL=requestUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUsage.js","sourceRoot":"","sources":["../../../../src/editor/ai/terminal/requestUsage.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,UAAU,CACxB,QAAwB,EACxB,QAAwB;IAExB,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC;IACzC,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC1C,MAAM,aAAa,GACjB,WAAW;QACX,CAAC,CAAC,UAAU;YACV,CAAC,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;gBAC7C,CAAC,CAAC,WAAW,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ;gBAC7C,CAAC,CAAC,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB;oBACxD,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ;wBACnC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ;oBACrC,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IACpD,OAAO;QACL,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;QACtD,iBAAiB,EACf,gBAAgB;YAChB,CAAC,CAAC,QAAQ,CAAC,iBAAiB;gBAC1B,gBAAgB,CAAC,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACjE,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,QAAQ,CAAC,iBAAiB;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { AgentStreamMessage } from "../../services/agentService";
2
+ import type { useAgentSession } from "./useAgentSession";
3
+ type AgentSessionActions = ReturnType<typeof useAgentSession>["actions"];
4
+ /**
5
+ * Tracks whether the run is waiting on the model provider. The server emits a
6
+ * Heartbeat delta every few seconds while a provider request has produced no
7
+ * first chunk; the flag flips on at the first heartbeat and off again on the
8
+ * next real delta or status change. It never adds anything to the transcript:
9
+ * the live "Thinking" label reads it to switch its wording, and that is the
10
+ * whole surface.
11
+ */
12
+ export declare function useAgentProviderWait(input: {
13
+ actions: AgentSessionActions;
14
+ }): {
15
+ handleHeartbeatDelta: (_message: AgentStreamMessage) => void;
16
+ clearProviderWait: () => void;
17
+ };
18
+ export {};
@@ -0,0 +1,23 @@
1
+ import { useCallback } from "react";
2
+ /**
3
+ * Tracks whether the run is waiting on the model provider. The server emits a
4
+ * Heartbeat delta every few seconds while a provider request has produced no
5
+ * first chunk; the flag flips on at the first heartbeat and off again on the
6
+ * next real delta or status change. It never adds anything to the transcript:
7
+ * the live "Thinking" label reads it to switch its wording, and that is the
8
+ * whole surface.
9
+ */
10
+ export function useAgentProviderWait(input) {
11
+ const { actions } = input;
12
+ const handleHeartbeatDelta = useCallback((_message) => {
13
+ actions.patchRunState({ isWaitingForProvider: true });
14
+ }, [actions]);
15
+ const clearProviderWait = useCallback(() => {
16
+ actions.patchRunState({ isWaitingForProvider: false });
17
+ }, [actions]);
18
+ return {
19
+ handleHeartbeatDelta,
20
+ clearProviderWait,
21
+ };
22
+ }
23
+ //# sourceMappingURL=useAgentProviderWait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentProviderWait.js","sourceRoot":"","sources":["../../../../src/editor/ai/terminal/useAgentProviderWait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAMpC;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAuC;IAC1E,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1B,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,QAA4B,EAAE,EAAE;QAC/B,OAAO,CAAC,aAAa,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,OAAO,CAAC,aAAa,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO;QACL,oBAAoB;QACpB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AgentDetails } from "../../services/agentService";
2
+ export declare function useAgentReasoningEffortState(agent: Pick<AgentDetails, "id" | "reasoningEffort"> | undefined): {
3
+ reasoningEffort: string;
4
+ setReasoningEffort: import("react").Dispatch<import("react").SetStateAction<string>>;
5
+ };
@@ -0,0 +1,10 @@
1
+ import { useEffect, useState } from "react";
2
+ export function useAgentReasoningEffortState(agent) {
3
+ const [reasoningEffort, setReasoningEffort] = useState("");
4
+ useEffect(() => {
5
+ if (agent?.id)
6
+ setReasoningEffort(agent.reasoningEffort ?? "");
7
+ }, [agent?.id, agent?.reasoningEffort]);
8
+ return { reasoningEffort, setReasoningEffort };
9
+ }
10
+ //# sourceMappingURL=useAgentReasoningEffortState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentReasoningEffortState.js","sourceRoot":"","sources":["../../../../src/editor/ai/terminal/useAgentReasoningEffortState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,UAAU,4BAA4B,CAC1C,KAA+D;IAE/D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IACnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,EAAE;YAAE,kBAAkB,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;IACxC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;AACjD,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Component ids cross the bridge in whatever spelling the host used - braces,
3
+ * dashes, upper or lower case. Compare them through this normalizer.
4
+ */
5
+ export declare function normalizeBridgeKey(value: string | null | undefined): string;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Component ids cross the bridge in whatever spelling the host used - braces,
3
+ * dashes, upper or lower case. Compare them through this normalizer.
4
+ */
5
+ export function normalizeBridgeKey(value) {
6
+ return (value || "").replace(/[{}-]/g, "").toLowerCase();
7
+ }
8
+ //# sourceMappingURL=bridgeKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridgeKeys.js","sourceRoot":"","sources":["../../../src/editor/bridge/bridgeKeys.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAgC;IACjE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { DialogProps } from "./editContext";
2
+ export declare const SessionsDialog: import("react").ForwardRefExoticComponent<DialogProps<void> & import("react").RefAttributes<DialogProps<void>>>;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Dialog, DialogContent } from "../../components/ui/dialog";
3
+ import { StyledDialogTitle } from "../../components/ui/styled-dialog-title";
4
+ import { useImperativeHandle, useState, forwardRef, useEffect } from "react";
5
+ import { Users } from "lucide-react";
6
+ import { Sessions } from "../sidebar/Sessions";
7
+ export const SessionsDialog = forwardRef(function SessionsDialog(props, ref) {
8
+ const [visible, setVisible] = useState(false);
9
+ const close = () => {
10
+ setVisible(false);
11
+ props.onClose(null);
12
+ };
13
+ useImperativeHandle(ref, () => ({
14
+ onClose: (result) => {
15
+ setVisible(false);
16
+ props.onClose(result);
17
+ },
18
+ }));
19
+ useEffect(() => {
20
+ setVisible(true);
21
+ }, []);
22
+ return (_jsx(Dialog, { open: visible, onOpenChange: (open) => {
23
+ if (!open)
24
+ close();
25
+ }, children: _jsxs(DialogContent, { className: "flex max-h-[min(32rem,80vh)] max-w-2xl flex-col gap-0 overflow-hidden p-0", "data-testid": "sessions-dialog", children: [_jsx(StyledDialogTitle, { icon: _jsx(Users, { strokeWidth: 1 }), title: "User sessions" }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto p-6", children: _jsx(Sessions, { onNavigate: close }) })] }) }));
26
+ });
27
+ //# sourceMappingURL=SessionsDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionsDialog.js","sourceRoot":"","sources":["../../../src/editor/client/SessionsDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CACtC,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG;IAChC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9B,OAAO,EAAE,CAAC,MAAmB,EAAE,EAAE;YAC/B,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,CAAC,IAAa,EAAE,EAAE;YAC9B,IAAI,CAAC,IAAI;gBAAE,KAAK,EAAE,CAAC;QACrB,CAAC,YAED,MAAC,aAAa,IACZ,SAAS,EAAC,2EAA2E,iBACzE,iBAAiB,aAE7B,KAAC,iBAAiB,IAAC,IAAI,EAAE,KAAC,KAAK,IAAC,WAAW,EAAE,CAAC,GAAI,EAAE,KAAK,EAAC,eAAe,GAAG,EAC5E,cAAK,SAAS,EAAC,oCAAoC,YACjD,KAAC,QAAQ,IAAC,UAAU,EAAE,KAAK,GAAI,GAC3B,IACQ,GACT,CACV,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ItemDescriptor } from "../pageModel";
2
+ import type { FieldModificationStore } from "./fieldModificationStore";
3
+ export declare const AGENT_LOAD_ITEM_RECENT_EDIT_WINDOW_MS = 10000;
4
+ export declare const AGENT_LOAD_ITEM_TOAST_ID = "agent-load-item-deferred";
5
+ export declare const AGENT_LOAD_ITEM_TOAST_DURATION_MS = 60000;
6
+ export type AgentLoadItemDecision = "load" | "defer" | "ignore";
7
+ export interface AgentLoadItemPolicyInput {
8
+ lastAgentTerminalInteractionAt: number;
9
+ lastLocalUserEditAt: number;
10
+ dirtyUserFieldCount: number;
11
+ now: number;
12
+ isSameItem: boolean;
13
+ recentEditWindowMs?: number;
14
+ }
15
+ export declare function resolveAgentLoadItemPolicy(p: AgentLoadItemPolicyInput): AgentLoadItemDecision;
16
+ export declare function countDirtyUserFields(stores: FieldModificationStore[]): number;
17
+ export declare function isSameLoadTarget(target: ItemDescriptor, current?: ItemDescriptor): boolean;
18
+ export declare function dismissDeferredAgentLoadItemToast(): void;
19
+ export declare function showDeferredAgentLoadItemToast(item: ItemDescriptor, deps: {
20
+ getCurrentItemDescriptor: () => ItemDescriptor | undefined;
21
+ open: (item: ItemDescriptor) => void | Promise<unknown>;
22
+ }): void;
@@ -0,0 +1,60 @@
1
+ import { toast } from "sonner";
2
+ export const AGENT_LOAD_ITEM_RECENT_EDIT_WINDOW_MS = 10_000;
3
+ export const AGENT_LOAD_ITEM_TOAST_ID = "agent-load-item-deferred";
4
+ export const AGENT_LOAD_ITEM_TOAST_DURATION_MS = 60_000;
5
+ export function resolveAgentLoadItemPolicy(p) {
6
+ if (p.isSameItem)
7
+ return "ignore";
8
+ const userEditedSinceTerminal = p.lastLocalUserEditAt > p.lastAgentTerminalInteractionAt;
9
+ if (p.lastAgentTerminalInteractionAt > 0 && !userEditedSinceTerminal)
10
+ return "load";
11
+ if (p.dirtyUserFieldCount > 0)
12
+ return "defer";
13
+ if (p.lastLocalUserEditAt > 0 &&
14
+ p.now - p.lastLocalUserEditAt <
15
+ (p.recentEditWindowMs ?? AGENT_LOAD_ITEM_RECENT_EDIT_WINDOW_MS))
16
+ return "defer";
17
+ return "load";
18
+ }
19
+ export function countDirtyUserFields(stores) {
20
+ // Do not deduplicate: a clean snapshot in another slot must not hide a dirty one.
21
+ return stores.reduce((count, store) => count +
22
+ store
23
+ .getAllFields()
24
+ .filter((field) => field.isDirty && !field.modifiedBy?.ai).length, 0);
25
+ }
26
+ export function isSameLoadTarget(target, current) {
27
+ if (!current || !target.id)
28
+ return false;
29
+ const normalizeId = (id) => id.replace(/[{}]/g, "").toLowerCase();
30
+ if (normalizeId(target.id) !== normalizeId(current.id))
31
+ return false;
32
+ if (target.language &&
33
+ target.language.toLowerCase() !== current.language?.toLowerCase())
34
+ return false;
35
+ if (target.database &&
36
+ current.database &&
37
+ target.database.toLowerCase() !== current.database.toLowerCase())
38
+ return false;
39
+ return (target.version === current.version || !target.version || !current.version);
40
+ }
41
+ export function dismissDeferredAgentLoadItemToast() {
42
+ toast.dismiss(AGENT_LOAD_ITEM_TOAST_ID);
43
+ }
44
+ export function showDeferredAgentLoadItemToast(item, deps) {
45
+ toast.info(`Agent wants to open ${item.name || item.path || item.id}`, {
46
+ id: AGENT_LOAD_ITEM_TOAST_ID,
47
+ description: item.path,
48
+ duration: AGENT_LOAD_ITEM_TOAST_DURATION_MS,
49
+ action: {
50
+ label: "Open",
51
+ onClick: () => {
52
+ dismissDeferredAgentLoadItemToast();
53
+ if (isSameLoadTarget(item, deps.getCurrentItemDescriptor()))
54
+ return;
55
+ void deps.open(item);
56
+ },
57
+ },
58
+ });
59
+ }
60
+ //# sourceMappingURL=agentLoadItemPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentLoadItemPolicy.js","sourceRoot":"","sources":["../../../src/editor/client/agentLoadItemPolicy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function markLocalUserEdit(now?: number): void;
2
+ export declare function getLastLocalUserEditAt(): number;
3
+ export declare function resetLocalUserEditActivityForTests(): void;
@@ -0,0 +1,12 @@
1
+ // Independent of field snapshots: an AI update can replace the same field entry.
2
+ let lastLocalUserEditAt = 0;
3
+ export function markLocalUserEdit(now = Date.now()) {
4
+ lastLocalUserEditAt = Math.max(lastLocalUserEditAt, now);
5
+ }
6
+ export function getLastLocalUserEditAt() {
7
+ return lastLocalUserEditAt;
8
+ }
9
+ export function resetLocalUserEditActivityForTests() {
10
+ lastLocalUserEditAt = 0;
11
+ }
12
+ //# sourceMappingURL=localUserEditActivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localUserEditActivity.js","sourceRoot":"","sources":["../../../src/editor/client/localUserEditActivity.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,MAAM,UAAU,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAChD,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kCAAkC;IAChD,mBAAmB,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from "./commands";
2
+ import type { ItemDescriptor } from "../pageModel";
3
+ export declare const uploadMediaFileCommand: Command<{
4
+ item: ItemDescriptor;
5
+ }>;
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Upload } from "lucide-react";
3
+ import { toast } from "sonner";
4
+ import { UploadMediaFileDialog, } from "../media-selector/UploadMediaFileDialog";
5
+ import { uploadMediaFiles } from "../media-selector/mediaUpload";
6
+ export const uploadMediaFileCommand = {
7
+ id: "uploadMediaFile",
8
+ label: "Upload file",
9
+ icon: _jsx(Upload, { strokeWidth: 1 }),
10
+ disabled: (context) => !context.data?.item,
11
+ execute: async ({ data, editContext, openDialog }) => {
12
+ if (!data?.item)
13
+ return;
14
+ const parent = await editContext.itemsRepository.getItem(data.item);
15
+ if (!parent)
16
+ return;
17
+ const path = parent.path.toLowerCase().replace(/\/+$/, "");
18
+ if (!parent.canCreate ||
19
+ (path !== "/sitecore/media library" &&
20
+ !path.startsWith("/sitecore/media library/"))) {
21
+ editContext.showErrorToast({
22
+ summary: "Cannot upload file",
23
+ details: "Select a media library item where you can create items.",
24
+ });
25
+ return;
26
+ }
27
+ const file = await openDialog(UploadMediaFileDialog, { parentPath: parent.path });
28
+ if (!file)
29
+ return;
30
+ const progress = toast.loading(`Uploading ${file.name}...`);
31
+ try {
32
+ const uploaded = await uploadMediaFiles({
33
+ files: [file],
34
+ folderId: parent.id,
35
+ language: data.item.language,
36
+ editContext,
37
+ });
38
+ if (!uploaded.length)
39
+ return;
40
+ await editContext.itemsRepository.refreshItems([data.item], {
41
+ properties: true,
42
+ children: true,
43
+ });
44
+ editContext.requestRefresh("immediate");
45
+ const uploadedId = uploaded[0]?.id;
46
+ if (uploadedId) {
47
+ await editContext.loadItem({
48
+ ...data.item,
49
+ id: uploadedId,
50
+ version: 0,
51
+ });
52
+ }
53
+ }
54
+ finally {
55
+ toast.dismiss(progress);
56
+ }
57
+ },
58
+ };
59
+ //# sourceMappingURL=mediaCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaCommands.js","sourceRoot":"","sources":["../../../src/editor/commands/mediaCommands.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B,OAAO,EACL,qBAAqB,GAEtB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,MAAM,CAAC,MAAM,sBAAsB,GAAsC;IACvE,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,aAAa;IACpB,IAAI,EAAE,KAAC,MAAM,IAAC,WAAW,EAAE,CAAC,GAAI;IAChC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI;IAC1C,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE;QACnD,IAAI,CAAC,IAAI,EAAE,IAAI;YAAE,OAAO;QAExB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3D,IACE,CAAC,MAAM,CAAC,SAAS;YACjB,CAAC,IAAI,KAAK,yBAAyB;gBACjC,CAAC,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,EAC/C,CAAC;YACD,WAAW,CAAC,cAAc,CAAC;gBACzB,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,yDAAyD;aACnE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,qBAAqB,EACrB,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAC5B,CAAC;QACF,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC;gBACtC,KAAK,EAAE,CAAC,IAAI,CAAC;gBACb,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAC5B,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAAE,OAAO;YAE7B,MAAM,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC1D,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,WAAW,CAAC,QAAQ,CAAC;oBACzB,GAAG,IAAI,CAAC,IAAI;oBACZ,EAAE,EAAE,UAAU;oBACd,OAAO,EAAE,CAAC;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * How component lists illustrate their rows: the component's Sitecore icon or
3
+ * a picture of it (palette thumbnail in the insert menu, live page crop in the
4
+ * navigator). One per-user preference shared by every surface that offers the
5
+ * choice, so flipping it in one place flips it everywhere.
6
+ */
7
+ export type ComponentVisualMode = "icon" | "thumbnail";
8
+ export declare const COMPONENT_VISUAL_MODE_STORAGE_KEY = "editor.componentVisualMode";
9
+ export declare function readComponentVisualMode(): ComponentVisualMode;
10
+ export declare function writeComponentVisualMode(mode: ComponentVisualMode): void;
11
+ export declare function useComponentVisualMode(): [
12
+ ComponentVisualMode,
13
+ (mode: ComponentVisualMode) => void
14
+ ];
@@ -0,0 +1,43 @@
1
+ import { useCallback, useSyncExternalStore } from "react";
2
+ import { localStorageService } from "./services/localStorageService";
3
+ export const COMPONENT_VISUAL_MODE_STORAGE_KEY = "editor.componentVisualMode";
4
+ const listeners = new Set();
5
+ export function readComponentVisualMode() {
6
+ return localStorageService.getString(COMPONENT_VISUAL_MODE_STORAGE_KEY) ===
7
+ "icon"
8
+ ? "icon"
9
+ : "thumbnail";
10
+ }
11
+ export function writeComponentVisualMode(mode) {
12
+ localStorageService.setString(COMPONENT_VISUAL_MODE_STORAGE_KEY, mode);
13
+ listeners.forEach((listener) => listener());
14
+ }
15
+ function subscribe(listener) {
16
+ listeners.add(listener);
17
+ const onStorage = (event) => {
18
+ if (event.key === null ||
19
+ event.key.endsWith(COMPONENT_VISUAL_MODE_STORAGE_KEY)) {
20
+ listener();
21
+ }
22
+ };
23
+ if (typeof window !== "undefined") {
24
+ window.addEventListener("storage", onStorage);
25
+ }
26
+ return () => {
27
+ listeners.delete(listener);
28
+ if (typeof window !== "undefined") {
29
+ window.removeEventListener("storage", onStorage);
30
+ }
31
+ };
32
+ }
33
+ function getServerSnapshot() {
34
+ return "thumbnail";
35
+ }
36
+ export function useComponentVisualMode() {
37
+ const mode = useSyncExternalStore(subscribe, readComponentVisualMode, getServerSnapshot);
38
+ const setMode = useCallback((next) => {
39
+ writeComponentVisualMode(next);
40
+ }, []);
41
+ return [mode, setMode];
42
+ }
43
+ //# sourceMappingURL=componentVisualMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentVisualMode.js","sourceRoot":"","sources":["../../src/editor/componentVisualMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAUrE,MAAM,CAAC,MAAM,iCAAiC,GAAG,4BAA4B,CAAC;AAE9E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,MAAM,UAAU,uBAAuB;IACrC,OAAO,mBAAmB,CAAC,SAAS,CAAC,iCAAiC,CAAC;QACrE,MAAM;QACN,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,WAAW,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAyB;IAChE,mBAAmB,CAAC,SAAS,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;IACvE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,QAAoB;IACrC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE;QACxC,IACE,KAAK,CAAC,GAAG,KAAK,IAAI;YAClB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EACrD,CAAC;YACD,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,sBAAsB;IAIpC,MAAM,IAAI,GAAG,oBAAoB,CAC/B,SAAS,EACT,uBAAuB,EACvB,iBAAiB,CAClB,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,IAAyB,EAAE,EAAE;QACxD,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from "react";
2
+ /** Give page history the shortcut until this editor has local edits to undo. */
3
+ export declare function FieldHistoryBoundary({ enabled, children, }: {
4
+ enabled: boolean;
5
+ children: (markEdited: () => void) => ReactNode;
6
+ }): import("react").JSX.Element;
7
+ export declare function hasPristineFieldHistory(target: EventTarget | null): boolean;
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef, useState } from "react";
3
+ /** Give page history the shortcut until this editor has local edits to undo. */
4
+ export function FieldHistoryBoundary({ enabled, children, }) {
5
+ const ref = useRef(null);
6
+ const [hasLocalEdits, setHasLocalEdits] = useState(false);
7
+ const markEdited = () => {
8
+ // Update synchronously too: another shortcut can arrive before React commits.
9
+ ref.current?.removeAttribute("data-parhelia-pristine-field");
10
+ setHasLocalEdits(true);
11
+ };
12
+ return (_jsx("div", { ref: ref, className: "contents", "data-parhelia-pristine-field": enabled && !hasLocalEdits ? "true" : undefined, onBeforeInputCapture: markEdited, onInputCapture: markEdited, onCompositionStartCapture: markEdited, children: children(markEdited) }));
13
+ }
14
+ export function hasPristineFieldHistory(target) {
15
+ const node = target;
16
+ const element = node?.nodeType === 3 ? node.parentElement : target;
17
+ return !!element?.closest?.('[data-parhelia-pristine-field="true"]');
18
+ }
19
+ //# sourceMappingURL=FieldHistoryBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldHistoryBoundary.js","sourceRoot":"","sources":["../../../src/editor/field-types/FieldHistoryBoundary.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEzD,gFAAgF;AAChF,MAAM,UAAU,oBAAoB,CAAC,EACnC,OAAO,EACP,QAAQ,GAIT;IACC,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,8EAA8E;QAC9E,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,8BAA8B,CAAC,CAAC;QAC7D,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CACL,cACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAC,UAAU,kCAElB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAEhD,oBAAoB,EAAE,UAAU,EAChC,cAAc,EAAE,UAAU,EAC1B,yBAAyB,EAAE,UAAU,YAEpC,QAAQ,CAAC,UAAU,CAAC,GACjB,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IAChE,MAAM,IAAI,GAAG,MAAqB,CAAC;IACnC,MAAM,OAAO,GACX,IAAI,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,MAAyB,CAAC;IACzE,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,uCAAuC,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type DecoratedRange, type Descendant, type NodeEntry } from "slate";
2
+ import type { DiffRange } from "../../../version-diff/versionDiffTargets";
3
+ /** Leaf flag set by {@link decorateChangedText}; rendered as the added-text mark. */
4
+ export declare const CHANGED_TEXT_LEAF = "changedText";
5
+ /**
6
+ * The document's plain text as one string: every text node concatenated in
7
+ * document order, no separators between blocks. Diff offsets are computed
8
+ * against this string and mapped back through {@link collectTextNodeStarts}.
9
+ */
10
+ export declare function getNodesText(nodes: Descendant[]): string;
11
+ /** Start offset of every text node (keyed by its path) inside {@link getNodesText}. */
12
+ export declare function collectTextNodeStarts(nodes: Descendant[]): Map<string, number>;
13
+ /**
14
+ * Slate `decorate` body: the parts of `entry` (a text node) that fall inside
15
+ * one of the added `ranges`, as decorated ranges carrying the changed-text
16
+ * leaf flag. Non-text nodes and nodes outside every range yield nothing.
17
+ */
18
+ export declare function decorateChangedText(entry: NodeEntry, starts: Map<string, number>, ranges: DiffRange[]): DecoratedRange[];
@@ -0,0 +1,57 @@
1
+ import { Node, Text, } from "slate";
2
+ /** Leaf flag set by {@link decorateChangedText}; rendered as the added-text mark. */
3
+ export const CHANGED_TEXT_LEAF = "changedText";
4
+ /**
5
+ * The document's plain text as one string: every text node concatenated in
6
+ * document order, no separators between blocks. Diff offsets are computed
7
+ * against this string and mapped back through {@link collectTextNodeStarts}.
8
+ */
9
+ export function getNodesText(nodes) {
10
+ let text = "";
11
+ for (const node of nodes) {
12
+ for (const [textNode] of Node.texts(node)) {
13
+ text += textNode.text;
14
+ }
15
+ }
16
+ return text;
17
+ }
18
+ /** Start offset of every text node (keyed by its path) inside {@link getNodesText}. */
19
+ export function collectTextNodeStarts(nodes) {
20
+ const starts = new Map();
21
+ let offset = 0;
22
+ nodes.forEach((node, index) => {
23
+ for (const [textNode, path] of Node.texts(node)) {
24
+ starts.set([index, ...path].join("."), offset);
25
+ offset += textNode.text.length;
26
+ }
27
+ });
28
+ return starts;
29
+ }
30
+ /**
31
+ * Slate `decorate` body: the parts of `entry` (a text node) that fall inside
32
+ * one of the added `ranges`, as decorated ranges carrying the changed-text
33
+ * leaf flag. Non-text nodes and nodes outside every range yield nothing.
34
+ */
35
+ export function decorateChangedText(entry, starts, ranges) {
36
+ const [node, path] = entry;
37
+ if (!Text.isText(node) || ranges.length === 0)
38
+ return [];
39
+ const nodeStart = starts.get(path.join("."));
40
+ if (nodeStart === undefined)
41
+ return [];
42
+ const nodeEnd = nodeStart + node.text.length;
43
+ const decorations = [];
44
+ for (const range of ranges) {
45
+ const start = Math.max(range.start, nodeStart);
46
+ const end = Math.min(range.end, nodeEnd);
47
+ if (end <= start)
48
+ continue;
49
+ decorations.push({
50
+ anchor: { path, offset: start - nodeStart },
51
+ focus: { path, offset: end - nodeStart },
52
+ [CHANGED_TEXT_LEAF]: true,
53
+ });
54
+ }
55
+ return decorations;
56
+ }
57
+ //# sourceMappingURL=changeHighlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeHighlight.js","sourceRoot":"","sources":["../../../../../src/editor/field-types/richtext/utils/changeHighlight.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,IAAI,GAIL,MAAM,OAAO,CAAC;AAGf,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CACnC,KAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,MAA2B,EAC3B,MAAmB;IAEnB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAE7C,MAAM,WAAW,GAAqB,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,GAAG,IAAI,KAAK;YAAE,SAAS;QAC3B,WAAW,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE;YAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE;YACxC,CAAC,iBAAiB,CAAC,EAAE,IAAI;SACR,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { MenuItem } from "../config/types";
2
+ /**
3
+ * Logical groups of the content-tree item context menu, in display order.
4
+ * Entries are command ids (see `allItemCommands` in config.tsx) plus the
5
+ * synthetic "insert" entry the menu factory prepends. Commands that are not
6
+ * listed here (e.g. those registered by extension packages such as
7
+ * localization) are collected in a trailing group.
8
+ */
9
+ export declare const ITEM_CONTEXT_MENU_GROUPS: readonly (readonly string[])[];
10
+ /**
11
+ * Orders `menuItems` by their group and inserts a separator between
12
+ * consecutive non-empty groups. Existing separators in the input are dropped
13
+ * so the result never contains leading, trailing or doubled dividers. The
14
+ * relative order of items within a group is preserved.
15
+ */
16
+ export declare function withItemContextMenuGroupSeparators(menuItems: MenuItem[], groups?: readonly (readonly string[])[]): MenuItem[];