@learncard/react 2.10.2 → 2.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +10 -10
  2. package/dist/base.css +1 -1
  3. package/dist/base.js +1 -1
  4. package/dist/cjs/{BoostGenericCard-52b35509.js → BoostGenericCard-5a07339f.js} +2 -2
  5. package/dist/cjs/{BoostGenericCard-52b35509.js.map → BoostGenericCard-5a07339f.js.map} +1 -1
  6. package/dist/cjs/{CertificateDisplayCard-2c6f5a4b.js → CertificateDisplayCard-a7940558.js} +4 -4
  7. package/dist/cjs/{CertificateDisplayCard-2c6f5a4b.js.map → CertificateDisplayCard-a7940558.js.map} +1 -1
  8. package/dist/cjs/CircleIcon-f0fa68c7.js.map +1 -1
  9. package/dist/cjs/{LearnCardCreditCardFrontFace-aca1b7bc.js → LearnCardCreditCardFrontFace-75fb4e44.js} +2 -2
  10. package/dist/cjs/{LearnCardCreditCardFrontFace-aca1b7bc.js.map → LearnCardCreditCardFrontFace-75fb4e44.js.map} +1 -1
  11. package/dist/cjs/{MeritBadgeDisplayCard-62ac8ad6.js → MeritBadgeDisplayCard-1c614da9.js} +4 -4
  12. package/dist/cjs/{MeritBadgeDisplayCard-62ac8ad6.js.map → MeritBadgeDisplayCard-1c614da9.js.map} +1 -1
  13. package/dist/cjs/{MeritBadgeSkillsCount-65786c6c.js → MeritBadgeSkillsCount-4dabf982.js} +2 -2
  14. package/dist/cjs/{MeritBadgeSkillsCount-65786c6c.js.map → MeritBadgeSkillsCount-4dabf982.js.map} +1 -1
  15. package/dist/cjs/{QRCodeCard-f0079bd9.js → QRCodeCard-2378411e.js} +2 -2
  16. package/dist/cjs/{QRCodeCard-f0079bd9.js.map → QRCodeCard-2378411e.js.map} +1 -1
  17. package/dist/cjs/{SchoolIDCard-dddb3b1d.js → SchoolIDCard-2d3cbb2c.js} +12 -7
  18. package/dist/cjs/SchoolIDCard-2d3cbb2c.js.map +1 -0
  19. package/dist/cjs/{VCCard-46e4212e.js → VCCard-5bb95d29.js} +3 -3
  20. package/dist/cjs/{VCCard-46e4212e.js.map → VCCard-5bb95d29.js.map} +1 -1
  21. package/dist/cjs/{VCDisplayBackFace-bcaeae1c.js → VCDisplayBackFace-864c35d5.js} +3 -3
  22. package/dist/cjs/{VCDisplayBackFace-bcaeae1c.js.map → VCDisplayBackFace-864c35d5.js.map} +1 -1
  23. package/dist/cjs/{VCDisplayCard-ce16bd9e.js → VCDisplayCard-15af27c6.js} +3 -3
  24. package/dist/cjs/{VCDisplayCard-ce16bd9e.js.map → VCDisplayCard-15af27c6.js.map} +1 -1
  25. package/dist/cjs/{VCDisplayCard2-e8e84f7e.js → VCDisplayCard2-f3f5c6c4.js} +28 -23
  26. package/dist/cjs/VCDisplayCard2-f3f5c6c4.js.map +1 -0
  27. package/dist/cjs/{VCVerificationPill-40c09268.js → VCVerificationPill-20ed4d3c.js} +2 -2
  28. package/dist/cjs/{VCVerificationPill-40c09268.js.map → VCVerificationPill-20ed4d3c.js.map} +1 -1
  29. package/dist/cjs/{VerifierStateBadgeAndText-db7a1881.js → VerifierStateBadgeAndText-de5bd85f.js} +4771 -2863
  30. package/dist/cjs/VerifierStateBadgeAndText-de5bd85f.js.map +1 -0
  31. package/dist/cjs/{credential.helpers-62edac8a.js → credential.helpers-b4d27c8a.js} +3 -3
  32. package/dist/cjs/credential.helpers-b4d27c8a.js.map +1 -0
  33. package/dist/cjs/{index-ec1d26f1.js → index-330dcb9c.js} +1 -1
  34. package/dist/cjs/index-330dcb9c.js.map +1 -0
  35. package/dist/cjs/{index-838fa72c.js → index-47efbf5b.js} +1 -1
  36. package/dist/cjs/index-47efbf5b.js.map +1 -0
  37. package/dist/cjs/{index-0cac2c5b.js → index-da255c9a.js} +1 -1
  38. package/dist/cjs/index-da255c9a.js.map +1 -0
  39. package/dist/cjs/index.js +18 -18
  40. package/dist/cjs/index14.js +18 -18
  41. package/dist/cjs/index18.js +2 -2
  42. package/dist/cjs/index22.js +6 -6
  43. package/dist/cjs/index28.js +2 -2
  44. package/dist/cjs/index31.js +2 -2
  45. package/dist/cjs/index39.js +12 -12
  46. package/dist/cjs/index4.js +4 -4
  47. package/dist/cjs/index40.js +5 -5
  48. package/dist/cjs/index41.js +6 -6
  49. package/dist/cjs/index42.js +8 -8
  50. package/dist/cjs/index43.js +2 -2
  51. package/dist/cjs/index46.js +2 -2
  52. package/dist/cjs/index7.js +5 -5
  53. package/dist/cjs/{types.esm-60d3a9fc.js → types.esm-40b77196.js} +3833 -375
  54. package/dist/cjs/types.esm-40b77196.js.map +1 -0
  55. package/dist/esm/{BoostGenericCard-18e140ec.js → BoostGenericCard-997af0f5.js} +2 -2
  56. package/dist/esm/{BoostGenericCard-18e140ec.js.map → BoostGenericCard-997af0f5.js.map} +1 -1
  57. package/dist/esm/{CertificateDisplayCard-d49f9c9c.js → CertificateDisplayCard-d764151e.js} +4 -4
  58. package/dist/esm/{CertificateDisplayCard-d49f9c9c.js.map → CertificateDisplayCard-d764151e.js.map} +1 -1
  59. package/dist/esm/CircleIcon-abd5ff06.js.map +1 -1
  60. package/dist/esm/{LearnCardCreditCardFrontFace-b7c917f5.js → LearnCardCreditCardFrontFace-13d29504.js} +2 -2
  61. package/dist/esm/{LearnCardCreditCardFrontFace-b7c917f5.js.map → LearnCardCreditCardFrontFace-13d29504.js.map} +1 -1
  62. package/dist/esm/{MeritBadgeDisplayCard-f72efa12.js → MeritBadgeDisplayCard-907627ed.js} +4 -4
  63. package/dist/esm/{MeritBadgeDisplayCard-f72efa12.js.map → MeritBadgeDisplayCard-907627ed.js.map} +1 -1
  64. package/dist/esm/{MeritBadgeSkillsCount-395deb31.js → MeritBadgeSkillsCount-9474bd51.js} +2 -2
  65. package/dist/esm/{MeritBadgeSkillsCount-395deb31.js.map → MeritBadgeSkillsCount-9474bd51.js.map} +1 -1
  66. package/dist/esm/{QRCodeCard-8f29c3c7.js → QRCodeCard-3abf9f33.js} +2 -2
  67. package/dist/esm/{QRCodeCard-8f29c3c7.js.map → QRCodeCard-3abf9f33.js.map} +1 -1
  68. package/dist/esm/{SchoolIDCard-4e51671c.js → SchoolIDCard-fbd1cf6c.js} +12 -7
  69. package/dist/esm/SchoolIDCard-fbd1cf6c.js.map +1 -0
  70. package/dist/esm/{VCCard-5153f069.js → VCCard-ce4b451d.js} +3 -3
  71. package/dist/esm/{VCCard-5153f069.js.map → VCCard-ce4b451d.js.map} +1 -1
  72. package/dist/esm/{VCDisplayBackFace-986b439b.js → VCDisplayBackFace-e347145c.js} +3 -3
  73. package/dist/esm/{VCDisplayBackFace-986b439b.js.map → VCDisplayBackFace-e347145c.js.map} +1 -1
  74. package/dist/esm/{VCDisplayCard-eaa782c4.js → VCDisplayCard-3002776b.js} +3 -3
  75. package/dist/esm/{VCDisplayCard-eaa782c4.js.map → VCDisplayCard-3002776b.js.map} +1 -1
  76. package/dist/esm/{VCDisplayCard2-006e7a8c.js → VCDisplayCard2-db880bbb.js} +28 -23
  77. package/dist/esm/VCDisplayCard2-db880bbb.js.map +1 -0
  78. package/dist/esm/{VCVerificationPill-80c774e2.js → VCVerificationPill-5a05423b.js} +2 -2
  79. package/dist/esm/{VCVerificationPill-80c774e2.js.map → VCVerificationPill-5a05423b.js.map} +1 -1
  80. package/dist/esm/{VerifierStateBadgeAndText-a1bd5f0c.js → VerifierStateBadgeAndText-bd1b0131.js} +4771 -2863
  81. package/dist/esm/VerifierStateBadgeAndText-bd1b0131.js.map +1 -0
  82. package/dist/esm/{credential.helpers-b6acd108.js → credential.helpers-26e1a359.js} +3 -3
  83. package/dist/esm/credential.helpers-26e1a359.js.map +1 -0
  84. package/dist/esm/{index-2ef835bd.js → index-bc6b8b0b.js} +1 -1
  85. package/dist/{cjs/index-ec1d26f1.js.map → esm/index-bc6b8b0b.js.map} +1 -1
  86. package/dist/esm/{index-eae3ca64.js → index-cb3a593b.js} +1 -1
  87. package/dist/esm/index-cb3a593b.js.map +1 -0
  88. package/dist/esm/{index-4fa491c1.js → index-cbd2e9db.js} +1 -1
  89. package/dist/esm/index-cbd2e9db.js.map +1 -0
  90. package/dist/esm/index.js +18 -18
  91. package/dist/esm/index14.js +18 -18
  92. package/dist/esm/index18.js +2 -2
  93. package/dist/esm/index22.js +6 -6
  94. package/dist/esm/index28.js +2 -2
  95. package/dist/esm/index31.js +2 -2
  96. package/dist/esm/index39.js +12 -12
  97. package/dist/esm/index4.js +4 -4
  98. package/dist/esm/index40.js +5 -5
  99. package/dist/esm/index41.js +6 -6
  100. package/dist/esm/index42.js +8 -8
  101. package/dist/esm/index43.js +2 -2
  102. package/dist/esm/index46.js +2 -2
  103. package/dist/esm/index7.js +5 -5
  104. package/dist/esm/{types.esm-59c23f9b.js → types.esm-13bb929b.js} +3833 -375
  105. package/dist/esm/types.esm-13bb929b.js.map +1 -0
  106. package/dist/main.css +1 -1
  107. package/dist/main.js +1 -1
  108. package/package.json +102 -87
  109. package/src/assets/icons/accommodationsIcon.svg +5 -0
  110. package/src/assets/icons/accomplishmentsIcon.svg +4 -0
  111. package/src/assets/icons/achievementsIcon.svg +7 -0
  112. package/src/assets/icons/coursesIcon.svg +5 -0
  113. package/src/assets/icons/eventsIcon.svg +6 -0
  114. package/src/assets/icons/experiencesIcon.svg +4 -0
  115. package/src/assets/icons/goalsIcon.svg +5 -0
  116. package/src/assets/icons/idIcon.svg +4 -0
  117. package/src/assets/icons/membershipsIcon.svg +4 -0
  118. package/src/assets/icons/relationshipsIcon.svg +6 -0
  119. package/src/assets/icons/skillsIcon.svg +3 -0
  120. package/src/assets/icons/socialBadgesIcon.svg +7 -0
  121. package/src/assets/images/Accommodation-Hands.png +0 -0
  122. package/src/assets/images/ArrowArcLeft.svg +4 -0
  123. package/src/assets/images/ArrowArcRight.svg +4 -0
  124. package/src/assets/images/CaretRight.svg +3 -0
  125. package/src/assets/images/CaretRightFilled.svg +3 -0
  126. package/src/assets/images/DotsThreeOutline.svg +5 -0
  127. package/src/assets/images/GreenCheckCircle.svg +4 -0
  128. package/src/assets/images/RedXCircle.svg +5 -0
  129. package/src/assets/images/X.svg +4 -0
  130. package/src/assets/images/YellowWarningCircle.svg +4 -0
  131. package/src/assets/images/addawardlight.svg +8 -0
  132. package/src/assets/images/agriculture.png +0 -0
  133. package/src/assets/images/apple.png +0 -0
  134. package/src/assets/images/athletics.png +0 -0
  135. package/src/assets/images/award.svg +3 -0
  136. package/src/assets/images/backpack.png +0 -0
  137. package/src/assets/images/badge.png +0 -0
  138. package/src/assets/images/briefcase.svg +6 -0
  139. package/src/assets/images/business.png +0 -0
  140. package/src/assets/images/card-chip.svg +26 -0
  141. package/src/assets/images/check.svg +17 -0
  142. package/src/assets/images/coins.svg +3 -0
  143. package/src/assets/images/contactless-symbol.svg +3 -0
  144. package/src/assets/images/creative.png +0 -0
  145. package/src/assets/images/digital.png +0 -0
  146. package/src/assets/images/durable.png +0 -0
  147. package/src/assets/images/emptystate-death.png +0 -0
  148. package/src/assets/images/emptystate-dinocandle.png +0 -0
  149. package/src/assets/images/emptystate-ghost1.png +0 -0
  150. package/src/assets/images/eventsGraphic.png +0 -0
  151. package/src/assets/images/experience-mountain.png +0 -0
  152. package/src/assets/images/goals-target.png +0 -0
  153. package/src/assets/images/gradcaplight.svg +3 -0
  154. package/src/assets/images/graduation.svg +3 -0
  155. package/src/assets/images/icon.green.fat-arrow.png +0 -0
  156. package/src/assets/images/id-purple.png +0 -0
  157. package/src/assets/images/id-sleeve.png +0 -0
  158. package/src/assets/images/key-icon.svg +4 -0
  159. package/src/assets/images/lhplaceholder.png +0 -0
  160. package/src/assets/images/lightbulb.svg +3 -0
  161. package/src/assets/images/loveyou-icon.svg +5 -0
  162. package/src/assets/images/master-card-logo.svg +20 -0
  163. package/src/assets/images/medical.png +0 -0
  164. package/src/assets/images/membership-graphic.png +0 -0
  165. package/src/assets/images/membership-key.svg +9 -0
  166. package/src/assets/images/minigradcapcolored.svg +3 -0
  167. package/src/assets/images/minijob.svg +5 -0
  168. package/src/assets/images/minipuzzle.svg +3 -0
  169. package/src/assets/images/minipuzzlecolored.svg +3 -0
  170. package/src/assets/images/minitrophy.svg +3 -0
  171. package/src/assets/images/minitrophycolored.svg +3 -0
  172. package/src/assets/images/motlow-buckcard-bg.svg +32 -0
  173. package/src/assets/images/mountains-icon.svg +4 -0
  174. package/src/assets/images/photoplaceholder.png +0 -0
  175. package/src/assets/images/puzzle-icon.svg +3 -0
  176. package/src/assets/images/relationships-cats.png +0 -0
  177. package/src/assets/images/sample-badge.png +0 -0
  178. package/src/assets/images/skillgraph.svg +29 -0
  179. package/src/assets/images/skillplaceholder.png +0 -0
  180. package/src/assets/images/social-badge-2.png +0 -0
  181. package/src/assets/images/social-badge.png +0 -0
  182. package/src/assets/images/social-icon.svg +7 -0
  183. package/src/assets/images/social.png +0 -0
  184. package/src/assets/images/stem.png +0 -0
  185. package/src/assets/images/target-icon.svg +5 -0
  186. package/src/assets/images/trade.png +0 -0
  187. package/src/assets/images/trophy.svg +3 -0
  188. package/src/assets/images/user.svg +4 -0
  189. package/src/assets/images/users-icon.svg +6 -0
  190. package/src/assets/images/vc.check.svg +10 -0
  191. package/src/assets/images/verified-check.png +0 -0
  192. package/src/assets/images/walletTrophy.png +0 -0
  193. package/src/assets/images/walletcurrency.webp +0 -0
  194. package/src/assets/images/walletids.webp +0 -0
  195. package/src/assets/images/walletjobhistory.webp +0 -0
  196. package/src/assets/images/walletskills.webp +0 -0
  197. package/src/assets/styles/base.css +2 -0
  198. package/src/assets/styles/main.css +475 -0
  199. package/src/components/AchievementCard/AchievementCard.stories.tsx +31 -0
  200. package/src/components/AchievementCard/AchievementCard.tsx +88 -0
  201. package/src/components/AchievementCard/index.ts +5 -0
  202. package/src/components/BadgeThumbnailImg/BadgeThumbnailImg.test.tsx +47 -0
  203. package/src/components/BadgeThumbnailImg/BadgeThumbnailImg.tsx +72 -0
  204. package/src/components/BadgeThumbnailImg/index.ts +5 -0
  205. package/src/components/BoostGenericCard/AlignmentSkillsCount.tsx +54 -0
  206. package/src/components/BoostGenericCard/BoostGenericCard.stories.tsx +39 -0
  207. package/src/components/BoostGenericCard/BoostGenericCard.tsx +177 -0
  208. package/src/components/BoostGenericCard/index.ts +6 -0
  209. package/src/components/BoostSmallCard/BoostSmallCard.stories.tsx +57 -0
  210. package/src/components/BoostSmallCard/BoostSmallCard.tsx +178 -0
  211. package/src/components/BoostSmallCard/index.ts +5 -0
  212. package/src/components/Button/Button.stories.tsx +20 -0
  213. package/src/components/Button/Button.test.tsx +15 -0
  214. package/src/components/Button/Button.tsx +21 -0
  215. package/src/components/Button/index.ts +5 -0
  216. package/src/components/CertificateDisplayCard/AlignmentRow.tsx +26 -0
  217. package/src/components/CertificateDisplayCard/AlignmentsBox.tsx +70 -0
  218. package/src/components/CertificateDisplayCard/CertDisplayCardSkillsCount.tsx +66 -0
  219. package/src/components/CertificateDisplayCard/CertificateBackFace.tsx +130 -0
  220. package/src/components/CertificateDisplayCard/CertificateCornerIcon.tsx +48 -0
  221. package/src/components/CertificateDisplayCard/CertificateDisplayCard.stories.tsx +21 -0
  222. package/src/components/CertificateDisplayCard/CertificateDisplayCard.tsx +180 -0
  223. package/src/components/CertificateDisplayCard/CertificateFrontFace.tsx +308 -0
  224. package/src/components/CertificateDisplayCard/CertificateImageDisplay.test.tsx +43 -0
  225. package/src/components/CertificateDisplayCard/CertificateImageDisplay.tsx +68 -0
  226. package/src/components/CertificateDisplayCard/CertificateProfileImageDisplay.test.tsx +66 -0
  227. package/src/components/CertificateDisplayCard/CertificateProfileImageDisplay.tsx +64 -0
  228. package/src/components/CertificateDisplayCard/CertificateRibbon.tsx +43 -0
  229. package/src/components/CertificateDisplayCard/InfoBox.tsx +30 -0
  230. package/src/components/CertificateDisplayCard/MediaAttachmentsBox.tsx +347 -0
  231. package/src/components/CertificateDisplayCard/TruncateTextBox.tsx +73 -0
  232. package/src/components/CertificateDisplayCard/VerificationRow.tsx +67 -0
  233. package/src/components/CertificateDisplayCard/VerificationsBox.tsx +44 -0
  234. package/src/components/CertificateDisplayCard/VerifierStateBadgeAndText.tsx +100 -0
  235. package/src/components/CertificateDisplayCard/index.ts +20 -0
  236. package/src/components/CircleCheckButton/CircleCheckButton.stories.tsx +21 -0
  237. package/src/components/CircleCheckButton/CircleCheckButton.tsx +28 -0
  238. package/src/components/CircleCheckButton/index.ts +5 -0
  239. package/src/components/CircleIcon/CircleIcon.tsx +90 -0
  240. package/src/components/CircleIcon/__tests__/CircleIcon.test.tsx +38 -0
  241. package/src/components/CircleIcon/ci new +0 -0
  242. package/src/components/CircleIcon/index.ts +5 -0
  243. package/src/components/CourseCard/CourseCard.stories.tsx +23 -0
  244. package/src/components/CourseCard/CourseCard.tsx +94 -0
  245. package/src/components/CourseCard/index.ts +5 -0
  246. package/src/components/CourseVerticalCard/CourseVerticalCard.stories.tsx +31 -0
  247. package/src/components/CourseVerticalCard/CourseVerticalCard.tsx +118 -0
  248. package/src/components/CourseVerticalCard/index.ts +5 -0
  249. package/src/components/FlippyCard/FlippyCard.tsx +34 -0
  250. package/src/components/FlippyCard/__tests__/FlippyCard.test.tsx +41 -0
  251. package/src/components/FlippyCard/index.ts +5 -0
  252. package/src/components/GenericCard/GenericCard.stories.tsx +22 -0
  253. package/src/components/GenericCard/GenericCard.tsx +72 -0
  254. package/src/components/GenericCard/index.ts +5 -0
  255. package/src/components/JobHistoryCard/JobHistoryCard.stories.tsx +26 -0
  256. package/src/components/JobHistoryCard/JobHistoryCard.tsx +44 -0
  257. package/src/components/JobHistoryCard/index.ts +5 -0
  258. package/src/components/JobListCard/JobListCard.stories.tsx +54 -0
  259. package/src/components/JobListCard/JobListCard.tsx +162 -0
  260. package/src/components/JobListCard/index.ts +5 -0
  261. package/src/components/LearnCardCreditCardBackFace/LearnCardCreditCardBackFace.stories.tsx +31 -0
  262. package/src/components/LearnCardCreditCardBackFace/LearnCardCreditCardBackFace.tsx +104 -0
  263. package/src/components/LearnCardCreditCardBackFace/__tests__/LearnCardCreditCardBackFace.test.tsx +64 -0
  264. package/src/components/LearnCardCreditCardBackFace/index.ts +6 -0
  265. package/src/components/LearnCardCreditCardBackFace/types.ts +45 -0
  266. package/src/components/LearnCardCreditCardFrontFace/LearnCardCreditCardFrontFace.stories.tsx +28 -0
  267. package/src/components/LearnCardCreditCardFrontFace/LearnCardCreditCardFrontFace.tsx +102 -0
  268. package/src/components/LearnCardCreditCardFrontFace/__tests__/LearnCardCreditCardFrontFace.test.tsx +48 -0
  269. package/src/components/LearnCardCreditCardFrontFace/index.ts +6 -0
  270. package/src/components/LearnCardCreditCardFrontFace/types.ts +42 -0
  271. package/src/components/LearnPill/LearnPill.stories.tsx +20 -0
  272. package/src/components/LearnPill/LearnPill.tsx +35 -0
  273. package/src/components/LearnPill/index.ts +5 -0
  274. package/src/components/Lightbox/Lightbox.tsx +133 -0
  275. package/src/components/Lightbox/index.ts +5 -0
  276. package/src/components/Loading/CircleSpinner.tsx +52 -0
  277. package/src/components/Loading/index.ts +5 -0
  278. package/src/components/MeritBadgeDisplayCard/AlignmentRow.tsx +26 -0
  279. package/src/components/MeritBadgeDisplayCard/AlignmentsBox.tsx +70 -0
  280. package/src/components/MeritBadgeDisplayCard/InfoBox.tsx +30 -0
  281. package/src/components/MeritBadgeDisplayCard/MediaAttachmentsBox.tsx +347 -0
  282. package/src/components/MeritBadgeDisplayCard/MeritBadgeBackFace.tsx +130 -0
  283. package/src/components/MeritBadgeDisplayCard/MeritBadgeCornerIcon.tsx +46 -0
  284. package/src/components/MeritBadgeDisplayCard/MeritBadgeDisplayCard.tsx +177 -0
  285. package/src/components/MeritBadgeDisplayCard/MeritBadgeFrontFace.tsx +292 -0
  286. package/src/components/MeritBadgeDisplayCard/MeritBadgeImageDisplay.tsx +22 -0
  287. package/src/components/MeritBadgeDisplayCard/MeritBadgeProfileImageDisplay.test.tsx +70 -0
  288. package/src/components/MeritBadgeDisplayCard/MeritBadgeProfileImageDisplay.tsx +66 -0
  289. package/src/components/MeritBadgeDisplayCard/MeritBadgeRibbon.tsx +185 -0
  290. package/src/components/MeritBadgeDisplayCard/MeritBadgeSkillsCount.tsx +47 -0
  291. package/src/components/MeritBadgeDisplayCard/TruncateTextBox.tsx +73 -0
  292. package/src/components/MeritBadgeDisplayCard/VerificationRow.tsx +67 -0
  293. package/src/components/MeritBadgeDisplayCard/VerificationsBox.tsx +44 -0
  294. package/src/components/MeritBadgeDisplayCard/VerifierStateBadgeAndText.tsx +57 -0
  295. package/src/components/MeritBadgeDisplayCard/index.ts +20 -0
  296. package/src/components/MiniVCThumbnail/ MiniVCThumbnail.css +18 -0
  297. package/src/components/MiniVCThumbnail/ MiniVCThumbnail.stories.tsx +24 -0
  298. package/src/components/MiniVCThumbnail/MiniVCThumbnail.tsx +83 -0
  299. package/src/components/MiniVCThumbnail/__tests__/MiniVCThumbnail.test.tsx +59 -0
  300. package/src/components/MiniVCThumbnail/index.ts +6 -0
  301. package/src/components/MiniVCThumbnail/types.ts +32 -0
  302. package/src/components/Notification/Notification.stories.tsx +25 -0
  303. package/src/components/Notification/Notification.tsx +115 -0
  304. package/src/components/Notification/__tests__/Notification.test.tsx +111 -0
  305. package/src/components/Notification/index.ts +6 -0
  306. package/src/components/Notification/types.ts +97 -0
  307. package/src/components/NotificationBoostCard/NotificationBoostCard.stories.tsx +54 -0
  308. package/src/components/NotificationBoostCard/NotificationBoostCard.tsx +153 -0
  309. package/src/components/NotificationBoostCard/index.ts +6 -0
  310. package/src/components/NotificationBoostCard/types.ts +25 -0
  311. package/src/components/NotificationUserAcceptedBoostCard/NotificationUserAcceptedBoostCard.stories.tsx +28 -0
  312. package/src/components/NotificationUserAcceptedBoostCard/NotificationUserAcceptedBoostCard.tsx +96 -0
  313. package/src/components/NotificationUserAcceptedBoostCard/index.ts +6 -0
  314. package/src/components/NotificationUserAcceptedBoostCard/types.ts +13 -0
  315. package/src/components/NotificationUserCard/NotificationUserCard.stories.tsx +26 -0
  316. package/src/components/NotificationUserCard/NotificationUserCard.tsx +121 -0
  317. package/src/components/NotificationUserCard/index.ts +6 -0
  318. package/src/components/NotificationUserCard/types.ts +43 -0
  319. package/src/components/QRCodeCard/QRCodeCard.stories.tsx +26 -0
  320. package/src/components/QRCodeCard/QRCodeCard.tsx +54 -0
  321. package/src/components/QRCodeCard/__tests__/QRCodeCard.test.tsx +31 -0
  322. package/src/components/QRCodeCard/index.ts +6 -0
  323. package/src/components/QRCodeCard/types.ts +22 -0
  324. package/src/components/RoundedPill/RoundedPill.stories.tsx +21 -0
  325. package/src/components/RoundedPill/RoundedPill.tsx +137 -0
  326. package/src/components/RoundedPill/index.ts +5 -0
  327. package/src/components/RoundedSquare/RoundedSquare.stories.tsx +28 -0
  328. package/src/components/RoundedSquare/RoundedSquare.tsx +69 -0
  329. package/src/components/RoundedSquare/__tests__/RoundedSquare.test.tsx +35 -0
  330. package/src/components/RoundedSquare/constants.ts +63 -0
  331. package/src/components/RoundedSquare/index.ts +6 -0
  332. package/src/components/RoundedSquare/roudnedquarenew +0 -0
  333. package/src/components/SchoolIdCard/SchoolIDCard.stories.tsx +30 -0
  334. package/src/components/SchoolIdCard/SchoolIDCard.tsx +81 -0
  335. package/src/components/SchoolIdCard/index.ts +6 -0
  336. package/src/components/SchoolIdCard/types.ts +42 -0
  337. package/src/components/SkillTabCard/SkillTabCard.stories.tsx +25 -0
  338. package/src/components/SkillTabCard/SkillTabCard.tsx +44 -0
  339. package/src/components/SkillTabCard/index.ts +5 -0
  340. package/src/components/SkillVerticalCard/SkillVerticalCard.stories.tsx +20 -0
  341. package/src/components/SkillVerticalCard/SkillVerticalCard.tsx +32 -0
  342. package/src/components/SkillVerticalCard/index.ts +5 -0
  343. package/src/components/SkillsCard/SkillsCard.stories.tsx +24 -0
  344. package/src/components/SkillsCard/SkillsCard.tsx +68 -0
  345. package/src/components/SkillsCard/index.ts +5 -0
  346. package/src/components/SkillsStatsCard/SkillsStatsCard.stories.tsx +63 -0
  347. package/src/components/SkillsStatsCard/SkillsStatsCard.tsx +92 -0
  348. package/src/components/SkillsStatsCard/index.ts +5 -0
  349. package/src/components/SmallAchievementCard/SmallAchievementCard.stories.tsx +23 -0
  350. package/src/components/SmallAchievementCard/SmallAchievementCard.tsx +50 -0
  351. package/src/components/SmallAchievementCard/index.ts +5 -0
  352. package/src/components/UserProfilePicture/UserProfilePicture.test.tsx +44 -0
  353. package/src/components/UserProfilePicture/UserProfilePicture.tsx +119 -0
  354. package/src/components/UserProfilePicture/index.ts +5 -0
  355. package/src/components/VCCard/VCCard.stories.tsx +64 -0
  356. package/src/components/VCCard/VCCard.tsx +84 -0
  357. package/src/components/VCCard/index.ts +5 -0
  358. package/src/components/VCDisplayBackFace/VCDisplayBackFace.tsx +112 -0
  359. package/src/components/VCDisplayBackFace/index.ts +5 -0
  360. package/src/components/VCDisplayCard/VCDisplayCard.stories.tsx +167 -0
  361. package/src/components/VCDisplayCard/VCDisplayCard.tsx +98 -0
  362. package/src/components/VCDisplayCard/index.ts +5 -0
  363. package/src/components/VCDisplayCard2/FitText.tsx +85 -0
  364. package/src/components/VCDisplayCard2/InfoBox.tsx +30 -0
  365. package/src/components/VCDisplayCard2/IssueHistoryBox.tsx +50 -0
  366. package/src/components/VCDisplayCard2/MediaAttachmentsBox.tsx +306 -0
  367. package/src/components/VCDisplayCard2/RibbonEnd.tsx +67 -0
  368. package/src/components/VCDisplayCard2/SelectedSkills.tsx +70 -0
  369. package/src/components/VCDisplayCard2/SkillsBox.tsx +53 -0
  370. package/src/components/VCDisplayCard2/Subskill.tsx +50 -0
  371. package/src/components/VCDisplayCard2/TopLevelSkill.tsx +63 -0
  372. package/src/components/VCDisplayCard2/TruncateTextBox.tsx +89 -0
  373. package/src/components/VCDisplayCard2/VC2BackFace.tsx +185 -0
  374. package/src/components/VCDisplayCard2/VC2FrontFaceInfo.tsx +279 -0
  375. package/src/components/VCDisplayCard2/VCDisplayCard2.stories.tsx +191 -0
  376. package/src/components/VCDisplayCard2/VCDisplayCard2.tsx +526 -0
  377. package/src/components/VCDisplayCard2/VCDisplayCard2AvatarFallbacks.stories.tsx +312 -0
  378. package/src/components/VCDisplayCard2/VCDisplayCardCategoryType.tsx +19 -0
  379. package/src/components/VCDisplayCard2/VCDisplayCardSkillsCount.tsx +46 -0
  380. package/src/components/VCDisplayCard2/VCIDDIsplayCard.tsx +159 -0
  381. package/src/components/VCDisplayCard2/VCIDDisplayFrontFace.tsx +213 -0
  382. package/src/components/VCDisplayCard2/VerificationRow.tsx +69 -0
  383. package/src/components/VCDisplayCard2/VerificationsBox.tsx +44 -0
  384. package/src/components/VCDisplayCard2/__tests__/VC2FrontFaceInfo.test.tsx +134 -0
  385. package/src/components/VCDisplayCard2/index.ts +23 -0
  386. package/src/components/VCDisplayFrontFace/VCDisplayFrontFace.tsx +143 -0
  387. package/src/components/VCDisplayFrontFace/index.ts +5 -0
  388. package/src/components/VCThumbnail/VCThumbnail.stories.tsx +32 -0
  389. package/src/components/VCThumbnail/VCThumbnail.tsx +182 -0
  390. package/src/components/VCThumbnail/__tests__/VCThumbnail.test.tsx +114 -0
  391. package/src/components/VCThumbnail/index.ts +6 -0
  392. package/src/components/VCThumbnail/types.ts +46 -0
  393. package/src/components/VCVerificationCheck/VCVerificationCheck.tsx +89 -0
  394. package/src/components/VCVerificationCheck/index.ts +5 -0
  395. package/src/components/VCVerificationPill/VCVerificationPill.tsx +85 -0
  396. package/src/components/VCVerificationPill/index.ts +5 -0
  397. package/src/components/index.ts +48 -0
  398. package/src/components/svgs/AccommodationsIcon.tsx +38 -0
  399. package/src/components/svgs/AccomplishmentsIcon.tsx +34 -0
  400. package/src/components/svgs/AchievementWithTitle.tsx +137 -0
  401. package/src/components/svgs/AcuteCheckmark.tsx +25 -0
  402. package/src/components/svgs/AwardDisplayIcon.tsx +37 -0
  403. package/src/components/svgs/AwardRibbon.tsx +29 -0
  404. package/src/components/svgs/BadgeDisplayIcon.tsx +31 -0
  405. package/src/components/svgs/Briefcase.tsx +48 -0
  406. package/src/components/svgs/Camera.tsx +25 -0
  407. package/src/components/svgs/CertificateDisplayIcon.tsx +56 -0
  408. package/src/components/svgs/Checkmark.tsx +59 -0
  409. package/src/components/svgs/CircleWithText.tsx +36 -0
  410. package/src/components/svgs/Coins.tsx +14 -0
  411. package/src/components/svgs/CourseDisplayIcon.tsx +43 -0
  412. package/src/components/svgs/DownRightArrow.tsx +29 -0
  413. package/src/components/svgs/ExclamationPoint.tsx +25 -0
  414. package/src/components/svgs/ExperienceIcon.tsx +34 -0
  415. package/src/components/svgs/FatArrow.tsx +44 -0
  416. package/src/components/svgs/GenericArrow.tsx +29 -0
  417. package/src/components/svgs/GenericDocumentIcon.tsx +26 -0
  418. package/src/components/svgs/Graduation.tsx +24 -0
  419. package/src/components/svgs/IDDisplayIcon.tsx +63 -0
  420. package/src/components/svgs/IDIcon.tsx +59 -0
  421. package/src/components/svgs/IDSleeve.tsx +21 -0
  422. package/src/components/svgs/InfoIcon.tsx +26 -0
  423. package/src/components/svgs/IssuerSeal.tsx +26 -0
  424. package/src/components/svgs/KeyIcon.tsx +31 -0
  425. package/src/components/svgs/LeftArrow.tsx +27 -0
  426. package/src/components/svgs/Lightbulb.tsx +14 -0
  427. package/src/components/svgs/Line.tsx +22 -0
  428. package/src/components/svgs/LinkIcon.tsx +35 -0
  429. package/src/components/svgs/PdfIcon.tsx +38 -0
  430. package/src/components/svgs/PersonBadge.tsx +55 -0
  431. package/src/components/svgs/PuzzlePiece.tsx +89 -0
  432. package/src/components/svgs/QRCodeIcon.tsx +21 -0
  433. package/src/components/svgs/RedFlag.tsx +41 -0
  434. package/src/components/svgs/RoundedCorner.tsx +28 -0
  435. package/src/components/svgs/RoundedX.tsx +35 -0
  436. package/src/components/svgs/ScoutsLogo.tsx +41 -0
  437. package/src/components/svgs/ScoutsPledge.tsx +33 -0
  438. package/src/components/svgs/ShieldChevron.tsx +24 -0
  439. package/src/components/svgs/Smiley.tsx +43 -0
  440. package/src/components/svgs/SocialBadgesIcon.tsx +43 -0
  441. package/src/components/svgs/ThreeDotVertical.tsx +41 -0
  442. package/src/components/svgs/Trophy.tsx +25 -0
  443. package/src/components/svgs/UnknownVerifierBadge.tsx +25 -0
  444. package/src/components/svgs/User.tsx +34 -0
  445. package/src/components/svgs/VerifiedBadge.tsx +37 -0
  446. package/src/components/svgs/VideoIcon.tsx +28 -0
  447. package/src/components/svgs/X.tsx +35 -0
  448. package/src/components/svgs/index.ts +54 -0
  449. package/src/constants/icons.ts +87 -0
  450. package/src/constants/index.ts +109 -0
  451. package/src/constants/notifications.ts +14 -0
  452. package/src/constants/skills.ts +2202 -0
  453. package/src/declaration.d.ts +21 -0
  454. package/src/helpers/__tests__/credentialFormat.helpers.test.ts +100 -0
  455. package/src/helpers/color.helpers.ts +35 -0
  456. package/src/helpers/credential.helpers.test.ts +108 -0
  457. package/src/helpers/credential.helpers.tsx +249 -0
  458. package/src/helpers/credentialFormat.helpers.ts +68 -0
  459. package/src/helpers/did-display.helpers.ts +230 -0
  460. package/src/helpers/display.helpers.ts +53 -0
  461. package/src/helpers/string.helpers.ts +7 -0
  462. package/src/helpers/test.helpers.ts +680 -0
  463. package/src/helpers/url.helpers.ts +3 -0
  464. package/src/helpers/useHorizontalPages.ts +130 -0
  465. package/src/helpers/useOnMomentumScrollEnd.ts +28 -0
  466. package/src/helpers/useScrollBorders.ts +59 -0
  467. package/src/helpers/video.helpers.ts +125 -0
  468. package/src/hooks/useCredentialFormat.tsx +23 -0
  469. package/src/hooks/useParsedSdJwtVc.tsx +64 -0
  470. package/src/index.ts +16 -0
  471. package/src/types/index.ts +390 -0
  472. package/LICENSE +0 -21
  473. package/dist/cjs/SchoolIDCard-dddb3b1d.js.map +0 -1
  474. package/dist/cjs/VCDisplayCard2-e8e84f7e.js.map +0 -1
  475. package/dist/cjs/VerifierStateBadgeAndText-db7a1881.js.map +0 -1
  476. package/dist/cjs/credential.helpers-62edac8a.js.map +0 -1
  477. package/dist/cjs/index-0cac2c5b.js.map +0 -1
  478. package/dist/cjs/index-838fa72c.js.map +0 -1
  479. package/dist/cjs/types.esm-60d3a9fc.js.map +0 -1
  480. package/dist/esm/SchoolIDCard-4e51671c.js.map +0 -1
  481. package/dist/esm/VCDisplayCard2-006e7a8c.js.map +0 -1
  482. package/dist/esm/VerifierStateBadgeAndText-a1bd5f0c.js.map +0 -1
  483. package/dist/esm/credential.helpers-b6acd108.js.map +0 -1
  484. package/dist/esm/index-2ef835bd.js.map +0 -1
  485. package/dist/esm/index-4fa491c1.js.map +0 -1
  486. package/dist/esm/index-eae3ca64.js.map +0 -1
  487. package/dist/esm/types.esm-59c23f9b.js.map +0 -1
