Browse Source

refactor: migrate interfaces to dedicated directory

Reorganizes TypeScript interfaces into a modular structure:
- Create dedicated interfaces directory with specialized files
- Split interfaces by domain (claims, common, limits, records, user)
- Update imports in endorserServer.ts to use new interface locations
- Replace 'any' types with 'unknown' for better type safety
- Add proper type imports and exports

This improves code organization and maintainability by:
- Centralizing interface definitions
- Reducing file size of endorserServer.ts
- Making interface relationships more explicit
- Improving type safety with stricter types
side_step
Matthew Raymer 2 weeks ago
parent
commit
c708716675
  1. 16
      src/App.vue
  2. 6
      src/components/GiftedDialog.vue
  3. 8
      src/components/GiftedPrompts.vue
  4. 4
      src/components/HiddenDidDialog.vue
  5. 8
      src/components/ImageMethodDialog.vue
  6. 4
      src/components/ImageViewer.vue
  7. 20
      src/components/MembersList.vue
  8. 4
      src/components/OfferDialog.vue
  9. 18
      src/components/OnboardingDialog.vue
  10. 10
      src/components/PhotoDialog.vue
  11. 6
      src/components/PushNotificationPermission.vue
  12. 10
      src/components/QuickNav.vue
  13. 47
      src/interfaces/claims-result.ts
  14. 63
      src/interfaces/claims.ts
  15. 41
      src/interfaces/common.ts
  16. 6
      src/interfaces/index.ts
  17. 14
      src/interfaces/limits.ts
  18. 90
      src/interfaces/records.ts
  19. 8
      src/interfaces/user.ts
  20. 278
      src/libs/endorserServer.ts
  21. 22
      src/main.capacitor.ts
  22. 36
      src/views/AccountViewView.vue
  23. 2
      src/views/ClaimAddRawView.vue
  24. 42
      src/views/ClaimView.vue
  25. 2
      src/views/ConfirmContactView.vue
  26. 42
      src/views/ConfirmGiftView.vue
  27. 14
      src/views/ContactAmountsView.vue
  28. 8
      src/views/ContactEditView.vue
  29. 6
      src/views/ContactGiftingView.vue
  30. 4
      src/views/ContactImportView.vue
  31. 2
      src/views/ContactQRScanShowView.vue
  32. 2
      src/views/ContactScanView.vue
  33. 22
      src/views/ContactsView.vue
  34. 24
      src/views/DIDView.vue
  35. 12
      src/views/DiscoverView.vue
  36. 30
      src/views/GiftedDetailsView.vue
  37. 2
      src/views/HelpNotificationTypesView.vue
  38. 8
      src/views/HelpNotificationsView.vue
  39. 20
      src/views/HelpOnboardingView.vue
  40. 28
      src/views/HelpView.vue
  41. 31
      src/views/HomeView.vue
  42. 12
      src/views/IdentitySwitcherView.vue
  43. 2
      src/views/ImportAccountView.vue
  44. 10
      src/views/ImportDerivedAccountView.vue
  45. 2
      src/views/InviteOneAcceptView.vue
  46. 8
      src/views/InviteOneView.vue
  47. 10
      src/views/NewActivityView.vue
  48. 2
      src/views/NewEditAccountView.vue
  49. 28
      src/views/NewEditProjectView.vue
  50. 10
      src/views/NewIdentifierView.vue
  51. 12
      src/views/OfferDetailsView.vue
  52. 4
      src/views/OnboardMeetingListView.vue
  53. 2
      src/views/OnboardMeetingMembersView.vue
  54. 8
      src/views/OnboardMeetingSetupView.vue
  55. 66
      src/views/ProjectViewView.vue
  56. 24
      src/views/ProjectsView.vue
  57. 2
      src/views/QuickActionBvcBeginView.vue
  58. 8
      src/views/QuickActionBvcEndView.vue
  59. 2
      src/views/QuickActionBvcView.vue
  60. 8
      src/views/RecentOffersToUserProjectsView.vue
  61. 6
      src/views/RecentOffersToUserView.vue
  62. 10
      src/views/SearchAreaView.vue
  63. 6
      src/views/SeedBackupView.vue
  64. 4
      src/views/ShareMyContactInfoView.vue
  65. 8
      src/views/SharedPhotoView.vue
  66. 6
      src/views/StartView.vue
  67. 2
      src/views/StatisticsView.vue
  68. 2
      src/views/TestView.vue
  69. 6
      src/views/UserProfileView.vue

16
src/App.vue

@ -40,7 +40,7 @@
<div <div
class="flex items-center justify-center w-12 bg-slate-600 text-slate-100" class="flex items-center justify-center w-12 bg-slate-600 text-slate-100"
> >
<fa icon="circle-info" class="fa-fw fa-xl"></fa> <font-awesome icon="circle-info" class="fa-fw fa-xl"></font-awesome>
</div> </div>
<div class="relative w-full pl-4 pr-8 py-2 text-slate-900"> <div class="relative w-full pl-4 pr-8 py-2 text-slate-900">
@ -51,7 +51,7 @@
@click="close(notification.id)" @click="close(notification.id)"
class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-slate-200 text-slate-600" class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-slate-200 text-slate-600"
> >
<fa icon="xmark" class="fa-fw"></fa> <font-awesome icon="xmark" class="fa-fw"></font-awesome>
</button> </button>
</div> </div>
</div> </div>
@ -63,7 +63,7 @@
<div <div
class="flex items-center justify-center w-12 bg-emerald-600 text-emerald-100" class="flex items-center justify-center w-12 bg-emerald-600 text-emerald-100"
> >
<fa icon="circle-info" class="fa-fw fa-xl"></fa> <font-awesome icon="circle-info" class="fa-fw fa-xl"></font-awesome>
</div> </div>
<div class="relative w-full pl-4 pr-8 py-2 text-emerald-900"> <div class="relative w-full pl-4 pr-8 py-2 text-emerald-900">
@ -74,7 +74,7 @@
@click="close(notification.id)" @click="close(notification.id)"
class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-emerald-200 text-emerald-600" class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-emerald-200 text-emerald-600"
> >
<fa icon="xmark" class="fa-fw"></fa> <font-awesome icon="xmark" class="fa-fw"></font-awesome>
</button> </button>
</div> </div>
</div> </div>
@ -86,7 +86,7 @@
<div <div
class="flex items-center justify-center w-12 bg-amber-600 text-amber-100" class="flex items-center justify-center w-12 bg-amber-600 text-amber-100"
> >
<fa icon="triangle-exclamation" class="fa-fw fa-xl"></fa> <font-awesome icon="triangle-exclamation" class="fa-fw fa-xl"></font-awesome>
</div> </div>
<div class="relative w-full pl-4 pr-8 py-2 text-amber-900"> <div class="relative w-full pl-4 pr-8 py-2 text-amber-900">
@ -97,7 +97,7 @@
@click="close(notification.id)" @click="close(notification.id)"
class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-amber-200 text-amber-600" class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-amber-200 text-amber-600"
> >
<fa icon="xmark" class="fa-fw"></fa> <font-awesome icon="xmark" class="fa-fw"></font-awesome>
</button> </button>
</div> </div>
</div> </div>
@ -109,7 +109,7 @@
<div <div
class="flex items-center justify-center w-12 bg-rose-600 text-rose-100" class="flex items-center justify-center w-12 bg-rose-600 text-rose-100"
> >
<fa icon="triangle-exclamation" class="fa-fw fa-xl"></fa> <font-awesome icon="triangle-exclamation" class="fa-fw fa-xl"></font-awesome>
</div> </div>
<div class="relative w-full pl-4 pr-8 py-2 text-rose-900"> <div class="relative w-full pl-4 pr-8 py-2 text-rose-900">
@ -120,7 +120,7 @@
@click="close(notification.id)" @click="close(notification.id)"
class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-rose-200 text-rose-600" class="absolute top-2 right-2 px-0.5 py-0 rounded-full bg-rose-200 text-rose-600"
> >
<fa icon="xmark" class="fa-fw"></fa> <font-awesome icon="xmark" class="fa-fw"></font-awesome>
</button> </button>
</div> </div>
</div> </div>

6
src/components/GiftedDialog.vue

@ -21,7 +21,7 @@
class="border border-r-0 border-slate-400 bg-slate-200 px-4 py-2" class="border border-r-0 border-slate-400 bg-slate-200 px-4 py-2"
@click="amountInput === '0' ? null : decrement()" @click="amountInput === '0' ? null : decrement()"
> >
<fa icon="chevron-left" /> <font-awesome icon="chevron-left" />
</div> </div>
<input <input
id="inputGivenAmount" id="inputGivenAmount"
@ -33,7 +33,7 @@
class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2" class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2"
@click="increment()" @click="increment()"
> >
<fa icon="chevron-right" /> <font-awesome icon="chevron-right" />
</div> </div>
</div> </div>
<div class="mt-4 flex justify-center"> <div class="mt-4 flex justify-center">
@ -62,7 +62,7 @@
</div> </div>
<p class="text-center mb-2 mt-6 italic"> <p class="text-center mb-2 mt-6 italic">
Sign & Send to publish to the world Sign & Send to publish to the world
<fa <font-awesome
icon="circle-info" icon="circle-info"
class="pl-2 text-blue-500 cursor-pointer" class="pl-2 text-blue-500 cursor-pointer"
@click="explainData()" @click="explainData()"

8
src/components/GiftedPrompts.vue

@ -7,7 +7,7 @@
class="text-lg text-center p-2 leading-none absolute right-0 -top-1" class="text-lg text-center p-2 leading-none absolute right-0 -top-1"
@click="cancel" @click="cancel"
> >
<fa icon="xmark" class="w-[1em]"></fa> <font-awesome icon="xmark" class="w-[1em]"></font-awesome>
</div> </div>
</h1> </h1>
<span class="mt-2 flex justify-between"> <span class="mt-2 flex justify-between">
@ -16,7 +16,7 @@
class="rounded-l border border-slate-400 bg-slate-200 px-4 py-2 flex" class="rounded-l border border-slate-400 bg-slate-200 px-4 py-2 flex"
@click="prevIdea()" @click="prevIdea()"
> >
<fa icon="chevron-left" class="m-auto" /> <font-awesome icon="chevron-left" class="m-auto" />
</span> </span>
<div class="m-2"> <div class="m-2">
@ -45,7 +45,7 @@
class="text-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mt-4" class="text-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mt-4"
@click="nextIdeaPastContacts()" @click="nextIdeaPastContacts()"
> >
Skip Contacts <fa icon="forward" /> Skip Contacts <font-awesome icon="forward" />
</button> </button>
</span> </span>
</span> </span>
@ -57,7 +57,7 @@
class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2 flex" class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2 flex"
@click="nextIdea()" @click="nextIdea()"
> >
<fa icon="chevron-right" class="m-auto" /> <font-awesome icon="chevron-right" class="m-auto" />
</span> </span>
</span> </span>
<button <button

4
src/components/HiddenDidDialog.vue

@ -8,7 +8,7 @@
<div class="flex justify-between items-center mb-4"> <div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-bold capitalize">{{ roleName }} Details</h2> <h2 class="text-xl font-bold capitalize">{{ roleName }} Details</h2>
<button @click="close" class="text-gray-500 hover:text-gray-700"> <button @click="close" class="text-gray-500 hover:text-gray-700">
<fa icon="times" /> <font-awesome icon="times" />
</button> </button>
</div> </div>
@ -53,7 +53,7 @@
target="_blank" target="_blank"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</span> </span>
</span> </span>

8
src/components/ImageMethodDialog.vue

@ -12,14 +12,14 @@
class="text-lg text-center px-2 py-0.5 leading-none absolute right-0 top-0 text-white" class="text-lg text-center px-2 py-0.5 leading-none absolute right-0 top-0 text-white"
@click="close()" @click="close()"
> >
<fa icon="xmark" class="w-[1em]"></fa> <font-awesome icon="xmark" class="w-[1em]"></font-awesome>
</div> </div>
</div> </div>
<div> <div>
<div class="text-center mt-8"> <div class="text-center mt-8">
<div> <div>
<fa <font-awesome
icon="camera" icon="camera"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md"
@click="openPhotoDialog()" @click="openPhotoDialog()"
@ -34,14 +34,14 @@
<input type="text" v-model="imageUrl" class="border-2" /> <input type="text" v-model="imageUrl" class="border-2" />
</span> </span>
<span class="ml-2"> <span class="ml-2">
<fa <font-awesome
v-if="imageUrl" v-if="imageUrl"
icon="check" icon="check"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md cursor-pointer" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md cursor-pointer"
@click="acceptUrl" @click="acceptUrl"
/> />
<!-- so that there's no shifting when it becomes visible --> <!-- so that there's no shifting when it becomes visible -->
<fa v-else icon="check" class="text-white bg-white px-2 py-2" /> <font-awesome v-else icon="check" class="text-white bg-white px-2 py-2" />
</span> </span>
</div> </div>
</div> </div>

4
src/components/ImageViewer.vue

@ -8,7 +8,7 @@
class="text-white text-2xl p-2 rounded-full hover:bg-white/10" class="text-white text-2xl p-2 rounded-full hover:bg-white/10"
@click="close" @click="close"
> >
<fa icon="xmark" /> <font-awesome icon="xmark" />
</button> </button>
<!-- Mobile share button --> <!-- Mobile share button -->
@ -17,7 +17,7 @@
class="text-white text-xl p-2 rounded-full hover:bg-white/10" class="text-white text-xl p-2 rounded-full hover:bg-white/10"
@click="handleShare" @click="handleShare"
> >
<fa icon="ellipsis" /> <font-awesome icon="ellipsis" />
</button> </button>
</div> </div>

20
src/components/MembersList.vue

@ -5,7 +5,7 @@
v-if="isLoading" v-if="isLoading"
class="mt-16 text-center text-4xl bg-slate-400 text-white w-14 py-2.5 rounded-full mx-auto" class="mt-16 text-center text-4xl bg-slate-400 text-white w-14 py-2.5 rounded-full mx-auto"
> >
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</div> </div>
<!-- Members List --> <!-- Members List -->
@ -33,13 +33,13 @@
<span <span
class="mx-2 min-w-[24px] min-h-[24px] w-6 h-6 flex items-center justify-center rounded-full bg-blue-100 text-blue-600" class="mx-2 min-w-[24px] min-h-[24px] w-6 h-6 flex items-center justify-center rounded-full bg-blue-100 text-blue-600"
> >
<fa icon="plus" class="text-sm" /> <font-awesome icon="plus" class="text-sm" />
</span> </span>
/ /
<span <span
class="mx-2 min-w-[24px] min-h-[24px] w-6 h-6 flex items-center justify-center rounded-full bg-blue-100 text-blue-600" class="mx-2 min-w-[24px] min-h-[24px] w-6 h-6 flex items-center justify-center rounded-full bg-blue-100 text-blue-600"
> >
<fa icon="minus" class="text-sm" /> <font-awesome icon="minus" class="text-sm" />
</span> </span>
to add/remove them to/from the meeting. to add/remove them to/from the meeting.
</span> </span>
@ -54,7 +54,7 @@
<span <span
class="mx-2 w-8 h-8 flex items-center justify-center rounded-full bg-green-100 text-green-600" class="mx-2 w-8 h-8 flex items-center justify-center rounded-full bg-green-100 text-green-600"
> >
<fa icon="circle-user" class="text-xl" /> <font-awesome icon="circle-user" class="text-xl" />
</span> </span>
to add them to your contacts. to add them to your contacts.
</span> </span>
@ -67,7 +67,7 @@
class="w-8 h-8 flex items-center justify-center rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800 transition-colors" class="w-8 h-8 flex items-center justify-center rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800 transition-colors"
title="Refresh members list" title="Refresh members list"
> >
<fa icon="rotate" :class="{ 'fa-spin': isLoading }" /> <font-awesome icon="rotate" :class="{ 'fa-spin': isLoading }" />
</button> </button>
</div> </div>
<div <div
@ -87,7 +87,7 @@
class="ml-2 w-8 h-8 flex items-center justify-center rounded-full bg-green-100 text-green-600 hover:bg-green-200 hover:text-green-800 transition-colors" class="ml-2 w-8 h-8 flex items-center justify-center rounded-full bg-green-100 text-green-600 hover:bg-green-200 hover:text-green-800 transition-colors"
title="Add as contact" title="Add as contact"
> >
<fa icon="circle-user" class="text-xl" /> <font-awesome icon="circle-user" class="text-xl" />
</button> </button>
</div> </div>
<button <button
@ -100,7 +100,7 @@
class="ml-2 mb-2 w-6 h-6 flex items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-800 transition-colors" class="ml-2 mb-2 w-6 h-6 flex items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-800 transition-colors"
title="Contact info" title="Contact info"
> >
<fa icon="circle-info" class="text-base" /> <font-awesome icon="circle-info" class="text-base" />
</button> </button>
</div> </div>
<div class="flex"> <div class="flex">
@ -117,7 +117,7 @@
member.member.admitted ? 'Remove member' : 'Admit member' member.member.admitted ? 'Remove member' : 'Admit member'
" "
> >
<fa <font-awesome
:icon="member.member.admitted ? 'minus' : 'plus'" :icon="member.member.admitted ? 'minus' : 'plus'"
class="text-sm" class="text-sm"
/> />
@ -127,7 +127,7 @@
class="mr-2 mb-2 w-6 h-6 flex items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-800 transition-colors" class="mr-2 mb-2 w-6 h-6 flex items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-800 transition-colors"
title="Admission info" title="Admission info"
> >
<fa icon="circle-info" class="text-base" /> <font-awesome icon="circle-info" class="text-base" />
</button> </button>
</span> </span>
</div> </div>
@ -142,7 +142,7 @@
class="w-8 h-8 flex items-center justify-center rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800 transition-colors" class="w-8 h-8 flex items-center justify-center rounded-full bg-blue-100 text-blue-600 hover:bg-blue-200 hover:text-blue-800 transition-colors"
title="Refresh members list" title="Refresh members list"
> >
<fa icon="rotate" :class="{ 'fa-spin': isLoading }" /> <font-awesome icon="rotate" :class="{ 'fa-spin': isLoading }" />
</button> </button>
</div> </div>

4
src/components/OfferDialog.vue

@ -21,7 +21,7 @@
@click="decrement()" @click="decrement()"
v-if="amountInput !== '0'" v-if="amountInput !== '0'"
> >
<fa icon="chevron-left" /> <font-awesome icon="chevron-left" />
</div> </div>
<input <input
data-testId="inputOfferAmount" data-testId="inputOfferAmount"
@ -33,7 +33,7 @@
class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2" class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2"
@click="increment()" @click="increment()"
> >
<fa icon="chevron-right" /> <font-awesome icon="chevron-right" />
</div> </div>
</div> </div>
<div class="mt-4 flex justify-center"> <div class="mt-4 flex justify-center">

18
src/components/OnboardingDialog.vue

