Some checks failed
Lock Threads / action (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot EE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot EE docker images / merge (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/amd64, ubuntu-latest) (push) Has been cancelled
Publish Chatwoot CE docker images / build (linux/arm64, ubuntu-22.04-arm) (push) Has been cancelled
Publish Chatwoot CE docker images / merge (push) Has been cancelled
Run Chatwoot CE spec / lint-backend (push) Has been cancelled
Run Chatwoot CE spec / lint-frontend (push) Has been cancelled
Run Chatwoot CE spec / frontend-tests (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (0, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (1, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (10, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (11, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (12, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (13, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (14, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (15, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (2, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (3, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (4, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (5, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (6, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (7, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (8, 16) (push) Has been cancelled
Run Chatwoot CE spec / backend-tests (9, 16) (push) Has been cancelled
Run Linux nightly installer / nightly (push) Has been cancelled
- Add Logistics component with progress tracking - Add OrderDetail component for order information - Support data-driven steps and actions - Add blue color scale to widget SCSS - Fix node overflow and progress bar rendering issues - Add English translations for dashboard components Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
100 lines
2.3 KiB
Vue
100 lines
2.3 KiB
Vue
<script setup>
|
|
import { ref, computed } from 'vue';
|
|
import Button from './Button.vue';
|
|
|
|
const props = defineProps({
|
|
label: { type: [String, Number], default: '' },
|
|
confirmLabel: { type: [String, Number], default: '' },
|
|
color: { type: String, default: 'blue' },
|
|
confirmColor: { type: String, default: 'ruby' },
|
|
confirmHint: { type: String, default: '' },
|
|
variant: { type: String, default: null },
|
|
size: { type: String, default: null },
|
|
justify: { type: String, default: null },
|
|
icon: { type: [String, Object, Function], default: '' },
|
|
trailingIcon: { type: Boolean, default: false },
|
|
isLoading: { type: Boolean, default: false },
|
|
});
|
|
|
|
const emit = defineEmits(['click']);
|
|
|
|
const isConfirmMode = ref(false);
|
|
const isClicked = ref(false);
|
|
|
|
const currentLabel = computed(() => {
|
|
return isConfirmMode.value ? props.confirmLabel : props.label;
|
|
});
|
|
|
|
const currentColor = computed(() => {
|
|
return isConfirmMode.value ? props.confirmColor : props.color;
|
|
});
|
|
const resetConfirmMode = () => {
|
|
isConfirmMode.value = false;
|
|
isClicked.value = false;
|
|
};
|
|
|
|
const handleClick = () => {
|
|
if (!isConfirmMode.value) {
|
|
isConfirmMode.value = true;
|
|
} else {
|
|
isClicked.value = true;
|
|
emit('click');
|
|
setTimeout(resetConfirmMode, 400);
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div
|
|
class="relative"
|
|
:class="{
|
|
'animate-bounce-complete': isClicked,
|
|
}"
|
|
>
|
|
<Button
|
|
type="button"
|
|
:label="currentLabel"
|
|
:color="currentColor"
|
|
:variant="variant"
|
|
:size="size"
|
|
:justify="justify"
|
|
:icon="icon"
|
|
:trailing-icon="trailingIcon"
|
|
:is-loading="isLoading"
|
|
@click="handleClick"
|
|
@blur="resetConfirmMode"
|
|
>
|
|
<template v-if="$slots.default" #default>
|
|
<slot />
|
|
</template>
|
|
<template v-if="$slots.icon" #icon>
|
|
<slot name="icon" />
|
|
</template>
|
|
</Button>
|
|
<div
|
|
v-if="isConfirmMode && confirmHint"
|
|
class="absolute mt-1 w-full text-[10px] text-center text-n-slate-10"
|
|
>
|
|
{{ confirmHint }}
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
@keyframes bounce-complete {
|
|
0% {
|
|
transform: scale(0.95);
|
|
}
|
|
50% {
|
|
transform: scale(1.02);
|
|
}
|
|
100% {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
|
|
.animate-bounce-complete {
|
|
animation: bounce-complete 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
|
}
|
|
</style>
|