@@ -0,0 +1,185 @@
1
+ import React from 'react';
2
+
3
+ type MeritBadgeRibbonProps = {
4
+ className?: string;
5
+ image: string;
6
+ };
7
+
8
+ const MeritBadgeRibbon: React.FC<MeritBadgeRibbonProps> = ({ className = '', image }) => {
9
+ const [errored, setErrored] = React.useState(false);
10
+
11
+ React.useEffect(() => {
12
+ setErrored(false);
13
+ }, [image]);
14
+
15
+ const showPlaceholder = !image || errored;
16
+
17
+ return (
18
+ <svg
19
+ width="207"
20
+ height="170"
21
+ viewBox="0 0 207 170"
22
+ fill="none"
23
+ xmlns="http://www.w3.org/2000/svg"
24
+ className={className}
25
+ >
26
+ <g filter="url(#filter0_d_10755_290433)">
27
+ <circle cx="102.988" cy="83" r="81.5" fill="white" stroke="white" strokeWidth="3" />
28
+ <path
29
+ d="M3.94446 50C3.41654 50 2.92748 50.2775 2.65674 50.7307C2.38599 51.1839 2.37343 51.7461 2.62365 52.211L19.4659 83.5L2.62365 114.789C2.37343 115.254 2.386 115.816 2.65674 116.269C2.92748 116.722 3.41654 117 3.94446 117L203.056 117C203.583 117 204.073 116.722 204.343 116.269C204.614 115.816 204.627 115.254 204.376 114.789L187.534 83.5L204.376 52.211C204.627 51.7461 204.614 51.1839 204.343 50.7307C204.073 50.2775 203.583 50 203.056 50L3.94446 50Z"
30
+ fill="currentColor"
31
+ stroke="white"
32
+ strokeWidth="3"
33
+ strokeLinejoin="round"
34
+ />
35
+ <rect
36
+ x="25.3273"
37
+ y="5.34741"
38
+ width="156.6"
39
+ height="156.6"
40
+ rx="78.2999"
41
+ fill="#FBFBFC"
42
+ />
43
+ <rect
44
+ x="25.3273"
45
+ y="5.34741"
46
+ width="156.6"
47
+ height="156.6"
48
+ rx="78.2999"
49
+ stroke="currentColor"
50
+ strokeWidth="3"
51
+ />
52
+ <rect x="29.8273" y="9.84741" width="147.6" height="147.6" fill="none" />
53
+ </g>
54
+
55
+ <clipPath id="circleClip">
56
+ <circle cx="103.5" cy="84" r="75" />
57
+ </clipPath>
58
+ {showPlaceholder ? (
59
+ <g
60
+ clipPath="url(#circleClip)"
61
+ transform="translate(78.5 58) scale(2.1)"
62
+ className="text-grayscale-400"
63
+ >
64
+ <circle
65
+ cx="12"
66
+ cy="9"
67
+ r="6"
68
+ stroke="currentColor"
69
+ strokeWidth="1.75"
70
+ fill="none"
71
+ />
72
+ <path
73
+ d="M8.5 14.5 7 22l5-3 5 3-1.5-7.5"
74
+ stroke="currentColor"
75
+ strokeWidth="1.75"
76
+ strokeLinecap="round"
77
+ strokeLinejoin="round"
78
+ fill="none"
79
+ />
80
+ </g>
81
+ ) : (
82
+ <image
83
+ xlinkHref={image}
84
+ x="28.5"
85
+ y="9"
86
+ width="150"
87
+ height="150"
88
+ clipPath="url(#circleClip)"
89
+ preserveAspectRatio="xMidYMid slice"
90
+ onError={() => setErrored(true)}
91
+ />
92
+ )}
93
+
94
+ <defs>
95
+ <filter
96
+ id="filter0_d_10755_290433"
97
+ x="0.944458"
98
+ y="0"
99
+ width="205.111"
100
+ height="170"
101
+ filterUnits="userSpaceOnUse"
102
+ colorInterpolationFilters="sRGB"
103
+ >
104
+ <feFlood floodOpacity="0" result="BackgroundImageFix" />
105
+ <feColorMatrix
106
+ in="SourceAlpha"
107
+ type="matrix"
108
+ values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
109
+ result="hardAlpha"
110
+ />
111
+ <feOffset dy="4" />
112
+ <feComposite in2="hardAlpha" operator="out" />
113
+ <feColorMatrix
114
+ type="matrix"
115
+ values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"
116
+ />
117
+ <feBlend
118
+ mode="normal"
119
+ in2="BackgroundImageFix"
120
+ result="effect1_dropShadow_10755_290433"
121
+ />
122
+ <feBlend
123
+ mode="normal"
124
+ in="SourceGraphic"
125
+ in2="effect1_dropShadow_10755_290433"
126
+ result="shape"
127
+ />
128
+ </filter>
129
+ </defs>
130
+ </svg>
131
+ );
132
+ return (
133
+ <svg
134
+ width="167"
135
+ height="131"
136
+ viewBox="0 0 167 131"
137
+ fill="none"
138
+ xmlns="http://www.w3.org/2000/svg"
139
+ className={className}
140
+ >
141
+ <circle cx="83.1426" cy="65.5" r="64" fill="white" stroke="white" strokeWidth="3" />
142
+ <path
143
+ d="M29.3926 3.70096C28.9354 3.437 28.3731 3.43281 27.912 3.68993C27.4509 3.94705 27.159 4.42762 27.1432 4.95531L26.3214 32.5274L2.85421 47.0252C2.40508 47.3026 2.13488 47.7958 2.14274 48.3236C2.15061 48.8515 2.43538 49.3363 2.89258 49.6003L137.608 127.378C138.065 127.642 138.627 127.646 139.088 127.389C139.549 127.132 139.841 126.651 139.857 126.124L140.679 98.5517L164.146 84.0539C164.595 83.7764 164.865 83.2833 164.857 82.7554C164.85 82.2276 164.565 81.7427 164.108 81.4787L29.3926 3.70096Z"
144
+ fill="#622599"
145
+ stroke="white"
146
+ strokeWidth="3"
147
+ strokeLinejoin="round"
148
+ />
149
+ <rect x="22.1426" y="4.5" width="123" height="123" rx="61.5" fill="white" />
150
+ <rect
151
+ x="22.1426"
152
+ y="4.5"
153
+ width="123"
154
+ height="123"
155
+ rx="61.5"
156
+ stroke="#622599"
157
+ strokeWidth="3"
158
+ />
159
+ <rect
160
+ x="28.6426"
161
+ y="11"
162
+ width="110"
163
+ height="110"
164
+ rx="55"
165
+ stroke="#622599"
166
+ strokeWidth="2"
167
+ strokeLinecap="round"
168
+ strokeDasharray="5 5"
169
+ />
170
+ <rect x="33.6426" y="16" width="100" height="100" fill="none" />
171
+ <defs>
172
+ <pattern
173
+ id="pattern0_10101_43072"
174
+ patternContentUnits="objectBoundingBox"
175
+ width="1"
176
+ height="1"
177
+ >
178
+ <use xlinkHref="#image0_10101_43072" transform="scale(0.00416667)" />
179
+ </pattern>
180
+ </defs>
181
+ </svg>
182
+ );
183
+ };
184
+
185
+ export default MeritBadgeRibbon;
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+
3
+ import PuzzlePiece from '../svgs/PuzzlePiece';
4
+
5
+ import { categorizeSkills, getTotalCountOfSkills } from '../../helpers/credential.helpers';
6
+
7
+ // Copy of VCDisplayCardSkillsCount, necessary to avoid circular dependency
8
+ export const MeritBadgeSkillsCount: React.FC<{
9
+ skills: { category: string; skill: string; subSkills: string[] }[];
10
+ onClick?: () => void;
11
+ }> = ({ skills, onClick }) => {
12
+ const skillsCount = getTotalCountOfSkills(skills);
13
+
14
+ if (skillsCount === 0) return <></>;
15
+
16
+ const skillsMap = categorizeSkills(skills);
17
+
18
+ // Calculate total count of skills and subskills
19
+ const totalSkills: any = Object.values(skillsMap).reduce(
20
+ (total: any, category: any) => total + category?.length,
21
+ 0
22
+ );
23
+ const totalSubskills: any = Object.values(skillsMap).reduce(
24
+ (total: any, category: any) => total + (category?.totalSubskillsCount || 0),
25
+ 0
26
+ );
27
+
28
+ const total: any = totalSkills + totalSubskills;
29
+
30
+ const text: string = skillsCount === 1 ? 'Skill' : 'Skills';
31
+
32
+ return (
33
+ <div
34
+ className="flex items-center justify-center mt-8 cursor-pointer px-4 py-2 bg-white rounded-[20px] shadow-bottom"
35
+ onClick={onClick}
36
+ >
37
+ <div className="text-violet-500 text-xl flex items-center justify-center tracking-[0.75px] font-poppins font-semibold">
38
+ +{total} {text}{' '}
39
+ <div className="bg-violet-500 rounded-full flex items-center justify-center ml-2 h-[30px] w-[30px] p-1">
40
+ <PuzzlePiece className="text-white" fill="#fff" />
41
+ </div>
42
+ </div>
43
+ </div>
44
+ );
45
+ };
46
+
47
+ export default MeritBadgeSkillsCount;
@@ -0,0 +1,73 @@
1
+ import React, { useState } from 'react';
2
+
3
+ type TruncateTextBoxProps = {
4
+ headerText: string;
5
+ headerClassName?: string;
6
+
7
+ // the text to be truncated if it's too long
8
+ text: string;
9
+
10
+ truncateThreshold?: number;
11
+
12
+ // extra things to put at the bottom of the box
13
+ children?: React.ReactNode;
14
+ className?: string;
15
+ };
16
+
17
+ const TruncateTextBox: React.FC<TruncateTextBoxProps> = ({
18
+ headerText,
19
+ headerClassName = '',
20
+ text,
21
+ truncateThreshold = 132,
22
+ children,
23
+ className = 'truncate-text-box',
24
+ }) => {
25
+ const needsTruncate = text?.length > truncateThreshold;
26
+ const [showFullText, setShowFullText] = useState(false);
27
+ const truncated = needsTruncate && !showFullText;
28
+
29
+ const displayText = truncated ? text.substring(0, truncateThreshold) : text;
30
+
31
+ return (
32
+ <div
33
+ className={`${className} w-full bg-white flex flex-col items-start gap-[10px] rounded-[20px] shadow-bottom p-[15px]`}
34
+ >
35
+ <h3 className={`${headerClassName} text-[17px] text-grayscale-900 font-poppins`}>
36
+ {headerText}
37
+ </h3>
38
+
39
+ <p className="text-[12px] text-grayscale-700 font-poppins mb-0 flex flex-col items-start">
40
+ {displayText}
41
+ {truncated && (
42
+ <>
43
+ ...
44
+ <button
45
+ className="text-indigo-500 text-[12px]"
46
+ onClick={e => {
47
+ e.stopPropagation();
48
+ setShowFullText(true);
49
+ }}
50
+ >
51
+ Show more
52
+ </button>
53
+ </>
54
+ )}
55
+ {needsTruncate && showFullText && (
56
+ <button
57
+ className="text-indigo-500 text-[12px]"
58
+ onClick={e => {
59
+ e.stopPropagation();
60
+ setShowFullText(false);
61
+ }}
62
+ >
63
+ Show less
64
+ </button>
65
+ )}
66
+ </p>
67
+
68
+ {children}
69
+ </div>
70
+ );
71
+ };
72
+
73
+ export default TruncateTextBox;
@@ -0,0 +1,67 @@
1
+ import React, { useState } from 'react';
2
+ import { VerificationItem, VerificationStatusEnum } from '@learncard/types';
3
+ import { getColorForVerificationStatus } from '../../helpers/credential.helpers';
4
+
5
+ import InfoBox from './InfoBox';
6
+ import InfoIcon from '../svgs/InfoIcon';
7
+ import AcuteCheckmark from '../svgs/AcuteCheckmark';
8
+ import ExclamationPoint from '../svgs/ExclamationPoint';
9
+ import X from '../svgs/X';
10
+ import { capitalize } from '../../helpers/string.helpers';
11
+
12
+ type VerificationRowProps = {
13
+ verification: VerificationItem;
14
+ };
15
+
16
+ const VerificationRow: React.FC<VerificationRowProps> = ({ verification }) => {
17
+ const [showInfo, setShowInfo] = useState(false);
18
+ const statusColor = getColorForVerificationStatus(verification.status);
19
+
20
+ const getIcon = () => {
21
+ switch (verification.status) {
22
+ case VerificationStatusEnum.Success:
23
+ return <AcuteCheckmark />;
24
+ case VerificationStatusEnum.Error:
25
+ return <ExclamationPoint />;
26
+ case VerificationStatusEnum.Failed:
27
+ return <X className="w-[15px] h-[15px]" />;
28
+ }
29
+ };
30
+
31
+ let primaryText = verification.check
32
+ ? `${verification.check}: ${verification.message}`
33
+ : verification.message;
34
+ if (verification.status === VerificationStatusEnum.Failed) {
35
+ primaryText = verification.message ?? verification.details ?? '';
36
+ }
37
+ primaryText = capitalize(primaryText);
38
+
39
+ const infoText = ''; // if we want certain verifications to have extra explanation, we can set this variable
40
+
41
+ return (
42
+ <div className="verification-row flex flex-col gap-[5px] font-poppins border-b-[1px] border-grayscale-200 border-solid w-full py-[10px] last:border-0 last:pb-0">
43
+ <span
44
+ className="font-[700] text-[11px] uppercase flex items-center gap-[3px] select-none"
45
+ style={{ color: statusColor }}
46
+ >
47
+ {getIcon()}
48
+ {verification.status}
49
+ {infoText && (
50
+ <button className="ml-auto" onClick={() => setShowInfo(!showInfo)}>
51
+ <InfoIcon color={statusColor} />
52
+ </button>
53
+ )}
54
+ </span>
55
+ {showInfo && infoText && (
56
+ <InfoBox
57
+ text={infoText}
58
+ handleClose={() => setShowInfo(false)}
59
+ backgroundColor={statusColor}
60
+ />
61
+ )}
62
+ <span className="text-[14px] text-grayscale-900 font-poppins">{primaryText}</span>
63
+ </div>
64
+ );
65
+ };
66
+
67
+ export default VerificationRow;
@@ -0,0 +1,44 @@
1
+ import React, { useState } from 'react';
2
+
3
+ import VerificationRow from './VerificationRow';
4
+ import InfoIcon from '../svgs/InfoIcon';
5
+ import InfoBox from './InfoBox';
6
+
7
+ import { VerificationItem } from '@learncard/types';
8
+
9
+ type VerificationsBoxProps = {
10
+ verificationItems: VerificationItem[];
11
+ };
12
+
13
+ const VerificationsBox: React.FC<VerificationsBoxProps> = ({ verificationItems }) => {
14
+ const [showInfo, setShowInfo] = useState(false);
15
+
16
+ return (
17
+ <div className="bg-white flex flex-col items-start gap-[10px] rounded-[20px] shadow-bottom p-[15px] w-full">
18
+ <div className="flex w-full items-center">
19
+ <h3 className="text-[17px] text-grayscale-900 font-poppins">Verifications</h3>
20
+ <button
21
+ className="ml-auto"
22
+ onClick={e => {
23
+ e.stopPropagation();
24
+ setShowInfo(!showInfo);
25
+ }}
26
+ >
27
+ <InfoIcon color={showInfo ? '#6366F1' : undefined} />
28
+ </button>
29
+ </div>
30
+ {showInfo && (
31
+ <InfoBox
32
+ text="Credential verifications check the cryptographic proof of digital credentials to ensure their authenticity and accuracy."
33
+ handleClose={() => setShowInfo(false)}
34
+ />
35
+ )}
36
+
37
+ {verificationItems.map((verification, index) => (
38
+ <VerificationRow key={index} verification={verification} />
39
+ ))}
40
+ </div>
41
+ );
42
+ };
43
+
44
+ export default VerificationsBox;
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import UnknownVerifierBadge from '../svgs/UnknownVerifierBadge';
3
+ import VerifiedBadge from '../svgs/VerifiedBadge';
4
+ import PersonBadge from '../svgs/PersonBadge';
5
+ import RedFlag from '../svgs/RedFlag';
6
+
7
+ const VERIFIER_STATES = {
8
+ selfVerified: 'Self Issued',
9
+ trustedVerifier: 'Trusted Issuer',
10
+ unknownVerifier: 'Unknown Issuer',
11
+ appIssuer: 'Trusted App',
12
+ untrustedVerifier: 'Untrusted Issuer',
13
+ } as const;
14
+ type VerifierState = (typeof VERIFIER_STATES)[keyof typeof VERIFIER_STATES];
15
+
16
+ type VerifierStateBadgeAndTextProps = {
17
+ verifierState: VerifierState;
18
+ };
19
+
20
+ const VerifierStateBadgeAndText: React.FC<VerifierStateBadgeAndTextProps> = ({ verifierState }) => {
21
+ return (
22
+ <div className="flex justify-center">
23
+ {verifierState === VERIFIER_STATES.selfVerified && (
24
+ <span className="uppercase font-poppins text-[12px] font-[500] text-green-dark flex gap-[3px] items-center">
25
+ <PersonBadge />
26
+ Self Issued
27
+ </span>
28
+ )}
29
+ {verifierState === VERIFIER_STATES.trustedVerifier && (
30
+ <span className="uppercase font-poppins text-[12px] font-[500] text-blue-light flex gap-[3px] items-center">
31
+ <VerifiedBadge />
32
+ Trusted Issuer
33
+ </span>
34
+ )}
35
+ {verifierState === VERIFIER_STATES.unknownVerifier && (
36
+ <span className="uppercase font-poppins text-[12px] font-[500] text-orange-500 flex gap-[3px] items-center">
37
+ <UnknownVerifierBadge />
38
+ Unknown Issuer
39
+ </span>
40
+ )}
41
+ {verifierState === VERIFIER_STATES.appIssuer && (
42
+ <span className="uppercase font-poppins text-[12px] font-[500] text-cyan-600 flex gap-[3px] items-center">
43
+ <UnknownVerifierBadge />
44
+ Trusted App
45
+ </span>
46
+ )}
47
+ {verifierState === VERIFIER_STATES.untrustedVerifier && (
48
+ <span className="uppercase font-poppins text-[12px] font-[500] text-red-mastercard flex gap-[3px] items-center">
49
+ <RedFlag />
50
+ Untrusted Issuer
51
+ </span>
52
+ )}
53
+ </div>
54
+ );
55
+ };
56
+
57
+ export default VerifierStateBadgeAndText;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @file Automatically generated by barrelsby.
3
+ */
4
+
5
+ export * from './AlignmentRow';
6
+ export * from './AlignmentsBox';
7
+ export * from './InfoBox';
8
+ export * from './MediaAttachmentsBox';
9
+ export * from './MeritBadgeBackFace';
10
+ export * from './MeritBadgeCornerIcon';
11
+ export * from './MeritBadgeDisplayCard';
12
+ export * from './MeritBadgeFrontFace';
13
+ export * from './MeritBadgeImageDisplay';
14
+ export * from './MeritBadgeProfileImageDisplay';
15
+ export * from './MeritBadgeRibbon';
16
+ export * from './MeritBadgeSkillsCount';
17
+ export * from './TruncateTextBox';
18
+ export * from './VerificationRow';
19
+ export * from './VerificationsBox';
20
+ export * from './VerifierStateBadgeAndText';
@@ -0,0 +1,18 @@
1
+ .mini-vc-thumbnail-container {
2
+ max-width: 250px;
3
+ }
4
+
5
+ .mini-vc-thumbnail-container::after {
6
+ content: '';
7
+ background-color: #fff;
8
+ border-top-left-radius: 24px;
9
+ border-top-right-radius: 24px;
10
+ border-bottom-left-radius: 120px;
11
+ border-bottom-right-radius: 120px;
12
+ position: absolute;
13
+ top: 0;
14
+ left: 0;
15
+ height: 65%;
16
+ width: 100%;
17
+ z-index: 1;
18
+ }
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { Story, Meta } from '@storybook/react';
3
+
4
+ import MiniVCThumbnail from './MiniVCThumbnail';
5
+ import { MiniVCThumbnailProps } from './types';
6
+
7
+ export default {
8
+ title: 'MiniVCThumbnail',
9
+ component: MiniVCThumbnail,
10
+ argTypes: {},
11
+ } as Meta<typeof MiniVCThumbnail>;
12
+
13
+ const Template: Story<MiniVCThumbnailProps> = args => <MiniVCThumbnail {...args} />;
14
+
15
+ export const MiniVCThumbnailTest = Template.bind({});
16
+ MiniVCThumbnailTest.args = {
17
+ title: 'Our Wallet Passed JFF Plugfest #1 2022',
18
+ createdAt: '01 May, 2022',
19
+ issuerImage: 'https://kayaelle.github.io/vc-ed/plugfest-1-2022/images/JFF_LogoLockup.png',
20
+ badgeImage: 'https://w3c-ccg.github.io/vc-ed/plugfest-1-2022/images/plugfest-1-badge-image.png',
21
+ onClick: () => {
22
+ console.log('Hello World');
23
+ },
24
+ };
@@ -0,0 +1,83 @@
1
+ import React from 'react';
2
+
3
+ import VerifiedCheck from '../../assets/images/verified-check.png';
4
+
5
+ import { MiniVCThumbnailProps } from './types';
6
+
7
+ export const MiniVCThumbnail: React.FC<MiniVCThumbnailProps> = ({
8
+ title,
9
+ createdAt,
10
+ issuerImage,
11
+ badgeImage,
12
+ className = '',
13
+ onClick = () => {},
14
+ }) => {
15
+ const titleClasses = !issuerImage ? 'w-full text-center' : 'w-3/4 text-left';
16
+ const createdAtClasses = !issuerImage ? 'w-full text-center' : 'text-left';
17
+
18
+ return (
19
+ <div
20
+ onClick={onClick}
21
+ className={`flex flex-col items-center justify-between relative py-3 px-3 rounded-3xl shadow-3xl bg-emerald-700 min-h-[120px] max-w-sm mini-vc-thumbnail-container ${className}`}
22
+ data-testid="mini-vc-thumbnail"
23
+ >
24
+ <div className="flex flex-row items-center justify-between mb-3 z-10">
25
+ {issuerImage && (
26
+ <div
27
+ className="flex flex-row justify-center items-center w-1/4 text-center"
28
+ data-testid="mini-vc-thumbnail-issuer"
29
+ >
30
+ <div className="min-w-[40px] min-h-[40px] max-h-[48px] max-w-[48px] shadow-3xl p-1 rounded-full bg-white">
31
+ <img
32
+ className="h-full w-full object-cover rounded-full"
33
+ src={issuerImage}
34
+ alt="issuer image"
35
+ />
36
+ </div>
37
+ </div>
38
+ )}
39
+ <div className={`flex flex-col items-start justify-center ${titleClasses}`}>
40
+ <h2
41
+ className="ml-2 text-sm tracking-wide leading-snug line-clamp-2"
42
+ data-testid="mini-vc-thumbnail-title"
43
+ >
44
+ {title ?? ''}
45
+ </h2>
46
+ <p
47
+ className={`ml-2 text-sm font-light line-clamp-1 ${createdAtClasses}`}
48
+ data-testid="mini-vc-thumbnail-createdAt"
49
+ >
50
+ {createdAt ?? ''}
51
+ </p>
52
+ </div>
53
+ </div>
54
+ <div className="flex items-center justify-center w-full mt-3">
55
+ {badgeImage && (
56
+ <div
57
+ className="flex item-center justify-center w-full -mt-3"
58
+ data-testid="mini-vc-thumbnail-badge"
59
+ >
60
+ <div className="max-h-[80px] max-w-[80px] xxsm:h-[60px] xxsm:w-[60px] border-solid border-1 border-black bg-white z-10">
61
+ <img
62
+ className="h-full w-full object-cover"
63
+ src={badgeImage}
64
+ alt="badge image"
65
+ />
66
+ </div>
67
+ </div>
68
+ )}
69
+ <div className="flex absolute bottom-1 right-1 items-center justify-center my-0 mx-1 h-10 w-10 rounded-full bg-white overflow-hidden">
70
+ <div className="flex items-center justify-center h-5/6 w-10/12 bg-white rounded-full border-solid border-4 border-emerald-700 overflow-hidden">
71
+ <img
72
+ className="h-full w-full object-cover"
73
+ src={VerifiedCheck ?? ''}
74
+ alt="credential icon"
75
+ />
76
+ </div>
77
+ </div>
78
+ </div>
79
+ </div>
80
+ );
81
+ };
82
+
83
+ export default MiniVCThumbnail;