@pstdio/workbench 0.43.0-nightly.20261011212112 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -204,21 +204,21 @@ declare const extensionMenuContributionSchema: z.ZodObject<{
204
204
  }>>;
205
205
  icon: z.ZodOptional<z.ZodString>;
206
206
  presentation: z.ZodOptional<z.ZodEnum<{
207
- "menu-item": "menu-item";
208
207
  button: "button";
209
208
  "icon-button": "icon-button";
209
+ "menu-item": "menu-item";
210
210
  }>>;
211
211
  params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
212
212
  when: z.ZodOptional<z.ZodObject<{
213
213
  mode: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
214
214
  source: z.ZodOptional<z.ZodArray<z.ZodEnum<{
215
+ api: "api";
215
216
  automation: "automation";
216
217
  cli: "cli";
218
+ "command-panel": "command-panel";
217
219
  dashboard: "dashboard";
218
- api: "api";
219
- schedule: "schedule";
220
220
  event: "event";
221
- "command-panel": "command-panel";
221
+ schedule: "schedule";
222
222
  }>>>;
223
223
  viewId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
224
224
  resourceType: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -984,13 +984,13 @@ declare const extensionKeybindingRecordSchema: z.ZodObject<{
984
984
  when: z.ZodOptional<z.ZodObject<{
985
985
  mode: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
986
986
  source: z.ZodOptional<z.ZodArray<z.ZodEnum<{
987
+ api: "api";
987
988
  automation: "automation";
988
989
  cli: "cli";
990
+ "command-panel": "command-panel";
989
991
  dashboard: "dashboard";
990
- api: "api";
991
- schedule: "schedule";
992
992
  event: "event";
993
- "command-panel": "command-panel";
993
+ schedule: "schedule";
994
994
  }>>>;
995
995
  viewId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
996
996
  resourceType: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1492,7 +1492,7 @@ export declare const registerWorkbenchExtensionContributions: (sourceInput: Regi
1492
1492
  //#region src/extensions/host/workbench-extension-metadata-ref.d.ts
1493
1493
  export declare const toWorkbenchWhenExpression: (when: WorkbenchExtensionMetadata$1["navigationItems"][number]["when"] | WorkbenchExtensionMetadata$1["statusBarItems"][number]["when"]) => {
1494
1494
  mode: string | string[] | undefined;
1495
- source: ("automation" | "cli" | "dashboard" | "api" | "schedule" | "event" | "command-panel")[] | undefined;
1495
+ source: ("api" | "automation" | "cli" | "command-panel" | "dashboard" | "event" | "schedule")[] | undefined;
1496
1496
  viewId: string | string[] | undefined;
1497
1497
  resourceType: string[] | undefined;
1498
1498
  metadata: Record<string, unknown> | undefined;
@@ -1,6 +1,6 @@
1
1
  import { A as e } from "./workbench-renderers-Bj4sazP5.js";
2
2
  import { n as t } from "./navigation-tree-registry-CIwRvLFJ.js";
3
- import { S as n, c as r, dt as i, l as a, u as o } from "./react-vsxj0hQ2.js";
3
+ import { S as n, c as r, dt as i, l as a, u as o } from "./react-Blq0pNJq.js";
4
4
  import { ALWAYS_AVAILABLE_WEBVIEW_CAPABILITIES as s, WEBVIEW_DECLARABLE_CAPABILITIES as c, WEBVIEW_HOST_CAPABILITIES as l, WEBVIEW_HOST_CAPABILITY_VERSION as u, WEBVIEW_SCOPED_DECLARABLE_CAPABILITIES as d, commandRefId as f, contributionRefId as p, isLocalizedString as m, isNavigationTarget as h, matchesResourceWhen as g, qualifyNavigationTarget as _, resourceKey as v } from "@pstdio/sdk/extensions";
5
5
  import { c as y } from "react/compiler-runtime";
6
6
  import { Box as b, Center as x, Stack as S, Text as C } from "@chakra-ui/react";
@@ -1,5 +1,5 @@
1
1
  import { c as e, t } from "./workbench-renderers-Bj4sazP5.js";
2
- import { a as n, at as r, o as i, s as a } from "./react-vsxj0hQ2.js";
2
+ import { a as n, at as r, o as i, s as a } from "./react-Blq0pNJq.js";
3
3
  import { resourceKey as o } from "@pstdio/sdk/extensions";
4
4
  import { c as s } from "react/compiler-runtime";
5
5
  import { Box as c, Button as l, Center as u, Flex as d, Image as f, Spinner as p, Text as m } from "@chakra-ui/react";
@@ -667,4 +667,4 @@ function me(e) {
667
667
  //#endregion
668
668
  export { B as WorkbenchFileRendererView };
669
669
 
670
- //# sourceMappingURL=file-renderer-view-CTVhwDGe.js.map
670
+ //# sourceMappingURL=file-renderer-view-CPCSE94i.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-renderer-view-CTVhwDGe.js","names":["ResourceRef","FILE_SECTION_NAVIGATION_METADATA_KEY","FileSectionAnchor","id","heading","occurrence","FileSectionNavigation","treeId","targetNodeId","anchors","isAnchor","value","anchor","Record","occurrenceIsValid","undefined","Number","isInteger","getFileSectionNavigation","resource","metadata","navigation","Array","isArray","every","resolveFileSectionTargetId","selectedNodeId","some","PreviousFileSectionNavigation","resourceKey","anchorIds","shouldClearFileSectionSelection","input","previous","current","currentResourceKey","includes","FileKind","IMAGE_EXTENSIONS","Set","PROSE_EXTENSIONS","CODE_LANGUAGE_BY_EXTENSION","Record","ts","tsx","js","jsx","mjs","cjs","json","jsonc","py","rb","rs","go","java","kt","c","h","cpp","cc","hpp","cs","php","swift","sh","bash","zsh","sql","css","scss","less","html","xml","yml","yaml","toml","ini","dockerfile","graphql","gql","md","markdown","txt","extensionOf","fileName","dot","lastIndexOf","length","slice","toLowerCase","isImage","mimeType","startsWith","has","pickFileKind","extension","codeLanguageFor","FileRendererContent","codeLanguageFor","pickFileKind","FileRendererPresentation","kind","isEditable","language","resolveFileRendererPresentation","content","contributionCanSave","emptyState","automaticKind","fileName","mimeType","editable","textRenderer","Box","Center","Flex","Image","Text","FileSourcePosition","AlertMessage","EmptyState","CodeEditor","MarkdownEditor","ReactNode","RefObject","FileRendererContent","resolveFileRendererPresentation","FileRendererContentViewProps","content","position","editorKey","errorNotice","contributionCanSave","onActiveSectionChange","sectionId","onChange","value","rendererRef","HTMLDivElement","sectionNavigation","anchors","Array","id","heading","occurrence","targetId","title","FileRendererContentView","props","$","_c","t0","presentation","t1","kind","positionNotice","t2","emptyState","t3","description","t4","t5","dataUrl","Symbol","for","fileName","isEditable","undefined","language","placeholder","t6","_c","FileRendererRefreshEnvelope","FileRendererRefreshOrigin","FileRendererSaveResult","FileEditControllerState","dirty","saving","saveError","removed","FileEditControllerInput","binding","Omit","resourceKey","debounceMs","load","event","save","value","origin","Promise","createOperationId","onStateChange","state","FileEditController","ReturnType","createFileEditController","input","baseline","baselineRevision","draft","activeSave","deferredRevision","genericRefreshDeferred","timer","setTimeout","operationSequence","seenRefreshRevisions","Set","completedOperationIds","describeError","error","Error","message","getState","const","notify","clearTimer","clearTimeout","nextOperationId","Date","now","hasPendingLocalState","Boolean","deferRefresh","revision","localeCompare","isSelfRefresh","operationId","rendererId","instanceId","has","takeDeferredRefresh","savedRevision","generic","undefined","runSave","resolve","then","result","add","size","delete","values","next","schedule","catch","getDraft","markRemoved","retain","getBaseline","setBaseline","acceptLoaded","shown","handleChange","handleRefreshEvent","retry","retryLoad","flush","Button","Flex","Text","FileRendererErrorNotice","props","$","_c","message","onRetry","t0","t1","t2","_c","resourceKey","ResourceRef","FileRendererLoadKeyInput","fileRendererId","resource","stableValue","value","Array","isArray","map","Object","fromEntries","entries","Record","sort","left","right","localeCompare","key","entry","createFileRendererLoadKey","input","resourceValue","id","type","metadata","JSON","stringify","isCurrentLoadedFile","loaded","loadKey","Text","Header","resolveFileIconElement","useFileIconThemePreference","FileRendererPathHeader","props","$","_c","fileName","filePath","activeFileIconTheme","t0","theme","t1","t2","t3","_c","Box","Button","Center","Flex","Spinner","Text","ResourceRef","resourceKey","ReactNode","useEffect","useLayoutEffect","useRef","useState","RegisteredFileRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","getFileSectionNavigation","resolveFileSectionTargetId","shouldClearFileSectionSelection","useWorkbenchStore","FileRendererContentView","createFileEditController","FileEditController","FileEditControllerState","FileRendererErrorNotice","createFileRendererLoadKey","isCurrentLoadedFile","acceptFileRendererLoad","LoadedFile","readCachedFileContent","storeCachedFileContent","FileRendererPathHeader","WorkbenchFileRendererViewProps","workbench","contribution","placement","SAVE_DEBOUNCE_MS","describeError","error","Error","message","syncActiveFileSection","input","navigation","ReturnType","sectionId","getTreeRenderer","treeId","anchors","some","anchor","id","setSelectedNode","selectedNodeId","getTreeState","undefined","getEditorSectionNavigation","targetId","useFilePosition","resource","$","_c","t0","state","location","position","page_0","Object","values","pages","find","page","ref","extensionId","key","document","metadataKey","metadata","store","FileRendererHeader","props","file","fileName","filePath","WorkbenchFileRendererView","sectionNavigation","editorSectionNavigation","loadKey","fileRendererId","loaded","setLoaded","setError","t1","Symbol","for","dirty","saving","editState","setEditState","controllerRef","retryReadRef","rendererRef","previousSectionNavigationRef","t2","t3","previous","current","currentResourceKey","anchorIds","map","_temp","contributionRef","resourceRef","placementRef","t4","contributionId","hasSave","Boolean","save","ownerKey","JSON","stringify","instanceId","t5","cancelled","removed","boundResource","boundContribution","read","views","reads","bind","controller","cached","editorRevision","load","t6","reason","request","queryKey","signal","onValue","next","updateLoaded","onError","loadError","binding","rendererId","debounceMs","onStateChange","value","origin","Promise","resolve","then","result","content","setBaseline","revision","removalSubscription","resources","onWillRemove","resource_0","retain","markRemoved","identity","placementIdentity","refreshSubscription","onDidRefreshFileRenderer","event","controller_0","handleRefreshEvent","dispose","flush","t7","t8","onVisibility","visibilityState","window","addEventListener","removeEventListener","t9","value_0","handleChange","t10","currentLoaded","scrollResetKey","t11","t12","node","requestAnimationFrame","current_0","parentElement","overflowY","getComputedStyle","includes","scrollHeight","clientHeight","scrollTop","loadError_0","t13","t14","t15","editorKey","errorNotice","saveError","retry","t16","t17","title","t18","_c","rendererReadKey","acceptFileRendererLoad","useWorkbenchStore","readCachedFileContent","storeCachedFileContent","FILE_SECTION_NAVIGATION_METADATA_KEY","isAnchor","value","anchor","occurrenceIsValid","getFileSectionNavigation","resource","navigation","resolveFileSectionTargetId","selectedNodeId","shouldClearFileSectionSelection","input","previous","current","currentResourceKey","IMAGE_EXTENSIONS","PROSE_EXTENSIONS","CODE_LANGUAGE_BY_EXTENSION","extensionOf","fileName","dot","isImage","mimeType","pickFileKind","extension","codeLanguageFor","resolveFileRendererPresentation","content","automaticKind","isEditable","contributionCanSave","FileRendererContentView","$","c","props","t0","presentation","t1","position","AlertMessage","positionNotice","t2","t3","t4","EmptyState","t5","errorNotice","Flex","Center","Text","title","Image","rendererRef","onChange","editorKey","Box","CodeEditor","onActiveSectionChange","sectionNavigation","MarkdownEditor","t6","createFileEditController","baseline","removed","baselineRevision","draft","activeSave","saveError","deferredRevision","genericRefreshDeferred","timer","operationSequence","seenRefreshRevisions","completedOperationIds","describeError","error","getState","notify","clearTimer","nextOperationId","hasPendingLocalState","deferRefresh","event","isSelfRefresh","operationId","takeDeferredRefresh","revision","generic","savedRevision","runSave","origin","result","schedule","retain","shown","FileRendererErrorNotice","message","onRetry","Button","stableValue","left","right","key","entry","createFileRendererLoadKey","resourceValue","resourceKey","fileRendererId","isCurrentLoadedFile","loaded","loadKey","FileRendererPathHeader","useFileIconThemePreference","activeFileIconTheme","resolveFileIconElement","filePath","Header","SAVE_DEBOUNCE_MS","syncActiveFileSection","getWorkbenchRenderers","workbench","sectionId","getEditorSectionNavigation","useFilePosition","location","state","page","FileRendererHeader","file","WorkbenchFileRendererView","editorSectionNavigation","contribution","setLoaded","useState","setError","editState","setEditState","controllerRef","useRef","retryReadRef","previousSectionNavigationRef","_temp","useEffect","contributionRef","resourceRef","placementRef","contributionId","hasSave","ownerKey","instanceId","cancelled","boundResource","boundContribution","read","controller","cached","load","reason","signal","updateLoaded","next","loadError","removalSubscription","resource_0","identity","refreshSubscription","controller_0","t7","t8","flush","onVisibility","t9","value_0","handleChange","t10","currentLoaded","scrollResetKey","t11","t12","node","current_0","overflowY","useLayoutEffect","loadError_0","t13","t14","t15","Spinner","t16","t17","t18"],"sources":["../src/core/registries/renderers/file-section-navigation.ts","../src/react/renderers/file/file-kind.ts","../src/react/renderers/file/file-renderer-presentation.ts","../src/react/renderers/file/file-renderer-content.tsx","../src/react/renderers/file/file-renderer-edit-state.ts","../src/react/renderers/file/file-renderer-error-notice.tsx","../src/react/renderers/file/file-renderer-load-key.ts","../src/react/renderers/file/file-renderer-path-header.tsx","../src/react/renderers/file/file-renderer-view.tsx"],"sourcesContent":["import type { ResourceRef } from \"../resources/resource-registry\";\n\nexport const FILE_SECTION_NAVIGATION_METADATA_KEY = \"pstdio.fileSectionNavigation\";\n\nexport interface FileSectionAnchor {\n id: string;\n heading: string;\n occurrence?: number;\n}\n\nexport interface FileSectionNavigation {\n treeId: string;\n targetNodeId: string;\n anchors: FileSectionAnchor[];\n}\n\nconst isAnchor = (value: unknown): value is FileSectionAnchor => {\n if (!value || typeof value !== \"object\") return false;\n const anchor = value as Record<string, unknown>;\n const occurrenceIsValid =\n anchor.occurrence === undefined ||\n (typeof anchor.occurrence === \"number\" && Number.isInteger(anchor.occurrence) && anchor.occurrence >= 0);\n return typeof anchor.id === \"string\" && typeof anchor.heading === \"string\" && occurrenceIsValid;\n};\n\nexport const getFileSectionNavigation = (resource: ResourceRef | undefined): FileSectionNavigation | undefined => {\n const value = resource?.metadata?.[FILE_SECTION_NAVIGATION_METADATA_KEY];\n if (!value || typeof value !== \"object\") return undefined;\n const navigation = value as Record<string, unknown>;\n if (typeof navigation.treeId !== \"string\" || typeof navigation.targetNodeId !== \"string\") return undefined;\n if (!Array.isArray(navigation.anchors) || !navigation.anchors.every(isAnchor)) return undefined;\n\n return {\n treeId: navigation.treeId,\n targetNodeId: navigation.targetNodeId,\n anchors: navigation.anchors,\n };\n};\n\nexport const resolveFileSectionTargetId = (navigation: FileSectionNavigation, selectedNodeId: string | undefined) => {\n if (selectedNodeId && navigation.anchors.some((anchor) => anchor.id === selectedNodeId)) return selectedNodeId;\n return navigation.targetNodeId;\n};\n\nexport interface PreviousFileSectionNavigation {\n resourceKey?: string;\n treeId: string;\n anchorIds: string[];\n}\n\nexport const shouldClearFileSectionSelection = (input: {\n previous: PreviousFileSectionNavigation | null;\n current: FileSectionNavigation | undefined;\n currentResourceKey?: string;\n selectedNodeId?: string;\n}) => {\n const { previous, current, currentResourceKey, selectedNodeId } = input;\n if (!previous || !selectedNodeId || !previous.anchorIds.includes(selectedNodeId)) return false;\n if (current?.targetNodeId === selectedNodeId) return false;\n\n return !current || previous.treeId !== current.treeId || previous.resourceKey !== currentResourceKey;\n};\n","// Generic file-type dispatch for the file renderer. Markdown is the default so\n// `.md` / `.txt` / extension-less files open in the prose editor; recognised code\n// extensions open in Monaco; images render read-only. This is deliberately\n// domain-agnostic — it knows about file types, not about tickets.\n\nexport type FileKind = \"markdown\" | \"code\" | \"image\";\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"avif\", \"bmp\", \"ico\"]);\nconst PROSE_EXTENSIONS = new Set([\"md\", \"markdown\", \"txt\"]);\n\n// Extension → Monaco language id. Markdown/plain text intentionally absent so\n// they fall through to the prose editor.\nconst CODE_LANGUAGE_BY_EXTENSION: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n json: \"json\",\n jsonc: \"json\",\n py: \"python\",\n rb: \"ruby\",\n rs: \"rust\",\n go: \"go\",\n java: \"java\",\n kt: \"kotlin\",\n c: \"c\",\n h: \"c\",\n cpp: \"cpp\",\n cc: \"cpp\",\n hpp: \"cpp\",\n cs: \"csharp\",\n php: \"php\",\n swift: \"swift\",\n sh: \"shell\",\n bash: \"shell\",\n zsh: \"shell\",\n sql: \"sql\",\n css: \"css\",\n scss: \"scss\",\n less: \"less\",\n html: \"html\",\n xml: \"xml\",\n yml: \"yaml\",\n yaml: \"yaml\",\n toml: \"ini\",\n ini: \"ini\",\n dockerfile: \"dockerfile\",\n graphql: \"graphql\",\n gql: \"graphql\",\n md: \"markdown\",\n markdown: \"markdown\",\n txt: \"plaintext\",\n};\n\nconst extensionOf = (fileName: string | undefined) => {\n if (!fileName) return \"\";\n const dot = fileName.lastIndexOf(\".\");\n if (dot < 0 || dot === fileName.length - 1) return \"\";\n return fileName.slice(dot + 1).toLowerCase();\n};\n\nconst isImage = (fileName: string | undefined, mimeType: string | undefined) => {\n if (mimeType?.startsWith(\"image/\")) return true;\n return IMAGE_EXTENSIONS.has(extensionOf(fileName));\n};\n\nexport const pickFileKind = (fileName: string | undefined, mimeType: string | undefined): FileKind => {\n if (isImage(fileName, mimeType)) return \"image\";\n const extension = extensionOf(fileName);\n if (!PROSE_EXTENSIONS.has(extension) && extension in CODE_LANGUAGE_BY_EXTENSION) return \"code\";\n return \"markdown\";\n};\n\n// Monaco language for a code file; falls back to plaintext for unknown extensions.\nexport const codeLanguageFor = (fileName: string | undefined) =>\n CODE_LANGUAGE_BY_EXTENSION[extensionOf(fileName)] ?? \"plaintext\";\n","import type { FileRendererContent } from \"../../../core\";\nimport { codeLanguageFor, pickFileKind } from \"./file-kind\";\n\nexport type FileRendererPresentation =\n | { kind: \"empty\"; isEditable: false }\n | { kind: \"image\"; isEditable: false }\n | { kind: \"code\"; isEditable: boolean; language: string }\n | { kind: \"markdown\"; isEditable: boolean };\n\nexport const resolveFileRendererPresentation = (\n content: FileRendererContent,\n contributionCanSave: boolean,\n): FileRendererPresentation => {\n if (content.emptyState) return { kind: \"empty\", isEditable: false };\n\n const automaticKind = pickFileKind(content.fileName, content.mimeType);\n if (automaticKind === \"image\") return { kind: \"image\", isEditable: false };\n\n const isEditable = contributionCanSave && content.editable !== false;\n if (automaticKind === \"code\" || content.textRenderer === \"monaco\") {\n return { kind: \"code\", isEditable, language: codeLanguageFor(content.fileName) };\n }\n return { kind: \"markdown\", isEditable };\n};\n","import { Box, Center, Flex, Image, Text } from \"@chakra-ui/react\";\nimport type { FileSourcePosition } from \"@pstdio/sdk/extensions\";\nimport { AlertMessage, EmptyState } from \"@pstdio/ui\";\nimport { CodeEditor } from \"@pstdio/ui/diff\";\nimport { MarkdownEditor } from \"@pstdio/ui/rich-text\";\nimport type { ReactNode, RefObject } from \"react\";\nimport type { FileRendererContent } from \"../../../core\";\nimport { resolveFileRendererPresentation } from \"./file-renderer-presentation\";\n\ninterface FileRendererContentViewProps {\n content: FileRendererContent;\n position?: FileSourcePosition;\n editorKey: string;\n errorNotice: ReactNode;\n contributionCanSave: boolean;\n onActiveSectionChange?: (sectionId: string | null) => void;\n onChange: (value: string) => void;\n rendererRef: RefObject<HTMLDivElement | null>;\n sectionNavigation?: {\n anchors: Array<{ id: string; heading: string; occurrence?: number }>;\n targetId: string;\n };\n title: string;\n}\n\nexport const FileRendererContentView = (props: FileRendererContentViewProps) => {\n const {\n content,\n position,\n editorKey,\n errorNotice,\n contributionCanSave,\n onActiveSectionChange,\n onChange,\n rendererRef,\n sectionNavigation,\n title,\n } = props;\n const presentation = resolveFileRendererPresentation(content, contributionCanSave);\n const positionNotice =\n position && presentation.kind !== \"code\" && presentation.kind !== \"empty\" ? (\n <AlertMessage status=\"info\" title=\"Source location unavailable\">\n This preview does not support source line selection.\n </AlertMessage>\n ) : null;\n\n if (presentation.kind === \"empty\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <EmptyState\n flex=\"1\"\n minH=\"0\"\n title={content.emptyState?.title ?? \"Select a file\"}\n description={content.emptyState?.description}\n />\n </Flex>\n );\n }\n\n if (presentation.kind === \"image\") {\n if (!content.dataUrl) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\">\n <Text color=\"fg.muted\">This image preview is unavailable.</Text>\n </Center>\n );\n }\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Center ref={rendererRef} flex=\"1\" minH=\"0\" p=\"md\" overflow=\"auto\">\n <Image src={content.dataUrl} alt={content.fileName ?? title} maxW=\"100%\" maxH=\"100%\" objectFit=\"contain\" />\n </Center>\n </Flex>\n );\n }\n\n if (presentation.kind === \"code\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Box flex=\"1\" minH=\"0\">\n <CodeEditor\n key={editorKey}\n language={presentation.language}\n position={position}\n fileName={content.fileName}\n defaultCode={content.content ?? \"\"}\n isEditable={presentation.isEditable}\n showLineNumbers\n onChange={presentation.isEditable ? onChange : undefined}\n />\n </Box>\n </Flex>\n );\n }\n\n return (\n <Flex ref={rendererRef} direction=\"column\" h=\"full\" minH=\"0\" overflow=\"hidden\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Box flex=\"1\" minH=\"0\" overflowY=\"auto\">\n <MarkdownEditor\n key={editorKey}\n defaultState={content.content ?? \"\"}\n isEditable={presentation.isEditable}\n sectionNavigation={sectionNavigation}\n placeholder={presentation.isEditable ? (content.placeholder ?? \"Write…\") : undefined}\n onActiveSectionChange={onActiveSectionChange}\n onChange={presentation.isEditable ? onChange : undefined}\n />\n </Box>\n </Flex>\n );\n};\n","// Owns the editable file renderer's save lifecycle: the last loaded or saved\n// value (the baseline), the debounced draft, the one in-flight save, and\n// refresh events that arrive while a draft or save exists.\n//\n// Invariants (from the renderer edit/refresh lifecycle PRD):\n// - a change equal to the baseline never schedules a save\n// - at most one save runs at a time; the baseline advances when it succeeds\n// - a failed save keeps the draft so a later change or flush retries it\n// - refresh events are deferred while a draft or save exists and coalesce\n// into one reload after the last save settles\n\nimport type {\n FileRendererRefreshEnvelope,\n FileRendererRefreshOrigin,\n FileRendererSaveResult,\n} from \"../../../core/registries/renderers/file-renderer-registry\";\n\nexport interface FileEditControllerState {\n dirty: boolean;\n saving: boolean;\n saveError?: string;\n removed?: true;\n}\n\nexport interface FileEditControllerInput {\n binding: Omit<FileRendererRefreshOrigin, \"operationId\"> & { resourceKey?: string };\n debounceMs: number;\n load: (event?: FileRendererRefreshEnvelope) => void;\n save: (value: string, origin: FileRendererRefreshOrigin) => Promise<FileRendererSaveResult | undefined>;\n createOperationId?: () => string;\n onStateChange?: (state: FileEditControllerState) => void;\n}\n\nexport type FileEditController = ReturnType<typeof createFileEditController>;\n\nexport const createFileEditController = (input: FileEditControllerInput) => {\n let baseline: string | undefined;\n let removed = false;\n let baselineRevision: string | undefined;\n let draft: string | null = null;\n let activeSave: { value: string; origin: FileRendererRefreshOrigin } | null = null;\n let saveError: string | undefined;\n let deferredRevision: string | undefined;\n let genericRefreshDeferred = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let operationSequence = 0;\n const seenRefreshRevisions = new Set<string>();\n const completedOperationIds = new Set<string>();\n\n const describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to save file.\");\n const getState = (): FileEditControllerState => ({\n dirty: draft !== null || (activeSave !== null && activeSave.value !== baseline),\n saving: activeSave !== null,\n ...(saveError ? { saveError } : {}),\n ...(removed ? { removed: true as const } : {}),\n });\n const notify = () => input.onStateChange?.(getState());\n\n const clearTimer = () => {\n if (timer === null) return;\n clearTimeout(timer);\n timer = null;\n };\n\n const nextOperationId = () => input.createOperationId?.() ?? `file-save-${Date.now()}-${++operationSequence}`;\n\n const hasPendingLocalState = () => draft !== null || activeSave !== null || timer !== null || Boolean(saveError);\n\n const deferRefresh = (event: FileRendererRefreshEnvelope) => {\n if (event.revision && (!deferredRevision || event.revision.localeCompare(deferredRevision) > 0)) {\n deferredRevision = event.revision;\n }\n if (!event.revision) genericRefreshDeferred = true;\n };\n\n const isSelfRefresh = (event: FileRendererRefreshEnvelope) => {\n const operationId = event.origin?.operationId;\n if (!operationId) return false;\n if (event.origin?.rendererId !== input.binding.rendererId) return false;\n if (event.origin.instanceId !== input.binding.instanceId) return false;\n return activeSave?.origin.operationId === operationId || completedOperationIds.has(operationId);\n };\n\n const takeDeferredRefresh = (savedRevision?: string) => {\n if (draft !== null || activeSave) return;\n const revision = deferredRevision;\n const generic = genericRefreshDeferred;\n deferredRevision = undefined;\n genericRefreshDeferred = false;\n if (revision && (!savedRevision || revision.localeCompare(savedRevision) > 0)) {\n input.load({ resourceKey: input.binding.resourceKey, revision });\n return;\n }\n if (generic) input.load({ resourceKey: input.binding.resourceKey });\n };\n\n const runSave = () => {\n if (removed || draft === null || activeSave || saveError) return;\n const value = draft;\n draft = null;\n const origin = {\n rendererId: input.binding.rendererId,\n instanceId: input.binding.instanceId,\n operationId: nextOperationId(),\n };\n activeSave = { value, origin };\n notify();\n void Promise.resolve(input.save(value, origin))\n .then((result) => {\n if (activeSave?.origin.operationId !== origin.operationId) return;\n activeSave = null;\n completedOperationIds.add(origin.operationId);\n if (completedOperationIds.size > 20) completedOperationIds.delete(completedOperationIds.values().next().value!);\n baseline = value;\n baselineRevision = result?.revision ?? baselineRevision;\n if (draft === baseline) {\n draft = null;\n clearTimer();\n }\n notify();\n if (draft !== null) {\n schedule();\n return;\n }\n takeDeferredRefresh(result?.revision);\n })\n .catch((error) => {\n if (removed) return;\n if (activeSave?.origin.operationId !== origin.operationId) return;\n activeSave = null;\n if (draft === null) draft = value;\n saveError = describeError(error);\n notify();\n });\n };\n\n const schedule = () => {\n clearTimer();\n timer = setTimeout(() => {\n timer = null;\n runSave();\n }, input.debounceMs);\n };\n\n return {\n getDraft() {\n return draft ?? activeSave?.value ?? baseline;\n },\n markRemoved() {\n const retain = hasPendingLocalState();\n removed = true;\n draft = draft ?? activeSave?.value ?? null;\n activeSave = null;\n clearTimer();\n notify();\n return retain;\n },\n getBaseline() {\n return baseline;\n },\n getState,\n setBaseline(value: string | undefined, revision?: string) {\n baseline = value;\n baselineRevision = revision;\n notify();\n },\n // Takes a freshly loaded value as the new baseline and returns the value the\n // editor was showing, so the caller can tell whether the editor must show\n // something else. Returns null while pending local state must keep the\n // editor: the refresh is deferred until the save settles.\n acceptLoaded(value: string | undefined, revision?: string) {\n if (removed) return null;\n if (hasPendingLocalState()) {\n deferRefresh(revision ? { revision } : {});\n return null;\n }\n const shown = baseline;\n baseline = value;\n baselineRevision = revision;\n notify();\n return { shown };\n },\n handleChange(value: string) {\n if (removed) {\n draft = value;\n notify();\n return;\n }\n if (saveError && value === draft) return;\n saveError = undefined;\n if (value === baseline && !activeSave) {\n draft = null;\n clearTimer();\n notify();\n return;\n }\n if (activeSave?.value === value) {\n draft = null;\n clearTimer();\n notify();\n return;\n }\n draft = value;\n schedule();\n notify();\n },\n handleRefreshEvent(event: FileRendererRefreshEnvelope = {}) {\n if (removed) return;\n if (event.resourceKey && event.resourceKey !== input.binding.resourceKey) return;\n if (isSelfRefresh(event)) return;\n if (event.revision && seenRefreshRevisions.has(event.revision)) return;\n if (event.revision) seenRefreshRevisions.add(event.revision);\n if (hasPendingLocalState()) {\n deferRefresh(event);\n return;\n }\n if (event.revision && baselineRevision && event.revision.localeCompare(baselineRevision) <= 0) return;\n input.load(event);\n },\n retry() {\n if (!saveError || draft === null || activeSave) return;\n saveError = undefined;\n notify();\n runSave();\n },\n retryLoad() {\n if (removed) return;\n input.load({ resourceKey: input.binding.resourceKey });\n },\n flush() {\n clearTimer();\n runSave();\n },\n };\n};\n","import { Button, Flex, Text } from \"@chakra-ui/react\";\n\nexport const FileRendererErrorNotice = (props: { message: string; onRetry?: () => void }) => {\n const { message, onRetry } = props;\n return (\n <Flex\n flex=\"none\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"sm\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg=\"bg.muted\"\n px=\"sm\"\n py=\"xs\"\n >\n <Text color=\"fg.muted\" textStyle=\"label/S/regular\">\n {message}\n </Text>\n {onRetry ? (\n <Button size=\"2xs\" variant=\"subtle\" onClick={onRetry}>\n Retry\n </Button>\n ) : null}\n </Flex>\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceRef } from \"../../../core\";\n\ninterface FileRendererLoadKeyInput {\n fileRendererId: string;\n resource: ResourceRef | undefined;\n}\nconst stableValue = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(stableValue);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableValue(entry)]),\n );\n};\nexport const createFileRendererLoadKey = (input: FileRendererLoadKeyInput) => {\n const { fileRendererId, resource } = input;\n const resourceValue = resource\n ? stableValue({\n id: resource.id,\n type: resource.type,\n metadata: resource.metadata,\n })\n : null;\n return `${JSON.stringify(resourceKey(resource))}:${fileRendererId}:${JSON.stringify(resourceValue)}`;\n};\nexport const isCurrentLoadedFile = (\n loaded: {\n loadKey: string;\n } | null,\n loadKey: string,\n) => loaded?.loadKey === loadKey;\n","import { Text } from \"@chakra-ui/react\";\nimport { Header, resolveFileIconElement, useFileIconThemePreference } from \"@pstdio/ui\";\n\nexport const FileRendererPathHeader = (props: { fileName: string; filePath: string }) => {\n const { fileName, filePath } = props;\n const { activeFileIconTheme } = useFileIconThemePreference();\n\n return (\n <Header variant=\"narrow\" flexShrink={0} gap=\"2xs\" bg=\"bg\">\n {resolveFileIconElement(fileName, { theme: activeFileIconTheme })}\n <Text aria-label={`File path ${filePath}`} textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {filePath}\n </Text>\n </Header>\n );\n};\n","import { Box, Button, Center, Flex, Spinner, Text } from \"@chakra-ui/react\";\nimport { type ResourceRef, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { type ReactNode, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { RegisteredFileRendererContribution, WorkbenchCore, WorkbenchPanelInstance } from \"../../../core\";\nimport { getWorkbenchRenderers, rendererReadKey } from \"../../../core\";\nimport {\n getFileSectionNavigation,\n resolveFileSectionTargetId,\n shouldClearFileSectionSelection,\n} from \"../../../core/registries/renderers/file-section-navigation\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { FileRendererContentView } from \"./file-renderer-content\";\nimport {\n createFileEditController,\n type FileEditController,\n type FileEditControllerState,\n} from \"./file-renderer-edit-state\";\nimport { FileRendererErrorNotice } from \"./file-renderer-error-notice\";\nimport { createFileRendererLoadKey, isCurrentLoadedFile } from \"./file-renderer-load-key\";\nimport {\n acceptFileRendererLoad,\n type LoadedFile,\n readCachedFileContent,\n storeCachedFileContent,\n} from \"./file-renderer-load-state\";\nimport { FileRendererPathHeader } from \"./file-renderer-path-header\";\n\ninterface WorkbenchFileRendererViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredFileRendererContribution;\n // The bound resource (e.g. the open ticket / ticket-file) the load/save\n // commands operate on.\n placement?: WorkbenchPanelInstance;\n}\nconst SAVE_DEBOUNCE_MS = 600;\nconst describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to load file.\");\nconst syncActiveFileSection = (input: {\n workbench: WorkbenchCore;\n navigation: ReturnType<typeof getFileSectionNavigation>;\n sectionId: string | null;\n}) => {\n const { workbench, navigation, sectionId } = input;\n if (!navigation || !getWorkbenchRenderers(workbench).getTreeRenderer(navigation.treeId)) return;\n if (sectionId && navigation.anchors.some((anchor) => anchor.id === sectionId)) {\n getWorkbenchRenderers(workbench).setSelectedNode(navigation.treeId, sectionId);\n return;\n }\n const selectedNodeId = getWorkbenchRenderers(workbench).getTreeState(navigation.treeId).selectedNodeId;\n if (selectedNodeId && navigation.anchors.some((anchor) => anchor.id === selectedNodeId)) {\n getWorkbenchRenderers(workbench).setSelectedNode(navigation.treeId, undefined);\n }\n};\nconst getEditorSectionNavigation = (\n workbench: WorkbenchCore,\n navigation: ReturnType<typeof getFileSectionNavigation>,\n) => {\n if (!navigation) return undefined;\n const selectedNodeId = getWorkbenchRenderers(workbench).getTreeRenderer(navigation.treeId)\n ? getWorkbenchRenderers(workbench).getTreeState(navigation.treeId).selectedNodeId\n : undefined;\n return {\n anchors: navigation.anchors,\n targetId: resolveFileSectionTargetId(navigation, selectedNodeId),\n };\n};\nconst useFilePosition = (workbench: WorkbenchCore, resource?: ResourceRef) =>\n useWorkbenchStore(workbench.pages.store, (state) => {\n const location = state.location;\n if (!location?.position || resourceKey(location.resource) !== resourceKey(resource)) return undefined;\n const page = Object.values(state.pages).find(\n (page) => page.ref.id === location.page.id && page.ref.extensionId === location.page.extensionId,\n );\n const key = page?.document?.metadataKey;\n if (!key || location.resource?.metadata?.[key] !== resource?.metadata?.[key]) return undefined;\n return location.position;\n });\n\nconst FileRendererHeader = (props: { file: LoadedFile }) => {\n const { file } = props;\n return file.filePath ? (\n <FileRendererPathHeader fileName={file.fileName ?? file.filePath} filePath={file.filePath} />\n ) : null;\n};\n\nexport const WorkbenchFileRendererView = (props: WorkbenchFileRendererViewProps) => {\n const { workbench, contribution } = props;\n const resource = props.placement?.resource;\n const position = useFilePosition(workbench, resource);\n const sectionNavigation = getFileSectionNavigation(resource);\n const editorSectionNavigation = getEditorSectionNavigation(workbench, sectionNavigation);\n const loadKey = createFileRendererLoadKey({ fileRendererId: contribution.id, resource });\n const [loaded, setLoaded] = useState<LoadedFile | null>(null);\n const [error, setError] = useState<{\n loadKey: string;\n message: string;\n } | null>(null);\n const [editState, setEditState] = useState<FileEditControllerState>({ dirty: false, saving: false });\n const controllerRef = useRef<FileEditController | null>(null);\n const retryReadRef = useRef<(() => void) | undefined>(undefined);\n const rendererRef = useRef<HTMLDivElement>(null);\n const previousSectionNavigationRef = useRef<{\n resourceKey?: string;\n treeId: string;\n anchorIds: string[];\n } | null>(null);\n useEffect(() => {\n const previous = previousSectionNavigationRef.current;\n const selectedNodeId =\n previous && getWorkbenchRenderers(workbench).getTreeRenderer(previous.treeId)\n ? getWorkbenchRenderers(workbench).getTreeState(previous.treeId).selectedNodeId\n : undefined;\n if (\n shouldClearFileSectionSelection({\n previous,\n current: sectionNavigation,\n currentResourceKey: resourceKey(resource),\n selectedNodeId,\n }) &&\n previous\n ) {\n getWorkbenchRenderers(workbench).setSelectedNode(previous.treeId, undefined);\n }\n previousSectionNavigationRef.current = sectionNavigation\n ? {\n resourceKey: resourceKey(resource),\n treeId: sectionNavigation.treeId,\n anchorIds: sectionNavigation.anchors.map((anchor) => anchor.id),\n }\n : null;\n }, [resource, sectionNavigation, workbench]);\n // Contribution refresh re-registers an identical contribution as a new\n // object, and a save that changes the document title produces a new resource\n // object with a fresh label. The load key uses resource values instead of\n // object identity, while callbacks read the latest objects through refs.\n const contributionRef = useRef(contribution);\n const resourceRef = useRef(resource);\n const placementRef = useRef(props.placement);\n useEffect(() => {\n contributionRef.current = contribution;\n resourceRef.current = resource;\n placementRef.current = props.placement;\n });\n const contributionId = contribution.id;\n const hasSave = Boolean(contribution.save);\n const ownerKey = props.placement\n ? rendererReadKey(props.placement)\n : JSON.stringify([\"file\", contributionId, loadKey]);\n const instanceId = props.placement?.instanceId ?? contributionId;\n // Re-binding a singleton widget to another resource changes `resource` and reloads.\n useEffect(() => {\n let cancelled = false;\n let removed = false;\n const boundResource = resourceRef.current;\n const boundContribution = contributionRef.current;\n const read = workbench.views.reads.bind(ownerKey);\n let controller: FileEditController | null = null;\n setError(null);\n // A recently viewed document mounts immediately from the cache; the load\n // below reconciles it (unchanged content keeps the editor mounted).\n const cached = readCachedFileContent(loadKey);\n setLoaded(cached ? { ...cached, editorRevision: 1, loadKey } : null);\n const load = (reason: \"refresh\" | \"retry\" = \"refresh\") => {\n read.request(\n {\n queryKey: loadKey,\n load: (signal) => contributionRef.current.load(resourceRef.current, signal),\n onValue: (next) => {\n if (cancelled || removed) return;\n const updateLoaded = acceptFileRendererLoad(next, loadKey, controller);\n if (!updateLoaded) return;\n setError(null);\n setLoaded(updateLoaded);\n },\n onError: (loadError) => {\n if (cancelled || removed) return;\n setError({ loadKey, message: describeError(loadError) });\n },\n },\n reason,\n );\n };\n retryReadRef.current = () => load(\"retry\");\n controller = hasSave\n ? createFileEditController({\n binding: {\n rendererId: contributionId,\n instanceId,\n resourceKey: resourceKey(resourceRef.current),\n },\n debounceMs: SAVE_DEBOUNCE_MS,\n load: () => load(),\n onStateChange: (state) => {\n if (!cancelled) setEditState(state);\n },\n save: (value, origin) =>\n Promise.resolve(boundContribution.save?.(boundResource, value, origin)).then((result) => {\n const current = readCachedFileContent(loadKey);\n if (current && !removed) storeCachedFileContent(loadKey, { ...current, content: value });\n return result ?? undefined;\n }),\n })\n : null;\n controllerRef.current = controller;\n if (cached) controllerRef.current?.setBaseline(cached.content, cached.revision);\n setEditState({ dirty: false, saving: false });\n load();\n const removalSubscription = workbench.resources.onWillRemove((resource) => {\n if (resourceKey(resource) !== resourceKey(resourceRef.current)) return [];\n removed = true;\n const retain = controllerRef.current?.markRemoved();\n const identity = placementRef.current?.placementIdentity;\n return retain && identity ? [identity] : [];\n });\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshFileRenderer((event) => {\n if (removed || event.fileRendererId !== contributionId) return;\n const controller = controllerRef.current;\n if (controller) controller.handleRefreshEvent(event);\n else load();\n });\n return () => {\n cancelled = true;\n read.dispose();\n retryReadRef.current = undefined;\n refreshSubscription.dispose();\n removalSubscription.dispose();\n // Flush the last keystrokes on unbind; the load callback above is\n // cancelled, so a deferred refresh cannot resurrect the old binding.\n controller?.flush();\n if (controllerRef.current === controller) controllerRef.current = null;\n };\n }, [contributionId, hasSave, workbench, loadKey, ownerKey, instanceId]);\n // The last keystrokes are also flushed when the tab is hidden or closed.\n useEffect(() => {\n const flush = () => controllerRef.current?.flush();\n const onVisibility = () => {\n if (document.visibilityState === \"hidden\") flush();\n };\n window.addEventListener(\"beforeunload\", flush);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.removeEventListener(\"beforeunload\", flush);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, []);\n const handleChange = (value: string) => {\n controllerRef.current?.handleChange(value);\n };\n const currentLoaded = isCurrentLoadedFile(loaded, loadKey) ? loaded : null;\n const scrollResetKey = currentLoaded ? `${currentLoaded.loadKey}:${currentLoaded.editorRevision}` : \"\";\n useLayoutEffect(() => {\n if (!scrollResetKey || sectionNavigation) return;\n const node = rendererRef.current;\n if (!node) return;\n requestAnimationFrame(() => {\n let current = node.parentElement;\n while (current) {\n const overflowY = getComputedStyle(current).overflowY;\n if ([\"auto\", \"scroll\", \"overlay\"].includes(overflowY) && current.scrollHeight > current.clientHeight) {\n current.scrollTop = 0;\n }\n current = current.parentElement;\n }\n });\n }, [scrollResetKey, sectionNavigation]);\n const loadError = error?.loadKey === loadKey ? error.message : undefined;\n if (loadError && !currentLoaded) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\" flexDirection=\"column\" gap=\"sm\">\n <Text color=\"fg.muted\">{loadError}</Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => retryReadRef.current?.()}>\n Retry\n </Button>\n </Center>\n );\n }\n if (!currentLoaded) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\">\n <Spinner size=\"sm\" />\n </Center>\n );\n }\n // The key must carry the document identity, not just the contribution: two\n // documents from the same renderer both start at revision 1, so keying on the\n // contribution alone reuses the editor and keeps showing the previous file.\n const editorKey = `${currentLoaded.loadKey}:${currentLoaded.editorRevision}`;\n let errorNotice: ReactNode = null;\n if (editState.removed) {\n errorNotice = (\n <FileRendererErrorNotice message=\"This resource was removed. Your draft is kept here. Copy it before closing this tab.\" />\n );\n } else if (loadError) {\n errorNotice = <FileRendererErrorNotice message={loadError} onRetry={() => retryReadRef.current?.()} />;\n } else if (editState.saveError) {\n errorNotice = (\n <FileRendererErrorNotice message={editState.saveError} onRetry={() => controllerRef.current?.retry()} />\n );\n }\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n <FileRendererHeader file={currentLoaded} />\n <Box flex=\"1\" minH=\"0\">\n <FileRendererContentView\n content={currentLoaded}\n position={position}\n editorKey={editorKey}\n errorNotice={errorNotice}\n contributionCanSave={Boolean(contribution.save)}\n onActiveSectionChange={\n sectionNavigation\n ? (sectionId) => syncActiveFileSection({ workbench, navigation: sectionNavigation, sectionId })\n : undefined\n }\n onChange={handleChange}\n rendererRef={rendererRef}\n sectionNavigation={editorSectionNavigation}\n title={contribution.title}\n />\n </Box>\n </Flex>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"file-renderer-view-CPCSE94i.js","names":["ResourceRef","FILE_SECTION_NAVIGATION_METADATA_KEY","FileSectionAnchor","id","heading","occurrence","FileSectionNavigation","treeId","targetNodeId","anchors","isAnchor","value","anchor","Record","occurrenceIsValid","undefined","Number","isInteger","getFileSectionNavigation","resource","metadata","navigation","Array","isArray","every","resolveFileSectionTargetId","selectedNodeId","some","PreviousFileSectionNavigation","resourceKey","anchorIds","shouldClearFileSectionSelection","input","previous","current","currentResourceKey","includes","FileKind","IMAGE_EXTENSIONS","Set","PROSE_EXTENSIONS","CODE_LANGUAGE_BY_EXTENSION","Record","ts","tsx","js","jsx","mjs","cjs","json","jsonc","py","rb","rs","go","java","kt","c","h","cpp","cc","hpp","cs","php","swift","sh","bash","zsh","sql","css","scss","less","html","xml","yml","yaml","toml","ini","dockerfile","graphql","gql","md","markdown","txt","extensionOf","fileName","dot","lastIndexOf","length","slice","toLowerCase","isImage","mimeType","startsWith","has","pickFileKind","extension","codeLanguageFor","FileRendererContent","codeLanguageFor","pickFileKind","FileRendererPresentation","kind","isEditable","language","resolveFileRendererPresentation","content","contributionCanSave","emptyState","automaticKind","fileName","mimeType","editable","textRenderer","Box","Center","Flex","Image","Text","FileSourcePosition","AlertMessage","EmptyState","CodeEditor","MarkdownEditor","ReactNode","RefObject","FileRendererContent","resolveFileRendererPresentation","FileRendererContentViewProps","content","position","editorKey","errorNotice","contributionCanSave","onActiveSectionChange","sectionId","onChange","value","rendererRef","HTMLDivElement","sectionNavigation","anchors","Array","id","heading","occurrence","targetId","title","FileRendererContentView","props","$","_c","t0","presentation","t1","kind","positionNotice","t2","emptyState","t3","description","t4","t5","dataUrl","Symbol","for","fileName","isEditable","undefined","language","placeholder","t6","_c","FileRendererRefreshEnvelope","FileRendererRefreshOrigin","FileRendererSaveResult","FileEditControllerState","dirty","saving","saveError","removed","FileEditControllerInput","binding","Omit","resourceKey","debounceMs","load","event","save","value","origin","Promise","createOperationId","onStateChange","state","FileEditController","ReturnType","createFileEditController","input","baseline","baselineRevision","draft","activeSave","deferredRevision","genericRefreshDeferred","timer","setTimeout","operationSequence","seenRefreshRevisions","Set","completedOperationIds","describeError","error","Error","message","getState","const","notify","clearTimer","clearTimeout","nextOperationId","Date","now","hasPendingLocalState","Boolean","deferRefresh","revision","localeCompare","isSelfRefresh","operationId","rendererId","instanceId","has","takeDeferredRefresh","savedRevision","generic","undefined","runSave","resolve","then","result","add","size","delete","values","next","schedule","catch","getDraft","markRemoved","retain","getBaseline","setBaseline","acceptLoaded","shown","handleChange","handleRefreshEvent","retry","retryLoad","flush","Button","Flex","Text","FileRendererErrorNotice","props","$","_c","message","onRetry","t0","t1","t2","_c","resourceKey","ResourceRef","FileRendererLoadKeyInput","fileRendererId","resource","stableValue","value","Array","isArray","map","Object","fromEntries","entries","Record","sort","left","right","localeCompare","key","entry","createFileRendererLoadKey","input","resourceValue","id","type","metadata","JSON","stringify","isCurrentLoadedFile","loaded","loadKey","Text","Header","resolveFileIconElement","useFileIconThemePreference","FileRendererPathHeader","props","$","_c","fileName","filePath","activeFileIconTheme","t0","theme","t1","t2","t3","_c","Box","Button","Center","Flex","Spinner","Text","ResourceRef","resourceKey","ReactNode","useEffect","useLayoutEffect","useRef","useState","RegisteredFileRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","getFileSectionNavigation","resolveFileSectionTargetId","shouldClearFileSectionSelection","useWorkbenchStore","FileRendererContentView","createFileEditController","FileEditController","FileEditControllerState","FileRendererErrorNotice","createFileRendererLoadKey","isCurrentLoadedFile","acceptFileRendererLoad","LoadedFile","readCachedFileContent","storeCachedFileContent","FileRendererPathHeader","WorkbenchFileRendererViewProps","workbench","contribution","placement","SAVE_DEBOUNCE_MS","describeError","error","Error","message","syncActiveFileSection","input","navigation","ReturnType","sectionId","getTreeRenderer","treeId","anchors","some","anchor","id","setSelectedNode","selectedNodeId","getTreeState","undefined","getEditorSectionNavigation","targetId","useFilePosition","resource","$","_c","t0","state","location","position","page_0","Object","values","pages","find","page","ref","extensionId","key","document","metadataKey","metadata","store","FileRendererHeader","props","file","fileName","filePath","WorkbenchFileRendererView","sectionNavigation","editorSectionNavigation","loadKey","fileRendererId","loaded","setLoaded","setError","t1","Symbol","for","dirty","saving","editState","setEditState","controllerRef","retryReadRef","rendererRef","previousSectionNavigationRef","t2","t3","previous","current","currentResourceKey","anchorIds","map","_temp","contributionRef","resourceRef","placementRef","t4","contributionId","hasSave","Boolean","save","ownerKey","JSON","stringify","instanceId","t5","cancelled","removed","boundResource","boundContribution","read","views","reads","bind","controller","cached","editorRevision","load","t6","reason","request","queryKey","signal","onValue","next","updateLoaded","onError","loadError","binding","rendererId","debounceMs","onStateChange","value","origin","Promise","resolve","then","result","content","setBaseline","revision","removalSubscription","resources","onWillRemove","resource_0","retain","markRemoved","identity","placementIdentity","refreshSubscription","onDidRefreshFileRenderer","event","controller_0","handleRefreshEvent","dispose","flush","t7","t8","onVisibility","visibilityState","window","addEventListener","removeEventListener","t9","value_0","handleChange","t10","currentLoaded","scrollResetKey","t11","t12","node","requestAnimationFrame","current_0","parentElement","overflowY","getComputedStyle","includes","scrollHeight","clientHeight","scrollTop","loadError_0","t13","t14","t15","editorKey","errorNotice","saveError","retry","t16","t17","title","t18","_c","rendererReadKey","acceptFileRendererLoad","useWorkbenchStore","readCachedFileContent","storeCachedFileContent","FILE_SECTION_NAVIGATION_METADATA_KEY","isAnchor","value","anchor","occurrenceIsValid","getFileSectionNavigation","resource","navigation","resolveFileSectionTargetId","selectedNodeId","shouldClearFileSectionSelection","input","previous","current","currentResourceKey","IMAGE_EXTENSIONS","PROSE_EXTENSIONS","CODE_LANGUAGE_BY_EXTENSION","extensionOf","fileName","dot","isImage","mimeType","pickFileKind","extension","codeLanguageFor","resolveFileRendererPresentation","content","automaticKind","isEditable","contributionCanSave","FileRendererContentView","$","c","props","t0","presentation","t1","position","AlertMessage","positionNotice","t2","t3","t4","EmptyState","t5","errorNotice","Flex","Center","Text","title","Image","rendererRef","onChange","editorKey","Box","CodeEditor","onActiveSectionChange","sectionNavigation","MarkdownEditor","t6","createFileEditController","baseline","removed","baselineRevision","draft","activeSave","saveError","deferredRevision","genericRefreshDeferred","timer","operationSequence","seenRefreshRevisions","completedOperationIds","describeError","error","getState","notify","clearTimer","nextOperationId","hasPendingLocalState","deferRefresh","event","isSelfRefresh","operationId","takeDeferredRefresh","revision","generic","savedRevision","runSave","origin","result","schedule","retain","shown","FileRendererErrorNotice","message","onRetry","Button","stableValue","left","right","key","entry","createFileRendererLoadKey","resourceValue","resourceKey","fileRendererId","isCurrentLoadedFile","loaded","loadKey","FileRendererPathHeader","useFileIconThemePreference","activeFileIconTheme","resolveFileIconElement","filePath","Header","SAVE_DEBOUNCE_MS","syncActiveFileSection","getWorkbenchRenderers","workbench","sectionId","getEditorSectionNavigation","useFilePosition","location","state","page","FileRendererHeader","file","WorkbenchFileRendererView","editorSectionNavigation","contribution","setLoaded","useState","setError","editState","setEditState","controllerRef","useRef","retryReadRef","previousSectionNavigationRef","_temp","useEffect","contributionRef","resourceRef","placementRef","contributionId","hasSave","ownerKey","instanceId","cancelled","boundResource","boundContribution","read","controller","cached","load","reason","signal","updateLoaded","next","loadError","removalSubscription","resource_0","identity","refreshSubscription","controller_0","t7","t8","flush","onVisibility","t9","value_0","handleChange","t10","currentLoaded","scrollResetKey","t11","t12","node","current_0","overflowY","useLayoutEffect","loadError_0","t13","t14","t15","Spinner","t16","t17","t18"],"sources":["../src/core/registries/renderers/file-section-navigation.ts","../src/react/renderers/file/file-kind.ts","../src/react/renderers/file/file-renderer-presentation.ts","../src/react/renderers/file/file-renderer-content.tsx","../src/react/renderers/file/file-renderer-edit-state.ts","../src/react/renderers/file/file-renderer-error-notice.tsx","../src/react/renderers/file/file-renderer-load-key.ts","../src/react/renderers/file/file-renderer-path-header.tsx","../src/react/renderers/file/file-renderer-view.tsx"],"sourcesContent":["import type { ResourceRef } from \"../resources/resource-registry\";\n\nexport const FILE_SECTION_NAVIGATION_METADATA_KEY = \"pstdio.fileSectionNavigation\";\n\nexport interface FileSectionAnchor {\n id: string;\n heading: string;\n occurrence?: number;\n}\n\nexport interface FileSectionNavigation {\n treeId: string;\n targetNodeId: string;\n anchors: FileSectionAnchor[];\n}\n\nconst isAnchor = (value: unknown): value is FileSectionAnchor => {\n if (!value || typeof value !== \"object\") return false;\n const anchor = value as Record<string, unknown>;\n const occurrenceIsValid =\n anchor.occurrence === undefined ||\n (typeof anchor.occurrence === \"number\" && Number.isInteger(anchor.occurrence) && anchor.occurrence >= 0);\n return typeof anchor.id === \"string\" && typeof anchor.heading === \"string\" && occurrenceIsValid;\n};\n\nexport const getFileSectionNavigation = (resource: ResourceRef | undefined): FileSectionNavigation | undefined => {\n const value = resource?.metadata?.[FILE_SECTION_NAVIGATION_METADATA_KEY];\n if (!value || typeof value !== \"object\") return undefined;\n const navigation = value as Record<string, unknown>;\n if (typeof navigation.treeId !== \"string\" || typeof navigation.targetNodeId !== \"string\") return undefined;\n if (!Array.isArray(navigation.anchors) || !navigation.anchors.every(isAnchor)) return undefined;\n\n return {\n treeId: navigation.treeId,\n targetNodeId: navigation.targetNodeId,\n anchors: navigation.anchors,\n };\n};\n\nexport const resolveFileSectionTargetId = (navigation: FileSectionNavigation, selectedNodeId: string | undefined) => {\n if (selectedNodeId && navigation.anchors.some((anchor) => anchor.id === selectedNodeId)) return selectedNodeId;\n return navigation.targetNodeId;\n};\n\nexport interface PreviousFileSectionNavigation {\n resourceKey?: string;\n treeId: string;\n anchorIds: string[];\n}\n\nexport const shouldClearFileSectionSelection = (input: {\n previous: PreviousFileSectionNavigation | null;\n current: FileSectionNavigation | undefined;\n currentResourceKey?: string;\n selectedNodeId?: string;\n}) => {\n const { previous, current, currentResourceKey, selectedNodeId } = input;\n if (!previous || !selectedNodeId || !previous.anchorIds.includes(selectedNodeId)) return false;\n if (current?.targetNodeId === selectedNodeId) return false;\n\n return !current || previous.treeId !== current.treeId || previous.resourceKey !== currentResourceKey;\n};\n","// Generic file-type dispatch for the file renderer. Markdown is the default so\n// `.md` / `.txt` / extension-less files open in the prose editor; recognised code\n// extensions open in Monaco; images render read-only. This is deliberately\n// domain-agnostic — it knows about file types, not about tickets.\n\nexport type FileKind = \"markdown\" | \"code\" | \"image\";\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"svg\", \"avif\", \"bmp\", \"ico\"]);\nconst PROSE_EXTENSIONS = new Set([\"md\", \"markdown\", \"txt\"]);\n\n// Extension → Monaco language id. Markdown/plain text intentionally absent so\n// they fall through to the prose editor.\nconst CODE_LANGUAGE_BY_EXTENSION: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n json: \"json\",\n jsonc: \"json\",\n py: \"python\",\n rb: \"ruby\",\n rs: \"rust\",\n go: \"go\",\n java: \"java\",\n kt: \"kotlin\",\n c: \"c\",\n h: \"c\",\n cpp: \"cpp\",\n cc: \"cpp\",\n hpp: \"cpp\",\n cs: \"csharp\",\n php: \"php\",\n swift: \"swift\",\n sh: \"shell\",\n bash: \"shell\",\n zsh: \"shell\",\n sql: \"sql\",\n css: \"css\",\n scss: \"scss\",\n less: \"less\",\n html: \"html\",\n xml: \"xml\",\n yml: \"yaml\",\n yaml: \"yaml\",\n toml: \"ini\",\n ini: \"ini\",\n dockerfile: \"dockerfile\",\n graphql: \"graphql\",\n gql: \"graphql\",\n md: \"markdown\",\n markdown: \"markdown\",\n txt: \"plaintext\",\n};\n\nconst extensionOf = (fileName: string | undefined) => {\n if (!fileName) return \"\";\n const dot = fileName.lastIndexOf(\".\");\n if (dot < 0 || dot === fileName.length - 1) return \"\";\n return fileName.slice(dot + 1).toLowerCase();\n};\n\nconst isImage = (fileName: string | undefined, mimeType: string | undefined) => {\n if (mimeType?.startsWith(\"image/\")) return true;\n return IMAGE_EXTENSIONS.has(extensionOf(fileName));\n};\n\nexport const pickFileKind = (fileName: string | undefined, mimeType: string | undefined): FileKind => {\n if (isImage(fileName, mimeType)) return \"image\";\n const extension = extensionOf(fileName);\n if (!PROSE_EXTENSIONS.has(extension) && extension in CODE_LANGUAGE_BY_EXTENSION) return \"code\";\n return \"markdown\";\n};\n\n// Monaco language for a code file; falls back to plaintext for unknown extensions.\nexport const codeLanguageFor = (fileName: string | undefined) =>\n CODE_LANGUAGE_BY_EXTENSION[extensionOf(fileName)] ?? \"plaintext\";\n","import type { FileRendererContent } from \"../../../core\";\nimport { codeLanguageFor, pickFileKind } from \"./file-kind\";\n\nexport type FileRendererPresentation =\n | { kind: \"empty\"; isEditable: false }\n | { kind: \"image\"; isEditable: false }\n | { kind: \"code\"; isEditable: boolean; language: string }\n | { kind: \"markdown\"; isEditable: boolean };\n\nexport const resolveFileRendererPresentation = (\n content: FileRendererContent,\n contributionCanSave: boolean,\n): FileRendererPresentation => {\n if (content.emptyState) return { kind: \"empty\", isEditable: false };\n\n const automaticKind = pickFileKind(content.fileName, content.mimeType);\n if (automaticKind === \"image\") return { kind: \"image\", isEditable: false };\n\n const isEditable = contributionCanSave && content.editable !== false;\n if (automaticKind === \"code\" || content.textRenderer === \"monaco\") {\n return { kind: \"code\", isEditable, language: codeLanguageFor(content.fileName) };\n }\n return { kind: \"markdown\", isEditable };\n};\n","import { Box, Center, Flex, Image, Text } from \"@chakra-ui/react\";\nimport type { FileSourcePosition } from \"@pstdio/sdk/extensions\";\nimport { AlertMessage, EmptyState } from \"@pstdio/ui\";\nimport { CodeEditor } from \"@pstdio/ui/diff\";\nimport { MarkdownEditor } from \"@pstdio/ui/rich-text\";\nimport type { ReactNode, RefObject } from \"react\";\nimport type { FileRendererContent } from \"../../../core\";\nimport { resolveFileRendererPresentation } from \"./file-renderer-presentation\";\n\ninterface FileRendererContentViewProps {\n content: FileRendererContent;\n position?: FileSourcePosition;\n editorKey: string;\n errorNotice: ReactNode;\n contributionCanSave: boolean;\n onActiveSectionChange?: (sectionId: string | null) => void;\n onChange: (value: string) => void;\n rendererRef: RefObject<HTMLDivElement | null>;\n sectionNavigation?: {\n anchors: Array<{ id: string; heading: string; occurrence?: number }>;\n targetId: string;\n };\n title: string;\n}\n\nexport const FileRendererContentView = (props: FileRendererContentViewProps) => {\n const {\n content,\n position,\n editorKey,\n errorNotice,\n contributionCanSave,\n onActiveSectionChange,\n onChange,\n rendererRef,\n sectionNavigation,\n title,\n } = props;\n const presentation = resolveFileRendererPresentation(content, contributionCanSave);\n const positionNotice =\n position && presentation.kind !== \"code\" && presentation.kind !== \"empty\" ? (\n <AlertMessage status=\"info\" title=\"Source location unavailable\">\n This preview does not support source line selection.\n </AlertMessage>\n ) : null;\n\n if (presentation.kind === \"empty\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <EmptyState\n flex=\"1\"\n minH=\"0\"\n title={content.emptyState?.title ?? \"Select a file\"}\n description={content.emptyState?.description}\n />\n </Flex>\n );\n }\n\n if (presentation.kind === \"image\") {\n if (!content.dataUrl) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\">\n <Text color=\"fg.muted\">This image preview is unavailable.</Text>\n </Center>\n );\n }\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Center ref={rendererRef} flex=\"1\" minH=\"0\" p=\"md\" overflow=\"auto\">\n <Image src={content.dataUrl} alt={content.fileName ?? title} maxW=\"100%\" maxH=\"100%\" objectFit=\"contain\" />\n </Center>\n </Flex>\n );\n }\n\n if (presentation.kind === \"code\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Box flex=\"1\" minH=\"0\">\n <CodeEditor\n key={editorKey}\n language={presentation.language}\n position={position}\n fileName={content.fileName}\n defaultCode={content.content ?? \"\"}\n isEditable={presentation.isEditable}\n showLineNumbers\n onChange={presentation.isEditable ? onChange : undefined}\n />\n </Box>\n </Flex>\n );\n }\n\n return (\n <Flex ref={rendererRef} direction=\"column\" h=\"full\" minH=\"0\" overflow=\"hidden\" bg=\"bg\">\n {errorNotice}\n {positionNotice}\n <Box flex=\"1\" minH=\"0\" overflowY=\"auto\">\n <MarkdownEditor\n key={editorKey}\n defaultState={content.content ?? \"\"}\n isEditable={presentation.isEditable}\n sectionNavigation={sectionNavigation}\n placeholder={presentation.isEditable ? (content.placeholder ?? \"Write…\") : undefined}\n onActiveSectionChange={onActiveSectionChange}\n onChange={presentation.isEditable ? onChange : undefined}\n />\n </Box>\n </Flex>\n );\n};\n","// Owns the editable file renderer's save lifecycle: the last loaded or saved\n// value (the baseline), the debounced draft, the one in-flight save, and\n// refresh events that arrive while a draft or save exists.\n//\n// Invariants (from the renderer edit/refresh lifecycle PRD):\n// - a change equal to the baseline never schedules a save\n// - at most one save runs at a time; the baseline advances when it succeeds\n// - a failed save keeps the draft so a later change or flush retries it\n// - refresh events are deferred while a draft or save exists and coalesce\n// into one reload after the last save settles\n\nimport type {\n FileRendererRefreshEnvelope,\n FileRendererRefreshOrigin,\n FileRendererSaveResult,\n} from \"../../../core/registries/renderers/file-renderer-registry\";\n\nexport interface FileEditControllerState {\n dirty: boolean;\n saving: boolean;\n saveError?: string;\n removed?: true;\n}\n\nexport interface FileEditControllerInput {\n binding: Omit<FileRendererRefreshOrigin, \"operationId\"> & { resourceKey?: string };\n debounceMs: number;\n load: (event?: FileRendererRefreshEnvelope) => void;\n save: (value: string, origin: FileRendererRefreshOrigin) => Promise<FileRendererSaveResult | undefined>;\n createOperationId?: () => string;\n onStateChange?: (state: FileEditControllerState) => void;\n}\n\nexport type FileEditController = ReturnType<typeof createFileEditController>;\n\nexport const createFileEditController = (input: FileEditControllerInput) => {\n let baseline: string | undefined;\n let removed = false;\n let baselineRevision: string | undefined;\n let draft: string | null = null;\n let activeSave: { value: string; origin: FileRendererRefreshOrigin } | null = null;\n let saveError: string | undefined;\n let deferredRevision: string | undefined;\n let genericRefreshDeferred = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let operationSequence = 0;\n const seenRefreshRevisions = new Set<string>();\n const completedOperationIds = new Set<string>();\n\n const describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to save file.\");\n const getState = (): FileEditControllerState => ({\n dirty: draft !== null || (activeSave !== null && activeSave.value !== baseline),\n saving: activeSave !== null,\n ...(saveError ? { saveError } : {}),\n ...(removed ? { removed: true as const } : {}),\n });\n const notify = () => input.onStateChange?.(getState());\n\n const clearTimer = () => {\n if (timer === null) return;\n clearTimeout(timer);\n timer = null;\n };\n\n const nextOperationId = () => input.createOperationId?.() ?? `file-save-${Date.now()}-${++operationSequence}`;\n\n const hasPendingLocalState = () => draft !== null || activeSave !== null || timer !== null || Boolean(saveError);\n\n const deferRefresh = (event: FileRendererRefreshEnvelope) => {\n if (event.revision && (!deferredRevision || event.revision.localeCompare(deferredRevision) > 0)) {\n deferredRevision = event.revision;\n }\n if (!event.revision) genericRefreshDeferred = true;\n };\n\n const isSelfRefresh = (event: FileRendererRefreshEnvelope) => {\n const operationId = event.origin?.operationId;\n if (!operationId) return false;\n if (event.origin?.rendererId !== input.binding.rendererId) return false;\n if (event.origin.instanceId !== input.binding.instanceId) return false;\n return activeSave?.origin.operationId === operationId || completedOperationIds.has(operationId);\n };\n\n const takeDeferredRefresh = (savedRevision?: string) => {\n if (draft !== null || activeSave) return;\n const revision = deferredRevision;\n const generic = genericRefreshDeferred;\n deferredRevision = undefined;\n genericRefreshDeferred = false;\n if (revision && (!savedRevision || revision.localeCompare(savedRevision) > 0)) {\n input.load({ resourceKey: input.binding.resourceKey, revision });\n return;\n }\n if (generic) input.load({ resourceKey: input.binding.resourceKey });\n };\n\n const runSave = () => {\n if (removed || draft === null || activeSave || saveError) return;\n const value = draft;\n draft = null;\n const origin = {\n rendererId: input.binding.rendererId,\n instanceId: input.binding.instanceId,\n operationId: nextOperationId(),\n };\n activeSave = { value, origin };\n notify();\n void Promise.resolve(input.save(value, origin))\n .then((result) => {\n if (activeSave?.origin.operationId !== origin.operationId) return;\n activeSave = null;\n completedOperationIds.add(origin.operationId);\n if (completedOperationIds.size > 20) completedOperationIds.delete(completedOperationIds.values().next().value!);\n baseline = value;\n baselineRevision = result?.revision ?? baselineRevision;\n if (draft === baseline) {\n draft = null;\n clearTimer();\n }\n notify();\n if (draft !== null) {\n schedule();\n return;\n }\n takeDeferredRefresh(result?.revision);\n })\n .catch((error) => {\n if (removed) return;\n if (activeSave?.origin.operationId !== origin.operationId) return;\n activeSave = null;\n if (draft === null) draft = value;\n saveError = describeError(error);\n notify();\n });\n };\n\n const schedule = () => {\n clearTimer();\n timer = setTimeout(() => {\n timer = null;\n runSave();\n }, input.debounceMs);\n };\n\n return {\n getDraft() {\n return draft ?? activeSave?.value ?? baseline;\n },\n markRemoved() {\n const retain = hasPendingLocalState();\n removed = true;\n draft = draft ?? activeSave?.value ?? null;\n activeSave = null;\n clearTimer();\n notify();\n return retain;\n },\n getBaseline() {\n return baseline;\n },\n getState,\n setBaseline(value: string | undefined, revision?: string) {\n baseline = value;\n baselineRevision = revision;\n notify();\n },\n // Takes a freshly loaded value as the new baseline and returns the value the\n // editor was showing, so the caller can tell whether the editor must show\n // something else. Returns null while pending local state must keep the\n // editor: the refresh is deferred until the save settles.\n acceptLoaded(value: string | undefined, revision?: string) {\n if (removed) return null;\n if (hasPendingLocalState()) {\n deferRefresh(revision ? { revision } : {});\n return null;\n }\n const shown = baseline;\n baseline = value;\n baselineRevision = revision;\n notify();\n return { shown };\n },\n handleChange(value: string) {\n if (removed) {\n draft = value;\n notify();\n return;\n }\n if (saveError && value === draft) return;\n saveError = undefined;\n if (value === baseline && !activeSave) {\n draft = null;\n clearTimer();\n notify();\n return;\n }\n if (activeSave?.value === value) {\n draft = null;\n clearTimer();\n notify();\n return;\n }\n draft = value;\n schedule();\n notify();\n },\n handleRefreshEvent(event: FileRendererRefreshEnvelope = {}) {\n if (removed) return;\n if (event.resourceKey && event.resourceKey !== input.binding.resourceKey) return;\n if (isSelfRefresh(event)) return;\n if (event.revision && seenRefreshRevisions.has(event.revision)) return;\n if (event.revision) seenRefreshRevisions.add(event.revision);\n if (hasPendingLocalState()) {\n deferRefresh(event);\n return;\n }\n if (event.revision && baselineRevision && event.revision.localeCompare(baselineRevision) <= 0) return;\n input.load(event);\n },\n retry() {\n if (!saveError || draft === null || activeSave) return;\n saveError = undefined;\n notify();\n runSave();\n },\n retryLoad() {\n if (removed) return;\n input.load({ resourceKey: input.binding.resourceKey });\n },\n flush() {\n clearTimer();\n runSave();\n },\n };\n};\n","import { Button, Flex, Text } from \"@chakra-ui/react\";\n\nexport const FileRendererErrorNotice = (props: { message: string; onRetry?: () => void }) => {\n const { message, onRetry } = props;\n return (\n <Flex\n flex=\"none\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"sm\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.muted\"\n bg=\"bg.muted\"\n px=\"sm\"\n py=\"xs\"\n >\n <Text color=\"fg.muted\" textStyle=\"label/S/regular\">\n {message}\n </Text>\n {onRetry ? (\n <Button size=\"2xs\" variant=\"subtle\" onClick={onRetry}>\n Retry\n </Button>\n ) : null}\n </Flex>\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceRef } from \"../../../core\";\n\ninterface FileRendererLoadKeyInput {\n fileRendererId: string;\n resource: ResourceRef | undefined;\n}\nconst stableValue = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(stableValue);\n if (!value || typeof value !== \"object\") return value;\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableValue(entry)]),\n );\n};\nexport const createFileRendererLoadKey = (input: FileRendererLoadKeyInput) => {\n const { fileRendererId, resource } = input;\n const resourceValue = resource\n ? stableValue({\n id: resource.id,\n type: resource.type,\n metadata: resource.metadata,\n })\n : null;\n return `${JSON.stringify(resourceKey(resource))}:${fileRendererId}:${JSON.stringify(resourceValue)}`;\n};\nexport const isCurrentLoadedFile = (\n loaded: {\n loadKey: string;\n } | null,\n loadKey: string,\n) => loaded?.loadKey === loadKey;\n","import { Text } from \"@chakra-ui/react\";\nimport { Header, resolveFileIconElement, useFileIconThemePreference } from \"@pstdio/ui\";\n\nexport const FileRendererPathHeader = (props: { fileName: string; filePath: string }) => {\n const { fileName, filePath } = props;\n const { activeFileIconTheme } = useFileIconThemePreference();\n\n return (\n <Header variant=\"narrow\" flexShrink={0} gap=\"2xs\" bg=\"bg\">\n {resolveFileIconElement(fileName, { theme: activeFileIconTheme })}\n <Text aria-label={`File path ${filePath}`} textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {filePath}\n </Text>\n </Header>\n );\n};\n","import { Box, Button, Center, Flex, Spinner, Text } from \"@chakra-ui/react\";\nimport { type ResourceRef, resourceKey } from \"@pstdio/sdk/extensions\";\nimport { type ReactNode, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { RegisteredFileRendererContribution, WorkbenchCore, WorkbenchPanelInstance } from \"../../../core\";\nimport { getWorkbenchRenderers, rendererReadKey } from \"../../../core\";\nimport {\n getFileSectionNavigation,\n resolveFileSectionTargetId,\n shouldClearFileSectionSelection,\n} from \"../../../core/registries/renderers/file-section-navigation\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { FileRendererContentView } from \"./file-renderer-content\";\nimport {\n createFileEditController,\n type FileEditController,\n type FileEditControllerState,\n} from \"./file-renderer-edit-state\";\nimport { FileRendererErrorNotice } from \"./file-renderer-error-notice\";\nimport { createFileRendererLoadKey, isCurrentLoadedFile } from \"./file-renderer-load-key\";\nimport {\n acceptFileRendererLoad,\n type LoadedFile,\n readCachedFileContent,\n storeCachedFileContent,\n} from \"./file-renderer-load-state\";\nimport { FileRendererPathHeader } from \"./file-renderer-path-header\";\n\ninterface WorkbenchFileRendererViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredFileRendererContribution;\n // The bound resource (e.g. the open ticket / ticket-file) the load/save\n // commands operate on.\n placement?: WorkbenchPanelInstance;\n}\nconst SAVE_DEBOUNCE_MS = 600;\nconst describeError = (error: unknown) => (error instanceof Error ? error.message : \"Failed to load file.\");\nconst syncActiveFileSection = (input: {\n workbench: WorkbenchCore;\n navigation: ReturnType<typeof getFileSectionNavigation>;\n sectionId: string | null;\n}) => {\n const { workbench, navigation, sectionId } = input;\n if (!navigation || !getWorkbenchRenderers(workbench).getTreeRenderer(navigation.treeId)) return;\n if (sectionId && navigation.anchors.some((anchor) => anchor.id === sectionId)) {\n getWorkbenchRenderers(workbench).setSelectedNode(navigation.treeId, sectionId);\n return;\n }\n const selectedNodeId = getWorkbenchRenderers(workbench).getTreeState(navigation.treeId).selectedNodeId;\n if (selectedNodeId && navigation.anchors.some((anchor) => anchor.id === selectedNodeId)) {\n getWorkbenchRenderers(workbench).setSelectedNode(navigation.treeId, undefined);\n }\n};\nconst getEditorSectionNavigation = (\n workbench: WorkbenchCore,\n navigation: ReturnType<typeof getFileSectionNavigation>,\n) => {\n if (!navigation) return undefined;\n const selectedNodeId = getWorkbenchRenderers(workbench).getTreeRenderer(navigation.treeId)\n ? getWorkbenchRenderers(workbench).getTreeState(navigation.treeId).selectedNodeId\n : undefined;\n return {\n anchors: navigation.anchors,\n targetId: resolveFileSectionTargetId(navigation, selectedNodeId),\n };\n};\nconst useFilePosition = (workbench: WorkbenchCore, resource?: ResourceRef) =>\n useWorkbenchStore(workbench.pages.store, (state) => {\n const location = state.location;\n if (!location?.position || resourceKey(location.resource) !== resourceKey(resource)) return undefined;\n const page = Object.values(state.pages).find(\n (page) => page.ref.id === location.page.id && page.ref.extensionId === location.page.extensionId,\n );\n const key = page?.document?.metadataKey;\n if (!key || location.resource?.metadata?.[key] !== resource?.metadata?.[key]) return undefined;\n return location.position;\n });\n\nconst FileRendererHeader = (props: { file: LoadedFile }) => {\n const { file } = props;\n return file.filePath ? (\n <FileRendererPathHeader fileName={file.fileName ?? file.filePath} filePath={file.filePath} />\n ) : null;\n};\n\nexport const WorkbenchFileRendererView = (props: WorkbenchFileRendererViewProps) => {\n const { workbench, contribution } = props;\n const resource = props.placement?.resource;\n const position = useFilePosition(workbench, resource);\n const sectionNavigation = getFileSectionNavigation(resource);\n const editorSectionNavigation = getEditorSectionNavigation(workbench, sectionNavigation);\n const loadKey = createFileRendererLoadKey({ fileRendererId: contribution.id, resource });\n const [loaded, setLoaded] = useState<LoadedFile | null>(null);\n const [error, setError] = useState<{\n loadKey: string;\n message: string;\n } | null>(null);\n const [editState, setEditState] = useState<FileEditControllerState>({ dirty: false, saving: false });\n const controllerRef = useRef<FileEditController | null>(null);\n const retryReadRef = useRef<(() => void) | undefined>(undefined);\n const rendererRef = useRef<HTMLDivElement>(null);\n const previousSectionNavigationRef = useRef<{\n resourceKey?: string;\n treeId: string;\n anchorIds: string[];\n } | null>(null);\n useEffect(() => {\n const previous = previousSectionNavigationRef.current;\n const selectedNodeId =\n previous && getWorkbenchRenderers(workbench).getTreeRenderer(previous.treeId)\n ? getWorkbenchRenderers(workbench).getTreeState(previous.treeId).selectedNodeId\n : undefined;\n if (\n shouldClearFileSectionSelection({\n previous,\n current: sectionNavigation,\n currentResourceKey: resourceKey(resource),\n selectedNodeId,\n }) &&\n previous\n ) {\n getWorkbenchRenderers(workbench).setSelectedNode(previous.treeId, undefined);\n }\n previousSectionNavigationRef.current = sectionNavigation\n ? {\n resourceKey: resourceKey(resource),\n treeId: sectionNavigation.treeId,\n anchorIds: sectionNavigation.anchors.map((anchor) => anchor.id),\n }\n : null;\n }, [resource, sectionNavigation, workbench]);\n // Contribution refresh re-registers an identical contribution as a new\n // object, and a save that changes the document title produces a new resource\n // object with a fresh label. The load key uses resource values instead of\n // object identity, while callbacks read the latest objects through refs.\n const contributionRef = useRef(contribution);\n const resourceRef = useRef(resource);\n const placementRef = useRef(props.placement);\n useEffect(() => {\n contributionRef.current = contribution;\n resourceRef.current = resource;\n placementRef.current = props.placement;\n });\n const contributionId = contribution.id;\n const hasSave = Boolean(contribution.save);\n const ownerKey = props.placement\n ? rendererReadKey(props.placement)\n : JSON.stringify([\"file\", contributionId, loadKey]);\n const instanceId = props.placement?.instanceId ?? contributionId;\n // Re-binding a singleton widget to another resource changes `resource` and reloads.\n useEffect(() => {\n let cancelled = false;\n let removed = false;\n const boundResource = resourceRef.current;\n const boundContribution = contributionRef.current;\n const read = workbench.views.reads.bind(ownerKey);\n let controller: FileEditController | null = null;\n setError(null);\n // A recently viewed document mounts immediately from the cache; the load\n // below reconciles it (unchanged content keeps the editor mounted).\n const cached = readCachedFileContent(loadKey);\n setLoaded(cached ? { ...cached, editorRevision: 1, loadKey } : null);\n const load = (reason: \"refresh\" | \"retry\" = \"refresh\") => {\n read.request(\n {\n queryKey: loadKey,\n load: (signal) => contributionRef.current.load(resourceRef.current, signal),\n onValue: (next) => {\n if (cancelled || removed) return;\n const updateLoaded = acceptFileRendererLoad(next, loadKey, controller);\n if (!updateLoaded) return;\n setError(null);\n setLoaded(updateLoaded);\n },\n onError: (loadError) => {\n if (cancelled || removed) return;\n setError({ loadKey, message: describeError(loadError) });\n },\n },\n reason,\n );\n };\n retryReadRef.current = () => load(\"retry\");\n controller = hasSave\n ? createFileEditController({\n binding: {\n rendererId: contributionId,\n instanceId,\n resourceKey: resourceKey(resourceRef.current),\n },\n debounceMs: SAVE_DEBOUNCE_MS,\n load: () => load(),\n onStateChange: (state) => {\n if (!cancelled) setEditState(state);\n },\n save: (value, origin) =>\n Promise.resolve(boundContribution.save?.(boundResource, value, origin)).then((result) => {\n const current = readCachedFileContent(loadKey);\n if (current && !removed) storeCachedFileContent(loadKey, { ...current, content: value });\n return result ?? undefined;\n }),\n })\n : null;\n controllerRef.current = controller;\n if (cached) controllerRef.current?.setBaseline(cached.content, cached.revision);\n setEditState({ dirty: false, saving: false });\n load();\n const removalSubscription = workbench.resources.onWillRemove((resource) => {\n if (resourceKey(resource) !== resourceKey(resourceRef.current)) return [];\n removed = true;\n const retain = controllerRef.current?.markRemoved();\n const identity = placementRef.current?.placementIdentity;\n return retain && identity ? [identity] : [];\n });\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshFileRenderer((event) => {\n if (removed || event.fileRendererId !== contributionId) return;\n const controller = controllerRef.current;\n if (controller) controller.handleRefreshEvent(event);\n else load();\n });\n return () => {\n cancelled = true;\n read.dispose();\n retryReadRef.current = undefined;\n refreshSubscription.dispose();\n removalSubscription.dispose();\n // Flush the last keystrokes on unbind; the load callback above is\n // cancelled, so a deferred refresh cannot resurrect the old binding.\n controller?.flush();\n if (controllerRef.current === controller) controllerRef.current = null;\n };\n }, [contributionId, hasSave, workbench, loadKey, ownerKey, instanceId]);\n // The last keystrokes are also flushed when the tab is hidden or closed.\n useEffect(() => {\n const flush = () => controllerRef.current?.flush();\n const onVisibility = () => {\n if (document.visibilityState === \"hidden\") flush();\n };\n window.addEventListener(\"beforeunload\", flush);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.removeEventListener(\"beforeunload\", flush);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, []);\n const handleChange = (value: string) => {\n controllerRef.current?.handleChange(value);\n };\n const currentLoaded = isCurrentLoadedFile(loaded, loadKey) ? loaded : null;\n const scrollResetKey = currentLoaded ? `${currentLoaded.loadKey}:${currentLoaded.editorRevision}` : \"\";\n useLayoutEffect(() => {\n if (!scrollResetKey || sectionNavigation) return;\n const node = rendererRef.current;\n if (!node) return;\n requestAnimationFrame(() => {\n let current = node.parentElement;\n while (current) {\n const overflowY = getComputedStyle(current).overflowY;\n if ([\"auto\", \"scroll\", \"overlay\"].includes(overflowY) && current.scrollHeight > current.clientHeight) {\n current.scrollTop = 0;\n }\n current = current.parentElement;\n }\n });\n }, [scrollResetKey, sectionNavigation]);\n const loadError = error?.loadKey === loadKey ? error.message : undefined;\n if (loadError && !currentLoaded) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\" p=\"md\" flexDirection=\"column\" gap=\"sm\">\n <Text color=\"fg.muted\">{loadError}</Text>\n <Button size=\"xs\" variant=\"subtle\" onClick={() => retryReadRef.current?.()}>\n Retry\n </Button>\n </Center>\n );\n }\n if (!currentLoaded) {\n return (\n <Center h=\"full\" minH=\"0\" bg=\"bg\">\n <Spinner size=\"sm\" />\n </Center>\n );\n }\n // The key must carry the document identity, not just the contribution: two\n // documents from the same renderer both start at revision 1, so keying on the\n // contribution alone reuses the editor and keeps showing the previous file.\n const editorKey = `${currentLoaded.loadKey}:${currentLoaded.editorRevision}`;\n let errorNotice: ReactNode = null;\n if (editState.removed) {\n errorNotice = (\n <FileRendererErrorNotice message=\"This resource was removed. Your draft is kept here. Copy it before closing this tab.\" />\n );\n } else if (loadError) {\n errorNotice = <FileRendererErrorNotice message={loadError} onRetry={() => retryReadRef.current?.()} />;\n } else if (editState.saveError) {\n errorNotice = (\n <FileRendererErrorNotice message={editState.saveError} onRetry={() => controllerRef.current?.retry()} />\n );\n }\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n <FileRendererHeader file={currentLoaded} />\n <Box flex=\"1\" minH=\"0\">\n <FileRendererContentView\n content={currentLoaded}\n position={position}\n editorKey={editorKey}\n errorNotice={errorNotice}\n contributionCanSave={Boolean(contribution.save)}\n onActiveSectionChange={\n sectionNavigation\n ? (sectionId) => syncActiveFileSection({ workbench, navigation: sectionNavigation, sectionId })\n : undefined\n }\n onChange={handleChange}\n rendererRef={rendererRef}\n sectionNavigation={editorSectionNavigation}\n title={contribution.title}\n />\n </Box>\n </Flex>\n );\n};\n"],"mappings":"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"}
@@ -6371,7 +6371,10 @@ var lu = (e, t) => JSON.stringify([e, t]), uu = (e) => {
6371
6371
  label: "Open terminal",
6372
6372
  category: "Terminal",
6373
6373
  icon: "SquareTerminal"
6374
- }, { execute: (t, n) => Eu(e, { resource: n?.resource }) })
6374
+ }, { execute: (t, n) => Eu(e, {
6375
+ resource: n?.resource,
6376
+ reveal: n?.source !== "panel-add"
6377
+ }) })
6375
6378
  ];
6376
6379
  }
6377
6380
  }), Ou = (e) => {
@@ -9113,9 +9116,11 @@ Bh.extend({ follow_up: Hh }), X.object({
9113
9116
  cwd: X.string().optional()
9114
9117
  }), X.object({ session_id: X.string().nullable() }), X.object({
9115
9118
  notifications_enabled: X.boolean(),
9119
+ machine_tokens_enabled: X.boolean(),
9116
9120
  max_concurrent_sessions: X.number().int().min(1).nullable()
9117
9121
  }), X.object({
9118
9122
  notifications_enabled: X.boolean().optional(),
9123
+ machine_tokens_enabled: X.boolean().optional(),
9119
9124
  max_concurrent_sessions: X.number().int().min(1).nullable().optional()
9120
9125
  }).strict().refine((e) => Object.keys(e).length > 0, { message: "Expected at least one setting" });
9121
9126
  //#endregion
@@ -9529,7 +9534,7 @@ var eg = (e) => {
9529
9534
  editorRevision: pg(n, e, t, r.shown),
9530
9535
  loadKey: t
9531
9536
  });
