feat(kiwi-fe): add OrchUsagePill component with calm low-budget state
This commit is contained in:
parent
b4f8bde952
commit
1ae54c370d
1 changed files with 70 additions and 0 deletions
70
frontend/src/components/OrchUsagePill.vue
Normal file
70
frontend/src/components/OrchUsagePill.vue
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<template>
|
||||
<!-- Only shown when user has opted in AND a lifetime key is present (usage != null) -->
|
||||
<div
|
||||
v-if="enabled && usage !== null"
|
||||
class="orch-usage-pill"
|
||||
:class="{ 'orch-usage-pill--low': isLow }"
|
||||
:title="`Cloud recipe calls this period: ${usage.calls_used} of ${usage.calls_total}`"
|
||||
>
|
||||
<span class="orch-usage-pill__label">
|
||||
{{ usage.calls_used + usage.topup_calls }} / {{ usage.calls_total }} calls
|
||||
<span class="orch-usage-pill__reset">· resets {{ resetsLabel }}</span>
|
||||
</span>
|
||||
<a
|
||||
class="orch-usage-pill__topup"
|
||||
href="https://circuitforge.tech/kiwi/topup"
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
>Topup</a>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
import { useOrchUsage } from '@/composables/useOrchUsage'
|
||||
|
||||
const { usage, enabled, resetsLabel } = useOrchUsage()
|
||||
|
||||
// Warn visually when less than 20% remains — calm yellow only, no red/panic
|
||||
const isLow = computed(() => {
|
||||
if (!usage.value || usage.value.calls_total === 0) return false
|
||||
const remaining = usage.value.calls_total - usage.value.calls_used + usage.value.topup_calls
|
||||
return remaining / usage.value.calls_total < 0.2
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.orch-usage-pill {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: var(--spacing-xs);
|
||||
padding: 0.25rem 0.625rem;
|
||||
border-radius: 999px;
|
||||
font-size: var(--font-size-sm);
|
||||
background: var(--color-bg-secondary);
|
||||
color: var(--color-text-secondary);
|
||||
border: 1px solid var(--color-border);
|
||||
}
|
||||
|
||||
.orch-usage-pill--low {
|
||||
background: var(--color-warning-bg);
|
||||
border-color: var(--color-warning-border);
|
||||
color: var(--color-warning);
|
||||
}
|
||||
|
||||
.orch-usage-pill__reset {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.orch-usage-pill__topup {
|
||||
color: var(--color-primary);
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
white-space: nowrap;
|
||||
margin-left: var(--spacing-xs);
|
||||
}
|
||||
|
||||
.orch-usage-pill__topup:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in a new issue