@ -10,7 +10,7 @@
class="text-lg text-center leading-none absolute right-0 -top-1" class="text-lg text-center leading-none absolute right-0 -top-1"
@click="onClickClose(true)" @click="onClickClose(true)"
> >
<fa icon="xmark" class="w-[1em]" /> <font-awesome icon="xmark" class="w-[1em]" />
</div> </div>
</h1> </h1>
@ -21,7 +21,7 @@
</span> </span>
click on the click on the
<span class="bg-green-600 text-white rounded-full"> <span class="bg-green-600 text-white rounded-full">
<fa icon="plus" class="fa-fw" /> <font-awesome icon="plus" class="fa-fw" />
</span> </span>
button to express your appreciation for... whatever -- maybe thanks for button to express your appreciation for... whatever -- maybe thanks for
showing you all these fascinating stories of showing you all these fascinating stories of
@ -40,7 +40,7 @@
<p class="mt-4 flex items-center"> <p class="mt-4 flex items-center">
The The
<fa <font-awesome
icon="house-chimney" icon="house-chimney"
class="ml-1 mr-1 text-lg text-white bg-slate-400 px-2 py-2 rounded" class="ml-1 mr-1 text-lg text-white bg-slate-400 px-2 py-2 rounded"
/> />
@ -84,7 +84,7 @@
class="text-lg text-center leading-none absolute right-0 -top-1" class="text-lg text-center leading-none absolute right-0 -top-1"
@click="onClickClose(true)" @click="onClickClose(true)"
> >
<fa icon="xmark" class="w-[1em]" /> <font-awesome icon="xmark" class="w-[1em]" />
</div> </div>
</h1> </h1>
@ -106,7 +106,7 @@
<p class="mt-4 flex items-center"> <p class="mt-4 flex items-center">
The The
<fa <font-awesome
icon="magnifying-glass" icon="magnifying-glass"
class="ml-1 mr-1 text-lg text-white bg-slate-400 px-2 py-2 rounded" class="ml-1 mr-1 text-lg text-white bg-slate-400 px-2 py-2 rounded"
/> />
@ -141,14 +141,14 @@
class="text-lg text-center leading-none absolute right-0 -top-1" class="text-lg text-center leading-none absolute right-0 -top-1"
@click="onClickClose(true)" @click="onClickClose(true)"
> >
<fa icon="xmark" class="w-[1em]" /> <font-awesome icon="xmark" class="w-[1em]" />
</div> </div>
</h1> </h1>
<p class="relative"> <p class="relative">
Now you can take a turn: click on the Now you can take a turn: click on the
<span class="bg-green-600 text-white rounded-full"> <span class="bg-green-600 text-white rounded-full">
<fa icon="plus" class="fa-fw" /> <font-awesome icon="plus" class="fa-fw" />
</span> </span>
button to throw out projects of your own... anything you'd like to see button to throw out projects of your own... anything you'd like to see
happen. If your first idea doesn't catch anyone, try, try again... and happen. If your first idea doesn't catch anyone, try, try again... and
@ -157,7 +157,7 @@
<p class="mt-4 flex items-center"> <p class="mt-4 flex items-center">
The The
<fa <font-awesome
icon="hand" icon="hand"
class="ml-1 mr-1 text-lg text-white bg-slate-400 px-2 py-2 rounded" class="ml-1 mr-1 text-lg text-white bg-slate-400 px-2 py-2 rounded"
/> />
@ -168,7 +168,7 @@
By the way, one good way to get to know your neighbors and their By the way, one good way to get to know your neighbors and their
interests is to offer time directly to them. You can do this on the interests is to offer time directly to them. You can do this on the
contacts screen contacts screen
<fa icon="users" class="text-slate-500" /> <font-awesome icon="users" class="text-slate-500" />
which is a great way to get to know a neighbor's interests. which is a great way to get to know a neighbor's interests.
</p> </p>

10
src/components/PhotoDialog.vue

@ -15,12 +15,12 @@
class="text-lg text-center px-2 py-0.5 leading-none absolute right-0 top-0 text-white" class="text-lg text-center px-2 py-0.5 leading-none absolute right-0 top-0 text-white"
@click="close()" @click="close()"
> >
<fa icon="xmark" class="w-[1em]"></fa> <font-awesome icon="xmark" class="w-[1em]"></font-awesome>
</div> </div>
</div> </div>
<div v-if="uploading" class="flex justify-center"> <div v-if="uploading" class="flex justify-center">
<fa <font-awesome
icon="spinner" icon="spinner"
class="fa-spin fa-3x text-center block px-12 py-12" class="fa-spin fa-3x text-center block px-12 py-12"
/> />
@ -93,7 +93,7 @@
@click="takeImage()" @click="takeImage()"
class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none"
> >
<fa icon="camera" class="w-[1em]"></fa> <font-awesome icon="camera" class="w-[1em]"></font-awesome>
</button> </button>
</div> </div>
<div <div
@ -103,7 +103,7 @@
@click="swapMirrorClass()" @click="swapMirrorClass()"
class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none"
> >
<fa icon="left-right" class="w-[1em]"></fa> <font-awesome icon="left-right" class="w-[1em]"></font-awesome>
</button> </button>
</div> </div>
<div v-if="numDevices > 1" class="absolute bottom-2 right-4"> <div v-if="numDevices > 1" class="absolute bottom-2 right-4">
@ -111,7 +111,7 @@
@click="switchCamera()" @click="switchCamera()"
class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none"
> >
<fa icon="rotate" class="w-[1em]"></fa> <font-awesome icon="rotate" class="w-[1em]"></font-awesome>
</button> </button>
</div> </div>
</camera> </camera>

6
src/components/PushNotificationPermission.vue

@ -25,7 +25,7 @@
</p> </p>
<p v-else class="text-lg mb-4"> <p v-else class="text-lg mb-4">
Waiting for system initialization, which may take up to 5 seconds... Waiting for system initialization, which may take up to 5 seconds...
<fa icon="spinner" spin /> <font-awesome icon="spinner" spin />
</p> </p>
<div v-if="serviceWorkerReady && vapidKey"> <div v-if="serviceWorkerReady && vapidKey">
@ -69,8 +69,8 @@
class="rounded-r border border-slate-400 bg-slate-200 text-center text-blue-500 mt-2 px-2 py-2 w-20" class="rounded-r border border-slate-400 bg-slate-200 text-center text-blue-500 mt-2 px-2 py-2 w-20"
@click="hourAm = !hourAm" @click="hourAm = !hourAm"
> >
<span v-if="hourAm"> AM <fa icon="chevron-down" /> </span> <span v-if="hourAm"> AM <font-awesome icon="chevron-down" /> </span>
<span v-else> PM <fa icon="chevron-up" /> </span> <span v-else> PM <font-awesome icon="chevron-up" /> </span>
</span> </span>
</span> </span>
</div> </div>

10
src/components/QuickNav.vue

@ -13,7 +13,7 @@
> >
<router-link :to="{ name: 'home' }" class="block text-center py-2 px-1"> <router-link :to="{ name: 'home' }" class="block text-center py-2 px-1">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<fa icon="house-chimney" class="fa-fw" /> <font-awesome icon="house-chimney" class="fa-fw" />
<span class="text-xs mt-1">feed</span> <span class="text-xs mt-1">feed</span>
</div> </div>
</router-link> </router-link>
@ -32,7 +32,7 @@
class="block text-center py-2 px-1" class="block text-center py-2 px-1"
> >
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<fa icon="magnifying-glass" class="fa-fw" /> <font-awesome icon="magnifying-glass" class="fa-fw" />
<span class="text-xs mt-1">search</span> <span class="text-xs mt-1">search</span>
</div> </div>
</router-link> </router-link>
@ -51,7 +51,7 @@
class="block text-center py-2 px-1" class="block text-center py-2 px-1"
> >
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<fa icon="hand" class="fa-fw" /> <font-awesome icon="hand" class="fa-fw" />
<span class="text-xs mt-1">your work</span> <span class="text-xs mt-1">your work</span>
</div> </div>
</router-link> </router-link>
@ -70,7 +70,7 @@
class="block text-center py-2 px-1" class="block text-center py-2 px-1"
> >
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<fa icon="users" class="fa-fw" /> <font-awesome icon="users" class="fa-fw" />
<span class="text-xs mt-1">contacts</span> <span class="text-xs mt-1">contacts</span>
</div> </div>
</router-link> </router-link>
@ -89,7 +89,7 @@
class="block text-center py-2 px-1" class="block text-center py-2 px-1"
> >
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<fa icon="circle-user" class="fa-fw" /> <font-awesome icon="circle-user" class="fa-fw" />
<!-- <!--
We used to say "account", so we'll keep that in the code, We used to say "account", so we'll keep that in the code,
but it isn't accurate because we don't hold anything for them. but it isn't accurate because we don't hold anything for them.

47
src/interfaces/claims-result.ts

@ -0,0 +1,47 @@
import { AxiosResponse } from "axios";
import { GiverReceiverInputInfo } from "../libs/util";
import { ErrorResult, ResultWithType } from "./common";
export interface GiverOutputInfo {
action: string;
giver?: GiverReceiverInputInfo;
description?: string;
amount?: number;
unitCode?: string;
}
export interface ClaimResult {
success: { claimId: string; handleId: string };
error: { code: string; message: string };
}
export interface VerifiableCredential {
exp?: number;
iat: number;
iss: string;
vc: {
"@context": string[];
type: string[];
credentialSubject: VerifiableCredentialSubject;
};
}
export interface VerifiableCredentialSubject {
"@context": string;
"@type": string;
[key: string]: unknown;
}
export interface WorldProperties {
startTime?: string;
endTime?: string;
}
// Type for createAndSubmitClaim result
export type CreateAndSubmitClaimResult = SuccessResult | ErrorResult;
// Update SuccessResult to use ClaimResult
export interface SuccessResult extends ResultWithType {
type: "success";
response: AxiosResponse<ClaimResult>;
}

63
src/interfaces/claims.ts

@ -0,0 +1,63 @@
import { GenericVerifiableCredential } from "./common";
export interface AgreeVerifiableCredential {
"@context": string;
"@type": string;
object: Record<string, unknown>;
}
// Note that previous VCs may have additional fields.
// https://endorser.ch/doc/html/transactions.html#id4
export interface GiveVerifiableCredential extends GenericVerifiableCredential {
"@context"?: string;
"@type": "GiveAction";
agent?: { identifier: string };
description?: string;
fulfills?: { "@type": string; identifier?: string; lastClaimId?: string }[];
identifier?: string;
image?: string;
object?: { amountOfThisGood: number; unitCode: string };
provider?: GenericVerifiableCredential;
recipient?: { identifier: string };
}
// Note that previous VCs may have additional fields.
// https://endorser.ch/doc/html/transactions.html#id8
export interface OfferVerifiableCredential extends GenericVerifiableCredential {
"@context"?: string;
"@type": "Offer";
description?: string;
includesObject?: { amountOfThisGood: number; unitCode: string };
itemOffered?: {
description?: string;
isPartOf?: { identifier?: string; lastClaimId?: string; "@type"?: string };
};
offeredBy?: { identifier: string };
recipient?: { identifier: string };
validThrough?: string;
}
// Note that previous VCs may have additional fields.
// https://endorser.ch/doc/html/transactions.html#id7
export interface PlanVerifiableCredential extends GenericVerifiableCredential {
"@context": "https://schema.org";
"@type": "PlanAction";
name: string;
agent?: { identifier: string };
description?: string;
identifier?: string;
lastClaimId?: string;
location?: {
geo: { "@type": "GeoCoordinates"; latitude: number; longitude: number };
};
}
// AKA Registration & RegisterAction
export interface RegisterVerifiableCredential {
"@context": string;
"@type": "RegisterAction";
agent: { identifier: string };
identifier?: string;
object: string;
participant?: { identifier: string };
}

41
src/interfaces/common.ts

@ -0,0 +1,41 @@
// similar to VerifiableCredentialSubject... maybe rename this
export interface GenericVerifiableCredential {
"@context"?: string;
"@type": string;
[key: string]: unknown;
}
export interface GenericCredWrapper<T extends GenericVerifiableCredential> {
claim: T;
claimType?: string;
handleId: string;
id: string;
issuedAt: string;
issuer: string;
publicUrls?: Record<string, string>;
}
export interface ResultWithType {
type: string;
}
export interface SuccessResult extends ResultWithType {
type: "success";
response: unknown;
}
export interface ErrorResponse {
error?: {
message?: string;
};
}
export interface InternalError {
error: string;
userMessage?: string;
}
export interface ErrorResult extends ResultWithType {
type: "error";
error: InternalError;
}

6
src/interfaces/index.ts

@ -0,0 +1,6 @@
export * from "./claims";
export * from "./claims-result";
export * from "./common";
export * from "./limits";
export * from "./records";
export * from "./user";

14
src/interfaces/limits.ts

@ -0,0 +1,14 @@
export interface EndorserRateLimits {
doneClaimsThisWeek: string;
doneRegistrationsThisMonth: string;
maxClaimsPerWeek: string;
maxRegistrationsPerMonth: string;
nextMonthBeginDateTime: string;
nextWeekBeginDateTime: string;
}
export interface ImageRateLimits {
doneImagesThisWeek: string;
maxImagesPerWeek: string;
nextWeekBeginDateTime: string;
}

90
src/interfaces/records.ts

@ -0,0 +1,90 @@
import { GiveVerifiableCredential, OfferVerifiableCredential } from "./claims";
// a summary record; the VC is found the fullClaim field
export interface GiveSummaryRecord {
agentDid: string;
amount: number;
amountConfirmed: number;
description: string;
fullClaim: GiveVerifiableCredential;
fulfillsHandleId: string;
fulfillsPlanHandleId?: string;
fulfillsType?: string;
handleId: string;
issuedAt: string;
issuerDid: string;
jwtId: string;
providerPlanHandleId?: string;
recipientDid: string;
unit: string;
}
// a summary record; the VC is found the fullClaim field
export interface OfferSummaryRecord {
amount: number;
amountGiven: number;
amountGivenConfirmed: number;
fullClaim: OfferVerifiableCredential;
fulfillsPlanHandleId: string;
handleId: string;
issuerDid: string;
jwtId: string;
nonAmountGivenConfirmed: number;
objectDescription: string;
offeredByDid: string;
recipientDid: string;
requirementsMet: boolean;
unit: string;
validThrough: string;
}
export interface OfferToPlanSummaryRecord extends OfferSummaryRecord {
planName: string;
}
// a summary record; the VC is not currently part of this record
export interface PlanSummaryRecord {
agentDid?: string;
description: string;
endTime?: string;
fulfillsPlanHandleId: string;
handleId: string;
image?: string;
issuerDid: string;
locLat?: number;
locLon?: number;
name?: string;
startTime?: string;
url?: string;
}
/**
* Represents data about a project
*
* @deprecated
* (Maybe we should use PlanSummaryRecord instead, either by adding rowId or by iterating with jwtId.)
**/
export interface PlanData {
/**
* Description of the project
**/
description: string;
/**
* URL referencing information about the project
**/
handleId: string;
image?: string;
/**
* The DID of the issuer
*/
issuerDid: string;
/**
* Name of the project
**/
name: string;
/**
* The identifier of the project record -- different from jwtId
* (Maybe we should use the jwtId to iterate through the records instead.)
**/
rowId?: string;
}

8
src/interfaces/user.ts

@ -0,0 +1,8 @@
export interface UserInfo {
did: string;
name: string;
publicEncKey: string;
registered: boolean;
profileImageUrl?: string;
nextPublicEncKeyHash?: string;
}

278
src/libs/endorserServer.ts

