Skip to content

Commit b6e063a

Browse files
committed
feat: add show low usage versions
1 parent 482bc84 commit b6e063a

8 files changed

Lines changed: 74 additions & 26 deletions

File tree

app/components/Package/VersionDistribution.vue

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,15 @@ const { width } = useElementSize(rootEl)
6868
const mobileBreakpointWidth = 640
6969
const isMobile = computed(() => width.value > 0 && width.value < mobileBreakpointWidth)
7070
71-
const { groupingMode, hideSmallVersions, pending, error, chartDataset, hasData } =
72-
useVersionDistribution(() => props.packageName)
71+
const {
72+
groupingMode,
73+
hideSmallVersions,
74+
showLowUsageVersions,
75+
pending,
76+
error,
77+
chartDataset,
78+
hasData,
79+
} = useVersionDistribution(() => props.packageName)
7380
7481
const compactNumberFormatter = useCompactNumberFormatter()
7582
@@ -296,6 +303,7 @@ const endDate = computed(() => {
296303
:text="$t('package.versions.date_range_tooltip')"
297304
position="bottom"
298305
:teleportTo="inModal ? '#chart-modal' : undefined"
306+
:offset="8"
299307
class="w-full"
300308
>
301309
<div class="flex flex-col gap-1 w-full">
@@ -326,6 +334,7 @@ const endDate = computed(() => {
326334
:text="$t('package.versions.date_range_tooltip')"
327335
position="bottom"
328336
:teleportTo="inModal ? '#chart-modal' : undefined"
337+
:offset="8"
329338
class="w-full"
330339
>
331340
<div class="flex flex-col gap-1 w-full">
@@ -354,15 +363,29 @@ const endDate = computed(() => {
354363
</div>
355364
</div>
356365

357-
<SettingsToggle
358-
v-model="hideSmallVersions"
359-
:label="$t('package.versions.hide_old_versions')"
360-
:tooltip="$t('package.versions.hide_old_versions_tooltip')"
361-
tooltip-position="bottom"
362-
:tooltip-teleport-to="inModal ? '#chart-modal' : undefined"
363-
justify="start"
364-
:class="pending ? 'opacity-50 pointer-events-none' : ''"
365-
/>
366+
<div class="flex flex-col gap-4 w-full max-w-1/2">
367+
<SettingsToggle
368+
v-model="hideSmallVersions"
369+
:label="$t('package.versions.hide_old_versions')"
370+
:tooltip="$t('package.versions.hide_old_versions_tooltip')"
371+
tooltip-position="bottom"
372+
:tooltip-teleport-to="inModal ? '#chart-modal' : undefined"
373+
:tooltip-offset="8"
374+
justify="between"
375+
:class="pending ? 'opacity-50 pointer-events-none' : ''"
376+
/>
377+
378+
<SettingsToggle
379+
v-model="showLowUsageVersions"
380+
:label="$t('package.versions.show_low_usage')"
381+
:tooltip="$t('package.versions.show_low_usage_tooltip')"
382+
tooltip-position="bottom"
383+
:tooltip-teleport-to="inModal ? '#chart-modal' : undefined"
384+
:tooltip-offset="8"
385+
justify="between"
386+
:class="pending ? 'opacity-50 pointer-events-none' : ''"
387+
/>
388+
</div>
366389
</div>
367390

368391
<h2 id="version-distribution-title" class="sr-only">

app/components/Settings/Toggle.client.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ withDefaults(
1010
tooltip?: string
1111
tooltipPosition?: 'top' | 'bottom' | 'left' | 'right'
1212
tooltipTeleportTo?: string
13+
tooltipOffset?: number
1314
}>(),
1415
{
1516
justify: 'between',
@@ -35,6 +36,7 @@ const checked = defineModel<boolean>({
3536
:text="tooltip"
3637
:position="tooltipPosition ?? 'top'"
3738
:teleportTo="tooltipTeleportTo"
39+
:offset="tooltipOffset"
3840
>
3941
<span class="text-sm text-fg font-medium text-start">
4042
{{ label }}

app/components/Tooltip/App.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const props = defineProps<{
88
interactive?: boolean
99
/** Teleport target selector (defaults to 'body') */
1010
teleportTo?: string
11+
/** Offset distance in pixels (default: 4) */
12+
offset?: number
1113
}>()
1214
1315
const isVisible = shallowRef(false)
@@ -50,6 +52,7 @@ const tooltipAttrs = computed(() => {
5052
:position
5153
:interactive
5254
:teleportTo
55+
:offset
5356
:tooltip-attr="tooltipAttrs"
5457
@mouseenter="show"
5558
@mouseleave="hide"

app/components/Tooltip/Base.vue

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,27 @@ import type { HTMLAttributes } from 'vue'
33
import type { Placement } from '@floating-ui/vue'
44
import { autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/vue'
55
6-
const props = defineProps<{
7-
/** Tooltip text (optional when using content slot) */
8-
text?: string
9-
/** Position: 'top' | 'bottom' | 'left' | 'right' */
10-
position?: 'top' | 'bottom' | 'left' | 'right'
11-
/** is tooltip visible */
12-
isVisible: boolean
13-
/** Allow pointer events on tooltip (for interactive content like links) */
14-
interactive?: boolean
15-
/** attributes for tooltip element */
16-
tooltipAttr?: HTMLAttributes
17-
/** Teleport target selector (defaults to 'body') */
18-
teleportTo?: string
19-
}>()
6+
const props = withDefaults(
7+
defineProps<{
8+
/** Tooltip text (optional when using content slot) */
9+
text?: string
10+
/** Position: 'top' | 'bottom' | 'left' | 'right' */
11+
position?: 'top' | 'bottom' | 'left' | 'right'
12+
/** is tooltip visible */
13+
isVisible: boolean
14+
/** Allow pointer events on tooltip (for interactive content like links) */
15+
interactive?: boolean
16+
/** attributes for tooltip element */
17+
tooltipAttr?: HTMLAttributes
18+
/** Teleport target selector (defaults to 'body') */
19+
teleportTo?: string
20+
/** Offset distance in pixels (default: 4) */
21+
offset?: number
22+
}>(),
23+
{
24+
offset: 4,
25+
},
26+
)
2027
2128
const triggerRef = useTemplateRef('triggerRef')
2229
const tooltipRef = useTemplateRef('tooltipRef')
@@ -26,7 +33,7 @@ const placement = computed<Placement>(() => props.position || 'bottom')
2633
const { floatingStyles } = useFloating(triggerRef, tooltipRef, {
2734
placement,
2835
whileElementsMounted: autoUpdate,
29-
middleware: [offset(4), flip(), shift({ padding: 8 })],
36+
middleware: [offset(props.offset), flip(), shift({ padding: 8 })],
3037
})
3138
</script>
3239

app/composables/useVersionDistribution.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ interface ChartDataItem {
2323
export function useVersionDistribution(packageName: MaybeRefOrGetter<string>) {
2424
const groupingMode = ref<VersionGroupingMode>('major')
2525
const hideSmallVersions = ref(false)
26+
const showLowUsageVersions = ref(false)
2627
const pending = ref(false)
2728
const error = ref<Error | null>(null)
2829
const data = ref<VersionDistributionResponse | null>(null)
@@ -48,6 +49,7 @@ export function useVersionDistribution(packageName: MaybeRefOrGetter<string>) {
4849
query: {
4950
mode,
5051
filterOldVersions: hideSmallVersions.value ? 'true' : 'false',
52+
filterThreshold: showLowUsageVersions.value ? '0' : '1',
5153
},
5254
},
5355
)
@@ -132,6 +134,10 @@ export function useVersionDistribution(packageName: MaybeRefOrGetter<string>) {
132134
fetchDistribution()
133135
})
134136

137+
watch(showLowUsageVersions, () => {
138+
fetchDistribution()
139+
})
140+
135141
// Refetch when grouping mode changes - immediate to load initial data
136142
watch(
137143
groupingMode,
@@ -154,6 +160,7 @@ export function useVersionDistribution(packageName: MaybeRefOrGetter<string>) {
154160
// State
155161
groupingMode,
156162
hideSmallVersions,
163+
showLowUsageVersions,
157164
pending,
158165
error,
159166
// Computed

i18n/locales/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@
283283
"grouping_minor": "Minor",
284284
"hide_old_versions": "Hide old versions",
285285
"hide_old_versions_tooltip": "Hide versions older than 1 year",
286+
"show_low_usage": "Show low usage versions",
287+
"show_low_usage_tooltip": "Include version groups with less than 1% of total downloads",
286288
"date_range_tooltip": "Last week of version distributions only"
287289
},
288290
"dependencies": {

lunaria/files/en-GB.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@
283283
"grouping_minor": "Minor",
284284
"hide_old_versions": "Hide old versions",
285285
"hide_old_versions_tooltip": "Hide versions older than 1 year",
286+
"show_low_usage": "Show low usage versions",
287+
"show_low_usage_tooltip": "Include version groups with less than 1% of total downloads",
286288
"date_range_tooltip": "Last week of version distributions only"
287289
},
288290
"dependencies": {

lunaria/files/en-US.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,8 @@
283283
"grouping_minor": "Minor",
284284
"hide_old_versions": "Hide old versions",
285285
"hide_old_versions_tooltip": "Hide versions older than 1 year",
286+
"show_low_usage": "Show low usage versions",
287+
"show_low_usage_tooltip": "Include version groups with less than 1% of total downloads",
286288
"date_range_tooltip": "Last week of version distributions only"
287289
},
288290
"dependencies": {

0 commit comments

Comments
 (0)