@jetcrab/pi-desk 1.1.5 → 1.1.8-dev
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 +4 -4
- package/README.zh-CN.md +4 -4
- package/docs/README.md +8 -0
- package/docs/doc_asset/client-overview.webp +0 -0
- package/docs/doc_asset/multi-window.webp +0 -0
- package/docs/{pi-desk/plugins.md → plugins.md} +108 -1
- package/package.json +2 -2
- package/src/client/l2_biz/project-preview/l2-project-preview-dialog.tsx +3 -0
- package/src/client/l2_biz/workbench/file-workspace/l2-file-workspace-view.tsx +8 -0
- package/src/client/l2_biz/workbench/hooks/l2-workbench-chat-viewport.ts +81 -7
- package/src/client/l2_biz/workbench/l2-workbench-chat-view.tsx +2 -1
- package/src/client/l3_modules/project-files/l3-project-document-git.ts +82 -0
- package/src/client/l3_modules/project-files/l3-project-document-view.tsx +102 -5
- package/src/client/l3_modules/project-files/l3-project-file-browser.tsx +2 -6
- package/src/client/l3_modules/project-files/l3-project-file-runtime.ts +83 -1
- package/src/client/l3_modules/project-files/l3-project-file-tabs.tsx +24 -2
- package/src/client/l3_modules/project-files/l3-project-git-model.ts +32 -0
- package/src/client/l4_foundation/ui/code/l4-code-diff.tsx +25 -5
- package/src/client/l4_foundation/ui/code/l4-code-line-changes.ts +49 -0
- package/src/client/l4_foundation/ui/code/l4-code-line-changes.worker.ts +10 -0
- package/src/client/l4_foundation/ui/code/l4-code-line-markers.module.css +60 -0
- package/src/client/l4_foundation/ui/code/l4-code-line-markers.ts +156 -0
- package/src/client/l4_foundation/ui/code/l4-code-preview.tsx +61 -5
- package/src/client/l4_foundation/ui/code/l4-monaco-lines-diff.d.ts +21 -0
- package/src/client/l4_foundation/ui/shadcn/hover-card.tsx +28 -2
- package/src/common/l3_modules/project-files/l3-project-files-locale-messages.ts +16 -0
- package/src/server/l4_foundation/pidesk/l4-pidesk-runtime.ts +1 -1
- package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
- package/temp/build/pi-desk/release/.next/build-manifest.json +3 -3
- package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
- package/temp/build/pi-desk/release/.next/react-loadable-manifest.json +5 -4
- package/temp/build/pi-desk/release/.next/required-server-files.js +3 -3
- package/temp/build/pi-desk/release/.next/required-server-files.json +3 -3
- package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_not-found/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/login/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/page.js +6 -6
- package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/20842.js +1 -0
- package/temp/build/pi-desk/release/.next/server/chunks/25406.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/{9248.js → 354.js} +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/35985.js +6 -6
- package/temp/build/pi-desk/release/.next/server/chunks/45671.js +1 -0
- package/temp/build/pi-desk/release/.next/server/chunks/47757.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/56284.js +62 -0
- package/temp/build/pi-desk/release/.next/server/chunks/73691.js +1 -0
- package/temp/build/pi-desk/release/.next/server/chunks/82499.js +2 -2
- package/temp/build/pi-desk/release/.next/server/chunks/94296.js +2 -2
- package/temp/build/pi-desk/release/.next/server/chunks/pi-desk-line-changes.js +1 -0
- package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
- package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
- package/temp/build/pi-desk/release/.next/server/webpack-runtime.js +1 -1
- package/temp/build/pi-desk/release/.next/static/chunks/28739.540a4f24a8eaa3fd.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/31087-333cae396a52f232.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/3814-35cfab0ce3aa7c41.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/38459.9a9b6f4f3ec3ff50.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/45992-a39a014497ec4dd1.js +13 -0
- package/temp/build/pi-desk/release/.next/static/chunks/53291.ab6ef49016107124.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/{54206.82a63ab971911eda.js → 54206.ffb8c581c6661ae2.js} +2 -2
- package/temp/build/pi-desk/release/.next/static/chunks/5598.f34dce2a9de0d0e3.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/70669.8b4231a8675499e0.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/95287.34b860abf26f64a5.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/layout-586f6f88483051a7.js +3 -0
- package/temp/build/pi-desk/release/.next/static/chunks/app/{page-c6c68b33156be10a.js → page-0f2cf68a4666420b.js} +4 -4
- package/temp/build/pi-desk/release/.next/static/chunks/pi-desk-line-changes.49f8d59c256621d6.js +1 -0
- package/temp/build/pi-desk/release/.next/static/chunks/webpack-26261285e181235a.js +1 -0
- package/temp/build/pi-desk/release/.next/static/css/{f6a76a493aae9ae3.css → adb1d4e48dd43c0a.css} +1 -1
- package/temp/build/pi-desk/release/.next/trace-build +1 -1
- package/docs/pi-desk/README.md +0 -47
- package/temp/build/pi-desk/release/.next/server/chunks/6656.js +0 -1
- package/temp/build/pi-desk/release/.next/server/chunks/89236.js +0 -62
- package/temp/build/pi-desk/release/.next/static/chunks/19991.02fcb7c8ca3b1fe4.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/26285.54b8bcbf7a198c84.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/52354-6461358c522130be.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/74132-876f256c7a6101af.js +0 -13
- package/temp/build/pi-desk/release/.next/static/chunks/79615.7d68b269d93fcb93.js +0 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/layout-4faf3a52d219296d.js +0 -3
- package/temp/build/pi-desk/release/.next/static/chunks/webpack-7bfbf627379fb4c1.js +0 -1
- /package/docs/{pi-desk/commands.md → commands.md} +0 -0
- /package/docs/{pi-desk/examples → examples}/local-application/browser/application.js +0 -0
- /package/docs/{pi-desk/examples → examples}/local-application/browser/entry.js +0 -0
- /package/docs/{pi-desk/examples → examples}/local-application/package.json +0 -0
- /package/docs/{pi-desk/examples → examples}/local-application/pi-desk.ts +0 -0
- /package/temp/build/pi-desk/release/.next/static/{1LdtGYUckBhYZy0R-6yG0 → -pemk30NXpiExEU5tjb1t}/_buildManifest.js +0 -0
- /package/temp/build/pi-desk/release/.next/static/{1LdtGYUckBhYZy0R-6yG0 → -pemk30NXpiExEU5tjb1t}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { editor } from 'monaco-editor'
|
|
2
|
+
import type { L4Monaco } from './l4-monaco-runtime'
|
|
3
|
+
import type { L4LineChange } from './l4-code-line-changes'
|
|
4
|
+
import styles from './l4-code-line-markers.module.css'
|
|
5
|
+
|
|
6
|
+
export interface L4CodeLineMarkers {
|
|
7
|
+
previousChange: () => void
|
|
8
|
+
nextChange: () => void
|
|
9
|
+
dispose: () => void
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function bindL4CodeLineMarkers(
|
|
13
|
+
codeEditor: editor.IStandaloneCodeEditor,
|
|
14
|
+
monaco: L4Monaco,
|
|
15
|
+
input: {
|
|
16
|
+
path: string
|
|
17
|
+
original: string
|
|
18
|
+
modified: string
|
|
19
|
+
tooltip: (kind: L4LineChange['kind'], count: number) => string
|
|
20
|
+
onChanges: (count: number | null) => void
|
|
21
|
+
onOpenDiff: (lineNumber: number) => void
|
|
22
|
+
}
|
|
23
|
+
): L4CodeLineMarkers {
|
|
24
|
+
const decorations = codeEditor.createDecorationsCollection()
|
|
25
|
+
const lineCount = codeEditor.getModel()?.getLineCount() ?? 1
|
|
26
|
+
let changes: L4LineChange[] = []
|
|
27
|
+
let active = true
|
|
28
|
+
let worker: Worker | null = null
|
|
29
|
+
let timeout: ReturnType<typeof setTimeout> | null = null
|
|
30
|
+
const markerSelector = [styles.added, styles.modified, styles.deletedBefore, styles.deletedAfter]
|
|
31
|
+
.map((className) => `.${className}`)
|
|
32
|
+
.join(',')
|
|
33
|
+
|
|
34
|
+
const markerLine = (change: L4LineChange): number =>
|
|
35
|
+
Math.min(
|
|
36
|
+
lineCount,
|
|
37
|
+
change.kind === 'deleted'
|
|
38
|
+
? Math.max(1, change.modifiedStartLineNumber - 1)
|
|
39
|
+
: change.modifiedStartLineNumber
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
const stopWorker = (): void => {
|
|
43
|
+
if (timeout !== null) clearTimeout(timeout)
|
|
44
|
+
timeout = null
|
|
45
|
+
worker?.terminate()
|
|
46
|
+
worker = null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const finish = (result: L4LineChange[] | null): void => {
|
|
50
|
+
if (!active) return
|
|
51
|
+
stopWorker()
|
|
52
|
+
changes = result ?? []
|
|
53
|
+
decorations.set(
|
|
54
|
+
changes.map((change): editor.IModelDeltaDecoration => {
|
|
55
|
+
const deleted = change.kind === 'deleted'
|
|
56
|
+
const startLine = markerLine(change)
|
|
57
|
+
const endLine = deleted ? startLine : change.modifiedEndLineNumberExclusive - 1
|
|
58
|
+
const count = deleted
|
|
59
|
+
? change.originalEndLineNumberExclusive - change.originalStartLineNumber
|
|
60
|
+
: change.modifiedEndLineNumberExclusive - change.modifiedStartLineNumber
|
|
61
|
+
const colors = {
|
|
62
|
+
added: ['#16803c', '#59c77b'],
|
|
63
|
+
modified: ['#216bcc', '#6aabff'],
|
|
64
|
+
deleted: ['#d12c38', '#ff757f']
|
|
65
|
+
}[change.kind]
|
|
66
|
+
const markerClass = deleted
|
|
67
|
+
? change.modifiedStartLineNumber === 1
|
|
68
|
+
? styles.deletedBefore
|
|
69
|
+
: styles.deletedAfter
|
|
70
|
+
: styles[change.kind]
|
|
71
|
+
return {
|
|
72
|
+
range: new monaco.Range(startLine, 1, endLine, 1),
|
|
73
|
+
options: {
|
|
74
|
+
isWholeLine: !deleted,
|
|
75
|
+
showIfCollapsed: true,
|
|
76
|
+
linesDecorationsClassName: deleted ? undefined : markerClass,
|
|
77
|
+
firstLineDecorationClassName: deleted ? markerClass : undefined,
|
|
78
|
+
linesDecorationsTooltip: input.tooltip(change.kind, count),
|
|
79
|
+
overviewRuler: {
|
|
80
|
+
color: colors[0],
|
|
81
|
+
darkColor: colors[1],
|
|
82
|
+
position: monaco.editor.OverviewRulerLane.Left
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
)
|
|
88
|
+
if (result === null) {
|
|
89
|
+
console.warn('[Pi Desk][CodePreview] 行标记不可用,计算失败或超过限制', {
|
|
90
|
+
path: input.path
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
input.onChanges(result?.length ?? null)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const mouseListener = codeEditor.onMouseDown((event) => {
|
|
97
|
+
if (
|
|
98
|
+
event.target.type !== monaco.editor.MouseTargetType.GUTTER_LINE_DECORATIONS ||
|
|
99
|
+
!event.target.element?.closest(markerSelector)
|
|
100
|
+
) {
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
const line = event.target.position?.lineNumber
|
|
104
|
+
if (line === undefined) return
|
|
105
|
+
const change = changes.find((item) =>
|
|
106
|
+
item.kind === 'deleted'
|
|
107
|
+
? markerLine(item) === line
|
|
108
|
+
: item.modifiedStartLineNumber <= line && line < item.modifiedEndLineNumberExclusive
|
|
109
|
+
)
|
|
110
|
+
if (change) input.onOpenDiff(line)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
worker = new Worker(new URL('./l4-code-line-changes.worker.ts', import.meta.url), {
|
|
115
|
+
type: 'module',
|
|
116
|
+
name: 'pi-desk-line-changes'
|
|
117
|
+
})
|
|
118
|
+
worker.onmessage = (event: MessageEvent<L4LineChange[] | null>): void => finish(event.data)
|
|
119
|
+
worker.onerror = (): void => finish(null)
|
|
120
|
+
worker.onmessageerror = (): void => finish(null)
|
|
121
|
+
// 含 Worker 启动预算;取消时终止 Worker,旧文件结果没有回流通道。
|
|
122
|
+
timeout = setTimeout(() => finish(null), 3_000)
|
|
123
|
+
worker.postMessage({ original: input.original, modified: input.modified })
|
|
124
|
+
} catch {
|
|
125
|
+
finish(null)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const navigate = (direction: 'previous' | 'next'): void => {
|
|
129
|
+
if (changes.length === 0) return
|
|
130
|
+
const currentLine = codeEditor.getPosition()?.lineNumber ?? 1
|
|
131
|
+
const lines = changes.map(markerLine)
|
|
132
|
+
const line =
|
|
133
|
+
direction === 'next'
|
|
134
|
+
? (lines.find((item) => item > currentLine) ?? lines[0])
|
|
135
|
+
: (lines.findLast((item) => item < currentLine) ?? lines[lines.length - 1])
|
|
136
|
+
codeEditor.setPosition({ lineNumber: line, column: 1 })
|
|
137
|
+
codeEditor.revealLineInCenter(line)
|
|
138
|
+
codeEditor.focus()
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
previousChange(): void {
|
|
143
|
+
navigate('previous')
|
|
144
|
+
},
|
|
145
|
+
nextChange(): void {
|
|
146
|
+
navigate('next')
|
|
147
|
+
},
|
|
148
|
+
dispose(): void {
|
|
149
|
+
active = false
|
|
150
|
+
stopWorker()
|
|
151
|
+
mouseListener.dispose()
|
|
152
|
+
decorations.clear()
|
|
153
|
+
changes = []
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
|
|
24
24
|
import { bindL4MonacoPreviewEscape } from './l4-monaco-preview-escape'
|
|
25
25
|
import { useL4CodePreferences } from './l4-code-preferences'
|
|
26
|
+
import { bindL4CodeLineMarkers, type L4CodeLineMarkers } from './l4-code-line-markers'
|
|
27
|
+
import markerStyles from './l4-code-line-markers.module.css'
|
|
26
28
|
|
|
27
29
|
export type L4CodePreviewState = editor.ICodeEditorViewState
|
|
28
30
|
|
|
@@ -32,6 +34,8 @@ export interface L4CodePreviewHandle {
|
|
|
32
34
|
getSelectionText: () => string
|
|
33
35
|
getViewState: () => L4CodePreviewState | null
|
|
34
36
|
focus: () => void
|
|
37
|
+
previousChange: () => void
|
|
38
|
+
nextChange: () => void
|
|
35
39
|
}
|
|
36
40
|
|
|
37
41
|
interface L4CodePreviewProps {
|
|
@@ -41,13 +45,27 @@ interface L4CodePreviewProps {
|
|
|
41
45
|
savedState: L4CodePreviewState | null
|
|
42
46
|
onSaveState: (path: string, state: L4CodePreviewState | null) => void
|
|
43
47
|
onEscape?: () => void
|
|
48
|
+
originalContent?: string
|
|
49
|
+
onChanges?: (count: number | null) => void
|
|
50
|
+
onOpenDiff?: (lineNumber: number) => void
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
function L4CodePreviewComponent(
|
|
47
|
-
{
|
|
54
|
+
{
|
|
55
|
+
path,
|
|
56
|
+
content,
|
|
57
|
+
size,
|
|
58
|
+
savedState,
|
|
59
|
+
onSaveState,
|
|
60
|
+
onEscape,
|
|
61
|
+
originalContent,
|
|
62
|
+
onChanges,
|
|
63
|
+
onOpenDiff
|
|
64
|
+
}: L4CodePreviewProps,
|
|
48
65
|
ref: ForwardedRef<L4CodePreviewHandle>
|
|
49
66
|
): React.JSX.Element {
|
|
50
67
|
const { t } = useTranslation('common')
|
|
68
|
+
const { t: projectFilesT } = useTranslation('projectFiles')
|
|
51
69
|
const { wrapLines } = useL4CodePreferences()
|
|
52
70
|
const hostRef = useRef<HTMLDivElement>(null)
|
|
53
71
|
const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null)
|
|
@@ -55,11 +73,16 @@ function L4CodePreviewComponent(
|
|
|
55
73
|
const wrapLinesRef = useRef(wrapLines)
|
|
56
74
|
const savedStateRef = useRef(savedState)
|
|
57
75
|
const escapeRef = useRef(onEscape)
|
|
76
|
+
const markersRef = useRef<L4CodeLineMarkers | null>(null)
|
|
77
|
+
const changesRef = useRef(onChanges)
|
|
78
|
+
const openDiffRef = useRef(onOpenDiff)
|
|
58
79
|
|
|
59
80
|
useEffect(() => {
|
|
60
81
|
savedStateRef.current = savedState
|
|
61
82
|
escapeRef.current = onEscape
|
|
62
|
-
|
|
83
|
+
changesRef.current = onChanges
|
|
84
|
+
openDiffRef.current = onOpenDiff
|
|
85
|
+
}, [onChanges, onEscape, onOpenDiff, savedState])
|
|
63
86
|
const [loadState, setLoadState] = useState<'loading' | 'ready' | 'error'>('loading')
|
|
64
87
|
|
|
65
88
|
useEffect(() => {
|
|
@@ -90,6 +113,12 @@ function L4CodePreviewComponent(
|
|
|
90
113
|
},
|
|
91
114
|
focus(): void {
|
|
92
115
|
editorRef.current?.focus()
|
|
116
|
+
},
|
|
117
|
+
previousChange(): void {
|
|
118
|
+
markersRef.current?.previousChange()
|
|
119
|
+
},
|
|
120
|
+
nextChange(): void {
|
|
121
|
+
markersRef.current?.nextChange()
|
|
93
122
|
}
|
|
94
123
|
}),
|
|
95
124
|
[]
|
|
@@ -101,6 +130,7 @@ function L4CodePreviewComponent(
|
|
|
101
130
|
let active = true
|
|
102
131
|
let codeEditor: editor.IStandaloneCodeEditor | null = null
|
|
103
132
|
let model: editor.ITextModel | null = null
|
|
133
|
+
let markers: L4CodeLineMarkers | null = null
|
|
104
134
|
let stopThemeObserver = (): void => undefined
|
|
105
135
|
let stopTypographyObserver = (): void => undefined
|
|
106
136
|
|
|
@@ -131,6 +161,7 @@ function L4CodePreviewComponent(
|
|
|
131
161
|
wrappingIndent: 'same',
|
|
132
162
|
...getL4MonacoTypography(),
|
|
133
163
|
lineNumbersMinChars: 3,
|
|
164
|
+
lineDecorationsWidth: 26,
|
|
134
165
|
folding: size <= 1024 * 1024,
|
|
135
166
|
renderValidationDecorations: 'off',
|
|
136
167
|
renderWhitespace: 'selection',
|
|
@@ -145,6 +176,25 @@ function L4CodePreviewComponent(
|
|
|
145
176
|
if (escapeRef.current)
|
|
146
177
|
bindL4MonacoPreviewEscape(codeEditor, monaco.KeyCode.Escape, () => escapeRef.current?.())
|
|
147
178
|
editorRef.current = codeEditor
|
|
179
|
+
if (originalContent !== undefined) {
|
|
180
|
+
markers = bindL4CodeLineMarkers(codeEditor, monaco, {
|
|
181
|
+
path,
|
|
182
|
+
original: originalContent,
|
|
183
|
+
modified: content,
|
|
184
|
+
tooltip: (kind, count) =>
|
|
185
|
+
projectFilesT(
|
|
186
|
+
{
|
|
187
|
+
added: 'gitAddedLines',
|
|
188
|
+
modified: 'gitModifiedLines',
|
|
189
|
+
deleted: 'gitDeletedLines'
|
|
190
|
+
}[kind],
|
|
191
|
+
{ count }
|
|
192
|
+
),
|
|
193
|
+
onChanges: (count) => changesRef.current?.(count),
|
|
194
|
+
onOpenDiff: (lineNumber) => openDiffRef.current?.(lineNumber)
|
|
195
|
+
})
|
|
196
|
+
markersRef.current = markers
|
|
197
|
+
}
|
|
148
198
|
stopThemeObserver = observeL4MonacoTheme((theme) => monaco.editor.setTheme(theme))
|
|
149
199
|
stopTypographyObserver = observeL4MonacoTypography((typography) =>
|
|
150
200
|
codeEditor?.updateOptions(typography)
|
|
@@ -158,18 +208,24 @@ function L4CodePreviewComponent(
|
|
|
158
208
|
errorName: error instanceof Error ? error.name : 'UnknownError'
|
|
159
209
|
})
|
|
160
210
|
setLoadState('error')
|
|
211
|
+
if (originalContent !== undefined) changesRef.current?.(null)
|
|
161
212
|
})
|
|
162
213
|
|
|
163
214
|
return () => {
|
|
164
215
|
active = false
|
|
165
216
|
stopThemeObserver()
|
|
166
217
|
stopTypographyObserver()
|
|
167
|
-
|
|
218
|
+
markers?.dispose()
|
|
219
|
+
markersRef.current = null
|
|
220
|
+
if (codeEditor) {
|
|
221
|
+
savedStateRef.current = codeEditor.saveViewState()
|
|
222
|
+
onSaveStateRef.current(path, savedStateRef.current)
|
|
223
|
+
}
|
|
168
224
|
editorRef.current = null
|
|
169
225
|
codeEditor?.dispose()
|
|
170
226
|
model?.dispose()
|
|
171
227
|
}
|
|
172
|
-
}, [content, path, size, t])
|
|
228
|
+
}, [content, originalContent, path, projectFilesT, size, t])
|
|
173
229
|
|
|
174
230
|
useEffect(() => {
|
|
175
231
|
editorRef.current?.updateOptions({ wordWrap: wrapLines ? 'on' : 'off' })
|
|
@@ -180,7 +236,7 @@ function L4CodePreviewComponent(
|
|
|
180
236
|
data-testid="code-preview"
|
|
181
237
|
className="relative h-full min-h-0 w-full overflow-hidden bg-background"
|
|
182
238
|
>
|
|
183
|
-
<div ref={hostRef} className=
|
|
239
|
+
<div ref={hostRef} className={`size-full ${markerStyles.host}`} />
|
|
184
240
|
{loadState === 'loading' ? (
|
|
185
241
|
<div className="pointer-events-none absolute inset-0 flex items-center justify-center gap-2 bg-background text-sm text-muted-foreground">
|
|
186
242
|
<LoaderCircleIcon className="size-4 animate-spin" /> {t('codeLoading')}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare module 'monaco-editor/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer' {
|
|
2
|
+
interface LineRange {
|
|
3
|
+
startLineNumber: number
|
|
4
|
+
endLineNumberExclusive: number
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export class DefaultLinesDiffComputer {
|
|
8
|
+
computeDiff(
|
|
9
|
+
originalLines: string[],
|
|
10
|
+
modifiedLines: string[],
|
|
11
|
+
options: {
|
|
12
|
+
ignoreTrimWhitespace: boolean
|
|
13
|
+
maxComputationTimeMs: number
|
|
14
|
+
computeMoves: boolean
|
|
15
|
+
}
|
|
16
|
+
): {
|
|
17
|
+
changes: { original: LineRange; modified: LineRange }[]
|
|
18
|
+
hitTimeout: boolean
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
3
|
import { PreviewCard as PreviewCardPrimitive } from '@base-ui/react/preview-card'
|
|
4
|
+
import { useRef } from 'react'
|
|
4
5
|
|
|
5
6
|
import { cn } from '@client/l4_foundation/lib/l4-utils'
|
|
6
7
|
|
|
7
|
-
function HoverCard({ ...props }: PreviewCardPrimitive.Root.Props) {
|
|
8
|
-
|
|
8
|
+
function HoverCard({ onOpenChange, ...props }: PreviewCardPrimitive.Root.Props): React.JSX.Element {
|
|
9
|
+
const triggerRef = useRef<Element | null>(null)
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<PreviewCardPrimitive.Root
|
|
13
|
+
data-slot="hover-card"
|
|
14
|
+
{...props}
|
|
15
|
+
onOpenChange={(open, eventDetails) => {
|
|
16
|
+
onOpenChange?.(open, eventDetails)
|
|
17
|
+
if (eventDetails.isCanceled) return
|
|
18
|
+
if (open) {
|
|
19
|
+
triggerRef.current = eventDetails.trigger ?? null
|
|
20
|
+
return
|
|
21
|
+
}
|
|
22
|
+
const trigger = triggerRef.current
|
|
23
|
+
triggerRef.current = null
|
|
24
|
+
// PreviewCard 打开时不转移焦点,Esc 关闭需释放仍停留在触发器上的焦点。
|
|
25
|
+
if (
|
|
26
|
+
eventDetails.reason === 'escape-key' &&
|
|
27
|
+
trigger instanceof HTMLElement &&
|
|
28
|
+
trigger.ownerDocument.activeElement === trigger
|
|
29
|
+
) {
|
|
30
|
+
trigger.blur()
|
|
31
|
+
}
|
|
32
|
+
}}
|
|
33
|
+
/>
|
|
34
|
+
)
|
|
9
35
|
}
|
|
10
36
|
|
|
11
37
|
function HoverCardTrigger({ ...props }: PreviewCardPrimitive.Trigger.Props) {
|
|
@@ -45,6 +45,14 @@ export const L3_PROJECT_FILES_LOCALE_MESSAGES = {
|
|
|
45
45
|
copyContentFailed: 'Could not copy the file. Please copy it manually.',
|
|
46
46
|
fileActions: 'File actions',
|
|
47
47
|
headToWorking: 'HEAD ↔ working tree',
|
|
48
|
+
gitChangesCount: 'Against HEAD · {{count}} changes',
|
|
49
|
+
gitChangesCompact: '{{count}} changes',
|
|
50
|
+
gitMarkersLoading: 'Comparing with HEAD…',
|
|
51
|
+
gitMarkersFailed: 'Could not read changes · Reload to retry',
|
|
52
|
+
gitMarkersUnavailable: 'Line change markers unavailable',
|
|
53
|
+
gitAddedLines: '{{count}} lines added',
|
|
54
|
+
gitModifiedLines: '{{count}} lines modified',
|
|
55
|
+
gitDeletedLines: '{{count}} lines deleted',
|
|
48
56
|
noDiffChanges: ' · No content differences',
|
|
49
57
|
previousChange: 'Previous change',
|
|
50
58
|
nextChange: 'Next change',
|
|
@@ -131,6 +139,14 @@ export const L3_PROJECT_FILES_LOCALE_MESSAGES = {
|
|
|
131
139
|
copyContentFailed: '复制文件内容失败,请手动复制。',
|
|
132
140
|
fileActions: '文件操作',
|
|
133
141
|
headToWorking: 'HEAD ↔ 工作区',
|
|
142
|
+
gitChangesCount: '相对 HEAD · {{count}} 处变更',
|
|
143
|
+
gitChangesCompact: '{{count}} 处变更',
|
|
144
|
+
gitMarkersLoading: '正在与 HEAD 比较…',
|
|
145
|
+
gitMarkersFailed: '变更读取失败 · 刷新重试',
|
|
146
|
+
gitMarkersUnavailable: '此文件无法显示行变更',
|
|
147
|
+
gitAddedLines: '新增 {{count}} 行',
|
|
148
|
+
gitModifiedLines: '修改 {{count}} 行',
|
|
149
|
+
gitDeletedLines: '删除 {{count}} 行',
|
|
134
150
|
noDiffChanges: ' · 当前比较无内容差异',
|
|
135
151
|
previousChange: '上一个变更',
|
|
136
152
|
nextChange: '下一个变更',
|
|
@@ -60,7 +60,7 @@ export async function initializeL4PiDeskCommands(
|
|
|
60
60
|
const sdkRoot = dirname(
|
|
61
61
|
dirname(createRequire(join(hostRoot, 'package.json')).resolve('@jetcrab/pi-desk-sdk'))
|
|
62
62
|
)
|
|
63
|
-
const docsDirectory = join(hostRoot, 'docs'
|
|
63
|
+
const docsDirectory = join(hostRoot, 'docs')
|
|
64
64
|
await Promise.all(
|
|
65
65
|
['README.md', 'commands.md', 'plugins.md'].map((file) => access(join(docsDirectory, file)))
|
|
66
66
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
-pemk30NXpiExEU5tjb1t
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/-pemk30NXpiExEU5tjb1t/_buildManifest.js",
|
|
8
|
+
"static/-pemk30NXpiExEU5tjb1t/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
|
-
"static/chunks/webpack-
|
|
11
|
+
"static/chunks/webpack-26261285e181235a.js",
|
|
12
12
|
"static/chunks/e388c842-1ca92f1ea0dfe8ee.js",
|
|
13
13
|
"static/chunks/64444-3e955f910569274d.js",
|
|
14
14
|
"static/chunks/main-app-6230945a5a062fce.js"
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"dynamicRoutes": {},
|
|
66
66
|
"notFoundRoutes": [],
|
|
67
67
|
"preview": {
|
|
68
|
-
"previewModeId": "
|
|
69
|
-
"previewModeSigningKey": "
|
|
70
|
-
"previewModeEncryptionKey": "
|
|
68
|
+
"previewModeId": "6a3ed0add2f10c8e629c3b4927c3ab47",
|
|
69
|
+
"previewModeSigningKey": "41ebb995a07e123fb88ed9cf02a7c140ce93d47834ee0cb7d9c6c9dcc462cca1",
|
|
70
|
+
"previewModeEncryptionKey": "7ba998796c3a2cb1cef990841e56a970e006ce0833a171001b0266ed108d6aaa"
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -2610,8 +2610,8 @@
|
|
|
2610
2610
|
"client/l2_biz/workbench/file-workspace/l2-work-session-file-layout.tsx -> ./l2-file-workspace-view": {
|
|
2611
2611
|
"id": 19991,
|
|
2612
2612
|
"files": [
|
|
2613
|
-
"static/chunks/
|
|
2614
|
-
"static/chunks/
|
|
2613
|
+
"static/chunks/31087-333cae396a52f232.js",
|
|
2614
|
+
"static/chunks/70669.8b4231a8675499e0.js"
|
|
2615
2615
|
]
|
|
2616
2616
|
},
|
|
2617
2617
|
"client/l4_foundation/terminal/l4-terminal-renderer.ts -> @xterm/addon-fit": {
|
|
@@ -2639,9 +2639,10 @@
|
|
|
2639
2639
|
"static/css/61a4c328346915cf.css",
|
|
2640
2640
|
"static/css/3637d221a5ab27aa.css",
|
|
2641
2641
|
"static/chunks/4db6c291.2775b26207a24b95.js",
|
|
2642
|
+
"static/chunks/38459.9a9b6f4f3ec3ff50.js",
|
|
2642
2643
|
"static/chunks/46270-3e42514685626190.js",
|
|
2643
|
-
"static/chunks/
|
|
2644
|
-
"static/chunks/54206.
|
|
2644
|
+
"static/chunks/95287.34b860abf26f64a5.js",
|
|
2645
|
+
"static/chunks/54206.ffb8c581c6661ae2.js",
|
|
2645
2646
|
"static/chunks/87086.16dde653e790cc2c.js"
|
|
2646
2647
|
]
|
|
2647
2648
|
},
|
|
@@ -2,12 +2,12 @@ self.__SERVER_FILES_MANIFEST={
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"config": {
|
|
4
4
|
"env": {
|
|
5
|
-
"PI_DESK_APP_VERSION": "1.1.
|
|
6
|
-
"PI_DESK_VERSION_UPDATED_AT": "2026-10-
|
|
5
|
+
"PI_DESK_APP_VERSION": "1.1.8-dev",
|
|
6
|
+
"PI_DESK_VERSION_UPDATED_AT": "2026-10-12T09:40:22+08:00"
|
|
7
7
|
},
|
|
8
8
|
"webpack": null,
|
|
9
9
|
"typescript": {
|
|
10
|
-
"ignoreBuildErrors":
|
|
10
|
+
"ignoreBuildErrors": true
|
|
11
11
|
},
|
|
12
12
|
"typedRoutes": false,
|
|
13
13
|
"distDir": "temp/build/pi-desk/release/.next",
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"config": {
|
|
4
4
|
"env": {
|
|
5
|
-
"PI_DESK_APP_VERSION": "1.1.
|
|
6
|
-
"PI_DESK_VERSION_UPDATED_AT": "2026-10-
|
|
5
|
+
"PI_DESK_APP_VERSION": "1.1.8-dev",
|
|
6
|
+
"PI_DESK_VERSION_UPDATED_AT": "2026-10-12T09:40:22+08:00"
|
|
7
7
|
},
|
|
8
8
|
"webpack": null,
|
|
9
9
|
"typescript": {
|
|
10
|
-
"ignoreBuildErrors":
|
|
10
|
+
"ignoreBuildErrors": true
|
|
11
11
|
},
|
|
12
12
|
"typedRoutes": false,
|
|
13
13
|
"distDir": "temp/build/pi-desk/release/.next",
|
package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"14405":{"*":{"id":"27297","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"41051","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"1480","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"49453","name":"*","chunks":[],"async":false}},"32422":{"*":{"id":"48599","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"79460","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"97016","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"12104","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"4527","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"7005","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"21147","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"43305","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"88476","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"58044","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx":{"id":66999,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","24345","static/chunks/app/not-found-2aab8b33ebbf3257.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-876f256c7a6101af.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-4faf3a52d219296d.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-876f256c7a6101af.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-4faf3a52d219296d.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-providers.tsx":{"id":64282,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-876f256c7a6101af.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-4faf3a52d219296d.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l4_foundation/styles/l4-globals.css":{"id":84178,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-876f256c7a6101af.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-4faf3a52d219296d.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx":{"id":84845,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","18039","static/chunks/app/error-0296a3b20cd1bf00.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx":{"id":71713,"name":"*","chunks":["34219","static/chunks/app/global-error-6f5fc4928fd1966c.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-home-page.tsx":{"id":32422,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","57208","static/chunks/57208-d6d38167dabb91e4.js","14197","static/chunks/14197-3d3ddd426ac06c9c.js","34903","static/chunks/34903-e4205c0becabea76.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-876f256c7a6101af.js","58974","static/chunks/app/page-c6c68b33156be10a.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l2_biz/auth/l2-login.tsx":{"id":21358,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/pi-desk/pi-desk/src/":[],"/home/runner/work/pi-desk/pi-desk/src/app/not-found":[],"/home/runner/work/pi-desk/pi-desk/src/app/layout":[{"inlined":false,"path":"static/css/3213ee28336bddc2.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/error":[],"/home/runner/work/pi-desk/pi-desk/src/app/global-error":[],"/home/runner/work/pi-desk/pi-desk/src/app/page":[{"inlined":false,"path":"static/css/f6a76a493aae9ae3.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/_global-error/page":[]},"rscModuleMapping":{"14405":{"*":{"id":"52047","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"69079","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"7770","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"39159","name":"*","chunks":[],"async":false}},"32422":{"*":{"id":"11568","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"52442","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"47594","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"64669","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"88893","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"17179","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"70961","name":"*","chunks":[],"async":false}},"84178":{"*":{"id":"12707","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"56951","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"270","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"29190","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
|
|
1
|
+
globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"14405":{"*":{"id":"27297","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"41051","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"1480","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"49453","name":"*","chunks":[],"async":false}},"32422":{"*":{"id":"48599","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"79460","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"97016","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"45543","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"4527","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"7005","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"21147","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"43305","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"88476","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"58044","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx":{"id":66999,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","24345","static/chunks/app/not-found-2aab8b33ebbf3257.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","45992","static/chunks/45992-a39a014497ec4dd1.js","31087","static/chunks/31087-333cae396a52f232.js","7177","static/chunks/app/layout-586f6f88483051a7.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","45992","static/chunks/45992-a39a014497ec4dd1.js","31087","static/chunks/31087-333cae396a52f232.js","7177","static/chunks/app/layout-586f6f88483051a7.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-providers.tsx":{"id":64282,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","45992","static/chunks/45992-a39a014497ec4dd1.js","31087","static/chunks/31087-333cae396a52f232.js","7177","static/chunks/app/layout-586f6f88483051a7.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l4_foundation/styles/l4-globals.css":{"id":84178,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","57208","static/chunks/57208-d6d38167dabb91e4.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","45992","static/chunks/45992-a39a014497ec4dd1.js","31087","static/chunks/31087-333cae396a52f232.js","7177","static/chunks/app/layout-586f6f88483051a7.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx":{"id":84845,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","18039","static/chunks/app/error-0296a3b20cd1bf00.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx":{"id":71713,"name":"*","chunks":["34219","static/chunks/app/global-error-6f5fc4928fd1966c.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-home-page.tsx":{"id":32422,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","57208","static/chunks/57208-d6d38167dabb91e4.js","14197","static/chunks/14197-3d3ddd426ac06c9c.js","34903","static/chunks/34903-e4205c0becabea76.js","74220","static/chunks/74220-795a2e7185bd66cb.js","45992","static/chunks/45992-a39a014497ec4dd1.js","58974","static/chunks/app/page-0f2cf68a4666420b.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l2_biz/auth/l2-login.tsx":{"id":21358,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/pi-desk/pi-desk/src/":[],"/home/runner/work/pi-desk/pi-desk/src/app/not-found":[],"/home/runner/work/pi-desk/pi-desk/src/app/layout":[{"inlined":false,"path":"static/css/adb1d4e48dd43c0a.css"},{"inlined":false,"path":"static/css/3213ee28336bddc2.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/error":[],"/home/runner/work/pi-desk/pi-desk/src/app/global-error":[],"/home/runner/work/pi-desk/pi-desk/src/app/page":[{"inlined":false,"path":"static/css/adb1d4e48dd43c0a.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/_global-error/page":[]},"rscModuleMapping":{"14405":{"*":{"id":"52047","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"69079","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"7770","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"39159","name":"*","chunks":[],"async":false}},"32422":{"*":{"id":"11568","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"52442","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"47594","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"64669","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"88893","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"17179","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"70961","name":"*","chunks":[],"async":false}},"84178":{"*":{"id":"12707","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"56951","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"270","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"29190","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
|