@pstdio/workbench 0.36.1 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/extensions.d.ts +5 -7
- package/dist/extensions.js +380 -393
- package/dist/extensions.js.map +1 -1
- package/dist/{file-renderer-view-DKu2l8bT.js → file-renderer-view-B1tNSzpa.js} +2 -2
- package/dist/{file-renderer-view-DKu2l8bT.js.map → file-renderer-view-B1tNSzpa.js.map} +1 -1
- package/dist/{index-DSsmgN2a.d.ts → index-Cl3NI1pb.d.ts} +11 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/{kanban-presentation-BWhkLbw3.d.ts → kanban-presentation-Mb9rbE48.d.ts} +1 -1
- package/dist/navigation-tree-registry-CKB9qsW1.js +102 -0
- package/dist/navigation-tree-registry-CKB9qsW1.js.map +1 -0
- package/dist/{react-BxrTklvM.js → react-Dnt2zZRw.js} +349 -306
- package/dist/react-Dnt2zZRw.js.map +1 -0
- package/dist/react.d.ts +2 -2
- package/dist/react.js +1 -1
- package/dist/storage.d.ts +1 -1
- package/dist/webview-runtime.js +1 -1
- package/package.json +3 -3
- package/dist/navigation-tree-registry-CTidmvVs.js +0 -91
- package/dist/navigation-tree-registry-CTidmvVs.js.map +0 -1
- package/dist/react-BxrTklvM.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as e, t } from "./workbench-renderers-RPeMVtTc.js";
|
|
2
|
-
import { a as n, o as r, s as i } from "./react-
|
|
2
|
+
import { a as n, o as r, s as i } from "./react-Dnt2zZRw.js";
|
|
3
3
|
import { resourceKey as a } from "@pstdio/sdk/extensions";
|
|
4
4
|
import { c as o } from "react/compiler-runtime";
|
|
5
5
|
import { Box as s, Button as c, Center as l, Flex as u, Image as d, Spinner as f, Text as p } from "@chakra-ui/react";
|
|
@@ -634,4 +634,4 @@ function me(e) {
|
|
|
634
634
|
//#endregion
|
|
635
635
|
export { pe as WorkbenchFileRendererView };
|
|
636
636
|
|
|
637
|
-
//# sourceMappingURL=file-renderer-view-
|
|
637
|
+
//# sourceMappingURL=file-renderer-view-B1tNSzpa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-renderer-view-DKu2l8bT.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","EmptyState","CodeEditor","MarkdownEditor","ReactNode","RefObject","FileRendererContent","resolveFileRendererPresentation","FileRendererContentViewProps","content","editorKey","errorNotice","contributionCanSave","onActiveSectionChange","sectionId","onChange","value","rendererRef","HTMLDivElement","sectionNavigation","anchors","Array","id","heading","occurrence","targetId","title","FileRendererContentView","props","$","_c","t0","presentation","kind","t1","emptyState","t2","description","t3","t4","dataUrl","Symbol","for","fileName","isEditable","undefined","language","placeholder","t5","_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","resourceKey","ReactNode","useEffect","useLayoutEffect","useRef","useState","RegisteredFileRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","getFileSectionNavigation","resolveFileSectionTargetId","shouldClearFileSectionSelection","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","WorkbenchFileRendererView","props","$","_c","resource","sectionNavigation","t0","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","state","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","document","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","retryLoad","t14","retry","retrySave","t15","t16","t17","editorKey","errorNotice","saveError","handleActiveSectionChange","fileName","filePath","t18","t19","t20","title","t21","_c","rendererReadKey","acceptFileRendererLoad","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","t2","t3","EmptyState","t4","errorNotice","Flex","Center","Text","title","Image","rendererRef","onChange","editorKey","Box","CodeEditor","onActiveSectionChange","sectionNavigation","MarkdownEditor","t5","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","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","t6","signal","updateLoaded","next","loadError","state","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","retryLoad","t14","retrySave","t15","t16","t17","Spinner","handleActiveSectionChange","t18","t19","t20","t21"],"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 { 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 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 editorKey,\n errorNotice,\n contributionCanSave,\n onActiveSectionChange,\n onChange,\n rendererRef,\n sectionNavigation,\n title,\n } = props;\n const presentation = resolveFileRendererPresentation(content, contributionCanSave);\n\n if (presentation.kind === \"empty\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\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 <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 <Box flex=\"1\" minH=\"0\">\n <CodeEditor\n key={editorKey}\n language={presentation.language}\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 <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 { 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 { 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};\nexport const WorkbenchFileRendererView = (props: WorkbenchFileRendererViewProps) => {\n const { workbench, contribution } = props;\n const resource = props.placement?.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 const retryLoad = () => retryReadRef.current?.();\n const retrySave = () => controllerRef.current?.retry();\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={retryLoad}>\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={retryLoad} />;\n } else if (editState.saveError) {\n errorNotice = <FileRendererErrorNotice message={editState.saveError} onRetry={retrySave} />;\n }\n const handleActiveSectionChange = (sectionId: string | null) => {\n syncActiveFileSection({ workbench, navigation: sectionNavigation, sectionId });\n };\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {currentLoaded.filePath ? (\n <FileRendererPathHeader\n fileName={currentLoaded.fileName ?? currentLoaded.filePath}\n filePath={currentLoaded.filePath}\n />\n ) : null}\n <Box flex=\"1\" minH=\"0\">\n <FileRendererContentView\n content={currentLoaded}\n editorKey={editorKey}\n errorNotice={errorNotice}\n contributionCanSave={Boolean(contribution.save)}\n onActiveSectionChange={sectionNavigation ? handleActiveSectionChange : undefined}\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-B1tNSzpa.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","EmptyState","CodeEditor","MarkdownEditor","ReactNode","RefObject","FileRendererContent","resolveFileRendererPresentation","FileRendererContentViewProps","content","editorKey","errorNotice","contributionCanSave","onActiveSectionChange","sectionId","onChange","value","rendererRef","HTMLDivElement","sectionNavigation","anchors","Array","id","heading","occurrence","targetId","title","FileRendererContentView","props","$","_c","t0","presentation","kind","t1","emptyState","t2","description","t3","t4","dataUrl","Symbol","for","fileName","isEditable","undefined","language","placeholder","t5","_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","resourceKey","ReactNode","useEffect","useLayoutEffect","useRef","useState","RegisteredFileRendererContribution","WorkbenchCore","WorkbenchPanelInstance","getWorkbenchRenderers","rendererReadKey","getFileSectionNavigation","resolveFileSectionTargetId","shouldClearFileSectionSelection","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","WorkbenchFileRendererView","props","$","_c","resource","sectionNavigation","t0","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","state","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","document","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","retryLoad","t14","retry","retrySave","t15","t16","t17","editorKey","errorNotice","saveError","handleActiveSectionChange","fileName","filePath","t18","t19","t20","title","t21","_c","rendererReadKey","acceptFileRendererLoad","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","t2","t3","EmptyState","t4","errorNotice","Flex","Center","Text","title","Image","rendererRef","onChange","editorKey","Box","CodeEditor","onActiveSectionChange","sectionNavigation","MarkdownEditor","t5","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","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","t6","signal","updateLoaded","next","loadError","state","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","retryLoad","t14","retrySave","t15","t16","t17","Spinner","handleActiveSectionChange","t18","t19","t20","t21"],"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 { 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 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 editorKey,\n errorNotice,\n contributionCanSave,\n onActiveSectionChange,\n onChange,\n rendererRef,\n sectionNavigation,\n title,\n } = props;\n const presentation = resolveFileRendererPresentation(content, contributionCanSave);\n\n if (presentation.kind === \"empty\") {\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {errorNotice}\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 <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 <Box flex=\"1\" minH=\"0\">\n <CodeEditor\n key={editorKey}\n language={presentation.language}\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 <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 { 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 { 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};\nexport const WorkbenchFileRendererView = (props: WorkbenchFileRendererViewProps) => {\n const { workbench, contribution } = props;\n const resource = props.placement?.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 const retryLoad = () => retryReadRef.current?.();\n const retrySave = () => controllerRef.current?.retry();\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={retryLoad}>\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={retryLoad} />;\n } else if (editState.saveError) {\n errorNotice = <FileRendererErrorNotice message={editState.saveError} onRetry={retrySave} />;\n }\n const handleActiveSectionChange = (sectionId: string | null) => {\n syncActiveFileSection({ workbench, navigation: sectionNavigation, sectionId });\n };\n return (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" bg=\"bg\">\n {currentLoaded.filePath ? (\n <FileRendererPathHeader\n fileName={currentLoaded.fileName ?? currentLoaded.filePath}\n filePath={currentLoaded.filePath}\n />\n ) : null}\n <Box flex=\"1\" minH=\"0\">\n <FileRendererContentView\n content={currentLoaded}\n editorKey={editorKey}\n errorNotice={errorNotice}\n contributionCanSave={Boolean(contribution.save)}\n onActiveSectionChange={sectionNavigation ? handleActiveSectionChange : undefined}\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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"}
|
|
@@ -176,6 +176,8 @@ interface CommandParamDescriptor {
|
|
|
176
176
|
options?: CommandParamOption[];
|
|
177
177
|
templateType?: string;
|
|
178
178
|
resourceType?: string;
|
|
179
|
+
/** Workspace provider ids a `workspace` param may offer. */
|
|
180
|
+
providers?: string[];
|
|
179
181
|
accept?: string;
|
|
180
182
|
multiple?: boolean;
|
|
181
183
|
metadata?: Record<string, unknown>;
|
|
@@ -1177,6 +1179,8 @@ interface MenuRegistry {
|
|
|
1177
1179
|
//#region src/core/registries/renderers/tree-renderer-types.d.ts
|
|
1178
1180
|
interface TreeQueryContext {
|
|
1179
1181
|
signal?: AbortSignal;
|
|
1182
|
+
/** Publish available sections while the rest of the current read is still loading. */
|
|
1183
|
+
onProgress?(sections: TreeViewSection[]): void;
|
|
1180
1184
|
filter?: string;
|
|
1181
1185
|
resource?: ResourceRef$1;
|
|
1182
1186
|
/** Widget/view contribution id for trees rendered through a view-backed widget. */
|
|
@@ -1284,6 +1288,8 @@ interface TreeRendererContribution {
|
|
|
1284
1288
|
when?: string;
|
|
1285
1289
|
defaultExpandedSectionIds?: string[];
|
|
1286
1290
|
defaultExpandedNodeIds?: string[];
|
|
1291
|
+
/** Identify the navigation data scope when it differs from the current page resource. */
|
|
1292
|
+
getReadKey?(ctx: TreeQueryContext): string;
|
|
1287
1293
|
getBody(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
|
|
1288
1294
|
getHeader?(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
|
|
1289
1295
|
getFooter?(ctx: TreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
|
|
@@ -1339,7 +1345,8 @@ interface TreeRendererRegistry {
|
|
|
1339
1345
|
//#region src/core/registries/views/renderer-read-registry.d.ts
|
|
1340
1346
|
interface RendererReadRequest<T> {
|
|
1341
1347
|
queryKey: string;
|
|
1342
|
-
load(signal: AbortSignal): Promise<T> | T;
|
|
1348
|
+
load(signal: AbortSignal, publish: (value: T) => void): Promise<T> | T;
|
|
1349
|
+
onProgress?(value: T): void;
|
|
1343
1350
|
onValue(value: T): void;
|
|
1344
1351
|
onError(error: unknown): void;
|
|
1345
1352
|
}
|
|
@@ -1792,12 +1799,15 @@ interface NavigationTreeContribution {
|
|
|
1792
1799
|
slot?: NavigationTreeSlot;
|
|
1793
1800
|
viewId?: string;
|
|
1794
1801
|
defaultExpandedSectionIds?: string[];
|
|
1802
|
+
/** Resolve the data resource independently of the selected navigation item. */
|
|
1803
|
+
resolveResource?(resource: ResourceRef$1 | undefined): ResourceRef$1 | undefined;
|
|
1795
1804
|
getSections?(context: NavigationTreeContext): Promise<TreeViewSection[]> | TreeViewSection[];
|
|
1796
1805
|
getChildren?(node: TreeNode, context: NavigationTreeContext): Promise<TreeNode[]> | TreeNode[];
|
|
1797
1806
|
}
|
|
1798
1807
|
interface NavigationTreeRegistry {
|
|
1799
1808
|
registerContribution(contribution: NavigationTreeContribution): Disposable;
|
|
1800
1809
|
resolveOwner(kind: NavigationTreeOwner["kind"], id: string): NavigationTreeOwner | undefined;
|
|
1810
|
+
getReadKey(owner: NavigationTreeOwner, context?: NavigationTreeContext): string;
|
|
1801
1811
|
getSections(owner: NavigationTreeOwner, slot?: NavigationTreeSlot, context?: NavigationTreeContext): Promise<TreeViewSection[]>;
|
|
1802
1812
|
getChildren(node: TreeNode, context?: NavigationTreeContext): Promise<TreeNode[]>;
|
|
1803
1813
|
getDefaultExpandedSectionIds(owner: NavigationTreeOwner): string[];
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { $ as WorkbenchStatusBarItem, $i as resourceHierarchyCycleCode, $n as AttributeDescriptor, $r as WorkbenchPanelTab, $t as WorkbenchTerminalSessionError, A as WorkbenchHost, Ai as CommandRegistry, An as createViewRegistry, Ar as DataTableRendererQueryContext, At as WorkbenchNotification, B as ThemePreference, Bi as ResourceRegistry, Bn as TreeNode, Br as ControlsRendererLayout, Bt as WorkbenchModePlacementRegistry, C as WorkbenchModeContribution, Ci as WorkbenchCommandPaletteController, Cn as WorkbenchViewMenuRegistry, Cr as FileRendererRefreshOrigin, Ct as WorkbenchShellPlacementRegistry, D as createWorkbench, Di as CommandParamDescriptor, Dn as WorkbenchViewContribution, Dr as DataTableRendererColumnRenderer, Dt as WorkbenchOverlayRegistry, E as isWorkbenchModePanelAvailable, Ei as CommandHandler, En as WorkbenchViewBody, Er as DataTableRendererColumn, Et as WorkbenchOverlayContribution, F as WorkbenchPagePersistenceScopeInput, Fi as ResourceBrowseEntry, Fn as createRendererReadRegistry, Fr as DataTableRendererThemeColor, Ft as NavigationTreeContribution, G as FileIconThemeFont, Gi as workbenchResourceMetadataContextKey, Gn as TreeRendererState, Gr as WorkbenchFocusRegionId, Gt as getKeybindingSteps, H as ThemePreferenceOption, Hi as createWorkbenchSelectionResourceMetadata, Hn as TreeQueryContext, Hr as ControlsUpdateValueInput, Ht as Keybinding, I as WorkbenchPersistenceAdapter, Ii as ResourceKindContribution, In as TreeAction, It as NavigationTreeOwner, J as WorkbenchStatusRegistryState, Ji as ResourceHierarchyCycle, Jn as MenuPath, Jt as CommandPaletteResourceQueryContext, K as FileIconThemePreferenceOption, Ki as workbenchResourceTypeContextKey, Kn as TreeViewSection, Kr as LayoutPersistenceAdapter, Kt as CommandPaletteResourceProvider, L as WorkbenchSnapshot, Li as ResourceListContext, Ln as TreeContext, Lr as ControlsApplyInput, Lt as NavigationTreeRegistry, M as WorkbenchModuleContribution, Mi as WorkbenchCommandExecutionError, Mn as RendererReadBinding, Mr as DataTableRendererRow, Mt as WorkbenchNotificationEvent, N as WorkbenchModuleContributionContext, Ni as WorkbenchBreadcrumbController, Nn as RendererReadRegistry, Nr as DataTableRendererRowAction, Nt as WorkbenchNotificationLevel, O as WorkbenchCore, Oi as CommandParamOption, On as WorkbenchViewRegistry, Or as DataTableRendererColumnStat, Ot as NotificationRegistry, P as WorkbenchPagePersistenceScope, Pi as WorkbenchBreadcrumbItem, Pn as RendererReadRequest, Pr as DataTableRendererSelectionAction, Pt as NavigationTreeContext, Q as createStatusRegistry, Qi as isWorkbenchViewHierarchyNode, Qn as KanbanRendererQueryState, Qr as WorkbenchPanelMountStrategy, Qt as WorkbenchTerminalSessionAdapter, R as createWorkbenchInput, Ri as ResourceProvider, Rn as TreeMoveEndpoint, Rr as ControlsQueryResult, Rt as NavigationTreeSlot, S as WorkbenchModeAddablePanelContext, Si as NavigationTargetPanel, Sn as WorkbenchViewMenuContribution, Sr as FileRendererRefreshEnvelope, St as WorkbenchShellPlacementContribution, T as getWorkbenchModePanelForRegion, Ti as Command, Tn as WorkbenchReactViewBody, Tr as DataTableRendererBadgePalette, Tt as WorkbenchPlaceholderRegistry, U as ThemePreferenceTokens, Ui as getWorkbenchSelectionResourceKeys, Un as TreeRendererContribution, Ur as WorkbenchPanelRenderInput, Ut as KeybindingRegistry, V as ThemePreferenceMode, Vi as createWorkbenchResourceContextValues, Vn as TreeNodeInlineInput, Vr as ControlsResetInput, W as FileIconThemeRegistry, Wi as workbenchResourceIdContextKey, Wr as WorkbenchFocusController, Wt as KeybindingSequence, X as WorkflowStatus, Xi as WorkbenchHierarchyNode, Xr as WorkbenchLayout, Xt as CommandPaletteResourceResult, Y as WorkbenchStatusSetContribution, Yi as ResourceHierarchyProvider, Yn as MenuRegistry, Yr as WorkbenchCommandTarget, Yt as CommandPaletteResourceRegistry, Z as WorkflowStatusAction, Zi as WorkbenchViewHierarchyNode, Zn as KanbanRendererContribution, Zr as WorkbenchPanelInstance, Zt as WorkbenchTerminalController, _ as resolveAnchorRegion, _i as NavigationRegistry, _n as WorkbenchPageLocationDiagnostic, _r as ResourceContextAction, _t as PreferenceRegistry, a as standardResourceIcons, aa as matchesContextExpression, ai as WorkbenchTabRetention, an as WorkbenchTerminalSessionStatus, ar as BoardColumnConfig, at as SchemaSettingsPanel, b as WorkbenchModeActivationResult, bi as NavigationTargetCompound, br as FileRendererContent, bt as PreferenceScopeRef, c as headerLeadingMenuPath, ci as WorkbenchWidgetTab, cn as WorkbenchShellOpenRegion, cr as EnumOptionsSource, ct as SettingsPanelBase, d as workbenchCommandPaletteMenuPath, di as WorkbenchPanelRegion, dn as WorkbenchSidePanelMode, dr as KanbanRendererCreateRowConfig, dt as SettingsRegistry, ea as ContributionMetadata, ei as WorkbenchRegionSize, en as WorkbenchTerminalSessionExit, er as AttributeDisplayDescriptor, et as WorkbenchStatusBarRegistry, f as workbenchRegionTabAddMenuPath, fi as WorkbenchRegion, fn as WorkbenchSidePanelPersistenceAdapter, fr as KanbanRendererCreateSubmission, ft as SettingsScope, g as AnchorId, gi as NavigationParser, gn as WorkbenchPageLocationController, gr as KanbanRendererSettings, gt as PreferencePropertySchema, h as workbenchTopHeaderTrailingMenuPath, hi as NavigationDispatcherContext, hn as WorkbenchPageLocationBrowser, hr as KanbanRendererRow, ht as PreferencePersistenceAdapter, i as StandardResourceIcon, ia as ContextKeyValue, ii as WorkbenchTabPosition, in as WorkbenchTerminalSessionSink, ir as BoardColumnAction, it as CollectionSettingsPanel, j as WorkbenchModuleContext, ji as WorkbenchCommandExecutionContext, jn as workbenchViewIdContextKey, jr as DataTableRendererQueryResult, jt as WorkbenchNotificationAction, ki as CommandParamSchema, kn as WorkbenchViewRegistryStoreState, kr as DataTableRendererContribution, l as headerTrailingMenuPath, li as WorkbenchPanelMenuRegion, ln as WorkbenchShellRegionState, lr as KanbanRendererCreateField, lt as SettingsPanelContribution, m as workbenchTopHeaderLeadingMenuPath, mi as workbenchRegions, mn as WorkbenchPageBrowserEntry, mr as KanbanRendererOrdering, mt as ViewSettingsPanel, n as settleReadBatch, na as ContextKeyScope, ni as WorkbenchTabMenuGroup, nn as WorkbenchTerminalSessionOpener, nr as AttributeType, nt as WorkbenchStatusBarSlot, o as DockedWorkbenchRegion, oi as WorkbenchTabSnapshot, on as WorkbenchTerminalState, or as EnumOption, ot as SettingsAction, p as workbenchRegionTabLeadingMenuPath, pi as workbenchPanelRegions, pr as KanbanRendererFilterState, pt as SettingsSectionContribution, q as WorkbenchStatusRegistry, qi as workbenchSelectionResourceKeyMetadataKey, qn as MenuItem, qt as CommandPaletteResourceProviderResult, r as rendererReadKey, ra as ContextKeyService, ri as WorkbenchTabMenuRow, rn as WorkbenchTerminalSessionRequest, rt as createStatusBarRegistry, s as dockedWorkbenchRegions, sa as Disposable, si as WorkbenchWidgetPlacement, sn as WorkbenchShellController, sr as EnumOptions, st as SettingsCollectionGroupBy, t as batchWorkbenchChanges, ta as ContributionSource, ti as WorkbenchTabAction, tn as WorkbenchTerminalSessionModel, tr as AttributeKind, tt as WorkbenchStatusBarRegistryState, u as resourceContextMenuPath, ui as WorkbenchPanelMenuSide, un as WorkbenchSidePanelPresentation, ur as KanbanRendererCreateFieldType, ut as SettingsPanelPreference, v as defaultPageResourceCodec, vi as NavigationTarget, vn as WorkbenchPageLocationPersistence, vr as SortDirection, vt as PreferenceSchemaContribution, w as WorkbenchModeRegistry, wi as WorkbenchCommandPaletteOpenInput, wn as RegisteredWorkbenchView, wr as FileRendererSaveResult, wt as WorkbenchPlaceholderContribution, x as WorkbenchModeAddablePanel, xi as NavigationTargetItem, xn as WorkbenchPlacementPresentation, xr as FileRendererContribution, xt as PreferenceValue, y as WorkbenchModeActivationContext, yi as NavigationTargetCommand, yn as WorkbenchPageNavigationResult, yr as ViewMode, yt as PreferenceScope, z as ThemeRegistry, zi as ResourceRef, zn as TreeMovePolicy, zr as ControlsRendererContribution, zt as WorkbenchModePlacementContribution } from "./index-
|
|
1
|
+
import { $ as WorkbenchStatusBarItem, $i as resourceHierarchyCycleCode, $n as AttributeDescriptor, $r as WorkbenchPanelTab, $t as WorkbenchTerminalSessionError, A as WorkbenchHost, Ai as CommandRegistry, An as createViewRegistry, Ar as DataTableRendererQueryContext, At as WorkbenchNotification, B as ThemePreference, Bi as ResourceRegistry, Bn as TreeNode, Br as ControlsRendererLayout, Bt as WorkbenchModePlacementRegistry, C as WorkbenchModeContribution, Ci as WorkbenchCommandPaletteController, Cn as WorkbenchViewMenuRegistry, Cr as FileRendererRefreshOrigin, Ct as WorkbenchShellPlacementRegistry, D as createWorkbench, Di as CommandParamDescriptor, Dn as WorkbenchViewContribution, Dr as DataTableRendererColumnRenderer, Dt as WorkbenchOverlayRegistry, E as isWorkbenchModePanelAvailable, Ei as CommandHandler, En as WorkbenchViewBody, Er as DataTableRendererColumn, Et as WorkbenchOverlayContribution, F as WorkbenchPagePersistenceScopeInput, Fi as ResourceBrowseEntry, Fn as createRendererReadRegistry, Fr as DataTableRendererThemeColor, Ft as NavigationTreeContribution, G as FileIconThemeFont, Gi as workbenchResourceMetadataContextKey, Gn as TreeRendererState, Gr as WorkbenchFocusRegionId, Gt as getKeybindingSteps, H as ThemePreferenceOption, Hi as createWorkbenchSelectionResourceMetadata, Hn as TreeQueryContext, Hr as ControlsUpdateValueInput, Ht as Keybinding, I as WorkbenchPersistenceAdapter, Ii as ResourceKindContribution, In as TreeAction, It as NavigationTreeOwner, J as WorkbenchStatusRegistryState, Ji as ResourceHierarchyCycle, Jn as MenuPath, Jt as CommandPaletteResourceQueryContext, K as FileIconThemePreferenceOption, Ki as workbenchResourceTypeContextKey, Kn as TreeViewSection, Kr as LayoutPersistenceAdapter, Kt as CommandPaletteResourceProvider, L as WorkbenchSnapshot, Li as ResourceListContext, Ln as TreeContext, Lr as ControlsApplyInput, Lt as NavigationTreeRegistry, M as WorkbenchModuleContribution, Mi as WorkbenchCommandExecutionError, Mn as RendererReadBinding, Mr as DataTableRendererRow, Mt as WorkbenchNotificationEvent, N as WorkbenchModuleContributionContext, Ni as WorkbenchBreadcrumbController, Nn as RendererReadRegistry, Nr as DataTableRendererRowAction, Nt as WorkbenchNotificationLevel, O as WorkbenchCore, Oi as CommandParamOption, On as WorkbenchViewRegistry, Or as DataTableRendererColumnStat, Ot as NotificationRegistry, P as WorkbenchPagePersistenceScope, Pi as WorkbenchBreadcrumbItem, Pn as RendererReadRequest, Pr as DataTableRendererSelectionAction, Pt as NavigationTreeContext, Q as createStatusRegistry, Qi as isWorkbenchViewHierarchyNode, Qn as KanbanRendererQueryState, Qr as WorkbenchPanelMountStrategy, Qt as WorkbenchTerminalSessionAdapter, R as createWorkbenchInput, Ri as ResourceProvider, Rn as TreeMoveEndpoint, Rr as ControlsQueryResult, Rt as NavigationTreeSlot, S as WorkbenchModeAddablePanelContext, Si as NavigationTargetPanel, Sn as WorkbenchViewMenuContribution, Sr as FileRendererRefreshEnvelope, St as WorkbenchShellPlacementContribution, T as getWorkbenchModePanelForRegion, Ti as Command, Tn as WorkbenchReactViewBody, Tr as DataTableRendererBadgePalette, Tt as WorkbenchPlaceholderRegistry, U as ThemePreferenceTokens, Ui as getWorkbenchSelectionResourceKeys, Un as TreeRendererContribution, Ur as WorkbenchPanelRenderInput, Ut as KeybindingRegistry, V as ThemePreferenceMode, Vi as createWorkbenchResourceContextValues, Vn as TreeNodeInlineInput, Vr as ControlsResetInput, W as FileIconThemeRegistry, Wi as workbenchResourceIdContextKey, Wr as WorkbenchFocusController, Wt as KeybindingSequence, X as WorkflowStatus, Xi as WorkbenchHierarchyNode, Xr as WorkbenchLayout, Xt as CommandPaletteResourceResult, Y as WorkbenchStatusSetContribution, Yi as ResourceHierarchyProvider, Yn as MenuRegistry, Yr as WorkbenchCommandTarget, Yt as CommandPaletteResourceRegistry, Z as WorkflowStatusAction, Zi as WorkbenchViewHierarchyNode, Zn as KanbanRendererContribution, Zr as WorkbenchPanelInstance, Zt as WorkbenchTerminalController, _ as resolveAnchorRegion, _i as NavigationRegistry, _n as WorkbenchPageLocationDiagnostic, _r as ResourceContextAction, _t as PreferenceRegistry, a as standardResourceIcons, aa as matchesContextExpression, ai as WorkbenchTabRetention, an as WorkbenchTerminalSessionStatus, ar as BoardColumnConfig, at as SchemaSettingsPanel, b as WorkbenchModeActivationResult, bi as NavigationTargetCompound, br as FileRendererContent, bt as PreferenceScopeRef, c as headerLeadingMenuPath, ci as WorkbenchWidgetTab, cn as WorkbenchShellOpenRegion, cr as EnumOptionsSource, ct as SettingsPanelBase, d as workbenchCommandPaletteMenuPath, di as WorkbenchPanelRegion, dn as WorkbenchSidePanelMode, dr as KanbanRendererCreateRowConfig, dt as SettingsRegistry, ea as ContributionMetadata, ei as WorkbenchRegionSize, en as WorkbenchTerminalSessionExit, er as AttributeDisplayDescriptor, et as WorkbenchStatusBarRegistry, f as workbenchRegionTabAddMenuPath, fi as WorkbenchRegion, fn as WorkbenchSidePanelPersistenceAdapter, fr as KanbanRendererCreateSubmission, ft as SettingsScope, g as AnchorId, gi as NavigationParser, gn as WorkbenchPageLocationController, gr as KanbanRendererSettings, gt as PreferencePropertySchema, h as workbenchTopHeaderTrailingMenuPath, hi as NavigationDispatcherContext, hn as WorkbenchPageLocationBrowser, hr as KanbanRendererRow, ht as PreferencePersistenceAdapter, i as StandardResourceIcon, ia as ContextKeyValue, ii as WorkbenchTabPosition, in as WorkbenchTerminalSessionSink, ir as BoardColumnAction, it as CollectionSettingsPanel, j as WorkbenchModuleContext, ji as WorkbenchCommandExecutionContext, jn as workbenchViewIdContextKey, jr as DataTableRendererQueryResult, jt as WorkbenchNotificationAction, ki as CommandParamSchema, kn as WorkbenchViewRegistryStoreState, kr as DataTableRendererContribution, l as headerTrailingMenuPath, li as WorkbenchPanelMenuRegion, ln as WorkbenchShellRegionState, lr as KanbanRendererCreateField, lt as SettingsPanelContribution, m as workbenchTopHeaderLeadingMenuPath, mi as workbenchRegions, mn as WorkbenchPageBrowserEntry, mr as KanbanRendererOrdering, mt as ViewSettingsPanel, n as settleReadBatch, na as ContextKeyScope, ni as WorkbenchTabMenuGroup, nn as WorkbenchTerminalSessionOpener, nr as AttributeType, nt as WorkbenchStatusBarSlot, o as DockedWorkbenchRegion, oi as WorkbenchTabSnapshot, on as WorkbenchTerminalState, or as EnumOption, ot as SettingsAction, p as workbenchRegionTabLeadingMenuPath, pi as workbenchPanelRegions, pr as KanbanRendererFilterState, pt as SettingsSectionContribution, q as WorkbenchStatusRegistry, qi as workbenchSelectionResourceKeyMetadataKey, qn as MenuItem, qt as CommandPaletteResourceProviderResult, r as rendererReadKey, ra as ContextKeyService, ri as WorkbenchTabMenuRow, rn as WorkbenchTerminalSessionRequest, rt as createStatusBarRegistry, s as dockedWorkbenchRegions, sa as Disposable, si as WorkbenchWidgetPlacement, sn as WorkbenchShellController, sr as EnumOptions, st as SettingsCollectionGroupBy, t as batchWorkbenchChanges, ta as ContributionSource, ti as WorkbenchTabAction, tn as WorkbenchTerminalSessionModel, tr as AttributeKind, tt as WorkbenchStatusBarRegistryState, u as resourceContextMenuPath, ui as WorkbenchPanelMenuSide, un as WorkbenchSidePanelPresentation, ur as KanbanRendererCreateFieldType, ut as SettingsPanelPreference, v as defaultPageResourceCodec, vi as NavigationTarget, vn as WorkbenchPageLocationPersistence, vr as SortDirection, vt as PreferenceSchemaContribution, w as WorkbenchModeRegistry, wi as WorkbenchCommandPaletteOpenInput, wn as RegisteredWorkbenchView, wr as FileRendererSaveResult, wt as WorkbenchPlaceholderContribution, x as WorkbenchModeAddablePanel, xi as NavigationTargetItem, xn as WorkbenchPlacementPresentation, xr as FileRendererContribution, xt as PreferenceValue, y as WorkbenchModeActivationContext, yi as NavigationTargetCommand, yn as WorkbenchPageNavigationResult, yr as ViewMode, yt as PreferenceScope, z as ThemeRegistry, zi as ResourceRef, zn as TreeMovePolicy, zr as ControlsRendererContribution, zt as WorkbenchModePlacementContribution } from "./index-Cl3NI1pb.js";
|
|
2
2
|
export { type AnchorId, type AttributeDescriptor, type AttributeDisplayDescriptor, type AttributeKind, type AttributeType, type BoardColumnAction, type BoardColumnConfig, type CollectionSettingsPanel, type Command, type CommandHandler, type CommandPaletteResourceProvider, type CommandPaletteResourceProviderResult, type CommandPaletteResourceQueryContext, type CommandPaletteResourceRegistry, type CommandPaletteResourceResult, type CommandParamDescriptor, type CommandParamOption, type CommandParamSchema, type CommandRegistry, type ContextKeyScope, type ContextKeyService, type ContextKeyValue, type ContributionMetadata, type ContributionSource, type ControlsApplyInput, type ControlsQueryResult, type ControlsRendererContribution, type ControlsRendererLayout, type ControlsResetInput, type ControlsUpdateValueInput, type DataTableRendererBadgePalette, type DataTableRendererColumn, type DataTableRendererColumnRenderer, type DataTableRendererColumnStat, type DataTableRendererContribution, type DataTableRendererQueryContext, type DataTableRendererQueryResult, type DataTableRendererRow, type DataTableRendererRowAction, type DataTableRendererSelectionAction, type DataTableRendererThemeColor, type Disposable, type DockedWorkbenchRegion, type EnumOption, type EnumOptions, type EnumOptionsSource, type FileIconThemeFont, type FileIconThemePreferenceOption, type FileIconThemeRegistry, type FileRendererContent, type FileRendererContribution, type FileRendererRefreshEnvelope, type FileRendererRefreshOrigin, type FileRendererSaveResult, type KanbanRendererContribution, type KanbanRendererCreateField, type KanbanRendererCreateFieldType, type KanbanRendererCreateRowConfig, type KanbanRendererCreateSubmission, type KanbanRendererFilterState, type KanbanRendererOrdering, type KanbanRendererQueryState, type KanbanRendererRow, type KanbanRendererSettings, type Keybinding, type KeybindingRegistry, type KeybindingSequence, type LayoutPersistenceAdapter, type MenuItem, type MenuPath, type MenuRegistry, type NavigationDispatcherContext, type NavigationParser, type NavigationRegistry, type NavigationTarget, type NavigationTargetCommand, type NavigationTargetCompound, type NavigationTargetItem, type NavigationTargetPanel, type NavigationTreeContext, type NavigationTreeContribution, type NavigationTreeOwner, type NavigationTreeRegistry, type NavigationTreeSlot, type NotificationRegistry, type PreferencePersistenceAdapter, type PreferencePropertySchema, type PreferenceRegistry, type PreferenceSchemaContribution, type PreferenceScope, type PreferenceScopeRef, type PreferenceValue, type RegisteredWorkbenchView, type RendererReadBinding, type RendererReadRegistry, type RendererReadRequest, type ResourceBrowseEntry, type ResourceContextAction, type ResourceHierarchyCycle, type ResourceHierarchyProvider, type ResourceKindContribution, type ResourceListContext, type ResourceProvider, type ResourceRef, type ResourceRegistry, type SchemaSettingsPanel, type SettingsAction, type SettingsCollectionGroupBy, type SettingsPanelBase, type SettingsPanelContribution, type SettingsPanelPreference, type SettingsRegistry, type SettingsScope, type SettingsSectionContribution, type SortDirection, type StandardResourceIcon, type ThemePreference, type ThemePreferenceMode, type ThemePreferenceOption, type ThemePreferenceTokens, type ThemeRegistry, type TreeAction, type TreeContext, type TreeMoveEndpoint, type TreeMovePolicy, type TreeNode, type TreeNodeInlineInput, type TreeQueryContext, type TreeRendererContribution, type TreeRendererState, type TreeViewSection, type ViewMode, type ViewSettingsPanel, type WorkbenchBreadcrumbController, type WorkbenchBreadcrumbItem, type WorkbenchCommandExecutionContext, type WorkbenchCommandExecutionError, type WorkbenchCommandPaletteController, type WorkbenchCommandPaletteOpenInput, type WorkbenchCommandTarget, type WorkbenchCore, type WorkbenchFocusController, type WorkbenchFocusRegionId, type WorkbenchHierarchyNode, type WorkbenchHost, type WorkbenchLayout, type WorkbenchModeActivationContext, type WorkbenchModeActivationResult, type WorkbenchModeAddablePanel, type WorkbenchModeAddablePanelContext, type WorkbenchModeContribution, type WorkbenchModePlacementContribution, type WorkbenchModePlacementRegistry, type WorkbenchModeRegistry, type WorkbenchModuleContext, type WorkbenchModuleContribution, type WorkbenchModuleContributionContext, type WorkbenchNotification, type WorkbenchNotificationAction, type WorkbenchNotificationEvent, type WorkbenchNotificationLevel, type WorkbenchOverlayContribution, type WorkbenchOverlayRegistry, type WorkbenchPageBrowserEntry, type WorkbenchPageLocationBrowser, type WorkbenchPageLocationController, type WorkbenchPageLocationDiagnostic, type WorkbenchPageLocationPersistence, type WorkbenchPageNavigationResult, type WorkbenchPagePersistenceScope, type WorkbenchPagePersistenceScopeInput, type WorkbenchPanelInstance, type WorkbenchPanelMenuRegion, type WorkbenchPanelMenuSide, type WorkbenchPanelMountStrategy, type WorkbenchPanelRegion, type WorkbenchPanelRenderInput, type WorkbenchPanelTab, type WorkbenchPersistenceAdapter, type WorkbenchPlaceholderContribution, type WorkbenchPlaceholderRegistry, type WorkbenchPlacementPresentation, type WorkbenchReactViewBody, type WorkbenchRegion, type WorkbenchRegionSize, type WorkbenchShellController, type WorkbenchShellOpenRegion, type WorkbenchShellPlacementContribution, type WorkbenchShellPlacementRegistry, type WorkbenchShellRegionState, type WorkbenchSidePanelMode, type WorkbenchSidePanelPersistenceAdapter, type WorkbenchSidePanelPresentation, type WorkbenchSnapshot, type WorkbenchStatusBarItem, type WorkbenchStatusBarRegistry, type WorkbenchStatusBarRegistryState, type WorkbenchStatusBarSlot, type WorkbenchStatusRegistry, type WorkbenchStatusRegistryState, type WorkbenchStatusSetContribution, type WorkbenchTabAction, type WorkbenchTabMenuGroup, type WorkbenchTabMenuRow, type WorkbenchTabPosition, type WorkbenchTabRetention, type WorkbenchTabSnapshot, type WorkbenchTerminalController, type WorkbenchTerminalSessionAdapter, type WorkbenchTerminalSessionError, type WorkbenchTerminalSessionExit, type WorkbenchTerminalSessionModel, type WorkbenchTerminalSessionOpener, type WorkbenchTerminalSessionRequest, type WorkbenchTerminalSessionSink, type WorkbenchTerminalSessionStatus, type WorkbenchTerminalState, type WorkbenchViewBody, type WorkbenchViewContribution, type WorkbenchViewHierarchyNode, type WorkbenchViewMenuContribution, type WorkbenchViewMenuRegistry, type WorkbenchViewRegistry, type WorkbenchViewRegistryStoreState, type WorkbenchWidgetPlacement, type WorkbenchWidgetTab, type WorkflowStatus, type WorkflowStatusAction, batchWorkbenchChanges, createRendererReadRegistry, createStatusBarRegistry, createStatusRegistry, createViewRegistry, createWorkbench, type createWorkbenchInput, createWorkbenchResourceContextValues, createWorkbenchSelectionResourceMetadata, defaultPageResourceCodec, dockedWorkbenchRegions, getKeybindingSteps, getWorkbenchModePanelForRegion, getWorkbenchSelectionResourceKeys, headerLeadingMenuPath, headerTrailingMenuPath, isWorkbenchModePanelAvailable, isWorkbenchViewHierarchyNode, matchesContextExpression, rendererReadKey, resolveAnchorRegion, resourceContextMenuPath, resourceHierarchyCycleCode, settleReadBatch, standardResourceIcons, workbenchCommandPaletteMenuPath, workbenchPanelRegions, workbenchRegionTabAddMenuPath, workbenchRegionTabLeadingMenuPath, workbenchRegions, workbenchResourceIdContextKey, workbenchResourceMetadataContextKey, workbenchResourceTypeContextKey, workbenchSelectionResourceKeyMetadataKey, workbenchTopHeaderLeadingMenuPath, workbenchTopHeaderTrailingMenuPath, workbenchViewIdContextKey };
|
|
3
3
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $ as e, A as t, B as n, C as r, D as i, F as a, G as o, H as s, I as c, J as l, L as u, M as d, N as f, O as p, P as m, Q as h, R as g, S as _, T as v, U as y, V as b, W as x, Z as S, _ as C, _t as w, a as ee, at as T, b as te, c as ne, ct as re, d as ie, et as ae, f as oe, ft as E, g as se, gt as D, h as ce, ht as O, i as le, it as k, j as A, k as ue, l as de, lt as fe, m as pe, mt as me, n as he, nt as ge, o as _e, ot as ve, p as ye, pt as j, r as be, rt as M, s as xe, st as N, tt as P, u as Se, ut as Ce, v as we, vt as F, w as Te, x as Ee, y as De, yt as I, z as Oe } from "./workbench-renderers-RPeMVtTc.js";
|
|
2
|
-
import { t as ke } from "./navigation-tree-registry-
|
|
2
|
+
import { t as ke } from "./navigation-tree-registry-CKB9qsW1.js";
|
|
3
3
|
import { defaultPageResourceCodec as Ae, defaultPageResourceCodec as je, dockedWorkbenchRegions as Me, dockedWorkbenchRegions as Ne, isLocalizedString as Pe, isNavigationTarget as Fe, isWorkbenchProjectUrl as Ie, parseWorkbenchPageUrl as Le, resourceKey as L, serializeWorkbenchPageUrl as Re, workbenchPages as ze } from "@pstdio/sdk/extensions";
|
|
4
4
|
//#region src/core/controllers/breadcrumbs/breadcrumb-registry.ts
|
|
5
5
|
var Be = () => {
|
|
@@ -3665,8 +3665,15 @@ var Be = () => {
|
|
|
3665
3665
|
onError: t.onError,
|
|
3666
3666
|
async run(e) {
|
|
3667
3667
|
e.throwIfAborted();
|
|
3668
|
-
let n =
|
|
3669
|
-
|
|
3668
|
+
let n = !0, r = (r) => {
|
|
3669
|
+
n && !e.aborted && i(o, l) && t.onProgress?.(r);
|
|
3670
|
+
}, a;
|
|
3671
|
+
try {
|
|
3672
|
+
a = await t.load(e, r);
|
|
3673
|
+
} finally {
|
|
3674
|
+
n = !1;
|
|
3675
|
+
}
|
|
3676
|
+
!e.aborted && i(o, l) && t.onValue(a);
|
|
3670
3677
|
}
|
|
3671
3678
|
};
|
|
3672
3679
|
o.pending = l, a(e, o);
|