@ -1,4 +1,4 @@
import { Axios, AxiosRequestConfig, AxiosResponse } from "axios"; import { Axios, AxiosRequestConfig } from "axios";
import { Buffer } from "buffer"; import { Buffer } from "buffer";
import { sha256 } from "ethereum-cryptography/sha256"; import { sha256 } from "ethereum-cryptography/sha256";
import { LRUCache } from "lru-cache"; import { LRUCache } from "lru-cache";
@ -17,10 +17,20 @@ import {
retrieveAccountMetadata, retrieveAccountMetadata,
retrieveFullyDecryptedAccount, retrieveFullyDecryptedAccount,
getPasskeyExpirationSeconds, getPasskeyExpirationSeconds,
GiverReceiverInputInfo,
} from "../libs/util"; } from "../libs/util";
import { createEndorserJwtForKey, KeyMeta } from "../libs/crypto/vc"; import { createEndorserJwtForKey, KeyMeta } from "../libs/crypto/vc";
import {
GiveVerifiableCredential,
OfferVerifiableCredential,
RegisterVerifiableCredential,
GenericVerifiableCredential,
GenericCredWrapper,
PlanSummaryRecord,
UserInfo,
CreateAndSubmitClaimResult,
} from "../interfaces";
export const SCHEMA_ORG_CONTEXT = "https://schema.org"; export const SCHEMA_ORG_CONTEXT = "https://schema.org";
// the object in RegisterAction claims // the object in RegisterAction claims
export const SERVICE_ID = "endorser.ch"; export const SERVICE_ID = "endorser.ch";
@ -36,44 +46,6 @@ export const CONTACT_URL_PATH_ENDORSER_CH_OLD = "/contact?jwt=";
//export const CONTACT_URL_PREFIX_ENDORSER_CH_OLD = "https://endorser.ch"; //export const CONTACT_URL_PREFIX_ENDORSER_CH_OLD = "https://endorser.ch";
// the prefix for handle IDs, the permanent ID for claims on Endorser // the prefix for handle IDs, the permanent ID for claims on Endorser
export const ENDORSER_CH_HANDLE_PREFIX = "https://endorser.ch/entity/"; export const ENDORSER_CH_HANDLE_PREFIX = "https://endorser.ch/entity/";
export interface AgreeVerifiableCredential {
"@context": string;
"@type": string;
// "any" because arbitrary objects can be subject of agreement
// eslint-disable-next-line @typescript-eslint/no-explicit-any
object: Record<string, any>;
}
export interface GiverOutputInfo {
action: string;
giver?: GiverReceiverInputInfo;
description?: string;
amount?: number;
unitCode?: string;
}
export interface ClaimResult {
success: { claimId: string; handleId: string };
error: { code: string; message: string };
}
// similar to VerifiableCredentialSubject... maybe rename this
export interface GenericVerifiableCredential {
"@context"?: string; // optional when embedded, eg. in an Agree
"@type": string;
[key: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any
}
export interface GenericCredWrapper<T extends GenericVerifiableCredential> {
claim: T;
claimType?: string;
handleId: string;
id: string;
issuedAt: string;
issuer: string;
publicUrls?: Record<string, string>; // only for IDs that want to be public
}
export const BLANK_GENERIC_SERVER_RECORD: GenericCredWrapper<GenericVerifiableCredential> = export const BLANK_GENERIC_SERVER_RECORD: GenericCredWrapper<GenericVerifiableCredential> =
{ {
claim: { "@type": "" }, claim: { "@type": "" },
@ -82,232 +54,6 @@ export const BLANK_GENERIC_SERVER_RECORD: GenericCredWrapper<GenericVerifiableCr
issuedAt: "", issuedAt: "",
issuer: "", issuer: "",
}; };
// a summary record; the VC is found the fullClaim field
export interface GiveSummaryRecord {
agentDid: string;
amount: number;
amountConfirmed: number;
description: string;
fullClaim: GiveVerifiableCredential;
fulfillsHandleId: string;
fulfillsPlanHandleId?: string;
fulfillsType?: string;
handleId: string;
issuedAt: string;
issuerDid: string;
jwtId: string;
providerPlanHandleId?: string;
recipientDid: string;
unit: string;
}
// a summary record; the VC is found the fullClaim field
export interface OfferSummaryRecord {
amount: number;
amountGiven: number;
amountGivenConfirmed: number;
fullClaim: OfferVerifiableCredential;
fulfillsPlanHandleId: string;
handleId: string;
issuerDid: string;
jwtId: string;
nonAmountGivenConfirmed: number;
objectDescription: string;
offeredByDid: string;
recipientDid: string;
requirementsMet: boolean;
unit: string;
validThrough: string;
}
export interface OfferToPlanSummaryRecord extends OfferSummaryRecord {
planName: string;
}
// a summary record; the VC is not currently part of this record
export interface PlanSummaryRecord {
agentDid?: string; // optional, if the issuer wants someone else to manage as well
description: string;
endTime?: string;
fulfillsPlanHandleId: string;
handleId: string;
image?: string;
issuerDid: string;
locLat?: number;
locLon?: number;
name?: string;
startTime?: string;
url?: string;
}
// Note that previous VCs may have additional fields.
// https://endorser.ch/doc/html/transactions.html#id4
export interface GiveVerifiableCredential extends GenericVerifiableCredential {
"@context"?: string; // optional when embedded, eg. in an Agree
"@type": "GiveAction";
agent?: { identifier: string };
description?: string;
fulfills?: { "@type": string; identifier?: string; lastClaimId?: string }[];
identifier?: string;
image?: string;
object?: { amountOfThisGood: number; unitCode: string };
provider?: GenericVerifiableCredential; // typically @type & identifier
recipient?: { identifier: string };
}
// Note that previous VCs may have additional fields.
// https://endorser.ch/doc/html/transactions.html#id8
export interface OfferVerifiableCredential extends GenericVerifiableCredential {
"@context"?: string; // optional when embedded... though it doesn't make sense to agree to an offer
"@type": "Offer";
description?: string; // conditions for the offer
includesObject?: { amountOfThisGood: number; unitCode: string };
itemOffered?: {
description?: string; // description of the item
isPartOf?: { identifier?: string; lastClaimId?: string; "@type"?: string };
};
offeredBy?: { identifier: string };
recipient?: { identifier: string };
validThrough?: string;
}
// Note that previous VCs may have additional fields.
// https://endorser.ch/doc/html/transactions.html#id7
export interface PlanVerifiableCredential extends GenericVerifiableCredential {
"@context": "https://schema.org";
"@type": "PlanAction";
name: string;
agent?: { identifier: string };
description?: string;
identifier?: string;
lastClaimId?: string;
location?: {
geo: { "@type": "GeoCoordinates"; latitude: number; longitude: number };
};
}
/**
* Represents data about a project
*
* @deprecated
* (Maybe we should use PlanSummaryRecord instead, either by adding rowId or by iterating with jwtId.)
**/
export interface PlanData {
/**
* Description of the project
**/
description: string;
/**
* URL referencing information about the project
**/
handleId: string;
image?: string;
/**
* The DID of the issuer
*/
issuerDid: string;
/**
* Name of the project
**/
name: string;
/**
* The identifier of the project record -- different from jwtId
* (Maybe we should use the jwtId to iterate through the records instead.)
**/
rowId?: string;
}
export interface EndorserRateLimits {
doneClaimsThisWeek: string;
doneRegistrationsThisMonth: string;
maxClaimsPerWeek: string;
maxRegistrationsPerMonth: string;
nextMonthBeginDateTime: string;
nextWeekBeginDateTime: string;
}
export interface ImageRateLimits {
doneImagesThisWeek: string;
maxImagesPerWeek: string;
nextWeekBeginDateTime: string;
}
export interface VerifiableCredential {
exp?: number;
iat: number;
iss: string;
vc: {
"@context": string[];
type: string[];
credentialSubject: VerifiableCredentialSubject;
};
}
// similar to GenericVerifiableCredential... maybe replace that one
export interface VerifiableCredentialSubject {
"@context": string;
"@type": string;
[key: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any
}
export interface WorldProperties {
startTime?: string;
endTime?: string;
}
// AKA Registration & RegisterAction
export interface RegisterVerifiableCredential {
"@context": typeof SCHEMA_ORG_CONTEXT;
"@type": "RegisterAction";
agent: { identifier: string };
identifier?: string; // used for invites (when participant ID isn't known)
object: string;
participant?: { identifier: string }; // used when person is known (not an invite)
}
// now for some of the error & other wrapper types
export interface ResultWithType {
type: string;
}
export interface SuccessResult extends ResultWithType {
type: "success";
response: AxiosResponse<ClaimResult>;
}
export interface ErrorResponse {
error?: {
message?: string;
};
}
export interface InternalError {
error: string; // for system logging
userMessage?: string; // for user display
}
export interface ErrorResult extends ResultWithType {
type: "error";
error: InternalError;
}
export type CreateAndSubmitClaimResult = SuccessResult | ErrorResult;
/**
* This is similar to Contact but it grew up in different logic paths.
* We may want to change this to be a Contact.
*/
export interface UserInfo {
did: string;
name: string;
publicEncKey: string;
registered: boolean;
profileImageUrl?: string;
nextPublicEncKeyHash?: string;
}
// This is used to check for hidden info. // This is used to check for hidden info.
// See https://github.com/trentlarson/endorser-ch/blob/0cb626f803028e7d9c67f095858a9fc8542e3dbd/server/api/services/util.js#L6 // See https://github.com/trentlarson/endorser-ch/blob/0cb626f803028e7d9c67f095858a9fc8542e3dbd/server/api/services/util.js#L6
const HIDDEN_DID = "did:none:HIDDEN"; const HIDDEN_DID = "did:none:HIDDEN";

22
src/main.capacitor.ts

@ -95,17 +95,17 @@ const handleDeepLink = async (data: { url: string }) => {
// Define supported parameterized routes and their regex patterns // Define supported parameterized routes and their regex patterns
const paramRoutes = { const paramRoutes = {
'claim-add-raw': /^claim-add-raw\/(.+)$/, "claim-add-raw": /^claim-add-raw\/(.+)$/,
'claim-cert': /^claim-cert\/(.+)$/, "claim-cert": /^claim-cert\/(.+)$/,
'claim': /^claim\/(.+)$/, claim: /^claim\/(.+)$/,
'confirm-gift': /^confirm-gift\/(.+)$/, "confirm-gift": /^confirm-gift\/(.+)$/,
'contact-edit': /^contact-edit\/(.+)$/, "contact-edit": /^contact-edit\/(.+)$/,
'contact-import': /^contact-import\/(.+)$/, "contact-import": /^contact-import\/(.+)$/,
'did': /^did\/(.+)$/, did: /^did\/(.+)$/,
'invite-one-accept': /^invite-one-accept\/(.+)$/, "invite-one-accept": /^invite-one-accept\/(.+)$/,
'offer-details': /^offer-details\/(.+)$/, "offer-details": /^offer-details\/(.+)$/,
'project': /^project\/(.+)$/, project: /^project\/(.+)$/,
'userProfile': /^userProfile\/(.+)$/ userProfile: /^userProfile\/(.+)$/,
}; };
// Match route pattern and extract parameter // Match route pattern and extract parameter

36
src/views/AccountViewView.vue

@ -39,12 +39,12 @@
:to="{ name: 'contact-qr' }" :to="{ name: 'contact-qr' }"
class="bg-slate-500 text-white px-1.5 py-1 rounded-md" class="bg-slate-500 text-white px-1.5 py-1 rounded-md"
> >
<fa icon="qrcode" class="fa-fw text-xl"></fa> <font-awesome icon="qrcode" class="fa-fw text-xl"></font-awesome>
</router-link> </router-link>
</span> </span>
{{ givenName }} {{ givenName }}
<router-link :to="{ name: 'new-edit-account' }"> <router-link :to="{ name: 'new-edit-account' }">
<fa icon="pen" class="text-xs text-blue-500 ml-2 mb-1"></fa> <font-awesome icon="pen" class="text-xs text-blue-500 ml-2 mb-1"></font-awesome>
</router-link> </router-link>
</h2> </h2>
</div> </div>
@ -73,7 +73,7 @@
class="inline-block align-text-bottom border border-slate-300 rounded" class="inline-block align-text-bottom border border-slate-300 rounded"
@click="showLargeIdenticonUrl = profileImageUrl" @click="showLargeIdenticonUrl = profileImageUrl"
/> />
<fa <font-awesome
icon="trash-can" icon="trash-can"
@click="confirmDeleteImage" @click="confirmDeleteImage"
class="text-red-500 fa-fw ml-8 mt-8 w-12 h-12" class="text-red-500 fa-fw ml-8 mt-8 w-12 h-12"
@ -81,11 +81,11 @@
</span> </span>
<div v-else class="text-center"> <div v-else class="text-center">
<div class @click="openImageDialog()"> <div class @click="openImageDialog()">
<fa <font-awesome
icon="image-portrait" icon="image-portrait"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-l" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-l"
/> />
<fa <font-awesome
icon="camera" icon="camera"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-r" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-r"
/> />
@ -140,7 +140,7 @@
" "
class="ml-2" class="ml-2"
> >
<fa icon="copy" class="text-slate-400 fa-fw"></fa> <font-awesome icon="copy" class="text-slate-400 fa-fw"></font-awesome>
</button> </button>
<span v-show="showDidCopy">Copied</span> <span v-show="showDidCopy">Copied</span>
</div> </div>
@ -185,7 +185,7 @@
<!-- label --> <!-- label -->
<div> <div>
Reminder Notification Reminder Notification
<fa <font-awesome
icon="question-circle" icon="question-circle"
class="text-slate-400 fa-fw ml-2 cursor-pointer" class="text-slate-400 fa-fw ml-2 cursor-pointer"
@click.stop="showReminderNotificationInfo" @click.stop="showReminderNotificationInfo"
@ -214,7 +214,7 @@
<!-- label --> <!-- label -->
<div> <div>
New Activity Notification New Activity Notification
<fa <font-awesome
icon="question-circle" icon="question-circle"
class="text-slate-400 fa-fw ml-2 cursor-pointer" class="text-slate-400 fa-fw ml-2 cursor-pointer"
@click.stop="showNewActivityNotificationInfo" @click.stop="showNewActivityNotificationInfo"
@ -268,12 +268,12 @@
class="bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8" class="bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8"
> >
<div v-if="loadingProfile" class="text-center mb-2"> <div v-if="loadingProfile" class="text-center mb-2">
<fa icon="spinner" class="fa-spin text-slate-400"></fa> Loading <font-awesome icon="spinner" class="fa-spin text-slate-400"></font-awesome> Loading
profile... profile...
</div> </div>
<div v-else class="flex items-center mb-2"> <div v-else class="flex items-center mb-2">
<span class="font-bold">Public Profile</span> <span class="font-bold">Public Profile</span>
<fa <font-awesome
icon="circle-info" icon="circle-info"
class="text-slate-400 fa-fw ml-2 cursor-pointer" class="text-slate-400 fa-fw ml-2 cursor-pointer"
@click="showProfileInfo" @click="showProfileInfo"
@ -363,7 +363,7 @@
<div class="mb-2 font-bold">Usage Limits</div> <div class="mb-2 font-bold">Usage Limits</div>
<!-- show spinner if loading limits --> <!-- show spinner if loading limits -->
<div v-if="loadingLimits" class="text-center"> <div v-if="loadingLimits" class="text-center">
Checking&hellip; <fa icon="spinner" class="fa-spin"></fa> Checking&hellip; <font-awesome icon="spinner" class="fa-spin"></font-awesome>
</div> </div>
<div class="mb-4 text-center"> <div class="mb-4 text-center">
{{ limitsMessage }} {{ limitsMessage }}
@ -454,7 +454,7 @@
</li> </li>
<li class="list-disc list-outside ml-4"> <li class="list-disc list-outside ml-4">
On Android: Choose "Open" and then share On Android: Choose "Open" and then share
<fa icon="share-nodes" class="fa-fw" /> <font-awesome icon="share-nodes" class="fa-fw" />
to your prefered place. to your prefered place.
</li> </li>
</ul> </ul>
@ -494,7 +494,7 @@
" "
class="ml-2" class="ml-2"
> >
<fa icon="copy" class="text-slate-400 fa-fw"></fa> <font-awesome icon="copy" class="text-slate-400 fa-fw"></font-awesome>
</button> </button>
<span v-show="showB64Copy">Copied</span> <span v-show="showB64Copy">Copied</span>
</div> </div>
@ -510,7 +510,7 @@
" "
class="ml-2" class="ml-2"
> >
<fa icon="copy" class="text-slate-400 fa-fw"></fa> <font-awesome icon="copy" class="text-slate-400 fa-fw"></font-awesome>
</button> </button>
<span v-show="showPubCopy">Copied</span> <span v-show="showPubCopy">Copied</span>
</div> </div>
@ -530,7 +530,7 @@
" "
class="ml-2" class="ml-2"
> >
<fa icon="copy" class="text-slate-400 fa-fw"></fa> <font-awesome icon="copy" class="text-slate-400 fa-fw"></font-awesome>
</button> </button>
<span v-show="showDerCopy">Copied</span> <span v-show="showDerCopy">Copied</span>
</div> </div>
@ -631,7 +631,7 @@
class="w-full px-4 rounded bg-yellow-500 border border-slate-400" class="w-full px-4 rounded bg-yellow-500 border border-slate-400"
@click="onClickSaveApiServer()" @click="onClickSaveApiServer()"
> >
<fa icon="floppy-disk" class="fa-fw" color="white"></fa> <font-awesome icon="floppy-disk" class="fa-fw" color="white"></font-awesome>
</button> </button>
<button <button
class="px-3 rounded bg-slate-200 border border-slate-400" class="px-3 rounded bg-slate-200 border border-slate-400"
@ -708,7 +708,7 @@
class="w-full px-4 rounded bg-yellow-500 border border-slate-400" class="w-full px-4 rounded bg-yellow-500 border border-slate-400"
@click="onClickSavePushServer()" @click="onClickSavePushServer()"
> >
<fa icon="floppy-disk" class="fa-fw" color="white"></fa> <font-awesome icon="floppy-disk" class="fa-fw" color="white"></font-awesome>
</button> </button>
<button <button
class="px-3 rounded bg-slate-200 border border-slate-400" class="px-3 rounded bg-slate-200 border border-slate-400"
@ -747,7 +747,7 @@
class="w-full px-4 rounded bg-yellow-500 border border-slate-400" class="w-full px-4 rounded bg-yellow-500 border border-slate-400"
@click="onClickSavePartnerServer()" @click="onClickSavePartnerServer()"
> >
<fa icon="floppy-disk" class="fa-fw" color="white"></fa> <font-awesome icon="floppy-disk" class="fa-fw" color="white"></font-awesome>
</button> </button>
<button <button
class="px-3 rounded bg-slate-200 border border-slate-400" class="px-3 rounded bg-slate-200 border border-slate-400"

2
src/views/ClaimAddRawView.vue

@ -10,7 +10,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</button> </button>
Raw Claim Raw Claim
</h1> </h1>

42
src/views/ClaimView.vue

@ -10,7 +10,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</button> </button>
Verifiable Claim Details Verifiable Claim Details
</h1> </h1>
@ -36,7 +36,7 @@
title="Edit" title="Edit"
data-testId="editClaimButton" data-testId="editClaimButton"
> >
<fa icon="pen" class="text-sm text-blue-500 ml-2 mb-1" /> <font-awesome icon="pen" class="text-sm text-blue-500 ml-2 mb-1" />
</button> </button>
</h2> </h2>
<div class="flex justify-center w-full"> <div class="flex justify-center w-full">
@ -45,7 +45,7 @@
class="text-blue-500 mt-2" class="text-blue-500 mt-2"
title="Printable Certificate" title="Printable Certificate"
> >
<fa icon="square" class="text-white bg-yellow-500 p-1" /> <font-awesome icon="square" class="text-white bg-yellow-500 p-1" />
</router-link> </router-link>
</div> </div>
<!-- show link icon to copy this URL to the clipboard --> <!-- show link icon to copy this URL to the clipboard -->
@ -56,24 +56,24 @@
copyToClipboard('A link to this page', window.location.href) copyToClipboard('A link to this page', window.location.href)
" "
> >
<fa icon="link" class="text-slate-500" /> <font-awesome icon="link" class="text-slate-500" />
</button> </button>
</div> </div>
</div> </div>
<div class="text-sm"> <div class="text-sm">
<div data-testId="description"> <div data-testId="description">
<fa icon="message" class="fa-fw text-slate-400" /> <font-awesome icon="message" class="fa-fw text-slate-400" />
{{ {{
veriClaim.claim?.itemOffered?.description || veriClaim.claim?.itemOffered?.description ||
veriClaim.claim?.description veriClaim.claim?.description
}} }}
</div> </div>
<div> <div>
<fa icon="user" class="fa-fw text-slate-400" /> <font-awesome icon="user" class="fa-fw text-slate-400" />
{{ didInfo(veriClaim.issuer) }} {{ didInfo(veriClaim.issuer) }}
</div> </div>
<div> <div>
<fa icon="calendar" class="fa-fw text-slate-400" /> <font-awesome icon="calendar" class="fa-fw text-slate-400" />
Recorded Recorded
{{ veriClaim.issuedAt?.replace(/T/, " ").replace(/Z/, " UTC") }} {{ veriClaim.issuedAt?.replace(/T/, " ").replace(/Z/, " UTC") }}
</div> </div>
@ -177,13 +177,13 @@
</div> </div>
</div> </div>
<div class="mt-2"> <div class="mt-2">
<fa icon="comment" class="text-slate-400" /> <font-awesome icon="comment" class="text-slate-400" />
{{ issuerName }} posted that. {{ issuerName }} posted that.
</div> </div>
<!-- <!--
<div> <div>
<router-link :to="'/claim-cert/' + encodeURIComponent(veriClaim.id)"> <router-link :to="'/claim-cert/' + encodeURIComponent(veriClaim.id)">
<fa icon="file-contract" class="text-slate-400" /> <font-awesome icon="file-contract" class="text-slate-400" />
<span class="ml-2 text-blue-500">Printable Certificate</span> <span class="ml-2 text-blue-500">Printable Certificate</span>
</router-link> </router-link>
</div> </div>
@ -196,7 +196,7 @@
class="col-span-1 block w-fit text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md" class="col-span-1 block w-fit text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"
> >
Affirm Delivery Affirm Delivery
<fa icon="hand-holding-heart" class="ml-2 text-white cursor-pointer" /> <font-awesome icon="hand-holding-heart" class="ml-2 text-white cursor-pointer" />
</button> </button>
</div> </div>
<GiftedDialog ref="customGiveDialog" /> <GiftedDialog ref="customGiveDialog" />
@ -216,7 +216,7 @@
@click="confirmConfirmClaim()" @click="confirmConfirmClaim()"
> >
Confirm Confirm
<fa icon="circle-check" class="ml-2 text-white cursor-pointer" /> <font-awesome icon="circle-check" class="ml-2 text-white cursor-pointer" />
</button> </button>
<h2 v-else class="font-bold uppercase text-xl mt-2">Confirmations</h2> <h2 v-else class="font-bold uppercase text-xl mt-2">Confirmations</h2>
@ -276,7 +276,7 @@
target="_blank" target="_blank"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</span> </span>
</div> </div>
@ -314,7 +314,7 @@
target="_blank" target="_blank"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</span> </span>
</div> </div>
@ -345,8 +345,8 @@
@click="showVeriClaimDump = !showVeriClaimDump" @click="showVeriClaimDump = !showVeriClaimDump"
> >
Details Details
<fa v-if="showVeriClaimDump" icon="chevron-up" /> <font-awesome v-if="showVeriClaimDump" icon="chevron-up" />
<fa v-else icon="chevron-right" /> <font-awesome v-else icon="chevron-right" />
</h2> </h2>
<div v-if="showVeriClaimDump"> <div v-if="showVeriClaimDump">
<div <div
@ -408,7 +408,7 @@
class="list-disc p-4" class="list-disc p-4"
> >
<div class="text-sm"> <div class="text-sm">
<fa icon="minus" class="fa-fw" /> <font-awesome icon="minus" class="fa-fw" />
The {{ visibleDidPath }} is visible to: The {{ visibleDidPath }} is visible to:
</div> </div>
<div class="ml-12 p-1"> <div class="ml-12 p-1">
@ -427,7 +427,7 @@
target="_blank" target="_blank"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</span> </span>
<span v-if="veriClaim.publicUrls?.[visDid]" <span v-if="veriClaim.publicUrls?.[visDid]"
@ -436,7 +436,7 @@
target="_blank" target="_blank"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="globe" class="fa-fw" /> <font-awesome icon="globe" class="fa-fw" />
{{ {{
veriClaim.publicUrls[visDid].substring( veriClaim.publicUrls[visDid].substring(
veriClaim.publicUrls[visDid].indexOf("//") + 2, veriClaim.publicUrls[visDid].indexOf("//") + 2,
@ -476,7 +476,7 @@
class="text-blue-500 cursor-pointer" class="text-blue-500 cursor-pointer"
@click="showFullClaim(veriClaim.id as string)" @click="showFullClaim(veriClaim.id as string)"
> >
<fa icon="file-lines" class="fa-fw" /> <font-awesome icon="file-lines" class="fa-fw" />
Load Full Claim Details Load Full Claim Details
</button> </button>
</div> </div>
@ -492,8 +492,8 @@
target="_blank" target="_blank"
class="text-blue-500 cursor-pointer" class="text-blue-500 cursor-pointer"
> >
<fa icon="file-lines" class="fa-fw" /> <font-awesome icon="file-lines" class="fa-fw" />
<fa icon="arrow-up-right-from-square" class="ml-1 fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="ml-1 fa-fw" />
View on the Public Server View on the Public Server
</a> </a>
</div> </div>

2
src/views/ConfirmContactView.vue

@ -8,7 +8,7 @@
<router-link <router-link
:to="{ name: 'account' }" :to="{ name: 'account' }"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
><fa icon="chevron-left" class="fa-fw"></fa ><font-awesome icon="chevron-left" class="fa-fw"></fa
></router-link> ></router-link>
Confirm Contact Confirm Contact

42
src/views/ConfirmGiftView.vue

@ -11,7 +11,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</button> </button>
<span <span
v-if=" v-if="
@ -44,7 +44,7 @@
@click="confirmConfirmClaim()" @click="confirmConfirmClaim()"
> >
Confirm Confirm
<fa icon="circle-check" class="ml-2 text-white cursor-pointer" /> <font-awesome icon="circle-check" class="ml-2 text-white cursor-pointer" />
</button> </button>
<button <button
v-else v-else
@ -52,7 +52,7 @@
class="col-span-1 bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md" class="col-span-1 bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
> >
Confirm Confirm
<fa icon="circle-check" class="ml-2 text-white cursor-pointer" /> <font-awesome icon="circle-check" class="ml-2 text-white cursor-pointer" />
</button> </button>
</div> </div>
@ -62,26 +62,26 @@
<div class="overflow-hidden"> <div class="overflow-hidden">
<div class="text-sm"> <div class="text-sm">
<div> <div>
<fa icon="arrow-left" class="fa-fw text-slate-400" /> <font-awesome icon="arrow-left" class="fa-fw text-slate-400" />
{{ giverName }} {{ giverName }}
</div> </div>
<div class="ml-6">gave</div> <div class="ml-6">gave</div>
<div v-if="giveDetails.amount"> <div v-if="giveDetails.amount">
<fa icon="hand-holding-dollar" class="fa-fw text-slate-400" /> <font-awesome icon="hand-holding-dollar" class="fa-fw text-slate-400" />
{{ displayAmount(giveDetails.unit, giveDetails.amount) }} {{ displayAmount(giveDetails.unit, giveDetails.amount) }}
</div> </div>
<div v-if="giveDetails.description"> <div v-if="giveDetails.description">
<fa icon="message" class="fa-fw text-slate-400" /> <font-awesome icon="message" class="fa-fw text-slate-400" />
{{ giveDetails.amount ? "and:" : "" }} {{ giveDetails.amount ? "and:" : "" }}
{{ giveDetails.description }} {{ giveDetails.description }}
</div> </div>
<div class="ml-6">to</div> <div class="ml-6">to</div>
<div> <div>
<fa icon="arrow-right" class="fa-fw text-slate-400" /> <font-awesome icon="arrow-right" class="fa-fw text-slate-400" />
{{ recipientName }} {{ recipientName }}
</div> </div>
<div> <div>
<fa icon="calendar" class="fa-fw text-slate-400" /> <font-awesome icon="calendar" class="fa-fw text-slate-400" />
on on
{{ giveDetails.issuedAt.substring(0, 10) }} {{ giveDetails.issuedAt.substring(0, 10) }}
</div> </div>
@ -99,7 +99,7 @@
target="_blank" target="_blank"
> >
This fulfills a bigger plan This fulfills a bigger plan
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</router-link> </router-link>
</div> </div>
<!-- if there's another, it's probably fulfilling an offer, too --> <!-- if there's another, it's probably fulfilling an offer, too -->
@ -125,7 +125,7 @@
giveDetails?.fulfillsType || "", giveDetails?.fulfillsType || "",
) )
}} }}
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</router-link> </router-link>
</div> </div>
</div> </div>
@ -133,7 +133,7 @@
</div> </div>
</div> </div>
<div class="mt-2"> <div class="mt-2">
<fa icon="comment" class="text-slate-400" /> <font-awesome icon="comment" class="text-slate-400" />
{{ issuerName }} posted that. {{ issuerName }} posted that.
</div> </div>
@ -185,7 +185,7 @@
) )
" "
> >
<fa icon="copy" class="text-slate-400 fa-fw" /> <font-awesome icon="copy" class="text-slate-400 fa-fw" />
</button> </button>
</span> </span>
</div> </div>
@ -228,7 +228,7 @@
) )
" "
> >
<fa icon="copy" class="text-slate-400 fa-fw" /> <font-awesome icon="copy" class="text-slate-400 fa-fw" />
</button> </button>
</span> </span>
</div> </div>
@ -260,8 +260,8 @@
@click="showVeriClaimDump = !showVeriClaimDump" @click="showVeriClaimDump = !showVeriClaimDump"
> >
Details Details
<fa v-if="showVeriClaimDump" icon="chevron-up" /> <font-awesome v-if="showVeriClaimDump" icon="chevron-up" />
<fa v-else icon="chevron-right" /> <font-awesome v-else icon="chevron-right" />
</h2> </h2>
<div v-if="showVeriClaimDump"> <div v-if="showVeriClaimDump">
<div <div
@ -323,7 +323,7 @@
class="list-disc p-4" class="list-disc p-4"
> >
<div class="text-sm"> <div class="text-sm">
<fa icon="minus" class="fa-fw" /> <font-awesome icon="minus" class="fa-fw" />
The {{ visibleDidPath }} is visible to: The {{ visibleDidPath }} is visible to:
</div> </div>
<div class="ml-12 p-1"> <div class="ml-12 p-1">
@ -342,12 +342,12 @@
copyToClipboard('The DID of ' + visDid, visDid) copyToClipboard('The DID of ' + visDid, visDid)
" "
> >
<fa icon="copy" class="text-slate-400 fa-fw" /> <font-awesome icon="copy" class="text-slate-400 fa-fw" />
</button> </button>
</span> </span>
<span v-if="veriClaim.publicUrls?.[visDid]" <span v-if="veriClaim.publicUrls?.[visDid]"
>, found at >, found at
<fa icon="globe" class="fa-fw text-slate-400" /> <font-awesome icon="globe" class="fa-fw text-slate-400" />
<a <a
:href="veriClaim.publicUrls?.[visDid]" :href="veriClaim.publicUrls?.[visDid]"
class="text-blue-500" class="text-blue-500"
@ -375,7 +375,7 @@
@click="showClaimPage(veriClaim.id)" @click="showClaimPage(veriClaim.id)"
class="text-blue-500 cursor-pointer" class="text-blue-500 cursor-pointer"
> >
<fa icon="file-lines" /> <font-awesome icon="file-lines" />
See All Generic Info See All Generic Info
</a> </a>
</div> </div>
@ -385,7 +385,7 @@
class="text-blue-500 cursor-pointer" class="text-blue-500 cursor-pointer"
:href="urlForNewGive" :href="urlForNewGive"
> >
<fa icon="file-lines" /> <font-awesome icon="file-lines" />
Record a Give Similar to the Original Record a Give Similar to the Original
</a> </a>
</div> </div>
@ -397,7 +397,7 @@
class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full"
v-if="isLoading" v-if="isLoading"
> >
<fa icon="spinner" class="fa-spin-pulse"></fa> <font-awesome icon="spinner" class="fa-spin-pulse"></font-awesome>
</div> </div>
</section> </section>
</template> </template>

