Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
6 changes: 6 additions & 0 deletions infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ $effect(() => {
buttonDestroy: false,
showDraggable: dismissible,
upperThanTop: true,
events: {
onBackdropTap: () => {
pane?.destroy();
isPaneOpen = false;
},
},
breaks: {
bottom: { enabled: true, height: 250 },
},
Expand Down
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>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
{: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