9532
- }, hg = ut(() => import("./file-renderer-view-CTVhwDGe.js").then((e) => ({ default: e.WorkbenchFileRendererView }))), gg = /* @__PURE__ */ new WeakSet(), _g = (e) => {
9537
+ }, hg = ut(() => import("./file-renderer-view-CPCSE94i.js").then((e) => ({ default: e.WorkbenchFileRendererView }))), gg = /* @__PURE__ */ new WeakSet(), _g = (e) => {
9533
9538
  gg.has(e) || (gg.add(e), e.resources.onWillRemove((e) => (dg(F(e)), [])), k(e).setFileRendererImplementation(({ workbench: e, instance: t, fileRendererId: n }) => {
9534
9539
  let r = k(e).getFileRenderer(n);
9535
9540
  return r ? lt(st, { fallback: null }, lt(hg, {
@@ -10715,4 +10720,4 @@ var R_ = (e) => {
10715
10720
  //#endregion
10716
10721
  export { ar as $, hl as A, Ya as B, Ql as C, Fl as D, Ll as E, hs as F, Ti as G, Fi as H, ms as I, li as J, di as K, zo as L, dl as M, cl as N, Bl as O, _s as P, Fr as Q, Co as R, au as S, Il as T, Oi as U, qi as V, Ai as W, Gr as X, ei as Y, Br as Z, mu as _, mg as a, Q as at, pu as b, Pm as c, qt as ct, Vu as d, Z as dt, er as et, Mu as f, gu as g, hu as h, M_ as i, xn as it, pl as j, wl as k, Nm as l, rn as lt, Ou as m, R_ as n, $n as nt, ug as o, on as ot, ju as p, ui as q, z_ as r, Tn as rt, fg as s, Jt as st, B_ as t, Yn as tt, ep as u, un as ut, Du as v, $l as w, fu as x, Eu as y, vo as z };
10717
10722
 
10718
- //# sourceMappingURL=react-vsxj0hQ2.js.map
10723
+ //# sourceMappingURL=react-Blq0pNJq.js.map