14
src/views/ContactAmountsView.vue

@ -11,7 +11,7 @@
<router-link <router-link
:to="{ name: 'contacts' }" :to="{ name: 'contacts' }"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
><fa icon="chevron-left" class="fa-fw"></fa ><font-awesome icon="chevron-left" class="fa-fw"></fa
></router-link> ></router-link>
</h1> </h1>
@ -59,10 +59,10 @@
<div class="font-bold"> <div class="font-bold">
{{ displayAmount(record.unit, record.amount) }} {{ displayAmount(record.unit, record.amount) }}
<span v-if="record.amountConfirmed" title="Confirmed"> <span v-if="record.amountConfirmed" title="Confirmed">
<fa icon="circle-check" class="text-green-600 fa-fw" /> <font-awesome icon="circle-check" class="text-green-600 fa-fw" />
</span> </span>
<button v-else @click="confirm(record)" title="Unconfirmed"> <button v-else @click="confirm(record)" title="Unconfirmed">
<fa icon="circle" class="text-blue-600 fa-fw" /> <font-awesome icon="circle" class="text-blue-600 fa-fw" />
</button> </button>
</div> </div>
<div class="italic text-xs sm:text-sm text-slate-500"> <div class="italic text-xs sm:text-sm text-slate-500">
@ -72,10 +72,10 @@
</td> </td>
<td class="p-1"> <td class="p-1">
<span v-if="record.agentDid == contact?.did"> <span v-if="record.agentDid == contact?.did">
<fa icon="arrow-left" class="text-slate-400 fa-fw" /> <font-awesome icon="arrow-left" class="text-slate-400 fa-fw" />
</span> </span>
<span v-else> <span v-else>
<fa icon="arrow-right" class="text-slate-400 fa-fw" /> <font-awesome icon="arrow-right" class="text-slate-400 fa-fw" />
</span> </span>
</td> </td>
<td class="p-1"> <td class="p-1">
@ -83,14 +83,14 @@
<div class="font-bold"> <div class="font-bold">
{{ displayAmount(record.unit, record.amount) }} {{ displayAmount(record.unit, record.amount) }}
<span v-if="record.amountConfirmed" title="Confirmed"> <span v-if="record.amountConfirmed" title="Confirmed">
<fa icon="circle-check" class="text-green-600 fa-fw" /> <font-awesome icon="circle-check" class="text-green-600 fa-fw" />
</span> </span>
<button <button
v-else v-else
@click="cannotConfirmMessage()" @click="cannotConfirmMessage()"
title="Unconfirmed" title="Unconfirmed"
> >
<fa icon="circle" class="text-slate-600 fa-fw" /> <font-awesome icon="circle" class="text-slate-600 fa-fw" />
</button> </button>
</div> </div>
<div class="italic text-xs sm:text-sm text-slate-500"> <div class="italic text-xs sm:text-sm text-slate-500">

8
src/views/ContactEditView.vue

@ -10,7 +10,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</button> </button>
{{ contact.name || AppString.NO_CONTACT_NAME }} {{ contact.name || AppString.NO_CONTACT_NAME }}
</h1> </h1>
@ -69,7 +69,7 @@
@click="toggleDropdown(index)" @click="toggleDropdown(index)"
class="px-2 py-1 bg-gray-200 rounded-md" class="px-2 py-1 bg-gray-200 rounded-md"
> >
<fa icon="caret-down" class="fa-fw" /> <font-awesome icon="caret-down" class="fa-fw" />
</button> </button>
<div <div
v-if="dropdownIndex === index" v-if="dropdownIndex === index"
@ -102,11 +102,11 @@
placeholder="Number, email, etc." placeholder="Number, email, etc."
/> />
<button @click="removeContactMethod(index)" class="ml-2 text-red-500"> <button @click="removeContactMethod(index)" class="ml-2 text-red-500">
<fa icon="trash-can" class="fa-fw" /> <font-awesome icon="trash-can" class="fa-fw" />
</button> </button>
</div> </div>
<button @click="addContactMethod" class="mt-2"> <button @click="addContactMethod" class="mt-2">
<fa <font-awesome
icon="plus" icon="plus"
class="fa-fw px-2 py-2.5 bg-green-500 text-green-100 rounded-full" class="fa-fw px-2 py-2.5 bg-green-500 text-green-100 rounded-full"
/> />

6
src/views/ContactGiftingView.vue

@ -9,7 +9,7 @@
<router-link <router-link
:to="{ name: 'home' }" :to="{ name: 'home' }"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
><fa icon="chevron-left" class="fa-fw"></fa ><font-awesome icon="chevron-left" class="fa-fw"></fa
></router-link> ></router-link>
Given by... Given by...
</h1> </h1>
@ -33,7 +33,7 @@
@click="openDialog()" @click="openDialog()"
class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md" class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md"
> >
<fa icon="gift" class="fa-fw"></fa> <font-awesome icon="gift" class="fa-fw"></font-awesome>
</button> </button>
</span> </span>
</h2> </h2>
@ -58,7 +58,7 @@
@click="openDialog(contact)" @click="openDialog(contact)"
class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md" class="block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md"
> >
<fa icon="gift" class="fa-fw"></fa> <font-awesome icon="gift" class="fa-fw"></font-awesome>
</button> </button>
</span> </span>
</h2> </h2>

4
src/views/ContactImportView.vue

@ -7,7 +7,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -17,7 +17,7 @@
</h1> </h1>
<div v-if="checkingImports" class="text-center"> <div v-if="checkingImports" class="text-center">
<fa icon="spinner" class="animate-spin" /> <font-awesome icon="spinner" class="animate-spin" />
</div> </div>
<div v-else> <div v-else>
<span <span

2
src/views/ContactQRScanShowView.vue

@ -10,7 +10,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</h1> </h1>
</div> </div>

2
src/views/ContactScanView.vue

@ -7,7 +7,7 @@
<router-link <router-link
:to="{ name: 'account' }" :to="{ name: 'account' }"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
><fa icon="chevron-left" class="fa-fw"></fa ><font-awesome icon="chevron-left" class="fa-fw"></fa
></router-link> ></router-link>
Scan Contact Scan Contact

22
src/views/ContactsView.vue

