Guide coming soon.
+
+
+
+
+
+
+
+
+ Open Element
+
+
@@ -387,6 +367,7 @@ const activeSectionId = ref("vaultwarden");
const guideShots = ref({});
const guidePage = ref({});
const lightboxShot = ref(null);
+const confirmingStepId = ref("");
const showPasswordCard = computed(() => Boolean(initialPassword.value || initialPasswordRevealedAt.value));
const passwordRevealLocked = computed(() => Boolean(!initialPassword.value && initialPasswordRevealedAt.value));
@@ -759,6 +740,14 @@ function stepPillClass(step) {
return "pill-warn";
}
+function isConfirming(step) {
+ return confirmingStepId.value === step.id;
+}
+
+function confirmLabel(step) {
+ return isConfirming(step) ? "Confirming..." : "Confirm";
+}
+
function stepCardClass(step) {
return {
done: isStepDone(step.id),
@@ -986,19 +975,31 @@ async function setStepCompletion(stepId, completed) {
async function confirmStep(step) {
if (!step || isStepBlocked(step.id) || isStepDone(step.id)) return;
- if (step.action === "auto") {
- await check();
- return;
+ confirmingStepId.value = step.id;
+ try {
+ if (step.action === "auto") {
+ await check();
+ return;
+ }
+ if (step.action === "keycloak_rotate") {
+ await check();
+ return;
+ }
+ if (step.action === "element_recovery") {
+ await verifyElementRecoveryKey();
+ return;
+ }
+ if (step.action === "confirm") {
+ await check();
+ if (!isStepDone(step.id)) {
+ await setStepCompletion(step.id, true);
+ }
+ return;
+ }
+ await setStepCompletion(step.id, true);
+ } finally {
+ confirmingStepId.value = "";
}
- if (step.action === "keycloak_rotate") {
- await requestKeycloakPasswordRotation();
- return;
- }
- if (step.action === "element_recovery") {
- await verifyElementRecoveryKey();
- return;
- }
- await setStepCompletion(step.id, true);
}
async function verifyElementRecoveryKey() {
@@ -1454,6 +1455,7 @@ button.copy:disabled {
.step-card.blocked {
opacity: 0.55;
+ pointer-events: none;
}
.step-card.done {