From b1cb88d9b826ac9a4098f6fa36fd37d4c580b819 Mon Sep 17 00:00:00 2001 From: Idris Gadi Date: Thu, 5 Feb 2026 13:04:18 +0530 Subject: [PATCH 01/21] fix(a11y): make buttons always visible | fix(ui): make borders visible --- app/components/Terminal/Execute.vue | 2 +- app/components/Terminal/Install.vue | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/Terminal/Execute.vue b/app/components/Terminal/Execute.vue index 0484ef6466..19de1bcec2 100644 --- a/app/components/Terminal/Execute.vue +++ b/app/components/Terminal/Execute.vue @@ -70,7 +70,7 @@ const copyExecuteCommand = () => copyExecute(getFullExecuteCommand()) > diff --git a/app/components/Terminal/Execute.vue b/app/components/Terminal/Execute.vue index 19de1bcec2..81571225b3 100644 --- a/app/components/Terminal/Execute.vue +++ b/app/components/Terminal/Execute.vue @@ -70,11 +70,15 @@ const copyExecuteCommand = () => copyExecute(getFullExecuteCommand()) > diff --git a/app/components/Terminal/Install.vue b/app/components/Terminal/Install.vue index c51fb9b509..a1aa22b4b0 100644 --- a/app/components/Terminal/Install.vue +++ b/app/components/Terminal/Install.vue @@ -123,11 +123,15 @@ const copyCreateCommand = () => copyCreate(getFullCreateCommand()) > @@ -185,10 +189,14 @@ const copyCreateCommand = () => copyCreate(getFullCreateCommand()) > @@ -230,13 +238,15 @@ const copyCreateCommand = () => copyCreate(getFullCreateCommand()) > From 1209f1989411ec6e5ef4b71171e5a73f648640f9 Mon Sep 17 00:00:00 2001 From: Idris Gadi Date: Tue, 10 Feb 2026 10:04:40 +0530 Subject: [PATCH 07/21] fix: add arial lable to run locally command --- app/components/Terminal/Install.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/app/components/Terminal/Install.vue b/app/components/Terminal/Install.vue index 237ff8110f..85625ed126 100644 --- a/app/components/Terminal/Install.vue +++ b/app/components/Terminal/Install.vue @@ -192,6 +192,7 @@ const copyCreateCommand = () => copyCreate(getFullCreateCommand()) @@ -255,12 +256,12 @@ const copyDevInstallCommand = () => > + /> @@ -209,7 +205,7 @@ function getWarningTooltip(skill: SkillListItem): string | undefined { {{ $t( - 'package.skills.file_counts.refs', + 'package.skills.file_counts.references', { count: skill.fileCounts.references }, skill.fileCounts.references, ) diff --git a/app/components/Terminal/Execute.vue b/app/components/Terminal/Execute.vue index b1c0d4453e..890d087f98 100644 --- a/app/components/Terminal/Execute.vue +++ b/app/components/Terminal/Execute.vue @@ -68,18 +68,14 @@ const copyExecuteCommand = () => copyExecute(getFullExecuteCommand()) >{{ i > 0 ? ' ' : '' }}{{ part }} - + /> diff --git a/app/components/Terminal/Install.vue b/app/components/Terminal/Install.vue index 921340c237..37ff54d980 100644 --- a/app/components/Terminal/Install.vue +++ b/app/components/Terminal/Install.vue @@ -151,18 +151,14 @@ const copyDevInstallCommand = () => >{{ i > 0 ? ' ' : '' }}{{ part }} - + /> @@ -187,18 +183,14 @@ const copyDevInstallCommand = () => >{{ i > 0 ? ' ' : '' }}{{ part }} - + /> @@ -254,18 +246,14 @@ const copyDevInstallCommand = () => >{{ i > 0 ? ' ' : '' }}{{ part }} - + /> @@ -304,18 +292,14 @@ const copyDevInstallCommand = () => >{{ i > 0 ? ' ' : '' }}{{ part }} - + /> From 5fb969f6485c762316e0114d34b56f3bcb44c57e Mon Sep 17 00:00:00 2001 From: Idris Gadi Date: Thu, 12 Mar 2026 10:47:16 +0530 Subject: [PATCH 13/21] feat: add new square size --- app/components/Button/Base.vue | 3 ++- app/components/Package/SkillsModal.vue | 2 +- app/components/Terminal/Execute.vue | 2 +- app/components/Terminal/Install.vue | 8 ++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/components/Button/Base.vue b/app/components/Button/Base.vue index f37d57be06..ee610f941d 100644 --- a/app/components/Button/Base.vue +++ b/app/components/Button/Base.vue @@ -9,7 +9,7 @@ const props = withDefaults( /** @default "secondary" */ variant?: 'primary' | 'secondary' /** @default "medium" */ - size?: 'small' | 'medium' + size?: 'small' | 'medium' | 'square' /** Keyboard shortcut hint */ ariaKeyshortcuts?: string /** Forces the button to occupy the entire width of its container. */ @@ -43,6 +43,7 @@ defineExpose({ 'flex': block, 'text-sm px-4 py-2': size === 'medium', 'text-xs px-2 py-0.5': size === 'small', + 'p-1': size === 'square', 'bg-transparent text-fg hover:enabled:(bg-fg/10) focus-visible:enabled:(bg-fg/10) aria-pressed:(bg-fg/10 border-fg/20 hover:enabled:(bg-fg/20 text-fg/50))': variant === 'secondary', 'text-bg bg-fg hover:enabled:(bg-fg/50) focus-visible:enabled:(bg-fg/50) aria-pressed:(bg-fg text-bg border-fg hover:enabled:(text-bg/50))': diff --git a/app/components/Package/SkillsModal.vue b/app/components/Package/SkillsModal.vue index 6c3d250d08..a988ca77da 100644 --- a/app/components/Package/SkillsModal.vue +++ b/app/components/Package/SkillsModal.vue @@ -133,7 +133,7 @@ function getWarningTooltip(skill: SkillListItem): string | undefined { copyExecute(getFullExecuteCommand()) > > > > > Date: Tue, 21 Apr 2026 14:17:48 +0530 Subject: [PATCH 14/21] feat:style: add new icon size --- app/components/Button/Base.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/Button/Base.vue b/app/components/Button/Base.vue index 1a142b193f..99bfa87628 100644 --- a/app/components/Button/Base.vue +++ b/app/components/Button/Base.vue @@ -16,7 +16,7 @@ const props = withDefaults( /** @default "secondary" */ variant?: 'primary' | 'secondary' /** @default "md" */ - size?: 'sm' | 'md' + size?: 'sm' | 'md' | 'icon' /** Keyboard shortcut hint */ ariaKeyshortcuts?: string /** Forces the button to occupy the entire width of its container. */ @@ -50,6 +50,7 @@ defineExpose({ 'flex': block, 'text-sm px-4 py-2': size === 'md', 'text-xs px-2 py-0.5': size === 'sm', + 'text-sm p-2': size === 'icon', 'bg-transparent text-fg hover:enabled:(bg-fg/10) focus-visible:enabled:(bg-fg/10) aria-pressed:(bg-fg/10 border-fg/20 hover:enabled:(bg-fg/20 text-fg/50))': variant === 'secondary', 'text-bg bg-fg hover:enabled:(bg-fg/50) focus-visible:enabled:(bg-fg/50) aria-pressed:(bg-fg text-bg border-fg hover:enabled:(text-bg/50))': From ae832146ad38d21b81c0de20efff9993182c24dc Mon Sep 17 00:00:00 2001 From: Idris Gadi Date: Tue, 21 Apr 2026 14:19:08 +0530 Subject: [PATCH 15/21] feat: update copy icon button --- app/components/Package/SkillsModal.vue | 8 ++++---- app/components/Terminal/Execute.vue | 4 ++-- app/components/Terminal/Install.vue | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/components/Package/SkillsModal.vue b/app/components/Package/SkillsModal.vue index 11a2fd7fe1..ef7fb3c965 100644 --- a/app/components/Package/SkillsModal.vue +++ b/app/components/Package/SkillsModal.vue @@ -123,16 +123,16 @@ function getWarningTooltip(skill: SkillListItem): string | undefined {
-
- +
+ $ npx skills add {{ baseUrl }}/{{ packageName }} copyExecute(getFullExecuteCommand()) > Date: Tue, 21 Apr 2026 14:25:20 +0530 Subject: [PATCH 16/21] fix:style: dollar sign alignment --- app/components/Terminal/Execute.vue | 2 +- app/components/Terminal/Install.vue | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/components/Terminal/Execute.vue b/app/components/Terminal/Execute.vue index f3114ab311..14c2b0a4c1 100644 --- a/app/components/Terminal/Execute.vue +++ b/app/components/Terminal/Execute.vue @@ -59,7 +59,7 @@ const copyExecuteCommand = () => copyExecute(getFullExecuteCommand()) :data-pm-cmd="pm.id" class="flex items-center gap-2 group/executecmd" > - $ + $ - $ + $ - $ + $ - $ + $ - $ + $ Date: Tue, 21 Apr 2026 15:10:47 +0530 Subject: [PATCH 17/21] feat: add copied schema in i18n --- i18n/locales/en.json | 7 ++++++- i18n/schema.json | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/i18n/locales/en.json b/i18n/locales/en.json index 3469bc669c..977ef7452e 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -472,7 +472,12 @@ "copy_command": "Copy command to run locally" }, "command": { - "copied": "Command copied" + "copied_install": "Install command copied", + "copied_dev_install": "Dev install command copied", + "copied_run": "Run command copied", + "copied_create": "Create command copied", + "copied_execute": "Execute command copied", + "copied_skills": "Skills command copied" }, "readme": { "title": "Readme", diff --git a/i18n/schema.json b/i18n/schema.json index 823b6cadfa..1b3097098b 100644 --- a/i18n/schema.json +++ b/i18n/schema.json @@ -1420,7 +1420,22 @@ "command": { "type": "object", "properties": { - "copied": { + "copied_install": { + "type": "string" + }, + "copied_dev_install": { + "type": "string" + }, + "copied_run": { + "type": "string" + }, + "copied_create": { + "type": "string" + }, + "copied_execute": { + "type": "string" + }, + "copied_skills": { "type": "string" } }, From 6cb2a0b15357df6f8380ac54bacbcb2d582af6b9 Mon Sep 17 00:00:00 2001 From: Idris Gadi Date: Tue, 21 Apr 2026 15:23:33 +0530 Subject: [PATCH 18/21] feat: use new NuxtAnnouncer --- app/app.vue | 2 ++ app/components/Package/SkillsModal.vue | 7 ++++++- app/components/Terminal/Execute.vue | 6 +++++- app/components/Terminal/Install.vue | 26 ++++++++++++++++++++------ app/composables/useInstallCommand.ts | 3 ++- 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/app/app.vue b/app/app.vue index 34fc1d5c01..fab31b20ea 100644 --- a/app/app.vue +++ b/app/app.vue @@ -146,6 +146,8 @@ defineOgImage('Page.takumi', {}, { alt: 'npmx — a fast, modern browser for the {{ route.name === 'search' ? `${$t('search.title_packages')} - npmx` : message }} + +
diff --git a/app/components/Package/SkillsModal.vue b/app/components/Package/SkillsModal.vue index ef7fb3c965..43401263d9 100644 --- a/app/components/Package/SkillsModal.vue +++ b/app/components/Package/SkillsModal.vue @@ -35,7 +35,12 @@ const installCommand = computed(() => { }) const { copied, copy } = useClipboard({ copiedDuring: 2000 }) -const copyCommand = () => installCommand.value && copy(installCommand.value) +const { polite } = useAnnouncer() +const copyCommand = () => { + if (!installCommand.value) return + copy(installCommand.value) + polite($t('package.command.copied_skills')) +} function getWarningTooltip(skill: SkillListItem): string | undefined { if (!skill.warnings?.length) return undefined diff --git a/app/components/Terminal/Execute.vue b/app/components/Terminal/Execute.vue index 14c2b0a4c1..d131f84875 100644 --- a/app/components/Terminal/Execute.vue +++ b/app/components/Terminal/Execute.vue @@ -14,6 +14,7 @@ const props = defineProps<{ }>() const selectedPM = useSelectedPackageManager() +const { polite } = useAnnouncer() // Generate execute command parts for a specific package manager function getExecutePartsForPM(pmId: PackageManagerId) { @@ -39,7 +40,10 @@ function getFullExecuteCommand() { // Copy handler const { copied: executeCopied, copy: copyExecute } = useClipboard({ copiedDuring: 2000 }) -const copyExecuteCommand = () => copyExecute(getFullExecuteCommand()) +const copyExecuteCommand = () => { + copyExecute(getFullExecuteCommand()) + polite($t('package.command.copied_execute')) +}