@ -28,21 +28,21 @@
:to="{ name: 'invite-one' }" :to="{ name: 'invite-one' }"
class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md" class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md"
> >
<fa icon="envelope-open-text" class="fa-fw text-2xl" /> <font-awesome icon="envelope-open-text" class="fa-fw text-2xl" />
</router-link> </router-link>
<button <button
@click="showOnboardMeetingDialog()" @click="showOnboardMeetingDialog()"
class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md" class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md"
> >
<fa icon="chair" class="fa-fw text-2xl" /> <font-awesome icon="chair" class="fa-fw text-2xl" />
</button> </button>
</span> </span>
<span v-else class="flex"> <span v-else class="flex">
<span <span
class="flex items-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md" class="flex items-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md"
> >
<fa <font-awesome
icon="envelope-open-text" icon="envelope-open-text"
class="fa-fw text-2xl" class="fa-fw text-2xl"
@click=" @click="
@ -56,7 +56,7 @@
<span <span
class="flex items-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md" class="flex items-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md"
> >
<fa <font-awesome
icon="chair" icon="chair"
class="fa-fw text-2xl" class="fa-fw text-2xl"
@click=" @click="
@ -73,7 +73,7 @@
:to="{ name: 'contact-qr' }" :to="{ name: 'contact-qr' }"
class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md" class="flex items-center bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 mr-1 rounded-md"
> >
<fa icon="qrcode" class="fa-fw text-2xl" /> <font-awesome icon="qrcode" class="fa-fw text-2xl" />
</router-link> </router-link>
<textarea <textarea
@ -86,7 +86,7 @@
class="px-4 rounded-r bg-green-200 border border-l-0 border-green-400" class="px-4 rounded-r bg-green-200 border border-l-0 border-green-400"
@click="onClickNewContact()" @click="onClickNewContact()"
> >
<fa icon="plus" class="fa-fw" /> <font-awesome icon="plus" class="fa-fw" />
</button> </button>
</div> </div>
@ -119,7 +119,7 @@
Copy Selections Copy Selections
</button> </button>
<button @click="showCopySelectionsInfo()"> <button @click="showCopySelectionsInfo()">
<fa icon="circle-info" class="text-xl text-blue-500 ml-4" /> <font-awesome icon="circle-info" class="text-xl text-blue-500 ml-4" />
</button> </button>
</div> </div>
</div> </div>
@ -143,7 +143,7 @@
<span <span
class="text-sm uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1 py-1 rounded-md" class="text-sm uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1 py-1 rounded-md"
> >
<fa icon="file-lines" class="fa-fw" /> <font-awesome icon="file-lines" class="fa-fw" />
</span> </span>
<br /> <br />
<button <button
@ -159,7 +159,7 @@
? "Confirmed Amounts" ? "Confirmed Amounts"
: "Unconfirmed Amounts" : "Unconfirmed Amounts"
}} }}
<fa icon="left-right" class="fa-fw" /> <font-awesome icon="left-right" class="fa-fw" />
</button> </button>
</div> </div>
</div> </div>
@ -215,7 +215,7 @@
}" }"
title="See more about this person" title="See more about this person"
> >
<fa icon="circle-info" class="text-xl text-blue-500 ml-4" /> <font-awesome icon="circle-info" class="text-xl text-blue-500 ml-4" />
</router-link> </router-link>
<span class="ml-4 text-sm overflow-hidden">{{ <span class="ml-4 text-sm overflow-hidden">{{
@ -286,7 +286,7 @@
class="text-sm bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-1.5 rounded-md border border-slate-400" class="text-sm bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-1.5 rounded-md border border-slate-400"
title="See more given activity" title="See more given activity"
> >
<fa icon="file-lines" class="fa-fw" /> <font-awesome icon="file-lines" class="fa-fw" />
</router-link> </router-link>
</div> </div>
</div> </div>

24
src/views/DIDView.vue

@ -12,7 +12,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</button> </button>
Identifier Details Identifier Details
</h1> </h1>
@ -29,7 +29,7 @@
<router-link <router-link
:to="{ name: 'contact-edit', params: { did: contactFromDid?.did } }" :to="{ name: 'contact-edit', params: { did: contactFromDid?.did } }"
> >
<fa icon="pen" class="text-sm text-blue-500 ml-2 mb-1" /> <font-awesome icon="pen" class="text-sm text-blue-500 ml-2 mb-1" />
</router-link> </router-link>
</h2> </h2>
<button <button
@ -37,8 +37,8 @@
class="ml-2 mr-2 mt-4" class="ml-2 mr-2 mt-4"
> >
Details Details
<fa v-if="showDidDetails" icon="chevron-down" class="text-blue-400" /> <font-awesome v-if="showDidDetails" icon="chevron-down" class="text-blue-400" />
<fa v-else icon="chevron-right" class="text-blue-400" /> <font-awesome v-else icon="chevron-right" class="text-blue-400" />
</button> </button>
<!-- Keep the dump contents directly between > and < to avoid weird spacing. --> <!-- Keep the dump contents directly between > and < to avoid weird spacing. -->
<pre <pre
@ -72,7 +72,7 @@
@click="confirmSetVisibility(contactFromDid, false)" @click="confirmSetVisibility(contactFromDid, false)"
title="They can see you" title="They can see you"
> >
<fa icon="eye" class="fa-fw" /> <font-awesome icon="eye" class="fa-fw" />
</button> </button>
<button <button
v-else-if=" v-else-if="
@ -82,7 +82,7 @@
@click="confirmSetVisibility(contactFromDid, true)" @click="confirmSetVisibility(contactFromDid, true)"
title="They cannot see you" title="They cannot see you"
> >
<fa icon="eye-slash" class="fa-fw" /> <font-awesome icon="eye-slash" class="fa-fw" />
</button> </button>
<button <button
@ -91,7 +91,7 @@
title="Check Visibility" title="Check Visibility"
v-if="contactFromDid?.did !== activeDid" v-if="contactFromDid?.did !== activeDid"
> >
<fa icon="rotate" class="fa-fw" /> <font-awesome icon="rotate" class="fa-fw" />
</button> </button>
</div> </div>
@ -101,12 +101,12 @@
v-if="contactFromDid?.did !== activeDid" v-if="contactFromDid?.did !== activeDid"
title="Registration" title="Registration"
> >
<fa <font-awesome
v-if="contactFromDid?.registered" v-if="contactFromDid?.registered"
icon="person-circle-check" icon="person-circle-check"
class="fa-fw" class="fa-fw"
/> />
<fa v-else icon="person-circle-question" class="fa-fw" /> <font-awesome v-else icon="person-circle-question" class="fa-fw" />
</button> </button>
</div> </div>
@ -115,7 +115,7 @@
class="text-sm uppercase bg-gradient-to-b from-rose-500 to-rose-800 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white ml-6 mx-0.5 my-0.5 px-2 py-1.5 rounded-md" class="text-sm uppercase bg-gradient-to-b from-rose-500 to-rose-800 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white ml-6 mx-0.5 my-0.5 px-2 py-1.5 rounded-md"
title="Delete" title="Delete"
> >
<fa icon="trash-can" class="fa-fw" /> <font-awesome icon="trash-can" class="fa-fw" />
</button> </button>
</div> </div>
<div v-if="!contactFromDid?.profileImageUrl"> <div v-if="!contactFromDid?.profileImageUrl">
@ -164,7 +164,7 @@
class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full"
v-if="isLoading" v-if="isLoading"
> >
<fa icon="spinner" class="fa-spin-pulse"></fa> <font-awesome icon="spinner" class="fa-spin-pulse"></font-awesome>
</div> </div>
<!-- Results List --> <!-- Results List -->
<div v-if="claims.length > 0" class="mt-4"> <div v-if="claims.length > 0" class="mt-4">
@ -194,7 +194,7 @@
</span> </span>
<span class="col-span-1"> <span class="col-span-1">
<a @click="onClickLoadClaim(claim.id)" class="cursor-pointer"> <a @click="onClickLoadClaim(claim.id)" class="cursor-pointer">
<fa icon="file-lines" class="pl-2 pt-1 text-blue-500" /> <font-awesome icon="file-lines" class="pl-2 pt-1 text-blue-500" />
</a> </a>
</span> </span>
</div> </div>

12
src/views/DiscoverView.vue

@ -28,7 +28,7 @@
class="px-4 rounded-r bg-slate-200 border border-l-0 border-slate-400" class="px-4 rounded-r bg-slate-200 border border-l-0 border-slate-400"
@click="searchSelected()" @click="searchSelected()"
> >
<fa icon="magnifying-glass" class="fa-fw"></fa> <font-awesome icon="magnifying-glass" class="fa-fw"></font-awesome>
</button> </button>
</div> </div>
@ -152,7 +152,7 @@
class="ml-2 mt-2 px-4 py-2 rounded-md bg-blue-200 text-blue-500" class="ml-2 mt-2 px-4 py-2 rounded-md bg-blue-200 text-blue-500"
@click="$router.push({ name: 'search-area' })" @click="$router.push({ name: 'search-area' })"
> >
<fa icon="location-dot" class="fa-fw" /> <font-awesome icon="location-dot" class="fa-fw" />
Select a {{ searchBox ? "Different" : "" }} Location for Nearby Search Select a {{ searchBox ? "Different" : "" }} Location for Nearby Search
</button> </button>
</div> </div>
@ -182,7 +182,7 @@
class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full"
v-if="isLoading" v-if="isLoading"
> >
<fa icon="spinner" class="fa-spin-pulse"></fa> <font-awesome icon="spinner" class="fa-spin-pulse"></font-awesome>
</div> </div>
<div <div
v-else-if="projects.length === 0 && userProfiles.length === 0" v-else-if="projects.length === 0 && userProfiles.length === 0"
@ -225,7 +225,7 @@
<div class="grow"> <div class="grow">
<h2 class="text-base font-semibold">{{ project.name }}</h2> <h2 class="text-base font-semibold">{{ project.name }}</h2>
<div class="text-sm"> <div class="text-sm">
<fa icon="user" class="fa-fw text-slate-400"></fa> <font-awesome icon="user" class="fa-fw text-slate-400"></font-awesome>
{{ {{
didInfo( didInfo(
project.issuerDid, project.issuerDid,
@ -253,7 +253,7 @@
> >
<div class="grow"> <div class="grow">
<div class="text-sm"> <div class="text-sm">
<fa icon="user" class="fa-fw text-slate-400"></fa> <font-awesome icon="user" class="fa-fw text-slate-400"></font-awesome>
{{ {{
didInfo( didInfo(
profile.issuerDid, profile.issuerDid,
@ -273,7 +273,7 @@
v-if="isAnywhereActive && profile.locLat && profile.locLon" v-if="isAnywhereActive && profile.locLat && profile.locLon"
class="mt-1 text-xs text-slate-500" class="mt-1 text-xs text-slate-500"
> >
<fa icon="location-dot" class="fa-fw"></fa> <font-awesome icon="location-dot" class="fa-fw"></font-awesome>
{{ {{
(profile.locLat > 0 ? "North" : "South") + (profile.locLat > 0 ? "North" : "South") +
" in " + " in " +

30
src/views/GiftedDetailsView.vue

@ -13,7 +13,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="cancelBack()" @click="cancelBack()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -59,7 +59,7 @@
class="border border-r-0 border-slate-400 bg-slate-200 px-4 py-2" class="border border-r-0 border-slate-400 bg-slate-200 px-4 py-2"
@click="amountInput === '0' ? null : decrement()" @click="amountInput === '0' ? null : decrement()"
> >
<fa icon="chevron-left" /> <font-awesome icon="chevron-left" />
</div> </div>
<input <input
type="number" type="number"
@ -70,7 +70,7 @@
class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2" class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2"
@click="increment()" @click="increment()"
> >
<fa icon="chevron-right" /> <font-awesome icon="chevron-right" />
</div> </div>
</div> </div>
@ -79,14 +79,14 @@
<a :href="imageUrl" target="_blank"> <a :href="imageUrl" target="_blank">
<img :src="imageUrl" class="h-24 rounded-xl" /> <img :src="imageUrl" class="h-24 rounded-xl" />
</a> </a>
<fa <font-awesome
icon="trash-can" icon="trash-can"
@click="confirmDeleteImage" @click="confirmDeleteImage"
class="text-red-500 fa-fw ml-8 mt-10" class="text-red-500 fa-fw ml-8 mt-10"
/> />
</span> </span>
<span v-else> <span v-else>
<fa <font-awesome
icon="camera" icon="camera"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md"
@click="openImageDialog" @click="openImageDialog"
@ -105,7 +105,7 @@
class="h-6 w-6 mr-2" class="h-6 w-6 mr-2"
v-model="providedByGiver" v-model="providedByGiver"
/> />
<fa <font-awesome
v-else v-else
icon="square" icon="square"
class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm" class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -117,7 +117,7 @@
: "No named individual gave." : "No named individual gave."
}} }}
</label> </label>
<fa <font-awesome
v-if="!giverDid || providedByProject" v-if="!giverDid || providedByProject"
icon="info-circle" icon="info-circle"
class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm" class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -132,7 +132,7 @@
class="h-6 w-6 mr-2" class="h-6 w-6 mr-2"
v-model="providedByProject" v-model="providedByProject"
/> />
<fa <font-awesome
v-else v-else
icon="square" icon="square"
class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm" class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -144,7 +144,7 @@
: "This was not provided by a project." : "This was not provided by a project."
}} }}
</label> </label>
<fa <font-awesome
v-if="!providerProjectId || providedByGiver" v-if="!providerProjectId || providedByGiver"
icon="info-circle" icon="info-circle"
class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm" class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -154,7 +154,7 @@
</div> </div>
<div class="flex-shrink flex justify-center items-center"> <div class="flex-shrink flex justify-center items-center">
<fa icon="arrow-right" class="fa-fw h-7" /> <font-awesome icon="arrow-right" class="fa-fw h-7" />
</div> </div>
<!-- Third Column for Recipient --> <!-- Third Column for Recipient -->
@ -166,7 +166,7 @@
class="h-6 w-6 mr-2" class="h-6 w-6 mr-2"
v-model="givenToRecipient" v-model="givenToRecipient"
/> />
<fa <font-awesome
v-else v-else
icon="square" icon="square"
class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm" class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -178,7 +178,7 @@
: "No individual benefitted." : "No individual benefitted."
}} }}
</label> </label>
<fa <font-awesome
v-if="!recipientDid || givenToProject" v-if="!recipientDid || givenToProject"
icon="info-circle" icon="info-circle"
class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm" class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -193,7 +193,7 @@
class="h-6 w-6 mr-2" class="h-6 w-6 mr-2"
v-model="givenToProject" v-model="givenToProject"
/> />
<fa <font-awesome
v-else v-else
icon="square" icon="square"
class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm" class="mr-2 bg-white text-white h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -205,7 +205,7 @@
: "No project benefitted." : "No project benefitted."
}} }}
</label> </label>
<fa <font-awesome
v-if="!fulfillsProjectId || givenToRecipient" v-if="!fulfillsProjectId || givenToRecipient"
icon="info-circle" icon="info-circle"
class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm" class="-mt-1 bg-white text-slate-500 h-5 w-5 px-0.5 py-0.5 rounded-sm"
@ -236,7 +236,7 @@
<p class="text-center mb-2 mt-6 italic"> <p class="text-center mb-2 mt-6 italic">
Sign & Send to publish to the world Sign & Send to publish to the world
<fa <font-awesome
icon="circle-info" icon="circle-info"
class="pl-2 text-blue-500 cursor-pointer" class="pl-2 text-blue-500 cursor-pointer"
@click="explainData()" @click="explainData()"

2
src/views/HelpNotificationTypesView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>

8
src/views/HelpNotificationsView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -140,7 +140,7 @@
class="text-blue-500" class="text-blue-500"
target="_blank" target="_blank"
> >
here <fa icon="arrow-up-right-from-square" class="fa-fw" /> here <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</div> </div>
@ -186,7 +186,7 @@
class="text-blue-500" class="text-blue-500"
target="_blank" target="_blank"
> >
here <fa icon="arrow-up-right-from-square" class="fa-fw" /> here <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</div> </div>
</div> </div>
@ -199,7 +199,7 @@
<p> <p>
Of course, you'll want to back up all your data first -- all seeds as Of course, you'll want to back up all your data first -- all seeds as
well as the contacts & settings -- on the Profile well as the contacts & settings -- on the Profile
<fa icon="circle-user" /> page. <font-awesome icon="circle-user" /> page.
</p> </p>
<p> <p>
Here are instructions to uninstall the app and clear out caches and storage. Here are instructions to uninstall the app and clear out caches and storage.

20
src/views/HelpOnboardingView.vue

@ -19,13 +19,13 @@
:to="{ name: 'invite-one' }" :to="{ name: 'invite-one' }"
class="bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md" class="bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"
> >
<fa icon="envelope-open-text" class="fa-fw text-xl" <font-awesome icon="envelope-open-text" class="fa-fw text-xl"
/></router-link> /></router-link>
</p> </p>
<p>Then watch that page to see when they accept their invite.</p> <p>Then watch that page to see when they accept their invite.</p>
<p> <p>
(That page is also reachable from the Contacts <fa icon="users" /> page (That page is also reachable from the Contacts <font-awesome icon="users" /> page
though the invitation <fa icon="envelope-open-text" /> icon.) though the invitation <font-awesome icon="envelope-open-text" /> icon.)
</p> </p>
<h1 class="mt-4 font-bold text-xl">Next Steps</h1> <h1 class="mt-4 font-bold text-xl">Next Steps</h1>
@ -35,7 +35,7 @@
<h1 class="font-bold text-xl">Without a backup, you can lose data.</h1> <h1 class="font-bold text-xl">Without a backup, you can lose data.</h1>
<div> <div>
<p> <p>
Exporting backups (from the Account <fa icon="circle-user" /> screen) Exporting backups (from the Account <font-awesome icon="circle-user" /> screen)
is important for the case where they lose their device. This is is important for the case where they lose their device. This is
especially true for the Identifier Seed: that is theirs and and theirs especially true for the Identifier Seed: that is theirs and and theirs
alone, and currently nobody else can recover it if they lose it. The alone, and currently nobody else can recover it if they lose it. The
@ -54,7 +54,7 @@
<h1 class="font-bold text-xl">Add Contact & Register</h1> <h1 class="font-bold text-xl">Add Contact & Register</h1>
<p> <p>
You share even more information such as your picture and name when You share even more information such as your picture and name when
you share with your QR code at these links: <fa icon="qrcode" /> you share with your QR code at these links: <font-awesome icon="qrcode" />
</p> </p>
<p> <p>
Scanning Scanning
@ -70,14 +70,14 @@
</p> </p>
<p> <p>
2) Scan their QR, or have them tap on it to copy their info and send it to you. 2) Scan their QR, or have them tap on it to copy their info and send it to you.
Then you can add them to your Contacts <fa icon="users" /> Then you can add them to your Contacts <font-awesome icon="users" />
</p> </p>
<p> <p>
3) You can register them at their info page <fa icon="circle-info" /> 3) You can register them at their info page <font-awesome icon="circle-info" />
and click on the register button <fa icon="person-circle-question" /> and click on the register button <font-awesome icon="person-circle-question" />
</p> </p>
<p> <p>
4) Add yourself to their Contacts <fa icon="users" /> 4) Add yourself to their Contacts <font-awesome icon="users" />
</p> </p>
</div> </div>
@ -94,7 +94,7 @@
<h1 class="font-bold text-xl">Enable Notifications</h1> <h1 class="font-bold text-xl">Enable Notifications</h1>
<div> <div>
<p> <p>
Enable notifications from the Account page <fa icon="circle-user" />. Enable notifications from the Account page <font-awesome icon="circle-user" />.
Those notifications might show up on the device depending on your settings. Those notifications might show up on the device depending on your settings.
For the most reliable habits, set an alarm or do some other ritual to record gratitude every day. For the most reliable habits, set an alarm or do some other ritual to record gratitude every day.
</p> </p>

