Skip to content

Commit b143ce6

Browse files
committed
Merge remote-tracking branch 'origin/main' into test/mock-connector
2 parents d825361 + be007fe commit b143ce6

File tree

6 files changed

+68
-12
lines changed

6 files changed

+68
-12
lines changed

app/components/Code/Viewer.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,11 @@ watch(
6262
function handleImportLinkNavigate() {
6363
if (!codeRef.value) return
6464
65-
const anchors = codeRef.value.querySelectorAll('a.import-link')
65+
const anchors = codeRef.value.querySelectorAll<HTMLAnchorElement>('a.import-link')
6666
anchors.forEach(anchor => {
6767
// NOTE: We do not need to remove previous listeners because we re-create the entire HTML content on each html update
6868
anchor.addEventListener('click', event => {
69+
if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) return
6970
const href = anchor.getAttribute('href')
7071
if (href) {
7172
event.preventDefault()

app/components/Package/MetricsBadges.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const typesHref = computed(() => {
5757
<ul class="flex items-center gap-1.5 list-none m-0 p-0">
5858
<!-- TypeScript types badge -->
5959
<li v-if="!props.isBinary" class="contents">
60-
<TooltipApp :text="typesTooltip">
60+
<TooltipApp :text="typesTooltip" strategy="fixed">
6161
<LinkBase
6262
v-if="typesHref"
6363
variant="button-secondary"
@@ -88,6 +88,7 @@ const typesHref = computed(() => {
8888
<li class="contents">
8989
<TooltipApp
9090
:text="isLoading ? '' : hasEsm ? $t('package.metrics.esm') : $t('package.metrics.no_esm')"
91+
strategy="fixed"
9192
>
9293
<TagStatic
9394
tabindex="0"
@@ -107,7 +108,7 @@ const typesHref = computed(() => {
107108

108109
<!-- CJS badge -->
109110
<li v-if="isLoading || hasCjs" class="contents">
110-
<TooltipApp :text="isLoading ? '' : $t('package.metrics.cjs')">
111+
<TooltipApp :text="isLoading ? '' : $t('package.metrics.cjs')" strategy="fixed">
111112
<TagStatic
112113
tabindex="0"
113114
:variant="isLoading ? 'ghost' : 'default'"

app/components/Tooltip/Base.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script setup lang="ts">
22
import type { HTMLAttributes } from 'vue'
3-
import type { Placement } from '@floating-ui/vue'
3+
import type { Placement, Strategy } from '@floating-ui/vue'
44
import { autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/vue'
55
66
const props = withDefaults(
@@ -17,9 +17,12 @@ const props = withDefaults(
1717
tooltipAttr?: HTMLAttributes
1818
/** Teleport target for the tooltip content (defaults to 'body') */
1919
to?: string | HTMLElement
20+
/** Strategy for the tooltip - prefer fixed for sticky containers (defaults to 'absolute') */
21+
strategy?: Strategy
2022
}>(),
2123
{
2224
to: 'body',
25+
strategy: 'absolute',
2326
},
2427
)
2528
@@ -31,6 +34,7 @@ const placement = computed<Placement>(() => props.position || 'bottom')
3134
const { floatingStyles } = useFloating(triggerRef, tooltipRef, {
3235
placement,
3336
whileElementsMounted: autoUpdate,
37+
strategy: props.strategy,
3438
middleware: [offset(4), flip(), shift({ padding: 8 })],
3539
})
3640
</script>

app/pages/package/[[org]]/[name].vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,7 @@ onKeyStroke(
623623
: $t('package.verified_provenance')
624624
"
625625
position="bottom"
626+
strategy="fixed"
626627
>
627628
<LinkBase
628629
variant="button-secondary"
@@ -696,6 +697,7 @@ onKeyStroke(
696697
"
697698
position="bottom"
698699
class="items-center"
700+
strategy="fixed"
699701
>
700702
<ButtonBase
701703
@click="likeAction"

i18n/locales/de-DE.json

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"claim_button": "\"{name}\" beanspruchen",
5656
"want_to_claim": "Möchtest du diesen Paketnamen beanspruchen?",
5757
"start_typing": "Tippe, um Pakete zu suchen",
58+
"algolia_disclaimer": "Powered by Algolia",
5859
"exact_match": "exakt",
5960
"suggestion": {
6061
"user": "Benutzer",
@@ -85,7 +86,14 @@
8586
"search": "Datenquelle",
8687
"language": "Sprache"
8788
},
88-
"data_source": {},
89+
"data_source": {
90+
"label": "Datenquelle",
91+
"description": "Wähle, woher npmx Suchdaten abruft. Einzelne Paketseiten verwenden immer direkt die npm Registry.",
92+
"npm": "npm Registry",
93+
"npm_description": "Ruft Suche, Org- und Benutzerlisten direkt von der offiziellen npm Registry ab. Maßgeblich, aber kann langsamer sein.",
94+
"algolia": "Algolia",
95+
"algolia_description": "Nutzt Algolia für schnellere Suche, Org- und Benutzerseiten."
96+
},
8997
"relative_dates": "Relative Datumsangaben",
9098
"include_types": "{'@'}types bei Installation einschließen",
9199
"include_types_description": "TypeScript-Typdefinitionen ({'@'}types-Paket) automatisch zu Installationsbefehlen für Pakete ohne Typen hinzufügen",
@@ -248,7 +256,16 @@
248256
"view_more_details": "Weitere Details anzeigen",
249257
"error_loading": "Fehler beim Laden der Herkunftsdaten"
250258
},
251-
"security_downgrade": {},
259+
"security_downgrade": {
260+
"title": "Vertrauensabbau",
261+
"description_to_none_provenance": "Diese Version wurde ohne {provenance} veröffentlicht.",
262+
"description_to_none_trustedPublisher": "Diese Version wurde ohne {trustedPublishing} veröffentlicht.",
263+
"description_to_provenance_trustedPublisher": "Diese Version verwendet {provenance}, aber nicht {trustedPublishing}.",
264+
"fallback_install_provenance": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit {provenance}.",
265+
"fallback_install_trustedPublisher": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit vertrauenswürdigem Publishing.",
266+
"provenance_link_text": "Herkunft",
267+
"trusted_publishing_link_text": "vertrauenswürdiges Publishing"
268+
},
252269
"keywords_title": "Schlüsselwörter",
253270
"compatibility": "Kompatibilität",
254271
"card": {
@@ -322,8 +339,11 @@
322339
"legend_estimation": "Schätzung",
323340
"no_data": "Keine Daten vorhanden",
324341
"y_axis_label": "{granularity} {facet}",
342+
"facet": "Facette",
343+
"title": "Trends",
325344
"items": {
326-
"downloads": "Downloads"
345+
"downloads": "Downloads",
346+
"likes": "Likes"
327347
}
328348
},
329349
"downloads": {
@@ -823,7 +843,8 @@
823843
"create_account": "Neues Konto erstellen",
824844
"connect_bluesky": "Mit Bluesky verbinden",
825845
"what_is_atmosphere": "Was ist ein Atmosphere-Konto?",
826-
"atmosphere_explanation": "{npmx} nutzt das {atproto}, um viele seiner sozialen Funktionen zu betreiben. So können Nutzer ihre Daten selbst verwalten und ein einziges Konto für alle kompatiblen Anwendungen nutzen. Sobald du ein Konto erstellt hast, kannst du andere Apps wie {bluesky} und {tangled} mit demselben Konto nutzen."
846+
"atmosphere_explanation": "{npmx} nutzt das {atproto}, um viele seiner sozialen Funktionen zu betreiben. So können Nutzer ihre Daten selbst verwalten und ein einziges Konto für alle kompatiblen Anwendungen nutzen. Sobald du ein Konto erstellt hast, kannst du andere Apps wie {bluesky} und {tangled} mit demselben Konto nutzen.",
847+
"default_input_error": "Bitte geben Sie einen gültigen Handle, eine DID oder eine vollständige PDS-URL ein"
827848
}
828849
},
829850
"header": {
@@ -959,6 +980,9 @@
959980
"types_none": "Keine",
960981
"vulnerabilities_summary": "{count} ({critical}C/{high}H)",
961982
"up_to_you": "Deine Entscheidung!"
983+
},
984+
"trends": {
985+
"title": "Trends vergleichen"
962986
}
963987
}
964988
},

lunaria/files/de-DE.json

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"claim_button": "\"{name}\" beanspruchen",
5555
"want_to_claim": "Möchtest du diesen Paketnamen beanspruchen?",
5656
"start_typing": "Tippe, um Pakete zu suchen",
57+
"algolia_disclaimer": "Powered by Algolia",
5758
"exact_match": "exakt",
5859
"suggestion": {
5960
"user": "Benutzer",
@@ -84,7 +85,14 @@
8485
"search": "Datenquelle",
8586
"language": "Sprache"
8687
},
87-
"data_source": {},
88+
"data_source": {
89+
"label": "Datenquelle",
90+
"description": "Wähle, woher npmx Suchdaten abruft. Einzelne Paketseiten verwenden immer direkt die npm Registry.",
91+
"npm": "npm Registry",
92+
"npm_description": "Ruft Suche, Org- und Benutzerlisten direkt von der offiziellen npm Registry ab. Maßgeblich, aber kann langsamer sein.",
93+
"algolia": "Algolia",
94+
"algolia_description": "Nutzt Algolia für schnellere Suche, Org- und Benutzerseiten."
95+
},
8896
"relative_dates": "Relative Datumsangaben",
8997
"include_types": "{'@'}types bei Installation einschließen",
9098
"include_types_description": "TypeScript-Typdefinitionen ({'@'}types-Paket) automatisch zu Installationsbefehlen für Pakete ohne Typen hinzufügen",
@@ -247,7 +255,16 @@
247255
"view_more_details": "Weitere Details anzeigen",
248256
"error_loading": "Fehler beim Laden der Herkunftsdaten"
249257
},
250-
"security_downgrade": {},
258+
"security_downgrade": {
259+
"title": "Vertrauensabbau",
260+
"description_to_none_provenance": "Diese Version wurde ohne {provenance} veröffentlicht.",
261+
"description_to_none_trustedPublisher": "Diese Version wurde ohne {trustedPublishing} veröffentlicht.",
262+
"description_to_provenance_trustedPublisher": "Diese Version verwendet {provenance}, aber nicht {trustedPublishing}.",
263+
"fallback_install_provenance": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit {provenance}.",
264+
"fallback_install_trustedPublisher": "Installationsbefehle sind auf {version} fixiert, die letzte Version mit vertrauenswürdigem Publishing.",
265+
"provenance_link_text": "Herkunft",
266+
"trusted_publishing_link_text": "vertrauenswürdiges Publishing"
267+
},
251268
"keywords_title": "Schlüsselwörter",
252269
"compatibility": "Kompatibilität",
253270
"card": {
@@ -321,8 +338,11 @@
321338
"legend_estimation": "Schätzung",
322339
"no_data": "Keine Daten vorhanden",
323340
"y_axis_label": "{granularity} {facet}",
341+
"facet": "Facette",
342+
"title": "Trends",
324343
"items": {
325-
"downloads": "Downloads"
344+
"downloads": "Downloads",
345+
"likes": "Likes"
326346
}
327347
},
328348
"downloads": {
@@ -822,7 +842,8 @@
822842
"create_account": "Neues Konto erstellen",
823843
"connect_bluesky": "Mit Bluesky verbinden",
824844
"what_is_atmosphere": "Was ist ein Atmosphere-Konto?",
825-
"atmosphere_explanation": "{npmx} nutzt das {atproto}, um viele seiner sozialen Funktionen zu betreiben. So können Nutzer ihre Daten selbst verwalten und ein einziges Konto für alle kompatiblen Anwendungen nutzen. Sobald du ein Konto erstellt hast, kannst du andere Apps wie {bluesky} und {tangled} mit demselben Konto nutzen."
845+
"atmosphere_explanation": "{npmx} nutzt das {atproto}, um viele seiner sozialen Funktionen zu betreiben. So können Nutzer ihre Daten selbst verwalten und ein einziges Konto für alle kompatiblen Anwendungen nutzen. Sobald du ein Konto erstellt hast, kannst du andere Apps wie {bluesky} und {tangled} mit demselben Konto nutzen.",
846+
"default_input_error": "Bitte geben Sie einen gültigen Handle, eine DID oder eine vollständige PDS-URL ein"
826847
}
827848
},
828849
"header": {
@@ -958,6 +979,9 @@
958979
"types_none": "Keine",
959980
"vulnerabilities_summary": "{count} ({critical}C/{high}H)",
960981
"up_to_you": "Deine Entscheidung!"
982+
},
983+
"trends": {
984+
"title": "Trends vergleichen"
961985
}
962986
}
963987
},

0 commit comments

Comments
 (0)