v-code-diff 1.11.0 → 1.12.1

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "v-code-diff",
3
3
  "type": "module",
4
- "version": "1.11.0",
4
+ "version": "1.12.1",
5
5
  "description": "template component for vue-demi, can dev and build",
6
6
  "license": "MIT",
7
7
  "exports": {
package/src/CodeDiff.vue CHANGED
@@ -3,6 +3,8 @@ import { computed, ref, watch } from 'vue-demi'
3
3
  import { createSplitDiff, createUnifiedDiff } from './utils'
4
4
  import UnifiedViewer from './unified/UnifiedViewer.vue'
5
5
  import SplitViewer from './split/SplitViewer.vue'
6
+ import DownArrowIcon from './icons/DownArrowIcon.vue'
7
+ import UpArrowIcon from './icons/UpArrowIcon.vue'
6
8
 
7
9
  import './style.scss'
8
10
 
@@ -78,6 +80,35 @@ const raw = computed(() =>
78
80
  const diffChange = ref(raw.value)
79
81
  const isNotChanged = computed(() => diffChange.value.stat.additionsNum === 0 && diffChange.value.stat.deletionsNum === 0)
80
82
 
83
+ const currentDiffIndex = ref(-1)
84
+
85
+ function goToNextDiff() {
86
+ const diffs = document.querySelectorAll('.blob-code-addition')
87
+ if (currentDiffIndex.value < diffs.length - 1) {
88
+ currentDiffIndex.value++
89
+ updateCurrentDiffHighlight(diffs)
90
+ }
91
+ }
92
+
93
+ function goToPrevDiff() {
94
+ const diffs = document.querySelectorAll('.blob-code-addition')
95
+ if (currentDiffIndex.value > 0) {
96
+ currentDiffIndex.value--
97
+ updateCurrentDiffHighlight(diffs)
98
+ }
99
+ }
100
+
101
+ function updateCurrentDiffHighlight(diffs: NodeListOf<Element>) {
102
+ diffs.forEach((diff: { classList: { remove: (arg0: string) => any } }) => diff.classList.remove('current-diff'))
103
+
104
+ const currentDiff = diffs[currentDiffIndex.value]
105
+
106
+ if (currentDiff) {
107
+ currentDiff.classList.add('current-diff')
108
+ currentDiff.scrollIntoView({ behavior: 'smooth', block: 'center' })
109
+ }
110
+ }
111
+
81
112
  watch(() => props, () => {
82
113
  diffChange.value = raw.value
83
114
  emits('diff', {
@@ -99,6 +130,14 @@ watch(() => props, () => {
99
130
  <div class="info-left">{{ filename }}</div>
100
131
  <div class="info-left">{{ newFilename }}</div>
101
132
  </span>
133
+ <span class="diff-commandbar">
134
+ <button class="command-item-button" title="Next Change" @click="goToNextDiff">
135
+ <DownArrowIcon />
136
+ </button>
137
+ <button class="command-item-button" title="Previous Change" @click="goToPrevDiff">
138
+ <UpArrowIcon />
139
+ </button>
140
+ </span>
102
141
  <span v-if="!hideStat" class="diff-stat">
103
142
  <slot name="stat" :stat="diffChange.stat">
104
143
  <span class="diff-stat-added">+{{ diffChange.stat.additionsNum }} additions</span>
@@ -111,6 +150,14 @@ watch(() => props, () => {
111
150
  <span class="info-left">{{ filename }}</span>
112
151
  <span class="info-right">
113
152
  <span style="margin-left: 20px;">{{ newFilename }}</span>
153
+ <span class="diff-commandbar">
154
+ <button class="command-item-button" title="Next Change" @click="goToNextDiff">
155
+ <DownArrowIcon />
156
+ </button>
157
+ <button class="command-item-button" title="Previous Change" @click="goToPrevDiff">
158
+ <UpArrowIcon />
159
+ </button>
160
+ </span>
114
161
  <span v-if="!hideStat" class="diff-stat">
115
162
  <slot name="stat" :stat="diffChange.stat">
116
163
  <span class="diff-stat-added">+{{ diffChange.stat.additionsNum }} additions</span>
@@ -0,0 +1,11 @@
1
+ <script>
2
+ export default {
3
+ name: 'DownArrowIcon',
4
+ }
5
+ </script>
6
+
7
+ <template>
8
+ <svg width="1rem" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
9
+ <path d="M383.6,322.7L278.6,423c-5.8,6-13.7,9-22.4,9c-8.7,0-16.5-3-22.4-9L128.4,322.7c-12.5-11.9-12.5-31.3,0-43.2 c12.5-11.9,32.7-11.9,45.2,0l50.4,48.2v-217c0-16.9,14.3-30.6,32-30.6c17.7,0,32,13.7,32,30.6v217l50.4-48.2 c12.5-11.9,32.7-11.9,45.2,0C396.1,291.4,396.1,310.7,383.6,322.7z" />
10
+ </svg>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script>
2
+ export default {
3
+ name: 'UpArrowIcon',
4
+ }
5
+ </script>
6
+
7
+ <template>
8
+ <svg width="1rem" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
9
+ <path d="M128.4,189.3L233.4,89c5.8-6,13.7-9,22.4-9c8.7,0,16.5,3,22.4,9l105.4,100.3c12.5,11.9,12.5,31.3,0,43.2 c-12.5,11.9-32.7,11.9-45.2,0L288,184.4v217c0,16.9-14.3,30.6-32,30.6c-17.7,0-32-13.7-32-30.6v-217l-50.4,48.2 c-12.5,11.9-32.7,11.9-45.2,0C115.9,220.6,115.9,201.3,128.4,189.3z" />
10
+ </svg>
11
+ </template>
@@ -17,8 +17,6 @@ function getCodeMarker(type: DiffType) {
17
17
  }
18
18
 
19
19
  function onSplitLineMousedown(side: 'left' | 'right') {
20
- window.getSelection()!.removeAllRanges()
21
-
22
20
  const leftElements = document.querySelectorAll('.file-diff-split .split-side-left')!
23
21
  const rightElements = document.querySelectorAll('.file-diff-split .split-side-right')!
24
22
 
package/src/style.scss CHANGED
@@ -15,12 +15,14 @@
15
15
  overflow-y: auto;
16
16
 
17
17
  .file-header {
18
+ position: sticky;
19
+ top: 0;
20
+ z-index: 1;
18
21
  background-color: var(--color-canvas-subtle);
19
22
  border-bottom: 1px solid var(--color-border-default);
20
23
  padding: 8px 16px;
21
24
  font-size: 12px;
22
- font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
23
-
25
+ font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
24
26
  .file-info {
25
27
  display: flex;
26
28
  justify-content: space-between;
@@ -51,6 +53,25 @@
51
53
  color: var(--color-fg-subtle);
52
54
  }
53
55
  }
56
+
57
+ .diff-commandbar {
58
+ margin-left: auto;
59
+ margin-right: 1rem;
60
+
61
+ .command-item-button {
62
+ background-color: transparent;
63
+ color: var(--color-fg-subtle);
64
+ border: none;
65
+
66
+ svg {
67
+ fill: var(--color-fg-subtle);
68
+ }
69
+ }
70
+
71
+ .command-item-button:hover {
72
+ background-color: var(--color-btn-outline-hover-border);
73
+ }
74
+ }
54
75
  }
55
76
  }
56
77
 
@@ -122,6 +143,10 @@
122
143
  background-color: var(--color-diff-blob-addition-word-bg);
123
144
  }
124
145
  }
146
+
147
+ .current-diff {
148
+ border: 1px solid var(--color-border-muted);
149
+ }
125
150
 
126
151
  .blob-code-context,
127
152
  .blob-code-addition,