28
src/views/HelpView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</h1> </h1>
</div> </div>
@ -191,7 +191,7 @@
<h2 class="text-xl font-semibold">How do I get started?</h2> <h2 class="text-xl font-semibold">How do I get started?</h2>
<p> <p>
Someone -- like the person who told you about this app -- needs to register you Someone -- like the person who told you about this app -- needs to register you
on the Contacts <fa icon="users" class="fa-fw" /> page. on the Contacts <font-awesome icon="users" class="fa-fw" /> page.
If you heard about this from our outreach, feel free to contact us (below) for a chat. If you heard about this from our outreach, feel free to contact us (below) for a chat.
After someone registers you, you can register others. After someone registers you, you can register others.
</p> </p>
@ -219,7 +219,7 @@
</p> </p>
<p> <p>
If they are not nearby to scan QR codes, you each can tap on the QR code If they are not nearby to scan QR codes, you each can tap on the QR code
and paste it into the text box on the Contacts <fa icon="users" class="fa-fw" /> page. and paste it into the text box on the Contacts <font-awesome icon="users" class="fa-fw" /> page.
</p> </p>
<h2 class="text-xl font-semibold"> <h2 class="text-xl font-semibold">
@ -244,7 +244,7 @@
</h2> </h2>
<ul class="list-disc list-outside ml-4"> <ul class="list-disc list-outside ml-4">
<li> <li>
Go to Your Identity <fa icon="circle-user" class="fa-fw" /> page. Go to Your Identity <font-awesome icon="circle-user" class="fa-fw" /> page.
</li> </li>
<li> <li>
Click on "Backup Identifier Seed" and follow the instructions. Click on "Backup Identifier Seed" and follow the instructions.
@ -260,7 +260,7 @@
</h2> </h2>
<ul class="list-disc list-outside ml-4"> <ul class="list-disc list-outside ml-4">
<li> <li>
Go to Your Identity <fa icon="circle-user" class="fa-fw" /> page. Go to Your Identity <font-awesome icon="circle-user" class="fa-fw" /> page.
</li> </li>
<li> <li>
Click on "Download Settings...". That will save a file to your Click on "Download Settings...". That will save a file to your
@ -274,7 +274,7 @@
</h2> </h2>
<ul class="list-disc list-outside ml-4"> <ul class="list-disc list-outside ml-4">
<li> <li>
Go to Your Identity <fa icon="circle-user" class="fa-fw" /> page, Go to Your Identity <font-awesome icon="circle-user" class="fa-fw" /> page,
tap on your image, and save it. tap on your image, and save it.
</li> </li>
</ul> </ul>
@ -315,7 +315,7 @@
</h2> </h2>
<ul class="list-disc list-outside ml-4"> <ul class="list-disc list-outside ml-4">
<li> <li>
Go to Your Identity <fa icon="circle-user" class="fa-fw" /> page, Go to Your Identity <font-awesome icon="circle-user" class="fa-fw" /> page,
click Advanced, and follow the instructions for the Contacts & Settings Database "Import". click Advanced, and follow the instructions for the Contacts & Settings Database "Import".
Beware that this will erase your existing contact & settings. Beware that this will erase your existing contact & settings.
</li> </li>
@ -384,7 +384,7 @@
</h2> </h2>
<p> <p>
There is an "Advanced" section at the bottom of the Profile There is an "Advanced" section at the bottom of the Profile
<fa icon="circle-user" /> page. <font-awesome icon="circle-user" /> page.
</p> </p>
<p> <p>
There is even more functionality in a mobile app (and more There is even more functionality in a mobile app (and more
@ -402,8 +402,8 @@
because they have not given you permission to see their information. Ask because they have not given you permission to see their information. Ask
them to add you to their contact list, and ask specifically to make sure them to add you to their contact list, and ask specifically to make sure
the eye next to your name is open like this the eye next to your name is open like this
<fa icon="eye" class="fa-fw" /> and not closed like this <font-awesome icon="eye" class="fa-fw" /> and not closed like this
<fa icon="eye-slash" class="fa-fw" />. <font-awesome icon="eye-slash" class="fa-fw" />.
</p> </p>
<p> <p>
Sometimes the reason you don't see something is because the search Sometimes the reason you don't see something is because the search
@ -444,7 +444,7 @@
</li> </li>
<li> <li>
There may be a problem with your identity. Go to the Identity There may be a problem with your identity. Go to the Identity
<fa icon="circle-user" class="fa-fw" /> page, then "Advanced", and "Switch Identifier" <font-awesome icon="circle-user" class="fa-fw" /> page, then "Advanced", and "Switch Identifier"
and you may see helpful info there. If it shows a problem, try adding your identifier again. and you may see helpful info there. If it shows a problem, try adding your identifier again.
</li> </li>
<li> <li>
@ -505,7 +505,7 @@
<ul class="list-disc list-outside ml-4"> <ul class="list-disc list-outside ml-4">
<li> <li>
If using notifications, a server stores push token data. That can be revoked at any time If using notifications, a server stores push token data. That can be revoked at any time
by disabling notifications on the Profile <fa icon="circle-user" class="fa-fw" /> page. by disabling notifications on the Profile <font-awesome icon="circle-user" class="fa-fw" /> page.
</li> </li>
<li> <li>
If sending images, a server stores them, too. They can be removed by editing the claim If sending images, a server stores them, too. They can be removed by editing the claim
@ -538,8 +538,8 @@
class="text-blue-500 ml-2" class="text-blue-500 ml-2"
> >
bc1q90v4ted6cpt63tjfh2lvd5xzfc67sd4g9w8xma bc1q90v4ted6cpt63tjfh2lvd5xzfc67sd4g9w8xma
<fa v-show="!showDidCopy" icon="copy" class="text-sm text-slate-400 fa-fw" /> <font-awesome v-show="!showDidCopy" icon="copy" class="text-sm text-slate-400 fa-fw" />
<fa v-show="showDidCopy" icon="circle-check" class="text-sm text-green-500 fa-fw"/> <font-awesome v-show="showDidCopy" icon="circle-check" class="text-sm text-green-500 fa-fw"/>
</button> </button>
You can donate online via You can donate online via
<a href="https://www.patreon.com/TimeSafari" target="_blank" class="text-blue-500">Patreon here</a>. <a href="https://www.patreon.com/TimeSafari" target="_blank" class="text-blue-500">Patreon here</a>.

31
src/views/HomeView.vue

@ -28,7 +28,7 @@
width="30" width="30"
style="display: inline; margin: 0 5px; vertical-align: middle" style="display: inline; margin: 0 5px; vertical-align: middle"
/>and then "Add to Home Screen" />and then "Add to Home Screen"
<fa icon="square-plus" title="Apple 'Add' icon" /> <font-awesome icon="square-plus" title="Apple 'Add' icon" />
and go click on that new app. and go click on that new app.
</span> </span>
<span <span
@ -36,10 +36,7 @@
> >
You should see a prompt to install, or you can click on the You should see a prompt to install, or you can click on the
top-right dots top-right dots
<fa <font-awesome icon="ellipsis-vertical" title="vertical ellipsis" />
icon="ellipsis-vertical"
title="vertical ellipsis"
class="fa-fw"
/> />
and then "Install"<img and then "Install"<img
src="../assets/help/install-android-chrome.png" src="../assets/help/install-android-chrome.png"
@ -73,7 +70,7 @@
<div class="mb-8"> <div class="mb-8">
<div v-if="isCreatingIdentifier"> <div v-if="isCreatingIdentifier">
<p class="text-slate-500 text-center italic mt-4 mb-4"> <p class="text-slate-500 text-center italic mt-4 mb-4">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
Loading&hellip; Loading&hellip;
</p> </p>
</div> </div>
@ -119,7 +116,7 @@
@click="openGiftedPrompts()" @click="openGiftedPrompts()"
class="ml-2 block text-xs text-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1 rounded-md" class="ml-2 block text-xs text-center bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1 rounded-md"
> >
<fa icon="lightbulb" class="fa-fw" /> <font-awesome icon="lightbulb" class="fa-fw" />
</button> </button>
</div> </div>
@ -181,7 +178,7 @@
class="absolute right-6 bottom-0 transform translate-y-1/2 text-center text-4xl leading-none bg-green-600 text-white w-14 py-2.5 rounded-full" class="absolute right-6 bottom-0 transform translate-y-1/2 text-center text-4xl leading-none bg-green-600 text-white w-14 py-2.5 rounded-full"
@click="openDialog()" @click="openDialog()"
> >
<fa icon="plus" class="fa-fw" /> <font-awesome icon="plus" class="fa-fw" />
</button> </button>
</div> </div>
@ -192,12 +189,12 @@
Latest Activity Latest Activity
<button @click="openFeedFilters()"> <button @click="openFeedFilters()">
<span class="text-xs text-white"> <span class="text-xs text-white">
<fa <font-awesome
v-if="resultsAreFiltered()" v-if="resultsAreFiltered()"
icon="filter" icon="filter"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] px-1 py-1.5 rounded-md" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] px-1 py-1.5 rounded-md"
/> />
<fa <font-awesome
v-else v-else
icon="filter" icon="filter"
class="bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] px-1 py-1.5 rounded-md" class="bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] px-1 py-1.5 rounded-md"
@ -265,7 +262,7 @@
<div class="grid grid-cols-12"> <div class="grid grid-cols-12">
<span class="pt-1 col-span-1 justify-self-start"> <span class="pt-1 col-span-1 justify-self-start">
<span> <span>
<fa <font-awesome
icon="circle-user" icon="circle-user"
:class=" :class="
computeKnownPersonIconStyleClassNames( computeKnownPersonIconStyleClassNames(
@ -274,7 +271,7 @@
" "
@click="toastUser('This involves your contacts.')" @click="toastUser('This involves your contacts.')"
/> />
<fa <font-awesome
icon="gift" icon="gift"
class="pl-3 text-slate-500" class="pl-3 text-slate-500"
@click="toastUser('This is a gift.')" @click="toastUser('This is a gift.')"
@ -295,7 +292,7 @@
:profile-image-url="record.giver.profileImageUrl" :profile-image-url="record.giver.profileImageUrl"
class="inline-block align-middle border border-slate-300 rounded-md mr-1" class="inline-block align-middle border border-slate-300 rounded-md mr-1"
/> />
<fa <font-awesome
v-if=" v-if="
record.agentDid !== activeDid && record.agentDid !== activeDid &&
record.recipientDid !== activeDid && record.recipientDid !== activeDid &&
@ -319,7 +316,7 @@
{{ giveDescription(record) }} {{ giveDescription(record) }}
</span> </span>
<a @click="onClickLoadClaim(record.jwtId)"> <a @click="onClickLoadClaim(record.jwtId)">
<fa <font-awesome
icon="file-lines" icon="file-lines"
class="pl-2 text-slate-500 cursor-pointer" class="pl-2 text-slate-500 cursor-pointer"
/> />
@ -333,7 +330,7 @@
encodeURIComponent(record.fulfillsPlanHandleId) encodeURIComponent(record.fulfillsPlanHandleId)
" "
> >
<fa icon="hammer" class="text-blue-500" /> <font-awesome icon="hammer" class="text-blue-500" />
</router-link> </router-link>
<router-link <router-link
v-if="record.providerPlanHandleId" v-if="record.providerPlanHandleId"
@ -342,7 +339,7 @@
encodeURIComponent(record.providerPlanHandleId) encodeURIComponent(record.providerPlanHandleId)
" "
> >
<fa icon="hammer" class="text-blue-500" /> <font-awesome icon="hammer" class="text-blue-500" />
</router-link> </router-link>
</span> </span>
</div> </div>
@ -364,7 +361,7 @@
</InfiniteScroll> </InfiniteScroll>
<div v-if="isFeedLoading"> <div v-if="isFeedLoading">
<p class="text-slate-500 text-center italic mt-4 mb-4"> <p class="text-slate-500 text-center italic mt-4 mb-4">
<fa icon="spinner" class="fa-spin-pulse" /> Loading&hellip; <font-awesome icon="spinner" class="fa-spin-pulse" /> Loading&hellip;
</p> </p>
</div> </div>
<div v-if="!isFeedLoading && feedData.length === 0"> <div v-if="!isFeedLoading && feedData.length === 0">

12
src/views/IdentitySwitcherView.vue

@ -8,7 +8,7 @@
<router-link <router-link
:to="{ name: 'account' }" :to="{ name: 'account' }"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
><fa icon="chevron-left" class="fa-fw"></fa> ><font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</router-link> </router-link>
Switch Identity Switch Identity
@ -22,7 +22,7 @@
v-if="activeDid && !activeDidInIdentities" v-if="activeDid && !activeDidInIdentities"
class="block bg-slate-100 rounded-md flex items-center px-4 py-3 mb-4" class="block bg-slate-100 rounded-md flex items-center px-4 py-3 mb-4"
> >
<fa icon="circle-check" class="fa-fw text-red-600 text-xl mr-3"></fa> <font-awesome icon="circle-check" class="fa-fw text-red-600 text-xl mr-3"></font-awesome>
<div class="text-sm text-slate-500"> <div class="text-sm text-slate-500">
<div class="overflow-hidden truncate"> <div class="overflow-hidden truncate">
<b>ID:</b> <code>{{ activeDid }}</code> <b>ID:</b> <code>{{ activeDid }}</code>
@ -45,12 +45,12 @@
class="flex flex-grow items-center bg-slate-100 rounded-md px-4 py-3 mb-2 truncate cursor-pointer" class="flex flex-grow items-center bg-slate-100 rounded-md px-4 py-3 mb-2 truncate cursor-pointer"
@click="switchAccount(ident.did)" @click="switchAccount(ident.did)"
> >
<fa <font-awesome
v-if="ident.did === activeDid" v-if="ident.did === activeDid"
icon="circle-check" icon="circle-check"
class="fa-fw text-blue-600 text-xl mr-3" class="fa-fw text-blue-600 text-xl mr-3"
/> />
<fa <font-awesome
v-else v-else
icon="circle" icon="circle"
class="fa-fw text-slate-400 text-xl mr-3" class="fa-fw text-slate-400 text-xl mr-3"
@ -62,13 +62,13 @@
</span> </span>
</div> </div>
<div> <div>
<fa <font-awesome
v-if="ident.did === activeDid" v-if="ident.did === activeDid"
icon="trash-can" icon="trash-can"
class="text-slate-400 text-xl ml-2 mr-2 cursor-pointer" class="text-slate-400 text-xl ml-2 mr-2 cursor-pointer"
@click="notifyCannotDelete()" @click="notifyCannotDelete()"
/> />
<fa <font-awesome
v-else v-else
icon="trash-can" icon="trash-can"
class="text-red-600 text-xl ml-2 mr-2 cursor-pointer" class="text-red-600 text-xl ml-2 mr-2 cursor-pointer"

2
src/views/ImportAccountView.vue

@ -8,7 +8,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left"></fa> <font-awesome icon="chevron-left"></font-awesome>
</button> </button>
Import Existing Identifier Import Existing Identifier
</h1> </h1>

10
src/views/ImportDerivedAccountView.vue

@ -8,7 +8,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left"></fa> <font-awesome icon="chevron-left"></font-awesome>
</button> </button>
Derive from Existing Identity Derive from Existing Identity
</h1> </h1>
@ -30,16 +30,16 @@
:key="dids[0]" :key="dids[0]"
@click="switchAccount(dids[0])" @click="switchAccount(dids[0])"
> >
<fa <font-awesome
v-if="dids[0] == selectedArrayFirstDid" v-if="dids[0] == selectedArrayFirstDid"
icon="circle" icon="circle"
class="fa-fw text-blue-500 text-xl mr-3" class="fa-fw text-blue-500 text-xl mr-3"
></fa> ></font-awesome>
<fa <font-awesome
v-else v-else
icon="circle" icon="circle"
class="fa-fw text-slate-400 text-xl mr-3" class="fa-fw text-slate-400 text-xl mr-3"
></fa> ></font-awesome>
<span class="overflow-hidden"> <span class="overflow-hidden">
<div class="text-sm text-slate-500 truncate"> <div class="text-sm text-slate-500 truncate">
<code>{{ dids.join(",") }}</code> <code>{{ dids.join(",") }}</code>

2
src/views/InviteOneAcceptView.vue

@ -5,7 +5,7 @@
v-if="checkingInvite" v-if="checkingInvite"
class="text-lg text-center font-light relative px-7" class="text-lg text-center font-light relative px-7"
> >
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</div> </div>
<div v-else class="text-center mt-4"> <div v-else class="text-center mt-4">
<p>That invitation did not work.</p> <p>That invitation did not work.</p>

8
src/views/InviteOneView.vue

@ -9,7 +9,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -40,7 +40,7 @@
class="fixed right-6 top-12 text-center text-4xl leading-none bg-green-600 text-white w-14 py-2.5 rounded-full" class="fixed right-6 top-12 text-center text-4xl leading-none bg-green-600 text-white w-14 py-2.5 rounded-full"
@click="createInvite()" @click="createInvite()"
> >
<fa icon="plus" class="fa-fw"></fa> <font-awesome icon="plus" class="fa-fw"></font-awesome>
</button> </button>
<InviteDialog ref="inviteDialog" /> <InviteDialog ref="inviteDialog" />
@ -106,7 +106,7 @@
<br /> <br />
{{ getTruncatedRedeemedBy(invite.redeemedBy) }} {{ getTruncatedRedeemedBy(invite.redeemedBy) }}
<br /> <br />
<fa <font-awesome
v-if="invite.redeemedBy && !contactsRedeemed[invite.redeemedBy]" v-if="invite.redeemedBy && !contactsRedeemed[invite.redeemedBy]"
icon="plus" icon="plus"
class="bg-green-600 text-white px-1 py-1 rounded-full cursor-pointer" class="bg-green-600 text-white px-1 py-1 rounded-full cursor-pointer"
@ -114,7 +114,7 @@
/> />
</td> </td>
<td> <td>
<fa <font-awesome
icon="trash-can" icon="trash-can"
class="text-red-600 text-xl ml-2 mr-2 cursor-pointer" class="text-red-600 text-xl ml-2 mr-2 cursor-pointer"
@click="deleteInvite(invite.inviteIdentifier, invite.notes)" @click="deleteInvite(invite.inviteIdentifier, invite.notes)"

10
src/views/NewActivityView.vue

@ -6,7 +6,7 @@
<div id="ViewBreadcrumb" class="mb-8"> <div id="ViewBreadcrumb" class="mb-8">
<h1 class="text-lg text-center font-light relative px-7"> <h1 class="text-lg text-center font-light relative px-7">
<!-- Back --> <!-- Back -->
<fa <font-awesome
icon="chevron-left" icon="chevron-left"
@click="$router.back()" @click="$router.back()"
class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@ -25,7 +25,7 @@
<span class="text-lg font-medium ml-4" <span class="text-lg font-medium ml-4"
>New Offer{{ newOffersToUser.length === 1 ? "" : "s" }} To You</span >New Offer{{ newOffersToUser.length === 1 ? "" : "s" }} To You</span
> >
<fa <font-awesome
v-if="newOffersToUser.length > 0" v-if="newOffersToUser.length > 0"
:icon="showOffersDetails ? 'chevron-down' : 'chevron-right'" :icon="showOffersDetails ? 'chevron-down' : 'chevron-right'"
class="cursor-pointer ml-4 mr-4 text-lg" class="cursor-pointer ml-4 mr-4 text-lg"
@ -59,7 +59,7 @@
:to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }" :to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" /> <font-awesome icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" />
</router-link> </router-link>
<!-- New line that appears on hover or when the offer is clicked --> <!-- New line that appears on hover or when the offer is clicked -->
<div <div
@ -87,7 +87,7 @@
>New Offer{{ newOffersToUserProjects.length === 1 ? "" : "s" }} To >New Offer{{ newOffersToUserProjects.length === 1 ? "" : "s" }} To
Your Projects</span Your Projects</span
> >
<fa <font-awesome
v-if="newOffersToUserProjects.length > 0" v-if="newOffersToUserProjects.length > 0"
:icon=" :icon="
showOffersToUserProjectsDetails ? 'chevron-down' : 'chevron-right' showOffersToUserProjectsDetails ? 'chevron-down' : 'chevron-right'
@ -125,7 +125,7 @@
:to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }" :to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" /> <font-awesome icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" />
</router-link> </router-link>
<!-- New line that appears on hover --> <!-- New line that appears on hover -->
<div <div

2
src/views/NewEditAccountView.vue

@ -8,7 +8,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</button> </button>
Edit Identity Edit Identity
</h1> </h1>

28
src/views/NewEditProjectView.vue

@ -11,7 +11,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</button> </button>
Edit Project Idea Edit Project Idea
</h1> </h1>
@ -36,14 +36,14 @@
<a :href="imageUrl" target="_blank" class="text-blue-500 ml-4"> <a :href="imageUrl" target="_blank" class="text-blue-500 ml-4">
<img :src="imageUrl" class="h-24 rounded-xl" /> <img :src="imageUrl" class="h-24 rounded-xl" />
</a> </a>
<fa <font-awesome
icon="trash-can" icon="trash-can"
@click="confirmDeleteImage" @click="confirmDeleteImage"
class="text-red-500 fa-fw ml-8 mt-10" class="text-red-500 fa-fw ml-8 mt-10"
/> />
</span> </span>
<span v-else> <span v-else>
<fa <font-awesome
icon="camera" icon="camera"
class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md" class="bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md"
@click="openImageDialog" @click="openImageDialog"
@ -181,7 +181,7 @@
<div class="flex" @click="sendToTrustroots = !sendToTrustroots"> <div class="flex" @click="sendToTrustroots = !sendToTrustroots">
<input type="checkbox" class="mr-2" v-model="sendToTrustroots" /> <input type="checkbox" class="mr-2" v-model="sendToTrustroots" />
<label>Send to Trustroots</label> <label>Send to Trustroots</label>
<fa <font-awesome
icon="circle-info" icon="circle-info"
class="text-blue-500 ml-2 cursor-pointer" class="text-blue-500 ml-2 cursor-pointer"
@click.stop="showNostrPartnerInfo" @click.stop="showNostrPartnerInfo"
@ -191,7 +191,7 @@
<div class="flex" @click="sendToTripHopping = !sendToTripHopping"> <div class="flex" @click="sendToTripHopping = !sendToTripHopping">
<input type="checkbox" class="mr-2" v-model="sendToTripHopping" /> <input type="checkbox" class="mr-2" v-model="sendToTripHopping" />
<label>Send to TripHopping</label> <label>Send to TripHopping</label>
<fa icon="circle-info" class="text-blue-500 ml-2 cursor-pointer" @click.stop="showNostrPartnerInfo" /> <font-awesome icon="circle-info" class="text-blue-500 ml-2 cursor-pointer" @click.stop="showNostrPartnerInfo" />
</div> </div>
--> -->
</div> </div>
@ -230,7 +230,10 @@ import "leaflet/dist/leaflet.css";
import { AxiosError, AxiosRequestHeaders } from "axios"; import { AxiosError, AxiosRequestHeaders } from "axios";
import { DateTime } from "luxon"; import { DateTime } from "luxon";
import { finalizeEvent } from "nostr-tools/lib/esm/index.js"; import { finalizeEvent } from "nostr-tools/lib/esm/index.js";
import { accountFromExtendedKey, extendedKeysFromSeedWords } from "nostr-tools/lib/esm/nip06.js"; import {
accountFromExtendedKey,
extendedKeysFromSeedWords,
} from "nostr-tools/lib/esm/nip06.js";
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { LMap, LMarker, LTileLayer } from "@vue-leaflet/vue-leaflet"; import { LMap, LMarker, LTileLayer } from "@vue-leaflet/vue-leaflet";
import { RouteLocationNormalizedLoaded, Router } from "vue-router"; import { RouteLocationNormalizedLoaded, Router } from "vue-router";
@ -243,17 +246,21 @@ import {
NotificationIface, NotificationIface,
} from "../constants/app"; } from "../constants/app";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
import { PlanVerifiableCredential } from "../interfaces";
import { import {
createEndorserJwtVcFromClaim, createEndorserJwtVcFromClaim,
getHeaders, getHeaders,
PlanVerifiableCredential,
} from "../libs/endorserServer"; } from "../libs/endorserServer";
import { import {
retrieveAccountCount, retrieveAccountCount,
retrieveFullyDecryptedAccount, retrieveFullyDecryptedAccount,
} from "../libs/util"; } from "../libs/util";
import { EventTemplate, UnsignedEvent, VerifiedEvent } from "nostr-tools/lib/esm/index.js"; import {
import { finalizeEvent as nostrToolsFinalizeEvent, serializeEvent } from "nostr-tools/lib/esm/index.js"; EventTemplate,
UnsignedEvent,
VerifiedEvent,
} from "nostr-tools/lib/esm/index.js";
import { serializeEvent } from "nostr-tools/lib/esm/index.js";
@Component({ @Component({
components: { ImageMethodDialog, LMap, LMarker, LTileLayer, QuickNav }, components: { ImageMethodDialog, LMap, LMarker, LTileLayer, QuickNav },
@ -710,8 +717,7 @@ export default class NewEditProjectView extends Vue {
const endorserPartnerUrl = partnerServer + "/api/partner/link"; const endorserPartnerUrl = partnerServer + "/api/partner/link";
const timeSafariUrl = window.location.origin + "/claim/" + jwtId; const timeSafariUrl = window.location.origin + "/claim/" + jwtId;
const content = this.fullClaim.name + " - see " + timeSafariUrl; const content = this.fullClaim.name + " - see " + timeSafariUrl;
const publicKeyHex = const publicKeyHex = accountFromExtendedKey(publicExtendedKey).publicKey;
accountFromExtendedKey(publicExtendedKey).publicKey;
const unsignedPayload: UnsignedEvent = { const unsignedPayload: UnsignedEvent = {
// why doesn't "...signedPayload" work? // why doesn't "...signedPayload" work?
kind: signedPayload.kind, kind: signedPayload.kind,

10
src/views/NewIdentifierView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -25,16 +25,16 @@
<div /> <div />
<div v-if="loading"> <div v-if="loading">
<span class="text-xl">Creating...&nbsp;</span> <span class="text-xl">Creating...&nbsp;</span>
<fa <font-awesome
icon="spinner" icon="spinner"
class="fa-spin fa-spin-pulse" class="fa-spin fa-spin-pulse"
color="green" color="green"
size="128" size="128"
></fa> ></font-awesome>
</div> </div>
<div v-else> <div v-else>
<span class="text-xl">Created!</span> <span class="text-xl">Created!</span>
<fa <font-awesome
icon="burst" icon="burst"
class="fa-beat px-12" class="fa-beat px-12"
color="green" color="green"
@ -44,7 +44,7 @@
--fa-animation-iteration-count: 1; --fa-animation-iteration-count: 1;
--fa-beat-scale: 6; --fa-beat-scale: 6;
" "
></fa> ></font-awesome>
</div> </div>
<div /> <div />
</div> </div>

12
src/views/OfferDetailsView.vue

@ -13,7 +13,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="cancelBack()" @click="cancelBack()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -49,7 +49,7 @@
class="border border-r-0 border-slate-400 bg-slate-200 px-4 py-2" class="border border-r-0 border-slate-400 bg-slate-200 px-4 py-2"
@click="amountInput === '0' ? null : decrement()" @click="amountInput === '0' ? null : decrement()"
> >
<fa icon="chevron-left" /> <font-awesome icon="chevron-left" />
</div> </div>
<input <input
type="number" type="number"
@ -61,7 +61,7 @@
class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2" class="rounded-r border border-slate-400 bg-slate-200 px-4 py-2"
@click="increment()" @click="increment()"
> >
<fa icon="chevron-right" /> <font-awesome icon="chevron-right" />
</div> </div>
</div> </div>
@ -98,7 +98,7 @@
class="h-6 w-6 mr-2" class="h-6 w-6 mr-2"
v-model="offeredToProject" v-model="offeredToProject"
/> />
<fa <font-awesome
v-else v-else
icon="square" icon="square"
class="bg-slate-500 text-slate-500 h-5 w-5 px-0.5 py-0.5 mr-2 rounded" class="bg-slate-500 text-slate-500 h-5 w-5 px-0.5 py-0.5 mr-2 rounded"
@ -120,7 +120,7 @@
class="h-6 w-6 mr-2" class="h-6 w-6 mr-2"
v-model="offeredToRecipient" v-model="offeredToRecipient"
/> />
<fa <font-awesome
v-else v-else
icon="square" icon="square"
class="bg-slate-500 text-slate-500 h-5 w-5 px-0.5 py-0.5 mr-2 rounded" class="bg-slate-500 text-slate-500 h-5 w-5 px-0.5 py-0.5 mr-2 rounded"
@ -151,7 +151,7 @@
<p class="text-center mb-2 mt-6 italic"> <p class="text-center mb-2 mt-6 italic">
Sign & Send to publish to the world Sign & Send to publish to the world
<fa <font-awesome
icon="circle-info" icon="circle-info"
class="pl-2 text-blue-500 cursor-pointer" class="pl-2 text-blue-500 cursor-pointer"
@click="explainData()" @click="explainData()"

4
src/views/OnboardMeetingListView.vue

@ -10,7 +10,7 @@
<!-- Loading State --> <!-- Loading State -->
<div v-if="isLoading" class="flex justify-center items-center py-8"> <div v-if="isLoading" class="flex justify-center items-center py-8">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</div> </div>
<div v-else-if="attendingMeeting"> <div v-else-if="attendingMeeting">
@ -26,7 +26,7 @@
class="text-red-600 hover:text-red-700 p-2" class="text-red-600 hover:text-red-700 p-2"
title="Leave Meeting" title="Leave Meeting"
> >
<fa icon="right-from-bracket" /> <font-awesome icon="right-from-bracket" />
</button> </button>
</div> </div>
</div> </div>

2
src/views/OnboardMeetingMembersView.vue

@ -13,7 +13,7 @@
class="mt-16 text-center text-4xl bg-slate-400 text-white w-14 py-2.5 rounded-full mx-auto" class="mt-16 text-center text-4xl bg-slate-400 text-white w-14 py-2.5 rounded-full mx-auto"
v-if="isLoading" v-if="isLoading"
> >
<fa icon="spinner" class="fa-spin-pulse"></fa> <font-awesome icon="spinner" class="fa-spin-pulse"></font-awesome>
</div> </div>
<!-- Error State --> <!-- Error State -->

8
src/views/OnboardMeetingSetupView.vue

@ -21,7 +21,7 @@
class="mb-4 text-blue-600 hover:text-blue-800 transition-colors duration-200 ml-2" class="mb-4 text-blue-600 hover:text-blue-800 transition-colors duration-200 ml-2"
title="Edit Meeting" title="Edit Meeting"
> >
<fa icon="pen" class="fa-fw" /> <font-awesome icon="pen" class="fa-fw" />
<span class="sr-only">{{ <span class="sr-only">{{
isInCreateMode() ? "Create Meeting" : "Edit Meeting" isInCreateMode() ? "Create Meeting" : "Edit Meeting"
}}</span> }}</span>
@ -34,7 +34,7 @@
:class="{ 'opacity-50 cursor-not-allowed': isDeleting }" :class="{ 'opacity-50 cursor-not-allowed': isDeleting }"
title="Delete Meeting" title="Delete Meeting"
> >
<fa icon="trash-can" class="fa-fw" /> <font-awesome icon="trash-can" class="fa-fw" />
<span class="sr-only">{{ <span class="sr-only">{{
isDeleting ? "Deleting..." : "Delete Meeting" isDeleting ? "Deleting..." : "Delete Meeting"
}}</span> }}</span>
@ -204,7 +204,7 @@
class="inline-block text-blue-600" class="inline-block text-blue-600"
target="_blank" target="_blank"
> >
&bull; Open shortcut page for members <fa icon="external-link" /> &bull; Open shortcut page for members <font-awesome icon="external-link" />
</router-link> </router-link>
<MembersList <MembersList
@ -217,7 +217,7 @@
<div v-else-if="isLoading"> <div v-else-if="isLoading">
<div class="flex justify-center items-center h-full"> <div class="flex justify-center items-center h-full">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</div> </div>
</div> </div>
</section> </section>

66
src/views/ProjectViewView.vue

@ -13,7 +13,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</button> </button>
Project Idea Project Idea
</h1> </h1>
@ -25,7 +25,7 @@
title="Edit" title="Edit"
data-testId="editClaimButton" data-testId="editClaimButton"
> >
<fa icon="pen" class="text-sm text-blue-500 ml-2 mb-1" /> <font-awesome icon="pen" class="text-sm text-blue-500 ml-2 mb-1" />
</button> </button>
</h2> </h2>
</div> </div>
@ -48,7 +48,7 @@
<div class="overflow-hidden"> <div class="overflow-hidden">
<div class="text-sm mb-3"> <div class="text-sm mb-3">
<div class="truncate"> <div class="truncate">
<fa icon="user" class="fa-fw text-slate-400"></fa> <font-awesome icon="user" class="fa-fw text-slate-400"></font-awesome>
{{ issuerInfoObject?.displayName }} {{ issuerInfoObject?.displayName }}
<span v-if="!serverUtil.isEmptyOrHiddenDid(issuer)"> <span v-if="!serverUtil.isEmptyOrHiddenDid(issuer)">
<a <a
@ -56,11 +56,11 @@
target="_blank" target="_blank"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</span> </span>
<span v-else-if="serverUtil.isHiddenDid(issuer)"> <span v-else-if="serverUtil.isHiddenDid(issuer)">
<fa <font-awesome
icon="info-circle" icon="info-circle"
class="fa-fw text-blue-500 cursor-pointer" class="fa-fw text-blue-500 cursor-pointer"
@click="openHiddenDidDialog()" @click="openHiddenDidDialog()"
@ -68,35 +68,35 @@
</span> </span>
</div> </div>
<div v-if="startTime"> <div v-if="startTime">
<fa icon="calendar" class="fa-fw text-slate-400"></fa> <font-awesome icon="calendar" class="fa-fw text-slate-400"></font-awesome>
Starts {{ startTime }} Starts {{ startTime }}
</div> </div>
<div v-if="endTime"> <div v-if="endTime">
<fa icon="calendar" class="fa-fw text-slate-400"></fa> <font-awesome icon="calendar" class="fa-fw text-slate-400"></font-awesome>
Ends {{ endTime }} Ends {{ endTime }}
</div> </div>
<div v-if="latitude || longitude"> <div v-if="latitude || longitude">
<fa icon="location-dot" class="fa-fw text-slate-400"></fa> <font-awesome icon="location-dot" class="fa-fw text-slate-400"></font-awesome>
<a <a
:href="getOpenStreetMapUrl()" :href="getOpenStreetMapUrl()"
target="_blank" target="_blank"
class="underline text-blue-500" class="underline text-blue-500"
>Map View >Map View
<fa <font-awesome
icon="arrow-up-right-from-square" icon="arrow-up-right-from-square"
class="fa-fw text-blue-500" class="fa-fw text-blue-500"
/> />
</a> </a>
</div> </div>
<div v-if="url"> <div v-if="url">
<fa icon="globe" class="fa-fw text-slate-400"></fa> <font-awesome icon="globe" class="fa-fw text-slate-400"></font-awesome>
<a <a
:href="addScheme(url)" :href="addScheme(url)"
target="_blank" target="_blank"
class="underline text-blue-500" class="underline text-blue-500"
> >
{{ domainForWebsite(this.url) }} {{ domainForWebsite(this.url) }}
<fa icon="arrow-up-right-from-square" class="fa-fw" /> <font-awesome icon="arrow-up-right-from-square" class="fa-fw" />
</a> </a>
</div> </div>
</div> </div>
@ -124,7 +124,7 @@
</div> </div>
<a @click="onClickLoadClaim(projectId)" class="cursor-pointer"> <a @click="onClickLoadClaim(projectId)" class="cursor-pointer">
<fa icon="file-lines" class="pl-2 pt-1 text-blue-500" /> <font-awesome icon="file-lines" class="pl-2 pt-1 text-blue-500" />
</a> </a>
</div> </div>
</div> </div>
@ -181,7 +181,7 @@
class="grid grid-cols-4 sm:grid-cols-5 md:grid-cols-6 gap-x-3 gap-y-5 text-center mb-5 mt-2" class="grid grid-cols-4 sm:grid-cols-5 md:grid-cols-6 gap-x-3 gap-y-5 text-center mb-5 mt-2"
> >
<li @click="openGiftDialogToProject({ name: 'you', did: activeDid })"> <li @click="openGiftDialogToProject({ name: 'you', did: activeDid })">
<fa icon="hand" class="fa-fw text-blue-500 text-5xl cursor-pointer" /> <font-awesome icon="hand" class="fa-fw text-blue-500 text-5xl cursor-pointer" />
<h3 <h3
class="mt-5 text-xs text-blue-500 font-medium text-ellipsis whitespace-nowrap overflow-hidden cursor-pointer" class="mt-5 text-xs text-blue-500 font-medium text-ellipsis whitespace-nowrap overflow-hidden cursor-pointer"
> >
@ -266,7 +266,7 @@
> >
<div class="flex justify-between gap-4"> <div class="flex justify-between gap-4">
<span> <span>
<fa icon="user" class="fa-fw text-slate-400"></fa> <font-awesome icon="user" class="fa-fw text-slate-400"></font-awesome>
{{ {{
serverUtil.didInfo( serverUtil.didInfo(
offer.offeredByDid, offer.offeredByDid,
@ -277,14 +277,14 @@
}} }}
</span> </span>
<span v-if="offer.amount" class="whitespace-nowrap"> <span v-if="offer.amount" class="whitespace-nowrap">
<fa <font-awesome
:icon="libsUtil.iconForUnitCode(offer.unit)" :icon="libsUtil.iconForUnitCode(offer.unit)"
class="fa-fw text-slate-400" class="fa-fw text-slate-400"
/>{{ offer.amount }} />{{ offer.amount }}
</span> </span>
</div> </div>
<div v-if="offer.objectDescription" class="text-slate-500"> <div v-if="offer.objectDescription" class="text-slate-500">
<fa icon="comment" class="fa-fw text-slate-400" /> <font-awesome icon="comment" class="fa-fw text-slate-400" />
{{ offer.objectDescription }} {{ offer.objectDescription }}
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
@ -292,13 +292,13 @@
@click="onClickLoadClaim(offer.jwtId as string)" @click="onClickLoadClaim(offer.jwtId as string)"
class="cursor-pointer" class="cursor-pointer"
> >
<fa icon="file-lines" class="pl-2 pt-1 text-blue-500" /> <font-awesome icon="file-lines" class="pl-2 pt-1 text-blue-500" />
</a> </a>
<a <a
v-if="checkIsFulfillable(offer)" v-if="checkIsFulfillable(offer)"
@click="onClickFulfillGiveToOffer(offer)" @click="onClickFulfillGiveToOffer(offer)"
> >
<fa <font-awesome
icon="hand-holding-heart" icon="hand-holding-heart"
class="text-blue-500 cursor-pointer" class="text-blue-500 cursor-pointer"
/> />
@ -340,7 +340,7 @@
> >
<div class="flex justify-between gap-4"> <div class="flex justify-between gap-4">
<span> <span>
<fa icon="user" class="fa-fw text-slate-400" /> <font-awesome icon="user" class="fa-fw text-slate-400" />
{{ {{
serverUtil.didInfo( serverUtil.didInfo(
give.agentDid, give.agentDid,
@ -351,23 +351,23 @@
}} }}
</span> </span>
<span v-if="give.amount" class="whitespace-nowrap"> <span v-if="give.amount" class="whitespace-nowrap">
<fa <font-awesome
:icon="libsUtil.iconForUnitCode(give.unit)" :icon="libsUtil.iconForUnitCode(give.unit)"
class="fa-fw text-slate-400" class="fa-fw text-slate-400"
/>{{ give.amount }} />{{ give.amount }}
</span> </span>
</div> </div>
<div class="text-slate-500"> <div class="text-slate-500">
<fa icon="calendar" class="fa-fw text-slate-400" /> <font-awesome icon="calendar" class="fa-fw text-slate-400" />
{{ give.issuedAt?.substring(0, 10) }} {{ give.issuedAt?.substring(0, 10) }}
</div> </div>
<div v-if="give.description" class="text-slate-500"> <div v-if="give.description" class="text-slate-500">
<fa icon="comment" class="fa-fw text-slate-400" /> <font-awesome icon="comment" class="fa-fw text-slate-400" />
{{ give.description }} {{ give.description }}
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
<a @click="onClickLoadClaim(give.jwtId)"> <a @click="onClickLoadClaim(give.jwtId)">
<fa icon="file-lines" class="text-blue-500 cursor-pointer" /> <font-awesome icon="file-lines" class="text-blue-500 cursor-pointer" />
</a> </a>
<a <a
@ -377,13 +377,13 @@
" "
@click="deepCheckConfirmable(give)" @click="deepCheckConfirmable(give)"
> >
<fa icon="circle-check" class="text-blue-500 cursor-pointer" /> <font-awesome icon="circle-check" class="text-blue-500 cursor-pointer" />
</a> </a>
<a v-else-if="checkingConfirmationForJwtId === give.jwtId"> <a v-else-if="checkingConfirmationForJwtId === give.jwtId">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</a> </a>
<a v-else @click="shallowNotifyWhyCannotConfirm(give)"> <a v-else @click="shallowNotifyWhyCannotConfirm(give)">
<fa icon="circle-check" class="text-slate-500 cursor-pointer" /> <font-awesome icon="circle-check" class="text-slate-500 cursor-pointer" />
</a> </a>
</div> </div>
<div v-if="give.fullClaim.image" class="flex justify-center"> <div v-if="give.fullClaim.image" class="flex justify-center">
@ -440,23 +440,23 @@
}} }}
</span> </span>
<span v-if="give.amount" class="whitespace-nowrap"> <span v-if="give.amount" class="whitespace-nowrap">
<fa <font-awesome
:icon="libsUtil.iconForUnitCode(give.unit)" :icon="libsUtil.iconForUnitCode(give.unit)"
class="fa-fw text-slate-400" class="fa-fw text-slate-400"
/>{{ give.amount }} />{{ give.amount }}
</span> </span>
</div> </div>
<div class="text-slate-500"> <div class="text-slate-500">
<fa icon="calendar" class="fa-fw text-slate-400" /> <font-awesome icon="calendar" class="fa-fw text-slate-400" />
{{ give.issuedAt?.substring(0, 10) }} {{ give.issuedAt?.substring(0, 10) }}
</div> </div>
<div v-if="give.description" class="text-slate-500"> <div v-if="give.description" class="text-slate-500">
<fa icon="comment" class="fa-fw text-slate-400" /> <font-awesome icon="comment" class="fa-fw text-slate-400" />
{{ give.description }} {{ give.description }}
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
<a @click="onClickLoadClaim(give.jwtId)"> <a @click="onClickLoadClaim(give.jwtId)">
<fa icon="file-lines" class="text-blue-500 cursor-pointer" /> <font-awesome icon="file-lines" class="text-blue-500 cursor-pointer" />
</a> </a>
<a <a
@ -466,13 +466,13 @@
" "
@click="deepCheckConfirmable(give)" @click="deepCheckConfirmable(give)"
> >
<fa icon="circle-check" class="text-blue-500 cursor-pointer" /> <font-awesome icon="circle-check" class="text-blue-500 cursor-pointer" />
</a> </a>
<a v-else-if="checkingConfirmationForJwtId === give.jwtId"> <a v-else-if="checkingConfirmationForJwtId === give.jwtId">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</a> </a>
<a v-else @click="shallowNotifyWhyCannotConfirm(give)"> <a v-else @click="shallowNotifyWhyCannotConfirm(give)">
<fa icon="circle-check" class="text-slate-500 cursor-pointer" /> <font-awesome icon="circle-check" class="text-slate-500 cursor-pointer" />
</a> </a>
</div> </div>
<div v-if="give.fullClaim.image" class="flex justify-center"> <div v-if="give.fullClaim.image" class="flex justify-center">

24
src/views/ProjectsView.vue

@ -57,7 +57,7 @@
<button <button
class="px-4 rounded-r bg-slate-200 border border-l-0 border-slate-400" class="px-4 rounded-r bg-slate-200 border border-l-0 border-slate-400"
> >
<fa icon="magnifying-glass" class="fa-fw"></fa> <font-awesome icon="magnifying-glass" class="fa-fw"></font-awesome>
</button> </button>
</div> </div>
--> -->
@ -68,7 +68,7 @@
class="fixed right-6 top-24 text-center text-4xl leading-none bg-green-600 text-white w-14 py-2.5 rounded-full" class="fixed right-6 top-24 text-center text-4xl leading-none bg-green-600 text-white w-14 py-2.5 rounded-full"
@click="onClickNewProject()" @click="onClickNewProject()"
> >
<fa icon="plus" class="fa-fw"></fa> <font-awesome icon="plus" class="fa-fw"></font-awesome>
</button> </button>
<!-- Loading Animation --> <!-- Loading Animation -->
@ -76,7 +76,7 @@
class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full"
v-if="isLoading" v-if="isLoading"
> >
<fa icon="spinner" class="fa-spin-pulse"></fa> <font-awesome icon="spinner" class="fa-spin-pulse"></font-awesome>
</div> </div>
<!-- Offer Results List --> <!-- Offer Results List -->
@ -130,17 +130,17 @@
<span class="text-sm"> <span class="text-sm">
<span v-if="offer.amount"> <span v-if="offer.amount">
<fa <font-awesome
:icon="libsUtil.iconForUnitCode(offer.unit)" :icon="libsUtil.iconForUnitCode(offer.unit)"
class="fa-fw text-slate-400" class="fa-fw text-slate-400"
/> />
<span v-if="offer.amountGiven >= offer.amount"> <span v-if="offer.amountGiven >= offer.amount">
<fa icon="check-circle" class="fa-fw text-green-500" /> <font-awesome icon="check-circle" class="fa-fw text-green-500" />
All {{ offer.amount }} given All {{ offer.amount }} given
</span> </span>
<span v-else> <span v-else>
<fa <font-awesome
icon="triangle-exclamation" icon="triangle-exclamation"
class="fa-fw text-yellow-500" class="fa-fw text-yellow-500"
/> />
@ -162,7 +162,7 @@
</span> </span>
<span v-else> <span v-else>
<!-- only show icon if there's not already a warning --> <!-- only show icon if there's not already a warning -->
<fa <font-awesome
v-if="offer.amountGiven >= offer.amount" v-if="offer.amountGiven >= offer.amount"
icon="triangle-exclamation" icon="triangle-exclamation"
class="fa-fw text-yellow-300" class="fa-fw text-yellow-300"
@ -176,13 +176,13 @@
<span v-else> <span v-else>
<!-- Non-amount offer --> <!-- Non-amount offer -->
<span v-if="offer.nonAmountGivenConfirmed"> <span v-if="offer.nonAmountGivenConfirmed">
<fa icon="check-circle" class="fa-fw text-green-500" /> <font-awesome icon="check-circle" class="fa-fw text-green-500" />
{{ offer.nonAmountGivenConfirmed }} {{ offer.nonAmountGivenConfirmed }}
{{ offer.nonAmountGivenConfirmed == 1 ? "give" : "gives" }} {{ offer.nonAmountGivenConfirmed == 1 ? "give" : "gives" }}
are confirmed. are confirmed.
</span> </span>
<span v-else> <span v-else>
<fa <font-awesome
icon="triangle-exclamation" icon="triangle-exclamation"
class="fa-fw text-yellow-500" class="fa-fw text-yellow-500"
/> />
@ -191,10 +191,10 @@
</span> </span>
<a @click="onClickLoadClaim(offer.jwtId)"> <a @click="onClickLoadClaim(offer.jwtId)">
<fa <font-awesome
icon="file-lines" icon="file-lines"
class="pl-2 text-blue-500 cursor-pointer" class="pl-2 text-blue-500 cursor-pointer"
></fa> ></font-awesome>
</a> </a>
</span> </span>
</div> </div>
@ -209,7 +209,7 @@
You have not announced any projects. You have not announced any projects.
<div v-if="isRegistered"> <div v-if="isRegistered">
Hit the big Hit the big
<fa <font-awesome
icon="plus" icon="plus"
class="bg-green-600 text-white px-1.5 py-1 rounded-full" class="bg-green-600 text-white px-1.5 py-1 rounded-full"
/> />

2
src/views/QuickActionBvcBeginView.vue

@ -10,7 +10,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>

8
src/views/QuickActionBvcEndView.vue

@ -10,7 +10,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -22,7 +22,7 @@
<div> <div>
<h2 class="text-2xl m-2">Confirm</h2> <h2 class="text-2xl m-2">Confirm</h2>
<div v-if="loadingConfirms" class="flex justify-center"> <div v-if="loadingConfirms" class="flex justify-center">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</div> </div>
<div v-else-if="claimsToConfirm.length === 0"> <div v-else-if="claimsToConfirm.length === 0">
There are no claims yet today for you to confirm. There are no claims yet today for you to confirm.
@ -59,7 +59,7 @@
) )
}} }}
<a @click="onClickLoadClaim(record.id)"> <a @click="onClickLoadClaim(record.id)">
<fa <font-awesome
icon="file-lines" icon="file-lines"
class="pl-2 text-blue-500 cursor-pointer" class="pl-2 text-blue-500 cursor-pointer"
/> />
@ -78,7 +78,7 @@
}} }}
so if you expected but do not see details from someone then ask them to so if you expected but do not see details from someone then ask them to
check that their activity is visible to you on their Contacts check that their activity is visible to you on their Contacts
<fa icon="users" class="text-slate-500" /> <font-awesome icon="users" class="text-slate-500" />
page. page.
</span> </span>
</div> </div>

