aboutsummaryrefslogtreecommitdiff
path: root/src/ui/c-modal-value/c-modal-value.vue
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/c-modal-value/c-modal-value.vue')
-rw-r--r--src/ui/c-modal-value/c-modal-value.vue31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/ui/c-modal-value/c-modal-value.vue b/src/ui/c-modal-value/c-modal-value.vue
new file mode 100644
index 0000000..3b388e0
--- /dev/null
+++ b/src/ui/c-modal-value/c-modal-value.vue
@@ -0,0 +1,31 @@
+<script lang="ts" setup>
+import { useCopy } from '@/composable/copy';
+
+const props = withDefaults(defineProps<{ value: string; label?: string; copyable?: boolean }>(), { label: undefined, copyable: true });
+const { value, label } = toRefs(props);
+
+const { copy, isJustCopied } = useCopy({ source: value });
+
+const isModalOpen = ref(false);
+const toggleModal = useToggle(isModalOpen);
+</script>
+
+<template>
+ <slot name="label" :value="value" :toggle-modal="toggleModal" :is-modal-open="isModalOpen">
+ <c-button class="text-left" @click="isModalOpen = true">
+ {{ label }}
+ </c-button>
+ </slot>
+
+ <c-modal v-model:open="isModalOpen">
+ <slot name="value" :value="value" :toggle-modal="toggleModal" :is-modal-open="isModalOpen">
+ {{ value }}
+ </slot>
+
+ <div mt-4 flex justify-center>
+ <c-button class="w-full" @click="copy">
+ {{ isJustCopied ? 'Copied!' : 'Copy' }}
+ </c-button>
+ </div>
+ </c-modal>
+</template>