@@ -168,6 +168,29 @@ const licenseChanges = computed(() => {
168168 return changes
169169})
170170
171+ // Detect ESM support changes (package "type" field) between consecutive versions
172+ const esmChanges = computed (() => {
173+ const changes = new Map <string , ' added' | ' removed' >()
174+ const entries = timelineEntries .value
175+
176+ for (let i = 0 ; i < entries .length - 1 ; i ++ ) {
177+ const current = pkg .value ?.versions [entries [i ]! .version ]
178+ const previous = pkg .value ?.versions [entries [i + 1 ]! .version ]
179+ if (! current || ! previous ) continue
180+
181+ const currentIsEsm = current .type === ' module'
182+ const previousIsEsm = previous .type === ' module'
183+
184+ if (currentIsEsm && ! previousIsEsm ) {
185+ changes .set (entries [i ]! .version , ' added' )
186+ } else if (! currentIsEsm && previousIsEsm ) {
187+ changes .set (entries [i ]! .version , ' removed' )
188+ }
189+ }
190+
191+ return changes
192+ })
193+
171194const bytesFormatter = useBytesFormatter ()
172195
173196useSeoMeta ({
@@ -273,6 +296,33 @@ useSeoMeta({
273296 }}
274297 </p >
275298 </div >
299+ <!-- ESM change -->
300+ <div v-if =" esmChanges.has(entry.version)" class =" mb-4 -ms-6 ps-6 relative" >
301+ <span
302+ class =" absolute -start-2 flex items-center justify-center w-4 h-4 rounded-full border"
303+ :class ="
304+ esmChanges.get(entry.version) === 'added'
305+ ? 'bg-green-500 border-green-600'
306+ : 'bg-amber-500 border-amber-600'
307+ "
308+ >
309+ <span class =" w-2.5 h-2.5 text-white i-lucide:package" aria-hidden =" true" />
310+ </span >
311+ <p
312+ class =" text-sm"
313+ :class ="
314+ esmChanges.get(entry.version) === 'added'
315+ ? 'text-green-700 dark:text-green-400'
316+ : 'text-amber-700 dark:text-amber-400'
317+ "
318+ >
319+ {{
320+ esmChanges.get(entry.version) === 'added'
321+ ? $t('package.timeline.esm_added')
322+ : $t('package.timeline.esm_removed')
323+ }}
324+ </p >
325+ </div >
276326 <!-- Dot -->
277327 <span
278328 class =" absolute -start-2 flex items-center justify-center w-4 h-4 rounded-full border border-border"
0 commit comments