2
src/views/QuickActionBvcView.vue

@ -10,7 +10,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>

8
src/views/RecentOffersToUserProjectsView.vue

@ -6,7 +6,7 @@
<div id="ViewBreadcrumb" class="mb-8"> <div id="ViewBreadcrumb" class="mb-8">
<h1 class="text-lg text-center font-light relative px-7"> <h1 class="text-lg text-center font-light relative px-7">
<!-- Back --> <!-- Back -->
<fa <font-awesome
icon="chevron-left" icon="chevron-left"
@click="$router.back()" @click="$router.back()"
class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@ -20,13 +20,13 @@
<p class="mt-2"> <p class="mt-2">
Maybe there are already some projects you can help on the Maybe there are already some projects you can help on the
<router-link to="/discover" class="text-blue-500"> <router-link to="/discover" class="text-blue-500">
Discover page <fa icon="search" /> Discover page <font-awesome icon="search" />
</router-link> </router-link>
</p> </p>
<p class="mt-2"> <p class="mt-2">
You can announce more of your own on You can announce more of your own on
<router-link to="/contacts" class="text-blue-500"> <router-link to="/contacts" class="text-blue-500">
Your Ideas page <fa icon="hand" /> Your Ideas page <font-awesome icon="hand" />
</router-link> </router-link>
</p> </p>
</div> </div>
@ -65,7 +65,7 @@
:to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }" :to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" /> <font-awesome icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" />
</router-link> </router-link>
</li> </li>
</ul> </ul>

