Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
cfbc6ef
fix(i18n): update Czech translations (#2425)
VentyCZ Apr 9, 2026
ac1fdb3
chore: use new `dedupePeers` pnpm option (#2420)
btea Apr 9, 2026
57687cc
fix(i18n): update Russian translations (#2429)
dragomano Apr 9, 2026
69cdfd4
chore: manually add vite plus pre-commit hook (#2434)
alexdln Apr 9, 2026
ac83c56
perf: parallelize jsDelivr README fallback probes (#2384)
trivikr Apr 9, 2026
9222620
chore: upgrade vite-plus to 0.1.16 (#2436)
fengmk2 Apr 9, 2026
c93d9b0
refactor: parallelize docs rendering and shiki setup (#2382)
trivikr Apr 9, 2026
5a2b1a6
ci: revert "ci: auto-remove `needs review` label when PR is reviewed"…
serhalp Apr 9, 2026
f58c765
fix(i18n): add missing French translations (#2441)
juliendargelos Apr 9, 2026
fd7703c
fix: pass query params to OG image ISR function on Vercel (#2432)
Adebesin-Cell Apr 9, 2026
44373b5
ci: add e18e dependency diff workflow (#2435)
serhalp Apr 10, 2026
21420c0
ci: actually bump `e18e/action-dependency-diff` to v1.5.0 (#2454)
serhalp Apr 10, 2026
eb2e6bb
fix(i18n): add missing norwegian nb-NO translations (#2450)
bonsak Apr 10, 2026
017f023
fix(cli): enable web auth for package:init (#2415)
ehs5 Apr 10, 2026
6c6e274
fix(i18n): add missing zh-CN translations (#2452)
DamengRandom Apr 10, 2026
4f45d5b
ci: update Discord link to builders server (#2461)
jonchurch Apr 10, 2026
4123e8d
feat(ui): support Vite+ `vp` package manager commands (#2451)
duowb Apr 10, 2026
efe01a0
chore: shave ~1-2s off `pnpm test:types` (#2458)
serhalp Apr 10, 2026
f5bb3ed
chore: move a comment to the right line (#2456)
serhalp Apr 10, 2026
0164064
fix: add ignore attributes for password managers to input fields (#2466)
t128n Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/workflows/dependency-diff-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: dependency-diff-comment

on:
workflow_run:
workflows: ['dependency-diff']
types:
- completed

permissions:
pull-requests: write
actions: read

jobs:
dependency-diff-comment:
name: 💬 Dependency diff comment
runs-on: ubuntu-slim
if: github.event.workflow_run.conclusion == 'success'

steps:
- name: 📥 Download artifact
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: e18e-diff-result
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ secrets.GITHUB_TOKEN }}

- name: 💬 Post comment
uses: e18e/action-dependency-diff@f825d5b5c5ce0a42dc46c47ec20de24460affcd8 # v1.5.0
with:
mode: comment-from-artifact
artifact-path: e18e-diff-result.json
47 changes: 47 additions & 0 deletions .github/workflows/dependency-diff.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: dependency-diff

on:
pull_request:
branches:
- main
- release
paths:
- package.json
- pnpm-lock.yaml
- pnpm-workspace.yaml
- docs/package.json
- cli/package.json

concurrency:
group: ${{ github.workflow }}-${{ github.event.number || github.sha }}
cancel-in-progress: true

permissions:
contents: read

jobs:
dependency-diff:
name: 🔎 Dependency diff
runs-on: ubuntu-slim

steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0

- name: 🔎 Compare dependencies
id: analyze
uses: e18e/action-dependency-diff@f825d5b5c5ce0a42dc46c47ec20de24460affcd8 # v1.5.0
with:
mode: artifact
detect-replacements: 'true'
duplicate-threshold: '4'
dependency-threshold: '15'
size-threshold: '200000'

- name: 📤 Upload artifact
if: steps.analyze.outputs.artifact-path
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: e18e-diff-result
path: ${{ steps.analyze.outputs.artifact-path }}
69 changes: 0 additions & 69 deletions .github/workflows/remove-needs-review-on-review.yml

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/welcome-close.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
const body = [
`Thanks for your first contribution, @${author}! ${emoji}`,
'',
`We'd love to welcome you to the npmx community. Come and say hi on [Discord](https://chat.npmx.dev)! And once you've joined, visit [npmx.wamellow.com](https://npmx.wamellow.com/) to claim the **contributor** role.`,
`We'd love to welcome you to the npmx community. Come and say hi on [Discord](https://build.npmx.dev)! And once you've joined, visit [npmx.wamellow.com](https://npmx.wamellow.com/) to claim the **contributor** role.`,
].join('\n');
await github.rest.issues.createComment({
Expand Down
1 change: 1 addition & 0 deletions .vite-hooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
vp staged
9 changes: 7 additions & 2 deletions app/components/CollapsibleSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,13 @@ function toggle() {
}

const ariaLabel = computed(() => {
const action = isOpen.value ? 'Collapse' : 'Expand'
return props.title ? `${action} ${props.title}` : action
if (!props.title) {
return isOpen.value ? $t('common.collapse') : $t('common.expand')
}

return isOpen.value
? $t('common.collapse_with_name', { name: props.title })
: $t('common.expand_with_name', { name: props.title })
})
useHead({
style: [
Expand Down
1 change: 1 addition & 0 deletions app/components/CommandPalette.client.vue
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,7 @@ useEventListener(document, 'keydown', handleGlobalKeydown)
type="text"
:placeholder="viewMeta.placeholder"
no-correct
no-password-manager
size="lg"
class="w-full"
:aria-describedby="inputDescribedBy"
Expand Down
15 changes: 13 additions & 2 deletions app/components/Input/Base.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { noCorrect } from '~/utils/input'
import { noCorrect, noPasswordManager } from '~/utils/input'

const model = defineModel<string>({ default: '' })

Expand All @@ -16,6 +16,12 @@ const props = withDefaults(
noCorrect?: boolean
/** Keyboard shortcut hint */
ariaKeyshortcuts?: string
/**
* Prevents most common password managers from recognizing the input as a password field.
* Note: This is not a standard HTML attribute but vendor-specific data-* attributes.
* @default false
*/
noPasswordManager?: boolean
}>(),
{
size: 'md',
Expand All @@ -36,13 +42,18 @@ defineExpose({
focus: () => el.value?.focus(),
blur: () => el.value?.blur(),
})

const inputAttrs = computed(() => ({
...(props.noCorrect ? noCorrect : {}),
...(props.noPasswordManager ? noPasswordManager : {}),
}))
</script>

<template>
<input
ref="el"
v-model="model"
v-bind="props.noCorrect ? noCorrect : undefined"
v-bind="inputAttrs"
@focus="emit('focus', $event)"
@blur="emit('blur', $event)"
class="appearance-none bg-bg-subtle border border-border font-mono text-fg placeholder:text-fg-subtle transition-[border-color,outline-color] duration-300 hover:border-fg-subtle outline-2 outline-transparent outline-offset-2 focus:border-accent focus-visible:outline-accent/70 disabled:(opacity-50 cursor-not-allowed)"
Expand Down
3 changes: 2 additions & 1 deletion app/components/Package/ManagerSelect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,8 @@ function handleKeydown(event: KeyboardEvent) {
:root[data-pm='yarn'] [data-pm-select='yarn'],
:root[data-pm='bun'] [data-pm-select='bun'],
:root[data-pm='deno'] [data-pm-select='deno'],
:root[data-pm='vlt'] [data-pm-select='vlt'] {
:root[data-pm='vlt'] [data-pm-select='vlt'],
:root[data-pm='vp'] [data-pm-select='vp'] {
display: inline-block;
}
Expand Down
3 changes: 2 additions & 1 deletion app/components/Terminal/Execute.vue
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ const copyExecuteCommand = () => copyExecute(getFullExecuteCommand())
:root[data-pm='yarn'] [data-pm-cmd='yarn'],
:root[data-pm='bun'] [data-pm-cmd='bun'],
:root[data-pm='deno'] [data-pm-cmd='deno'],
:root[data-pm='vlt'] [data-pm-cmd='vlt'] {
:root[data-pm='vlt'] [data-pm-cmd='vlt'],
:root[data-pm='vp'] [data-pm-cmd='vp'] {
display: flex;
}

Expand Down
3 changes: 2 additions & 1 deletion app/components/Terminal/Install.vue
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,8 @@ useCommandPaletteContextCommands(
:root[data-pm='yarn'] [data-pm-cmd='yarn'],
:root[data-pm='bun'] [data-pm-cmd='bun'],
:root[data-pm='deno'] [data-pm-cmd='deno'],
:root[data-pm='vlt'] [data-pm-cmd='vlt'] {
:root[data-pm='vlt'] [data-pm-cmd='vlt'],
:root[data-pm='vp'] [data-pm-cmd='vp'] {
display: flex;
}

Expand Down
2 changes: 1 addition & 1 deletion app/pages/compare.vue
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ async function exportComparisonDataAsMarkdown() {
}
defineOgImageComponent('Compare', {
packages: () => packages.value,
packages: () => packages.value.toSorted((a, b) => a.localeCompare(b)),
emptyDescription: () => $t('compare.packages.meta_description_empty'),
})
Expand Down
12 changes: 12 additions & 0 deletions app/utils/input.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,15 @@ export function isKeyWithoutModifiers(event: KeyboardEvent, key: string): boolea
}

export const DATE_INPUT_MAX = '9999-12-31'

/** Attributes to prevent password managers from recognizing an input as a password field. */
export const noPasswordManager = {
/* ProtonPass, https://stackoverflow.com/a/51272839 */
['data-protonpass-ignore']: 'true',
/* LastPass, https://stackoverflow.com/a/51272839 */
['data-lpignore']: 'true',
/* 1Password, https://stackoverflow.com/a/51272839 */
['data-1p-ignore']: 'true',
/* Bitwarden, https://stackoverflow.com/questions/41945535/html-disable-password-manager#comment139327111_51272839 */
['data-bwignore']: 'true',
} as const
9 changes: 9 additions & 0 deletions app/utils/install-command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ export const packageManagers = [
create: 'vlx',
icon: 'i-custom-vlt',
},
{
id: 'vp',
label: 'vp',
action: 'add',
executeLocal: 'vp exec',
executeRemote: 'vp dlx',
create: 'vp create',
icon: 'i-simple-icons:vite',
},
] as const

export type PackageManagerId = (typeof packageManagers)[number]['id']
Expand Down
2 changes: 1 addition & 1 deletion app/utils/prehydrate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export function initPreferencesOnPrehydrate() {
] satisfies typeof ACCENT_COLOR_IDS)

// Valid package manager IDs
const validPMs = new Set(['npm', 'pnpm', 'yarn', 'bun', 'deno', 'vlt'])
const validPMs = new Set(['npm', 'pnpm', 'yarn', 'bun', 'deno', 'vlt', 'vp'])

// Read settings from localStorage
const settings = JSON.parse(
Expand Down
Loading
Loading