Files
wehub-resource-sync 719032b19f
Update Schema / Update configuration json schema (push) Has been cancelled
Memory Benchmark / Memory Test (Full Analysis) (push) Has been cancelled
CI Quality / Lint GitHub Actions (actionlint) (push) Has been cancelled
CI Quality / Lint GitHub Actions (zizmor) (push) Has been cancelled
CI Quality / Check typos (push) Has been cancelled
CI / Test coverage (push) Has been cancelled
CI / Test (22.x, windows-latest) (push) Has been cancelled
CI / Test (24.x, macos-latest) (push) Has been cancelled
CI / Test (24.x, ubuntu-latest) (push) Has been cancelled
CI / Test (24.x, windows-latest) (push) Has been cancelled
CI / Test (26.x, macos-latest) (push) Has been cancelled
CI / Test (26.x, ubuntu-latest) (push) Has been cancelled
CI / Test (26.x, windows-latest) (push) Has been cancelled
CI / Test with Bun (latest, macos-latest) (push) Has been cancelled
CI / Test with Bun (latest, ubuntu-latest) (push) Has been cancelled
CI / Test with Bun (latest, windows-latest) (push) Has been cancelled
CI / Build and run (22.x, macos-latest) (push) Has been cancelled
CI / Build and run (22.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (22.x, windows-latest) (push) Has been cancelled
autofix.ci / autofix (push) Has been cancelled
CI Browser Extension / Lint Browser Extension (push) Has been cancelled
CI Browser Extension / Test Browser Extension (push) Has been cancelled
Memory Benchmark / Memory Test (push) Has been cancelled
CI Website / Lint Website Client (push) Has been cancelled
CI Website / Lint Website Server (push) Has been cancelled
CI Website / Test Website Server (push) Has been cancelled
CI Website / Bundle Website Server (push) Has been cancelled
CI / Lint Biome (push) Has been cancelled
CI / Lint oxlint (push) Has been cancelled
CI / Lint TypeScript (push) Has been cancelled
CI / Lint Secretlint (push) Has been cancelled
CI / Test (22.x, macos-latest) (push) Has been cancelled
CI / Test (22.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (24.x, macos-latest) (push) Has been cancelled
CI / Build and run (24.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (24.x, windows-latest) (push) Has been cancelled
CI / Build and run (26.x, macos-latest) (push) Has been cancelled
CI / Build and run (26.x, ubuntu-latest) (push) Has been cancelled
CI / Build and run (26.x, windows-latest) (push) Has been cancelled
CI / Build and run with Bun (latest, macos-latest) (push) Has been cancelled
CI / Build and run with Bun (latest, ubuntu-latest) (push) Has been cancelled
CI / Build and run with Bun (latest, windows-latest) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
Docker / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Docker / build (linux/arm/v7, ubuntu-24.04-arm) (push) Has been cancelled
Docker / build (linux/arm64, ubuntu-24.04-arm) (push) Has been cancelled
Docker / merge (push) Has been cancelled
Pack repository with Repomix / pack-repo (push) Has been cancelled
Performance Benchmark History / Benchmark (macos-latest) (push) Has been cancelled
Performance Benchmark History / Benchmark (ubuntu-latest) (push) Has been cancelled
Performance Benchmark History / Benchmark (windows-latest) (push) Has been cancelled
Performance Benchmark History / Store Results (push) Has been cancelled
Test Repomix Action / Test Node.js 22 (push) Has been cancelled
Test Repomix Action / Test Node.js 24 (push) Has been cancelled
Test Repomix Action / Test Node.js 26 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:37 +08:00

103 lines
2.0 KiB
Vue

<template>
<button
class="pack-button"
:class="{ 'pack-button--loading': loading }"
:disabled="!isValid && !loading"
:aria-label="loading ? 'Cancel processing' : 'Pack repository'"
:type="loading ? 'button' : 'submit'"
@click="handleClick"
>
<span class="pack-button__text pack-button__text--normal">
{{ loading ? 'Processing...' : 'Pack' }}
</span>
<span class="pack-button__text pack-button__text--hover">
{{ loading ? 'Cancel' : 'Pack' }}
</span>
<PackIcon v-if="!loading" :size="20" />
</button>
</template>
<script setup lang="ts">
import PackIcon from './PackIcon.vue';
const props = defineProps<{
loading?: boolean;
isValid?: boolean;
}>();
const emit = defineEmits<(e: 'cancel') => void>();
function handleClick(event: MouseEvent) {
// type=button while loading prevents form submission, so any click
// (mouse or keyboard) safely signals cancel.
if (props.loading) {
event.preventDefault();
event.stopPropagation();
emit('cancel');
}
}
</script>
<style scoped>
.pack-button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 12px 24px;
height: 50px;
width: 100%;
font-size: 16px;
font-weight: 500;
background: var(--vp-c-brand-1);
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
position: relative;
}
.pack-button:hover:not(:disabled) {
background: var(--vp-c-brand-2);
}
.pack-button--loading:hover {
background: var(--vp-c-danger-1);
}
.pack-button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.pack-button__text {
transition: opacity 0.2s ease;
}
.pack-button__text--hover {
position: absolute;
opacity: 0;
pointer-events: none;
}
.pack-button--loading:hover .pack-button__text--normal {
opacity: 0;
}
.pack-button--loading:hover .pack-button__text--hover {
opacity: 1;
}
.pack-button-icon {
font-size: 20px;
line-height: 1;
}
@media (max-width: 768px) {
.pack-button {
width: 100%;
}
}
</style>