summaryrefslogtreecommitdiffhomepage
path: root/packages/ui/src/components/diff.stories.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-26 16:05:04 -0600
committerGitHub <[email protected]>2026-02-26 16:05:04 -0600
commit05d77b7d473d8828671ede90fec1f4da75106738 (patch)
tree4cc219e913108631bc65f5bed2d4bdaad8b21420 /packages/ui/src/components/diff.stories.tsx
parent8c484a05b894be0a88c130badb2353d02d1deb23 (diff)
downloadopencode-05d77b7d473d8828671ede90fec1f4da75106738.tar.gz
opencode-05d77b7d473d8828671ede90fec1f4da75106738.zip
chore: storybook (#15285)
Co-authored-by: David Hill <[email protected]>
Diffstat (limited to 'packages/ui/src/components/diff.stories.tsx')
-rw-r--r--packages/ui/src/components/diff.stories.tsx96
1 files changed, 96 insertions, 0 deletions
diff --git a/packages/ui/src/components/diff.stories.tsx b/packages/ui/src/components/diff.stories.tsx
new file mode 100644
index 000000000..03bf4a0e0
--- /dev/null
+++ b/packages/ui/src/components/diff.stories.tsx
@@ -0,0 +1,96 @@
+// @ts-nocheck
+import * as mod from "./diff"
+import { create } from "../storybook/scaffold"
+import { diff } from "../storybook/fixtures"
+
+const docs = `### Overview
+Render a code diff with OpenCode styling using the Pierre diff engine.
+
+Pair with \`DiffChanges\` for summary counts.
+Use \`LineComment\` or external UI for annotation workflows.
+
+### API
+- Required: \`before\` and \`after\` file contents (name + contents).
+- Optional: \`diffStyle\` ("unified" | "split"), \`annotations\`, \`selectedLines\`, \`commentedLines\`.
+- Optional interaction: \`enableLineSelection\`, \`onLineSelectionEnd\`.
+- Passes through Pierre FileDiff options (see component source).
+
+### Variants and states
+- Unified and split diff styles.
+- Optional line selection + commented line highlighting.
+
+### Behavior
+- Re-renders when \`before\`/\`after\` or diff options change.
+- Line selection uses mouse drag/selection when enabled.
+
+### Accessibility
+- TODO: confirm keyboard behavior from the Pierre diff engine.
+- Provide surrounding labels or headings when used as a standalone view.
+
+### Theming/tokens
+- Uses \`data-component="diff"\` and Pierre CSS variables from \`styleVariables\`.
+- Colors derive from theme tokens (diff add/delete, background, text).
+
+`
+
+const story = create({
+ title: "UI/Diff",
+ mod,
+ args: {
+ before: diff.before,
+ after: diff.after,
+ diffStyle: "unified",
+ },
+})
+
+export default {
+ title: "UI/Diff",
+ id: "components-diff",
+ component: story.meta.component,
+ tags: ["autodocs"],
+ parameters: {
+ docs: {
+ description: {
+ component: docs,
+ },
+ },
+ },
+ argTypes: {
+ diffStyle: {
+ control: "select",
+ options: ["unified", "split"],
+ },
+ enableLineSelection: {
+ control: "boolean",
+ },
+ },
+}
+
+export const Unified = story.Basic
+
+export const Split = {
+ args: {
+ diffStyle: "split",
+ },
+}
+
+export const Selectable = {
+ args: {
+ enableLineSelection: true,
+ },
+}
+
+export const SelectedLines = {
+ args: {
+ selectedLines: { start: 2, end: 4 },
+ },
+}
+
+export const CommentedLines = {
+ args: {
+ commentedLines: [
+ { start: 1, end: 1 },
+ { start: 4, end: 4 },
+ ],
+ },
+}