summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components/diff.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-11-25 07:47:25 -0600
committerAdam <[email protected]>2025-11-25 07:47:25 -0600
commit995f551e8013ff4a267d8d551870cc87f5aaf84d (patch)
tree8d66e340a46ea2aafc0662e1ae4947789a68fea0 /packages/ui/src/components/diff.tsx
parent15facd8cfd5ed43fd503326d950df40e5ef81a3a (diff)
downloadopencode-995f551e8013ff4a267d8d551870cc87f5aaf84d.tar.gz
opencode-995f551e8013ff4a267d8d551870cc87f5aaf84d.zip
fix(enterprise): custom element defs
Diffstat (limited to 'packages/ui/src/components/diff.tsx')
-rw-r--r--packages/ui/src/components/diff.tsx57
1 files changed, 18 insertions, 39 deletions
diff --git a/packages/ui/src/components/diff.tsx b/packages/ui/src/components/diff.tsx
index af89b5c1e..e9747f25d 100644
--- a/packages/ui/src/components/diff.tsx
+++ b/packages/ui/src/components/diff.tsx
@@ -24,41 +24,32 @@ export function Diff<T>(props: DiffProps<T>) {
let fileDiffInstance: FileDiff<T> | undefined
const cleanupFunctions: Array<() => void> = []
+ const defaultOptions: FileDiffOptions<T> = {
+ theme: "OpenCode",
+ themeType: "system",
+ disableLineNumbers: false,
+ overflow: "wrap",
+ diffStyle: "unified",
+ diffIndicators: "bars",
+ disableBackground: false,
+ expansionLineCount: 20,
+ lineDiffType: "word-alt",
+ maxLineDiffLength: 1000,
+ maxLineLengthForHighlighting: 1000,
+ disableFileHeader: true,
+ }
+
createEffect(() => {
- // Create FileDiff instance and connect to existing server-rendered DOM.
- // Don't call hydrate() - that would re-render content and cause duplication.
- // Instead, just set the fileContainer reference to attach event handlers.
if (props.preloadedDiff) return
container.innerHTML = ""
if (!fileDiffInstance) {
fileDiffInstance = new FileDiff<T>({
- theme: "OpenCode",
- themeType: "system",
- disableLineNumbers: false,
- overflow: "wrap",
- diffStyle: "unified",
- diffIndicators: "bars",
- disableBackground: false,
- expansionLineCount: 20,
- lineDiffType: "word-alt",
- maxLineDiffLength: 1000,
- maxLineLengthForHighlighting: 1000,
- disableFileHeader: true,
- // You can optionally pass a render function for rendering out line
- // annotations. Just return the dom node to render
- // renderAnnotation(annotation: DiffLineAnnotation<T>): HTMLElement {
- // // Despite the diff itself being rendered in the shadow dom,
- // // annotations are inserted via the web components 'slots' api and you
- // // can use all your normal normal css and styling for them
- // const element = document.createElement("div")
- // element.innerText = annotation.metadata.threadId
- // return element
- // },
+ ...defaultOptions,
...others,
...(props.preloadedDiff ?? {}),
})
}
- fileDiffInstance?.render({
+ fileDiffInstance.render({
oldFile: local.before,
newFile: local.after,
lineAnnotations: local.annotations,
@@ -68,20 +59,8 @@ export function Diff<T>(props: DiffProps<T>) {
onMount(() => {
if (isServer) return
-
fileDiffInstance = new FileDiff<T>({
- theme: "OpenCode",
- themeType: "system",
- disableLineNumbers: false,
- overflow: "wrap",
- diffStyle: "unified",
- diffIndicators: "bars",
- disableBackground: false,
- expansionLineCount: 20,
- lineDiffType: "word-alt",
- maxLineDiffLength: 1000,
- maxLineLengthForHighlighting: 1000,
- disableFileHeader: true,
+ ...defaultOptions,
// You can optionally pass a render function for rendering out line
// annotations. Just return the dom node to render
// renderAnnotation(annotation: DiffLineAnnotation<T>): HTMLElement {