6
src/views/RecentOffersToUserView.vue

@ -6,7 +6,7 @@
<div id="ViewBreadcrumb" class="mb-8"> <div id="ViewBreadcrumb" class="mb-8">
<h1 class="text-lg text-center font-light relative px-7"> <h1 class="text-lg text-center font-light relative px-7">
<!-- Back --> <!-- Back -->
<fa <font-awesome
icon="chevron-left" icon="chevron-left"
@click="$router.back()" @click="$router.back()"
class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@ -20,7 +20,7 @@
<p class="mt-2"> <p class="mt-2">
You can start the cycle on the You can start the cycle on the
<router-link to="/contacts" class="text-blue-500"> <router-link to="/contacts" class="text-blue-500">
Contacts page <fa icon="users" /> Contacts page <font-awesome icon="users" />
</router-link> </router-link>
with an "Offer" directly to someone. Hopefully you'll find a common with an "Offer" directly to someone. Hopefully you'll find a common
interest! interest!
@ -58,7 +58,7 @@
:to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }" :to="{ path: '/claim/' + encodeURIComponent(offer.jwtId) }"
class="text-blue-500" class="text-blue-500"
> >
<fa icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" /> <font-awesome icon="file-lines" class="pl-2 text-blue-500 cursor-pointer" />
</router-link> </router-link>
</li> </li>
</ul> </ul>

10
src/views/SearchAreaView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -35,7 +35,7 @@
class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500" class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500"
@click="storeSearchBox" @click="storeSearchBox"
> >
<fa icon="save" class="fa-fw" /> <font-awesome icon="save" class="fa-fw" />
Store This Location for Nearby Search Store This Location for Nearby Search
</button> </button>
<button <button
@ -43,7 +43,7 @@
class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500" class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500"
@click="forgetSearchBox" @click="forgetSearchBox"
> >
<fa icon="trash-can" class="fa-fw" /> <font-awesome icon="trash-can" class="fa-fw" />
Delete Stored Location Delete Stored Location
</button> </button>
<button <button
@ -51,7 +51,7 @@
class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500" class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500"
@click="resetLatLong" @click="resetLatLong"
> >
<fa icon="rotate" class="fa-fw" /> <font-awesome icon="rotate" class="fa-fw" />
Reset To Original Reset To Original
</button> </button>
<button <button
@ -59,7 +59,7 @@
class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500" class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500"
@click="isNewMarkerSet = false" @click="isNewMarkerSet = false"
> >
<fa icon="eraser" class="fa-fw" /> <font-awesome icon="eraser" class="fa-fw" />
Erase Marker Erase Marker
</button> </button>
<div v-if="isNewMarkerSet"> <div v-if="isNewMarkerSet">

6
src/views/SeedBackupView.vue

@ -8,7 +8,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -62,7 +62,7 @@
) )
" "
> >
<fa icon="copy" class="text-slate-400 fa-fw"></fa> <font-awesome icon="copy" class="text-slate-400 fa-fw"></font-awesome>
</button> </button>
<span v-show="showCopiedSeed" class="text-sm text-green-500"> <span v-show="showCopiedSeed" class="text-sm text-green-500">
Copied Copied
@ -79,7 +79,7 @@
) )
" "
> >
<fa icon="copy" class="text-slate-400 fa-fw"></fa> <font-awesome icon="copy" class="text-slate-400 fa-fw"></font-awesome>
</button> </button>
<span v-show="showCopiedDeri" class="text-sm text-green-500" <span v-show="showCopiedDeri" class="text-sm text-green-500"
>Copied</span >Copied</span

4
src/views/ShareMyContactInfoView.vue

@ -12,7 +12,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw" /> <font-awesome icon="chevron-left" class="fa-fw" />
</h1> </h1>
</div> </div>
@ -34,7 +34,7 @@
<div class="mt-8">Click to copy your info, then send it to them.</div> <div class="mt-8">Click to copy your info, then send it to them.</div>
<div> <div>
They will paste it in the input box on the Contacts They will paste it in the input box on the Contacts
<fa icon="users" /> screen. <font-awesome icon="users" /> screen.
</div> </div>
</div> </div>
</section> </section>

8
src/views/SharedPhotoView.vue

@ -8,7 +8,7 @@
</h1> </h1>
<div v-if="imageBlob"> <div v-if="imageBlob">
<div v-if="uploading" class="text-center mb-4"> <div v-if="uploading" class="text-center mb-4">
<fa icon="spinner" class="fa-spin-pulse" /> <font-awesome icon="spinner" class="fa-spin-pulse" />
</div> </div>
<div v-else> <div v-else>
<div class="text-center mb-4">Choose how to use this image</div> <div class="text-center mb-4">Choose how to use this image</div>
@ -17,21 +17,21 @@
@click="recordGift" @click="recordGift"
class="text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md" class="text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md"
> >
<fa icon="gift" class="fa-fw" /> <font-awesome icon="gift" class="fa-fw" />
Record a Gift Record a Gift
</button> </button>
<button <button
@click="recordProfile" @click="recordProfile"
class="text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md" class="text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md"
> >
<fa icon="circle-user" class="fa-fw" /> <font-awesome icon="circle-user" class="fa-fw" />
Save as Profile Image Save as Profile Image
</button> </button>
<button <button
@click="cancel" @click="cancel"
class="text-center text-md font-bold bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md" class="text-center text-md font-bold bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md"
> >
<fa icon="ban" class="fa-fw" /> <font-awesome icon="ban" class="fa-fw" />
Cancel Cancel
</button> </button>
</div> </div>

6
src/views/StartView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>
@ -34,7 +34,7 @@
href="https://www.perplexity.ai/search/what-are-passkeys-v2SHV3yLQlyA2CYH6.Nvhg" href="https://www.perplexity.ai/search/what-are-passkeys-v2SHV3yLQlyA2CYH6.Nvhg"
target="_blank" target="_blank"
> >
<fa icon="info-circle" class="fa-fw text-blue-500" /> <font-awesome icon="info-circle" class="fa-fw text-blue-500" />
</a> </a>
</p> </p>
<p class="text-center font-light mt-4"> <p class="text-center font-light mt-4">
@ -44,7 +44,7 @@
href="https://www.perplexity.ai/search/what-is-a-seed-phrase-OqiP9foVRXidr_2le5OFKA" href="https://www.perplexity.ai/search/what-is-a-seed-phrase-OqiP9foVRXidr_2le5OFKA"
target="_blank" target="_blank"
> >
<fa icon="info-circle" class="fa-fw text-blue-500" /> <font-awesome icon="info-circle" class="fa-fw text-blue-500" />
</a> </a>
</p> </p>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2 mt-4"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-2 mt-4">

2
src/views/StatisticsView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>

2
src/views/TestView.vue

@ -11,7 +11,7 @@
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
@click="$router.back()" @click="$router.back()"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</h1> </h1>
</div> </div>

6
src/views/UserProfileView.vue

@ -12,7 +12,7 @@
@click="$router.go(-1)" @click="$router.go(-1)"
class="text-lg text-center px-2 py-1 absolute -left-2 -top-1" class="text-lg text-center px-2 py-1 absolute -left-2 -top-1"
> >
<fa icon="chevron-left" class="fa-fw"></fa> <font-awesome icon="chevron-left" class="fa-fw"></font-awesome>
</button> </button>
Individual Profile Individual Profile
</h1> </h1>
@ -23,14 +23,14 @@
class="fixed left-6 mt-16 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" class="fixed left-6 mt-16 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full"
v-if="isLoading" v-if="isLoading"
> >
<fa icon="spinner" class="fa-spin-pulse"></fa> <font-awesome icon="spinner" class="fa-spin-pulse"></font-awesome>
</div> </div>
<div v-else-if="profile"> <div v-else-if="profile">
<!-- Profile Info --> <!-- Profile Info -->
<div class="mt-8"> <div class="mt-8">
<div class="text-sm"> <div class="text-sm">
<fa icon="user" class="fa-fw text-slate-400"></fa> <font-awesome icon="user" class="fa-fw text-slate-400"></font-awesome>
{{ didInfo(profile.issuerDid, activeDid, allMyDids, allContacts) }} {{ didInfo(profile.issuerDid, activeDid, allMyDids, allContacts) }}
</div> </div>
<p v-if="profile.description" class="mt-4 text-slate-600"> <p v-if="profile.description" class="mt-4 text-slate-600">

Loading…
Cancel
Save