Newer
Older
navi-1 / webclient / src / components / settings / ShowTokenModal.vue
<template>
  <GnModal
    :open="props.open"
    title="API Key Created"
    @update:open="emit('close')"
  >
    <div class="show-token-body">
      <p class="show-token-warning">
        <i class="ph ph-warning-circle"></i>
        Copy this token now — it will <strong>never be shown again</strong>.
      </p>
      <div class="show-token-field">
        <code class="show-token-value">{{ props.token }}</code>
        <GnIconButton
          :icon="copied ? 'ph ph-check' : 'ph ph-copy'"
          :label="copied ? 'Copied!' : 'Copy to clipboard'"
          @click="copy(props.token)"
        />
      </div>
    </div>

    <template #actions>
      <GnButton variant="primary" @click="emit('close')">
        Done
      </GnButton>
    </template>
  </GnModal>
</template>

<script setup>
import { useCopy } from '@/composables/useCopy.js'

const props = defineProps({
  open: Boolean,
  token: String,
})

const emit = defineEmits(['close'])

const { copied, copy } = useCopy()
</script>

<style scoped lang="scss">
.show-token-body {
  min-width: 420px;
}

.show-token-warning {
  margin: 0 0 16px;
  font-size: 0.875rem;
  color: var(--color-warning, #e0af68);
  display: flex;
  align-items: center;
  gap: 6px;

  i {
    font-size: 1.1rem;
  }
}

.show-token-field {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 12px;
  background: var(--surface-panel, #1f2335);
  border: 1px solid var(--color-border, #3b4261);
  border-radius: 6px;
}

.show-token-value {
  flex: 1 1 0;
  font-family: monospace;
  font-size: 0.85rem;
  word-break: break-all;
  color: var(--color-text, #a9b1d6);
}
</style>