@@ -115,6 +115,22 @@ const effectiveCurrentVersion = computed(
115115
116116// Semver range filter
117117const semverFilter = ref (' ' )
118+
119+ // Load all versions when a valid semver filter is entered
120+ watch (semverFilter , async newFilter => {
121+ const trimmed = newFilter .trim ()
122+ if (trimmed === ' ' || hasLoadedAll .value ) return
123+ if (! validRange (trimmed )) return
124+
125+ try {
126+ const allVersions = await loadAllVersions ()
127+ processLoadedVersions (allVersions )
128+ // Auto-expand "Other versions" so filtered results are visible
129+ otherVersionsExpanded .value = true
130+ } catch {
131+ // Silently fail — user can still use the filter with already-known versions
132+ }
133+ })
118134// Collect all known versions: initial props + dynamically loaded ones
119135const allKnownVersions = computed (() => {
120136 const versions = new Set (Object .keys (props .versions ))
@@ -196,8 +212,10 @@ const visibleTagRows = computed(() => {
196212 ? allTagRows .value
197213 : allTagRows .value .filter (row => ! row .primaryVersion .deprecated )
198214 const rows = isFilterActive .value
199- ? rowsMaybeFilteredForDeprecation .filter (row =>
200- filteredVersionSet .value .has (row .primaryVersion .version ),
215+ ? rowsMaybeFilteredForDeprecation .filter (
216+ row =>
217+ filteredVersionSet .value .has (row .primaryVersion .version ) ||
218+ getTagVersions (row .tag ).some (v => filteredVersionSet .value .has (v .version )),
201219 )
202220 : rowsMaybeFilteredForDeprecation
203221 const first = rows .slice (0 , MAX_VISIBLE_TAGS )
@@ -215,7 +233,11 @@ const visibleTagRows = computed(() => {
215233const hiddenTagRows = computed (() => {
216234 const hiddenRows = allTagRows .value .filter (row => ! visibleTagRows .value .includes (row ))
217235 const rows = isFilterActive .value
218- ? hiddenRows .filter (row => filteredVersionSet .value .has (row .primaryVersion .version ))
236+ ? hiddenRows .filter (
237+ row =>
238+ filteredVersionSet .value .has (row .primaryVersion .version ) ||
239+ getTagVersions (row .tag ).some (v => filteredVersionSet .value .has (v .version )),
240+ )
219241 : hiddenRows
220242 return rows
221243})
@@ -435,6 +457,14 @@ function getExpandedTagVersions(tag: string, primaryVersion: string): VersionDis
435457 return versions .filter (v => filteredVersionSet .value .has (v .version ))
436458}
437459
460+ // Check if a tag row's children are expanded (manually or via active filter)
461+ function isTagExpanded(tag : string , primaryVersion : string ): boolean {
462+ return (
463+ expandedTags .value .has (tag ) ||
464+ (isFilterActive .value && getExpandedTagVersions (tag , primaryVersion ).length > 0 )
465+ )
466+ }
467+
438468function findClaimingTag(version : string ): string | null {
439469 const versionChannel = getPrereleaseChannel (version )
440470
@@ -583,7 +613,7 @@ function majorGroupContainsCurrent(group: (typeof otherMajorGroups.value)[0]): b
583613 v-if =" getTagVersions(row.tag).length > 1 || !hasLoadedAll"
584614 type =" button"
585615 class =" size-5 -me-1 flex items-center justify-center text-fg-subtle hover:text-fg transition-colors rounded-sm relative z-10"
586- :aria-expanded =" expandedTags.has (row.tag)"
616+ :aria-expanded =" isTagExpanded (row.tag, row.primaryVersion.version )"
587617 :aria-label ="
588618 expandedTags.has(row.tag)
589619 ? $t('package.versions.collapse', { tag: row.tag })
@@ -602,7 +632,9 @@ function majorGroupContainsCurrent(group: (typeof otherMajorGroups.value)[0]): b
602632 v-else
603633 class =" size-3 transition-transform duration-200 rtl-flip"
604634 :class ="
605- expandedTags.has(row.tag) ? 'i-lucide:chevron-down' : 'i-lucide:chevron-right'
635+ isTagExpanded(row.tag, row.primaryVersion.version)
636+ ? 'i-lucide:chevron-down'
637+ : 'i-lucide:chevron-right'
606638 "
607639 aria-hidden =" true"
608640 />
@@ -671,10 +703,7 @@ function majorGroupContainsCurrent(group: (typeof otherMajorGroups.value)[0]): b
671703
672704 <!-- Expanded versions -->
673705 <div
674- v-if ="
675- expandedTags.has(row.tag) &&
676- getExpandedTagVersions(row.tag, row.primaryVersion.version).length
677- "
706+ v-if =" isTagExpanded(row.tag, row.primaryVersion.version)"
678707 class =" ms-4 ps-2 border-is border-border space-y-0.5 pe-2"
679708 >
680709 <div
0 commit comments