Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 55 additions & 51 deletions infrastructure/eid-wallet/src/routes/(app)/settings/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -146,59 +146,63 @@ $effect(() => {
</main>

<!-- First Confirmation Drawer -->
<Drawer bind:isPaneOpen={isDeleteConfirmationOpen}>
<div class="text-center">
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
⚠️ Delete Account Warning
</h4>
<p class="text-black-700 mb-4">
Are you sure you want to delete your account? This action will:
</p>
<ul class="text-left text-black-700 mb-6 space-y-2">
<li>• Permanently delete all your personal data</li>
<li>• Remove your ePassport and eVault access</li>
<li>• Delete your eName and all associated credentials</li>
<li>• Make your data inaccessible within 24 hours</li>
<li>• This action cannot be undone</li>
</ul>
<div class="flex gap-3">
<ButtonAction class="flex-1" callback={cancelDelete}
>Cancel</ButtonAction
>
<ButtonAction
class="flex-1 bg-red-600 hover:bg-red-700"
callback={confirmDelete}>Continue</ButtonAction
>
{#if isDeleteConfirmationOpen}
<Drawer bind:isPaneOpen={isDeleteConfirmationOpen}>
<div class="text-center">
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
⚠️ Delete Account Warning
</h4>
<p class="text-black-700 mb-4">
Are you sure you want to delete your account? This action will:
</p>
<ul class="text-left text-black-700 mb-6 space-y-2">
<li>• Permanently delete all your personal data</li>
<li>• Remove your ePassport and eVault access</li>
<li>• Delete your eName and all associated credentials</li>
<li>• Make your data inaccessible within 24 hours</li>
<li>• This action cannot be undone</li>
</ul>
<div class="flex gap-3">
<ButtonAction class="flex-1" callback={cancelDelete}
>Cancel</ButtonAction
>
<ButtonAction
class="flex-1 bg-red-600 hover:bg-red-700"
callback={confirmDelete}>Continue</ButtonAction
>
</div>
</div>
</div>
</Drawer>
</Drawer>
{/if}

<!-- Final Confirmation Drawer -->
<Drawer bind:isPaneOpen={isFinalConfirmationOpen}>
<div class="text-center">
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
🚨 Final Confirmation
</h4>
<p class="text-black-700 mb-4">
This is your final warning. Once you confirm:
</p>
<div class="bg-red-50 border border-red-200 rounded-md p-4 mb-6">
<p class="text-red-800 font-medium">
All your data will be permanently deleted and you will lose
access to your ePassport, eVault, and eName forever.
{#if isFinalConfirmationOpen}
<Drawer bind:isPaneOpen={isFinalConfirmationOpen}>
<div class="text-center">
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
🚨 Final Confirmation
</h4>
<p class="text-black-700 mb-4">
This is your final warning. Once you confirm:
</p>
<div class="bg-red-50 border border-red-200 rounded-md p-4 mb-6">
<p class="text-red-800 font-medium">
All your data will be permanently deleted and you will lose
access to your ePassport, eVault, and eName forever.
</p>
</div>
<p class="text-black-700 mb-6">
Are you absolutely certain you want to proceed?
</p>
<div class="flex gap-3">
<ButtonAction class="flex-1" callback={cancelDelete}
>Cancel</ButtonAction
>
<ButtonAction
class="flex-1 bg-red-600 hover:bg-red-700"
callback={nukeWallet}>Delete</ButtonAction
>
</div>
</div>
<p class="text-black-700 mb-6">
Are you absolutely certain you want to proceed?
</p>
<div class="flex gap-3">
<ButtonAction class="flex-1" callback={cancelDelete}
>Cancel</ButtonAction
>
<ButtonAction
class="flex-1 bg-red-600 hover:bg-red-700"
callback={nukeWallet}>Delete</ButtonAction
>
</div>
</div>
</Drawer>
</Drawer>
{/if}
130 changes: 67 additions & 63 deletions infrastructure/eid-wallet/src/routes/(auth)/onboarding/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,8 @@ onMount(async () => {
>
</p>
<div class="flex justify-center whitespace-nowrap mt-1">
<ButtonAction
class="w-full"
<ButtonAction
class="w-full"
callback={handleGetStarted}
disabled={checkingHardware}
>
Expand Down Expand Up @@ -349,8 +349,11 @@ onMount(async () => {
placeholder="Enter your demo name for ePassport"
/>
<div class="flex justify-center whitespace-nowrap my-[2.3svh]">
<ButtonAction class="w-full" callback={handleFinalSubmit}
>Continue</ButtonAction
<ButtonAction
variant={demoName.length === 0 ? "soft" : "solid"}
disabled={demoName.length === 0}
class="w-full"
callback={handleFinalSubmit}>Continue</ButtonAction
>
</div>
{:else}
Expand All @@ -365,69 +368,70 @@ onMount(async () => {
placeholder="Enter verification code"
/>
<div class="flex justify-center whitespace-nowrap my-[2.3svh]">
<ButtonAction class="w-full" callback={handleContinue}
>Next</ButtonAction
<ButtonAction
variant={verificationId.length === 0 ? "soft" : "solid"}
disabled={verificationId.length === 0}
class="w-full"
callback={handleContinue}>Next</ButtonAction
>
</div>
{/if}
{:else}
{#if checkingHardware}
<div class="my-20">
<div
class="align-center flex w-full flex-col items-center justify-center gap-6"
>
<Shadow size={40} color="rgb(142, 82, 255);" />
<h4>Checking device capabilities...</h4>
</div>
{:else if checkingHardware}
<div class="my-20">
<div
class="align-center flex w-full flex-col items-center justify-center gap-6"
>
<Shadow size={40} color="rgb(142, 82, 255);" />
<h4>Checking device capabilities...</h4>
</div>
{:else if showHardwareError}
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
Hardware Security Not Available
</h4>
<p class="text-black-700 mb-4">
Your phone doesn't support hardware crypto keys, which is a requirement for verified IDs.
</p>
<p class="text-black-700 mb-4">
Please use the pre-verification code option to create a demo account instead.
</p>
<div class="flex justify-center whitespace-nowrap my-[2.3svh]">
<ButtonAction
class="w-full"
callback={() => {
isPaneOpen = false;
handlePreVerified();
}}
>
Use Pre-Verification Code
</ButtonAction>
</div>
{:else if showHardwareError}
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
Hardware Security Not Available
</h4>
<p class="text-black-700 mb-4">
Your phone doesn't support hardware crypto keys, which is a
requirement for verified IDs.
</p>
<p class="text-black-700 mb-4">
Please use the pre-verification code option to create a demo account
instead.
</p>
<div class="flex justify-center whitespace-nowrap my-[2.3svh]">
<ButtonAction
class="w-full"
callback={() => {
isPaneOpen = false;
handlePreVerified();
}}
>
Use Pre-Verification Code
</ButtonAction>
</div>
{:else if loading}
<div class="my-20">
<div
class="align-center flex w-full flex-col items-center justify-center gap-6"
>
<Shadow size={40} color="rgb(142, 82, 255);" />
<h4>Initializing security keys...</h4>
</div>
{:else}
{#if loading}
<div class="my-20">
<div
class="align-center flex w-full flex-col items-center justify-center gap-6"
>
<Shadow size={40} color="rgb(142, 82, 255);" />
<h4>Initializing security keys...</h4>
</div>
</div>
{:else}
<h4 class="mt-[2.3svh] mb-[0.5svh]">
Your Digital Self begins with the Real You
</h4>
<p class="text-black-700">
In the Web 3.0 Data Space, identity is linked to reality. We begin
by verifying your real-world passport, which serves as the
foundation for issuing your secure ePassport. At the same time, we
generate your eName – a unique digital identifier – and create your
eVault to store and protect your personal data.
</p>
<div class="flex justify-center whitespace-nowrap my-[2.3svh]">
<ButtonAction class="w-full" callback={handleNext}
>Next</ButtonAction
>
</div>
{/if}
{/if}
</div>
{:else}
<h4 class="mt-[2.3svh] mb-[0.5svh]">
Your Digital Self begins with the Real You
</h4>
<p class="text-black-700">
In the Web 3.0 Data Space, identity is linked to reality. We begin
by verifying your real-world passport, which serves as the
foundation for issuing your secure ePassport. At the same time, we
generate your eName – a unique digital identifier – and create your
eVault to store and protect your personal data.
</p>
<div class="flex justify-center whitespace-nowrap my-[2.3svh]">
<ButtonAction class="w-full" callback={handleNext}
>Next</ButtonAction
>
</div>
{/if}
</Drawer>
6 changes: 3 additions & 3 deletions platforms/blabsy/src/components/input/image-preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ export function ImagePreview({
type: img.type
}))
});

const processed = combineBase64Images(imagesPreview);

console.log('[ImagePreview] Processed images:', {
originalCount: imagesPreview?.length || 0,
processedCount: processed.length,
Expand All @@ -82,7 +82,7 @@ export function ImagePreview({
type: img.type
}))
});

return processed;
}, [imagesPreview]);

Expand Down
5 changes: 4 additions & 1 deletion platforms/blabsy/src/lib/utils/image-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ export function combineBase64Images(
} else {
// Handle odd number of images (last item)
if (dataPart) {
if (dataPart.src.startsWith('data:') && !dataPart.src.includes(',')) {
if (
dataPart.src.startsWith('data:') &&
!dataPart.src.includes(',')
) {
// Incomplete base64 image, skip it
} else {
result.push(dataPart);
Expand Down