@learncard/react 2.10.3 → 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.
- package/README.md +10 -10
- package/dist/base.css +1 -1
- package/dist/base.js +1 -1
- package/dist/cjs/{BoostGenericCard-0f68947f.js → BoostGenericCard-5a07339f.js} +2 -2
- package/dist/cjs/{BoostGenericCard-0f68947f.js.map → BoostGenericCard-5a07339f.js.map} +1 -1
- package/dist/cjs/{CertificateDisplayCard-6c30f6e6.js → CertificateDisplayCard-a7940558.js} +4 -4
- package/dist/cjs/{CertificateDisplayCard-6c30f6e6.js.map → CertificateDisplayCard-a7940558.js.map} +1 -1
- package/dist/cjs/CircleIcon-f0fa68c7.js.map +1 -1
- package/dist/cjs/{LearnCardCreditCardFrontFace-aca1b7bc.js → LearnCardCreditCardFrontFace-75fb4e44.js} +2 -2
- package/dist/cjs/{LearnCardCreditCardFrontFace-aca1b7bc.js.map → LearnCardCreditCardFrontFace-75fb4e44.js.map} +1 -1
- package/dist/cjs/{MeritBadgeDisplayCard-535853f5.js → MeritBadgeDisplayCard-1c614da9.js} +4 -4
- package/dist/cjs/{MeritBadgeDisplayCard-535853f5.js.map → MeritBadgeDisplayCard-1c614da9.js.map} +1 -1
- package/dist/cjs/{MeritBadgeSkillsCount-5cc7d16e.js → MeritBadgeSkillsCount-4dabf982.js} +2 -2
- package/dist/cjs/{MeritBadgeSkillsCount-5cc7d16e.js.map → MeritBadgeSkillsCount-4dabf982.js.map} +1 -1
- package/dist/cjs/{QRCodeCard-f0079bd9.js → QRCodeCard-2378411e.js} +2 -2
- package/dist/cjs/{QRCodeCard-f0079bd9.js.map → QRCodeCard-2378411e.js.map} +1 -1
- package/dist/cjs/{SchoolIDCard-e22d0d80.js → SchoolIDCard-2d3cbb2c.js} +13 -1189
- package/dist/cjs/SchoolIDCard-2d3cbb2c.js.map +1 -0
- package/dist/cjs/{VCCard-deabc204.js → VCCard-5bb95d29.js} +3 -3
- package/dist/cjs/{VCCard-deabc204.js.map → VCCard-5bb95d29.js.map} +1 -1
- package/dist/cjs/{VCDisplayBackFace-a15d5252.js → VCDisplayBackFace-864c35d5.js} +3 -3
- package/dist/cjs/{VCDisplayBackFace-a15d5252.js.map → VCDisplayBackFace-864c35d5.js.map} +1 -1
- package/dist/cjs/{VCDisplayCard-a64fa405.js → VCDisplayCard-15af27c6.js} +3 -3
- package/dist/cjs/{VCDisplayCard-a64fa405.js.map → VCDisplayCard-15af27c6.js.map} +1 -1
- package/dist/cjs/{VCDisplayCard2-6c87eade.js → VCDisplayCard2-f3f5c6c4.js} +28 -22
- package/dist/cjs/VCDisplayCard2-f3f5c6c4.js.map +1 -0
- package/dist/cjs/{VCVerificationPill-e1cc6be2.js → VCVerificationPill-20ed4d3c.js} +2 -2
- package/dist/cjs/{VCVerificationPill-e1cc6be2.js.map → VCVerificationPill-20ed4d3c.js.map} +1 -1
- package/dist/cjs/{VerifierStateBadgeAndText-5229da1a.js → VerifierStateBadgeAndText-de5bd85f.js} +9 -11
- package/dist/cjs/VerifierStateBadgeAndText-de5bd85f.js.map +1 -0
- package/dist/cjs/{credential.helpers-473e89c5.js → credential.helpers-b4d27c8a.js} +3 -3
- package/dist/cjs/credential.helpers-b4d27c8a.js.map +1 -0
- package/dist/cjs/{index-ec1d26f1.js → index-330dcb9c.js} +1 -1
- package/dist/cjs/index-330dcb9c.js.map +1 -0
- package/dist/cjs/index-47efbf5b.js +1186 -0
- package/dist/cjs/index-47efbf5b.js.map +1 -0
- package/dist/cjs/{index-0cac2c5b.js → index-da255c9a.js} +1 -1
- package/dist/cjs/index-da255c9a.js.map +1 -0
- package/dist/cjs/index.js +18 -17
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index14.js +18 -17
- package/dist/cjs/index14.js.map +1 -1
- package/dist/cjs/index18.js +2 -2
- package/dist/cjs/index22.js +6 -6
- package/dist/cjs/index28.js +2 -2
- package/dist/cjs/index31.js +2 -1
- package/dist/cjs/index31.js.map +1 -1
- package/dist/cjs/index39.js +12 -11
- package/dist/cjs/index39.js.map +1 -1
- package/dist/cjs/index4.js +4 -4
- package/dist/cjs/index40.js +5 -5
- package/dist/cjs/index41.js +6 -6
- package/dist/cjs/index42.js +8 -7
- package/dist/cjs/index42.js.map +1 -1
- package/dist/cjs/index43.js +2 -2
- package/dist/cjs/index46.js +2 -2
- package/dist/cjs/index7.js +5 -5
- package/dist/cjs/{types.esm-12bb5eed.js → types.esm-40b77196.js} +3 -2
- package/dist/cjs/types.esm-40b77196.js.map +1 -0
- package/dist/esm/{BoostGenericCard-b332a829.js → BoostGenericCard-997af0f5.js} +2 -2
- package/dist/esm/{BoostGenericCard-b332a829.js.map → BoostGenericCard-997af0f5.js.map} +1 -1
- package/dist/esm/{CertificateDisplayCard-fc148ca0.js → CertificateDisplayCard-d764151e.js} +4 -4
- package/dist/esm/{CertificateDisplayCard-fc148ca0.js.map → CertificateDisplayCard-d764151e.js.map} +1 -1
- package/dist/esm/CircleIcon-abd5ff06.js.map +1 -1
- package/dist/esm/{LearnCardCreditCardFrontFace-b7c917f5.js → LearnCardCreditCardFrontFace-13d29504.js} +2 -2
- package/dist/esm/{LearnCardCreditCardFrontFace-b7c917f5.js.map → LearnCardCreditCardFrontFace-13d29504.js.map} +1 -1
- package/dist/esm/{MeritBadgeDisplayCard-da9de0b8.js → MeritBadgeDisplayCard-907627ed.js} +4 -4
- package/dist/esm/{MeritBadgeDisplayCard-da9de0b8.js.map → MeritBadgeDisplayCard-907627ed.js.map} +1 -1
- package/dist/esm/{MeritBadgeSkillsCount-01e2756e.js → MeritBadgeSkillsCount-9474bd51.js} +2 -2
- package/dist/esm/{MeritBadgeSkillsCount-01e2756e.js.map → MeritBadgeSkillsCount-9474bd51.js.map} +1 -1
- package/dist/esm/{QRCodeCard-8f29c3c7.js → QRCodeCard-3abf9f33.js} +2 -2
- package/dist/esm/{QRCodeCard-8f29c3c7.js.map → QRCodeCard-3abf9f33.js.map} +1 -1
- package/dist/esm/{SchoolIDCard-8b151cd3.js → SchoolIDCard-fbd1cf6c.js} +12 -1188
- package/dist/esm/SchoolIDCard-fbd1cf6c.js.map +1 -0
- package/dist/esm/{VCCard-94dbe6bf.js → VCCard-ce4b451d.js} +3 -3
- package/dist/esm/{VCCard-94dbe6bf.js.map → VCCard-ce4b451d.js.map} +1 -1
- package/dist/esm/{VCDisplayBackFace-9c5b383f.js → VCDisplayBackFace-e347145c.js} +3 -3
- package/dist/esm/{VCDisplayBackFace-9c5b383f.js.map → VCDisplayBackFace-e347145c.js.map} +1 -1
- package/dist/esm/{VCDisplayCard-bd4d15e1.js → VCDisplayCard-3002776b.js} +3 -3
- package/dist/esm/{VCDisplayCard-bd4d15e1.js.map → VCDisplayCard-3002776b.js.map} +1 -1
- package/dist/esm/{VCDisplayCard2-c6a81e42.js → VCDisplayCard2-db880bbb.js} +28 -22
- package/dist/esm/VCDisplayCard2-db880bbb.js.map +1 -0
- package/dist/esm/{VCVerificationPill-d073557c.js → VCVerificationPill-5a05423b.js} +2 -2
- package/dist/esm/{VCVerificationPill-d073557c.js.map → VCVerificationPill-5a05423b.js.map} +1 -1
- package/dist/esm/{VerifierStateBadgeAndText-6946e820.js → VerifierStateBadgeAndText-bd1b0131.js} +9 -11
- package/dist/esm/VerifierStateBadgeAndText-bd1b0131.js.map +1 -0
- package/dist/esm/{credential.helpers-ff461699.js → credential.helpers-26e1a359.js} +3 -3
- package/dist/esm/credential.helpers-26e1a359.js.map +1 -0
- package/dist/esm/{index-2ef835bd.js → index-bc6b8b0b.js} +1 -1
- package/dist/{cjs/index-ec1d26f1.js.map → esm/index-bc6b8b0b.js.map} +1 -1
- package/dist/esm/{index-eae3ca64.js → index-cb3a593b.js} +1 -1
- package/dist/esm/index-cb3a593b.js.map +1 -0
- package/dist/esm/index-cbd2e9db.js +1184 -0
- package/dist/esm/index-cbd2e9db.js.map +1 -0
- package/dist/esm/index.js +18 -17
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index14.js +18 -17
- package/dist/esm/index14.js.map +1 -1
- package/dist/esm/index18.js +2 -2
- package/dist/esm/index22.js +6 -6
- package/dist/esm/index28.js +2 -2
- package/dist/esm/index31.js +2 -1
- package/dist/esm/index31.js.map +1 -1
- package/dist/esm/index39.js +12 -11
- package/dist/esm/index39.js.map +1 -1
- package/dist/esm/index4.js +4 -4
- package/dist/esm/index40.js +5 -5
- package/dist/esm/index41.js +6 -6
- package/dist/esm/index42.js +8 -7
- package/dist/esm/index42.js.map +1 -1
- package/dist/esm/index43.js +2 -2
- package/dist/esm/index46.js +2 -2
- package/dist/esm/index7.js +5 -5
- package/dist/esm/{types.esm-f32fc00a.js → types.esm-13bb929b.js} +3 -2
- package/dist/esm/types.esm-13bb929b.js.map +1 -0
- package/dist/main.css +1 -1
- package/dist/main.js +1 -1
- package/package.json +102 -87
- package/src/assets/icons/accommodationsIcon.svg +5 -0
- package/src/assets/icons/accomplishmentsIcon.svg +4 -0
- package/src/assets/icons/achievementsIcon.svg +7 -0
- package/src/assets/icons/coursesIcon.svg +5 -0
- package/src/assets/icons/eventsIcon.svg +6 -0
- package/src/assets/icons/experiencesIcon.svg +4 -0
- package/src/assets/icons/goalsIcon.svg +5 -0
- package/src/assets/icons/idIcon.svg +4 -0
- package/src/assets/icons/membershipsIcon.svg +4 -0
- package/src/assets/icons/relationshipsIcon.svg +6 -0
- package/src/assets/icons/skillsIcon.svg +3 -0
- package/src/assets/icons/socialBadgesIcon.svg +7 -0
- package/src/assets/images/Accommodation-Hands.png +0 -0
- package/src/assets/images/ArrowArcLeft.svg +4 -0
- package/src/assets/images/ArrowArcRight.svg +4 -0
- package/src/assets/images/CaretRight.svg +3 -0
- package/src/assets/images/CaretRightFilled.svg +3 -0
- package/src/assets/images/DotsThreeOutline.svg +5 -0
- package/src/assets/images/GreenCheckCircle.svg +4 -0
- package/src/assets/images/RedXCircle.svg +5 -0
- package/src/assets/images/X.svg +4 -0
- package/src/assets/images/YellowWarningCircle.svg +4 -0
- package/src/assets/images/addawardlight.svg +8 -0
- package/src/assets/images/agriculture.png +0 -0
- package/src/assets/images/apple.png +0 -0
- package/src/assets/images/athletics.png +0 -0
- package/src/assets/images/award.svg +3 -0
- package/src/assets/images/backpack.png +0 -0
- package/src/assets/images/badge.png +0 -0
- package/src/assets/images/briefcase.svg +6 -0
- package/src/assets/images/business.png +0 -0
- package/src/assets/images/card-chip.svg +26 -0
- package/src/assets/images/check.svg +17 -0
- package/src/assets/images/coins.svg +3 -0
- package/src/assets/images/contactless-symbol.svg +3 -0
- package/src/assets/images/creative.png +0 -0
- package/src/assets/images/digital.png +0 -0
- package/src/assets/images/durable.png +0 -0
- package/src/assets/images/emptystate-death.png +0 -0
- package/src/assets/images/emptystate-dinocandle.png +0 -0
- package/src/assets/images/emptystate-ghost1.png +0 -0
- package/src/assets/images/eventsGraphic.png +0 -0
- package/src/assets/images/experience-mountain.png +0 -0
- package/src/assets/images/goals-target.png +0 -0
- package/src/assets/images/gradcaplight.svg +3 -0
- package/src/assets/images/graduation.svg +3 -0
- package/src/assets/images/icon.green.fat-arrow.png +0 -0
- package/src/assets/images/id-purple.png +0 -0
- package/src/assets/images/id-sleeve.png +0 -0
- package/src/assets/images/key-icon.svg +4 -0
- package/src/assets/images/lhplaceholder.png +0 -0
- package/src/assets/images/lightbulb.svg +3 -0
- package/src/assets/images/loveyou-icon.svg +5 -0
- package/src/assets/images/master-card-logo.svg +20 -0
- package/src/assets/images/medical.png +0 -0
- package/src/assets/images/membership-graphic.png +0 -0
- package/src/assets/images/membership-key.svg +9 -0
- package/src/assets/images/minigradcapcolored.svg +3 -0
- package/src/assets/images/minijob.svg +5 -0
- package/src/assets/images/minipuzzle.svg +3 -0
- package/src/assets/images/minipuzzlecolored.svg +3 -0
- package/src/assets/images/minitrophy.svg +3 -0
- package/src/assets/images/minitrophycolored.svg +3 -0
- package/src/assets/images/motlow-buckcard-bg.svg +32 -0
- package/src/assets/images/mountains-icon.svg +4 -0
- package/src/assets/images/photoplaceholder.png +0 -0
- package/src/assets/images/puzzle-icon.svg +3 -0
- package/src/assets/images/relationships-cats.png +0 -0
- package/src/assets/images/sample-badge.png +0 -0
- package/src/assets/images/skillgraph.svg +29 -0
- package/src/assets/images/skillplaceholder.png +0 -0
- package/src/assets/images/social-badge-2.png +0 -0
- package/src/assets/images/social-badge.png +0 -0
- package/src/assets/images/social-icon.svg +7 -0
- package/src/assets/images/social.png +0 -0
- package/src/assets/images/stem.png +0 -0
- package/src/assets/images/target-icon.svg +5 -0
- package/src/assets/images/trade.png +0 -0
- package/src/assets/images/trophy.svg +3 -0
- package/src/assets/images/user.svg +4 -0
- package/src/assets/images/users-icon.svg +6 -0
- package/src/assets/images/vc.check.svg +10 -0
- package/src/assets/images/verified-check.png +0 -0
- package/src/assets/images/walletTrophy.png +0 -0
- package/src/assets/images/walletcurrency.webp +0 -0
- package/src/assets/images/walletids.webp +0 -0
- package/src/assets/images/walletjobhistory.webp +0 -0
- package/src/assets/images/walletskills.webp +0 -0
- package/src/assets/styles/base.css +2 -0
- package/src/assets/styles/main.css +475 -0
- package/src/components/AchievementCard/AchievementCard.stories.tsx +31 -0
- package/src/components/AchievementCard/AchievementCard.tsx +88 -0
- package/src/components/AchievementCard/index.ts +5 -0
- package/src/components/BadgeThumbnailImg/BadgeThumbnailImg.test.tsx +47 -0
- package/src/components/BadgeThumbnailImg/BadgeThumbnailImg.tsx +72 -0
- package/src/components/BadgeThumbnailImg/index.ts +5 -0
- package/src/components/BoostGenericCard/AlignmentSkillsCount.tsx +54 -0
- package/src/components/BoostGenericCard/BoostGenericCard.stories.tsx +39 -0
- package/src/components/BoostGenericCard/BoostGenericCard.tsx +177 -0
- package/src/components/BoostGenericCard/index.ts +6 -0
- package/src/components/BoostSmallCard/BoostSmallCard.stories.tsx +57 -0
- package/src/components/BoostSmallCard/BoostSmallCard.tsx +178 -0
- package/src/components/BoostSmallCard/index.ts +5 -0
- package/src/components/Button/Button.stories.tsx +20 -0
- package/src/components/Button/Button.test.tsx +15 -0
- package/src/components/Button/Button.tsx +21 -0
- package/src/components/Button/index.ts +5 -0
- package/src/components/CertificateDisplayCard/AlignmentRow.tsx +26 -0
- package/src/components/CertificateDisplayCard/AlignmentsBox.tsx +70 -0
- package/src/components/CertificateDisplayCard/CertDisplayCardSkillsCount.tsx +66 -0
- package/src/components/CertificateDisplayCard/CertificateBackFace.tsx +130 -0
- package/src/components/CertificateDisplayCard/CertificateCornerIcon.tsx +48 -0
- package/src/components/CertificateDisplayCard/CertificateDisplayCard.stories.tsx +21 -0
- package/src/components/CertificateDisplayCard/CertificateDisplayCard.tsx +180 -0
- package/src/components/CertificateDisplayCard/CertificateFrontFace.tsx +308 -0
- package/src/components/CertificateDisplayCard/CertificateImageDisplay.test.tsx +43 -0
- package/src/components/CertificateDisplayCard/CertificateImageDisplay.tsx +68 -0
- package/src/components/CertificateDisplayCard/CertificateProfileImageDisplay.test.tsx +66 -0
- package/src/components/CertificateDisplayCard/CertificateProfileImageDisplay.tsx +64 -0
- package/src/components/CertificateDisplayCard/CertificateRibbon.tsx +43 -0
- package/src/components/CertificateDisplayCard/InfoBox.tsx +30 -0
- package/src/components/CertificateDisplayCard/MediaAttachmentsBox.tsx +347 -0
- package/src/components/CertificateDisplayCard/TruncateTextBox.tsx +73 -0
- package/src/components/CertificateDisplayCard/VerificationRow.tsx +67 -0
- package/src/components/CertificateDisplayCard/VerificationsBox.tsx +44 -0
- package/src/components/CertificateDisplayCard/VerifierStateBadgeAndText.tsx +100 -0
- package/src/components/CertificateDisplayCard/index.ts +20 -0
- package/src/components/CircleCheckButton/CircleCheckButton.stories.tsx +21 -0
- package/src/components/CircleCheckButton/CircleCheckButton.tsx +28 -0
- package/src/components/CircleCheckButton/index.ts +5 -0
- package/src/components/CircleIcon/CircleIcon.tsx +90 -0
- package/src/components/CircleIcon/__tests__/CircleIcon.test.tsx +38 -0
- package/src/components/CircleIcon/ci new +0 -0
- package/src/components/CircleIcon/index.ts +5 -0
- package/src/components/CourseCard/CourseCard.stories.tsx +23 -0
- package/src/components/CourseCard/CourseCard.tsx +94 -0
- package/src/components/CourseCard/index.ts +5 -0
- package/src/components/CourseVerticalCard/CourseVerticalCard.stories.tsx +31 -0
- package/src/components/CourseVerticalCard/CourseVerticalCard.tsx +118 -0
- package/src/components/CourseVerticalCard/index.ts +5 -0
- package/src/components/FlippyCard/FlippyCard.tsx +34 -0
- package/src/components/FlippyCard/__tests__/FlippyCard.test.tsx +41 -0
- package/src/components/FlippyCard/index.ts +5 -0
- package/src/components/GenericCard/GenericCard.stories.tsx +22 -0
- package/src/components/GenericCard/GenericCard.tsx +72 -0
- package/src/components/GenericCard/index.ts +5 -0
- package/src/components/JobHistoryCard/JobHistoryCard.stories.tsx +26 -0
- package/src/components/JobHistoryCard/JobHistoryCard.tsx +44 -0
- package/src/components/JobHistoryCard/index.ts +5 -0
- package/src/components/JobListCard/JobListCard.stories.tsx +54 -0
- package/src/components/JobListCard/JobListCard.tsx +162 -0
- package/src/components/JobListCard/index.ts +5 -0
- package/src/components/LearnCardCreditCardBackFace/LearnCardCreditCardBackFace.stories.tsx +31 -0
- package/src/components/LearnCardCreditCardBackFace/LearnCardCreditCardBackFace.tsx +104 -0
- package/src/components/LearnCardCreditCardBackFace/__tests__/LearnCardCreditCardBackFace.test.tsx +64 -0
- package/src/components/LearnCardCreditCardBackFace/index.ts +6 -0
- package/src/components/LearnCardCreditCardBackFace/types.ts +45 -0
- package/src/components/LearnCardCreditCardFrontFace/LearnCardCreditCardFrontFace.stories.tsx +28 -0
- package/src/components/LearnCardCreditCardFrontFace/LearnCardCreditCardFrontFace.tsx +102 -0
- package/src/components/LearnCardCreditCardFrontFace/__tests__/LearnCardCreditCardFrontFace.test.tsx +48 -0
- package/src/components/LearnCardCreditCardFrontFace/index.ts +6 -0
- package/src/components/LearnCardCreditCardFrontFace/types.ts +42 -0
- package/src/components/LearnPill/LearnPill.stories.tsx +20 -0
- package/src/components/LearnPill/LearnPill.tsx +35 -0
- package/src/components/LearnPill/index.ts +5 -0
- package/src/components/Lightbox/Lightbox.tsx +133 -0
- package/src/components/Lightbox/index.ts +5 -0
- package/src/components/Loading/CircleSpinner.tsx +52 -0
- package/src/components/Loading/index.ts +5 -0
- package/src/components/MeritBadgeDisplayCard/AlignmentRow.tsx +26 -0
- package/src/components/MeritBadgeDisplayCard/AlignmentsBox.tsx +70 -0
- package/src/components/MeritBadgeDisplayCard/InfoBox.tsx +30 -0
- package/src/components/MeritBadgeDisplayCard/MediaAttachmentsBox.tsx +347 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeBackFace.tsx +130 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeCornerIcon.tsx +46 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeDisplayCard.tsx +177 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeFrontFace.tsx +292 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeImageDisplay.tsx +22 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeProfileImageDisplay.test.tsx +70 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeProfileImageDisplay.tsx +66 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeRibbon.tsx +185 -0
- package/src/components/MeritBadgeDisplayCard/MeritBadgeSkillsCount.tsx +47 -0
- package/src/components/MeritBadgeDisplayCard/TruncateTextBox.tsx +73 -0
- package/src/components/MeritBadgeDisplayCard/VerificationRow.tsx +67 -0
- package/src/components/MeritBadgeDisplayCard/VerificationsBox.tsx +44 -0
- package/src/components/MeritBadgeDisplayCard/VerifierStateBadgeAndText.tsx +57 -0
- package/src/components/MeritBadgeDisplayCard/index.ts +20 -0
- package/src/components/MiniVCThumbnail/ MiniVCThumbnail.css +18 -0
- package/src/components/MiniVCThumbnail/ MiniVCThumbnail.stories.tsx +24 -0
- package/src/components/MiniVCThumbnail/MiniVCThumbnail.tsx +83 -0
- package/src/components/MiniVCThumbnail/__tests__/MiniVCThumbnail.test.tsx +59 -0
- package/src/components/MiniVCThumbnail/index.ts +6 -0
- package/src/components/MiniVCThumbnail/types.ts +32 -0
- package/src/components/Notification/Notification.stories.tsx +25 -0
- package/src/components/Notification/Notification.tsx +115 -0
- package/src/components/Notification/__tests__/Notification.test.tsx +111 -0
- package/src/components/Notification/index.ts +6 -0
- package/src/components/Notification/types.ts +97 -0
- package/src/components/NotificationBoostCard/NotificationBoostCard.stories.tsx +54 -0
- package/src/components/NotificationBoostCard/NotificationBoostCard.tsx +153 -0
- package/src/components/NotificationBoostCard/index.ts +6 -0
- package/src/components/NotificationBoostCard/types.ts +25 -0
- package/src/components/NotificationUserAcceptedBoostCard/NotificationUserAcceptedBoostCard.stories.tsx +28 -0
- package/src/components/NotificationUserAcceptedBoostCard/NotificationUserAcceptedBoostCard.tsx +96 -0
- package/src/components/NotificationUserAcceptedBoostCard/index.ts +6 -0
- package/src/components/NotificationUserAcceptedBoostCard/types.ts +13 -0
- package/src/components/NotificationUserCard/NotificationUserCard.stories.tsx +26 -0
- package/src/components/NotificationUserCard/NotificationUserCard.tsx +121 -0
- package/src/components/NotificationUserCard/index.ts +6 -0
- package/src/components/NotificationUserCard/types.ts +43 -0
- package/src/components/QRCodeCard/QRCodeCard.stories.tsx +26 -0
- package/src/components/QRCodeCard/QRCodeCard.tsx +54 -0
- package/src/components/QRCodeCard/__tests__/QRCodeCard.test.tsx +31 -0
- package/src/components/QRCodeCard/index.ts +6 -0
- package/src/components/QRCodeCard/types.ts +22 -0
- package/src/components/RoundedPill/RoundedPill.stories.tsx +21 -0
- package/src/components/RoundedPill/RoundedPill.tsx +137 -0
- package/src/components/RoundedPill/index.ts +5 -0
- package/src/components/RoundedSquare/RoundedSquare.stories.tsx +28 -0
- package/src/components/RoundedSquare/RoundedSquare.tsx +69 -0
- package/src/components/RoundedSquare/__tests__/RoundedSquare.test.tsx +35 -0
- package/src/components/RoundedSquare/constants.ts +63 -0
- package/src/components/RoundedSquare/index.ts +6 -0
- package/src/components/RoundedSquare/roudnedquarenew +0 -0
- package/src/components/SchoolIdCard/SchoolIDCard.stories.tsx +30 -0
- package/src/components/SchoolIdCard/SchoolIDCard.tsx +81 -0
- package/src/components/SchoolIdCard/index.ts +6 -0
- package/src/components/SchoolIdCard/types.ts +42 -0
- package/src/components/SkillTabCard/SkillTabCard.stories.tsx +25 -0
- package/src/components/SkillTabCard/SkillTabCard.tsx +44 -0
- package/src/components/SkillTabCard/index.ts +5 -0
- package/src/components/SkillVerticalCard/SkillVerticalCard.stories.tsx +20 -0
- package/src/components/SkillVerticalCard/SkillVerticalCard.tsx +32 -0
- package/src/components/SkillVerticalCard/index.ts +5 -0
- package/src/components/SkillsCard/SkillsCard.stories.tsx +24 -0
- package/src/components/SkillsCard/SkillsCard.tsx +68 -0
- package/src/components/SkillsCard/index.ts +5 -0
- package/src/components/SkillsStatsCard/SkillsStatsCard.stories.tsx +63 -0
- package/src/components/SkillsStatsCard/SkillsStatsCard.tsx +92 -0
- package/src/components/SkillsStatsCard/index.ts +5 -0
- package/src/components/SmallAchievementCard/SmallAchievementCard.stories.tsx +23 -0
- package/src/components/SmallAchievementCard/SmallAchievementCard.tsx +50 -0
- package/src/components/SmallAchievementCard/index.ts +5 -0
- package/src/components/UserProfilePicture/UserProfilePicture.test.tsx +44 -0
- package/src/components/UserProfilePicture/UserProfilePicture.tsx +119 -0
- package/src/components/UserProfilePicture/index.ts +5 -0
- package/src/components/VCCard/VCCard.stories.tsx +64 -0
- package/src/components/VCCard/VCCard.tsx +84 -0
- package/src/components/VCCard/index.ts +5 -0
- package/src/components/VCDisplayBackFace/VCDisplayBackFace.tsx +112 -0
- package/src/components/VCDisplayBackFace/index.ts +5 -0
- package/src/components/VCDisplayCard/VCDisplayCard.stories.tsx +167 -0
- package/src/components/VCDisplayCard/VCDisplayCard.tsx +98 -0
- package/src/components/VCDisplayCard/index.ts +5 -0
- package/src/components/VCDisplayCard2/FitText.tsx +85 -0
- package/src/components/VCDisplayCard2/InfoBox.tsx +30 -0
- package/src/components/VCDisplayCard2/IssueHistoryBox.tsx +50 -0
- package/src/components/VCDisplayCard2/MediaAttachmentsBox.tsx +306 -0
- package/src/components/VCDisplayCard2/RibbonEnd.tsx +67 -0
- package/src/components/VCDisplayCard2/SelectedSkills.tsx +70 -0
- package/src/components/VCDisplayCard2/SkillsBox.tsx +53 -0
- package/src/components/VCDisplayCard2/Subskill.tsx +50 -0
- package/src/components/VCDisplayCard2/TopLevelSkill.tsx +63 -0
- package/src/components/VCDisplayCard2/TruncateTextBox.tsx +89 -0
- package/src/components/VCDisplayCard2/VC2BackFace.tsx +185 -0
- package/src/components/VCDisplayCard2/VC2FrontFaceInfo.tsx +279 -0
- package/src/components/VCDisplayCard2/VCDisplayCard2.stories.tsx +191 -0
- package/src/components/VCDisplayCard2/VCDisplayCard2.tsx +526 -0
- package/src/components/VCDisplayCard2/VCDisplayCard2AvatarFallbacks.stories.tsx +312 -0
- package/src/components/VCDisplayCard2/VCDisplayCardCategoryType.tsx +19 -0
- package/src/components/VCDisplayCard2/VCDisplayCardSkillsCount.tsx +46 -0
- package/src/components/VCDisplayCard2/VCIDDIsplayCard.tsx +159 -0
- package/src/components/VCDisplayCard2/VCIDDisplayFrontFace.tsx +213 -0
- package/src/components/VCDisplayCard2/VerificationRow.tsx +69 -0
- package/src/components/VCDisplayCard2/VerificationsBox.tsx +44 -0
- package/src/components/VCDisplayCard2/__tests__/VC2FrontFaceInfo.test.tsx +134 -0
- package/src/components/VCDisplayCard2/index.ts +23 -0
- package/src/components/VCDisplayFrontFace/VCDisplayFrontFace.tsx +143 -0
- package/src/components/VCDisplayFrontFace/index.ts +5 -0
- package/src/components/VCThumbnail/VCThumbnail.stories.tsx +32 -0
- package/src/components/VCThumbnail/VCThumbnail.tsx +182 -0
- package/src/components/VCThumbnail/__tests__/VCThumbnail.test.tsx +114 -0
- package/src/components/VCThumbnail/index.ts +6 -0
- package/src/components/VCThumbnail/types.ts +46 -0
- package/src/components/VCVerificationCheck/VCVerificationCheck.tsx +89 -0
- package/src/components/VCVerificationCheck/index.ts +5 -0
- package/src/components/VCVerificationPill/VCVerificationPill.tsx +85 -0
- package/src/components/VCVerificationPill/index.ts +5 -0
- package/src/components/index.ts +48 -0
- package/src/components/svgs/AccommodationsIcon.tsx +38 -0
- package/src/components/svgs/AccomplishmentsIcon.tsx +34 -0
- package/src/components/svgs/AchievementWithTitle.tsx +137 -0
- package/src/components/svgs/AcuteCheckmark.tsx +25 -0
- package/src/components/svgs/AwardDisplayIcon.tsx +37 -0
- package/src/components/svgs/AwardRibbon.tsx +29 -0
- package/src/components/svgs/BadgeDisplayIcon.tsx +31 -0
- package/src/components/svgs/Briefcase.tsx +48 -0
- package/src/components/svgs/Camera.tsx +25 -0
- package/src/components/svgs/CertificateDisplayIcon.tsx +56 -0
- package/src/components/svgs/Checkmark.tsx +59 -0
- package/src/components/svgs/CircleWithText.tsx +36 -0
- package/src/components/svgs/Coins.tsx +14 -0
- package/src/components/svgs/CourseDisplayIcon.tsx +43 -0
- package/src/components/svgs/DownRightArrow.tsx +29 -0
- package/src/components/svgs/ExclamationPoint.tsx +25 -0
- package/src/components/svgs/ExperienceIcon.tsx +34 -0
- package/src/components/svgs/FatArrow.tsx +44 -0
- package/src/components/svgs/GenericArrow.tsx +29 -0
- package/src/components/svgs/GenericDocumentIcon.tsx +26 -0
- package/src/components/svgs/Graduation.tsx +24 -0
- package/src/components/svgs/IDDisplayIcon.tsx +63 -0
- package/src/components/svgs/IDIcon.tsx +59 -0
- package/src/components/svgs/IDSleeve.tsx +21 -0
- package/src/components/svgs/InfoIcon.tsx +26 -0
- package/src/components/svgs/IssuerSeal.tsx +26 -0
- package/src/components/svgs/KeyIcon.tsx +31 -0
- package/src/components/svgs/LeftArrow.tsx +27 -0
- package/src/components/svgs/Lightbulb.tsx +14 -0
- package/src/components/svgs/Line.tsx +22 -0
- package/src/components/svgs/LinkIcon.tsx +35 -0
- package/src/components/svgs/PdfIcon.tsx +38 -0
- package/src/components/svgs/PersonBadge.tsx +55 -0
- package/src/components/svgs/PuzzlePiece.tsx +89 -0
- package/src/components/svgs/QRCodeIcon.tsx +21 -0
- package/src/components/svgs/RedFlag.tsx +41 -0
- package/src/components/svgs/RoundedCorner.tsx +28 -0
- package/src/components/svgs/RoundedX.tsx +35 -0
- package/src/components/svgs/ScoutsLogo.tsx +41 -0
- package/src/components/svgs/ScoutsPledge.tsx +33 -0
- package/src/components/svgs/ShieldChevron.tsx +24 -0
- package/src/components/svgs/Smiley.tsx +43 -0
- package/src/components/svgs/SocialBadgesIcon.tsx +43 -0
- package/src/components/svgs/ThreeDotVertical.tsx +41 -0
- package/src/components/svgs/Trophy.tsx +25 -0
- package/src/components/svgs/UnknownVerifierBadge.tsx +25 -0
- package/src/components/svgs/User.tsx +34 -0
- package/src/components/svgs/VerifiedBadge.tsx +37 -0
- package/src/components/svgs/VideoIcon.tsx +28 -0
- package/src/components/svgs/X.tsx +35 -0
- package/src/components/svgs/index.ts +54 -0
- package/src/constants/icons.ts +87 -0
- package/src/constants/index.ts +109 -0
- package/src/constants/notifications.ts +14 -0
- package/src/constants/skills.ts +2202 -0
- package/src/declaration.d.ts +21 -0
- package/src/helpers/__tests__/credentialFormat.helpers.test.ts +100 -0
- package/src/helpers/color.helpers.ts +35 -0
- package/src/helpers/credential.helpers.test.ts +108 -0
- package/src/helpers/credential.helpers.tsx +249 -0
- package/src/helpers/credentialFormat.helpers.ts +68 -0
- package/src/helpers/did-display.helpers.ts +230 -0
- package/src/helpers/display.helpers.ts +53 -0
- package/src/helpers/string.helpers.ts +7 -0
- package/src/helpers/test.helpers.ts +680 -0
- package/src/helpers/url.helpers.ts +3 -0
- package/src/helpers/useHorizontalPages.ts +130 -0
- package/src/helpers/useOnMomentumScrollEnd.ts +28 -0
- package/src/helpers/useScrollBorders.ts +59 -0
- package/src/helpers/video.helpers.ts +125 -0
- package/src/hooks/useCredentialFormat.tsx +23 -0
- package/src/hooks/useParsedSdJwtVc.tsx +64 -0
- package/src/index.ts +16 -0
- package/src/types/index.ts +390 -0
- package/LICENSE +0 -21
- package/dist/cjs/SchoolIDCard-e22d0d80.js.map +0 -1
- package/dist/cjs/VCDisplayCard2-6c87eade.js.map +0 -1
- package/dist/cjs/VerifierStateBadgeAndText-5229da1a.js.map +0 -1
- package/dist/cjs/credential.helpers-473e89c5.js.map +0 -1
- package/dist/cjs/index-0cac2c5b.js.map +0 -1
- package/dist/cjs/types.esm-12bb5eed.js.map +0 -1
- package/dist/esm/SchoolIDCard-8b151cd3.js.map +0 -1
- package/dist/esm/VCDisplayCard2-c6a81e42.js.map +0 -1
- package/dist/esm/VerifierStateBadgeAndText-6946e820.js.map +0 -1
- package/dist/esm/credential.helpers-ff461699.js.map +0 -1
- package/dist/esm/index-2ef835bd.js.map +0 -1
- package/dist/esm/index-eae3ca64.js.map +0 -1
- package/dist/esm/types.esm-f32fc00a.js.map +0 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Story, Meta } from '@storybook/react';
|
|
3
|
+
|
|
4
|
+
import SkillsStatsCard from './SkillsStatsCard';
|
|
5
|
+
import { SkillsStatsCardProps } from '../../types';
|
|
6
|
+
|
|
7
|
+
const dummySkills = [
|
|
8
|
+
{
|
|
9
|
+
name: 'Creativity',
|
|
10
|
+
percent: 30,
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: 'Wizardry',
|
|
14
|
+
percent: 25,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: 'Basketball',
|
|
18
|
+
percent: 18,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'Cooking',
|
|
22
|
+
percent: 9,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'Coding',
|
|
26
|
+
percent: 5,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Creativity',
|
|
30
|
+
percent: 30,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'Wizardry',
|
|
34
|
+
percent: 25,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'Basketball',
|
|
38
|
+
percent: 18,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Cooking',
|
|
42
|
+
percent: 9,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Coding',
|
|
46
|
+
percent: 5,
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
export default {
|
|
51
|
+
title: 'Skills Stats Card',
|
|
52
|
+
component: SkillsStatsCard,
|
|
53
|
+
argTypes: {},
|
|
54
|
+
} as Meta<typeof SkillsStatsCard>;
|
|
55
|
+
|
|
56
|
+
const Template: Story<SkillsStatsCardProps> = args => <SkillsStatsCard {...args} />;
|
|
57
|
+
|
|
58
|
+
export const SkillsStatsCardTest = Template.bind({});
|
|
59
|
+
SkillsStatsCardTest.args = {
|
|
60
|
+
totalCount: 10,
|
|
61
|
+
skills: dummySkills,
|
|
62
|
+
onClick: () => {},
|
|
63
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SkillsStatsCardProps } from '../../types';
|
|
3
|
+
import SkillGraphPlaceholder from '../../assets/images/skillgraph.svg';
|
|
4
|
+
|
|
5
|
+
type SkillStatListItemProps = {
|
|
6
|
+
name?: string;
|
|
7
|
+
percent: string | number;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
type SkillStatListItemIndicatorProps = {
|
|
12
|
+
className?: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type MoreSkillsListItemProps = {
|
|
16
|
+
count?: number | string;
|
|
17
|
+
percent?: string;
|
|
18
|
+
className?: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const SkillStatListItemIndicator: React.FC<SkillStatListItemIndicatorProps> = ({
|
|
22
|
+
className = 'bg-emerald-700',
|
|
23
|
+
}) => {
|
|
24
|
+
return (
|
|
25
|
+
<span
|
|
26
|
+
className={`${className} skill-item-stat-indicator w-[10px] h-[10px] rounded-[3px] mr-[10px]`}
|
|
27
|
+
></span>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const SkillStatListItem: React.FC<SkillStatListItemProps> = ({ name, percent, className }) => {
|
|
32
|
+
const colorIndicator = <SkillStatListItemIndicator />;
|
|
33
|
+
return (
|
|
34
|
+
<div className="flex items-center justify-between px-[10px] skill-stat-list-item flex text-xs h-[20px] py-[5px] shadow-[0_1px_3px_rgba(0,0,0,0.3)] mt-[10px] rounded-[10px] text-grayscale-900 font-semibold">
|
|
35
|
+
<span className="flex justify-center items-center">
|
|
36
|
+
{colorIndicator}
|
|
37
|
+
{name}
|
|
38
|
+
</span>
|
|
39
|
+
<span>{percent}%</span>
|
|
40
|
+
</div>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const MoreSkillsListItem: React.FC<MoreSkillsListItemProps> = ({ count, percent, className }) => {
|
|
45
|
+
const colorIndicator = <SkillStatListItemIndicator className="bg-grayscale-200" />;
|
|
46
|
+
return (
|
|
47
|
+
<div className="flex items-center justify-between px-[10px] skill-stat-list-item flex text-xs h-[20px] py-[5px] shadow-[0_1px_3px_rgba(0,0,0,0.3)] mt-[10px] rounded-[10px] text-grayscale-900 font-semibold">
|
|
48
|
+
<span className="flex justify-center items-center">
|
|
49
|
+
{colorIndicator}+{count} more
|
|
50
|
+
</span>
|
|
51
|
+
<span>{percent}%</span>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export const SkillsStatsCard: React.FC<SkillsStatsCardProps> = ({
|
|
57
|
+
totalCount = 0,
|
|
58
|
+
skills = [],
|
|
59
|
+
className,
|
|
60
|
+
onClick = () => {},
|
|
61
|
+
}) => {
|
|
62
|
+
const title = `${totalCount} Skill Categories`;
|
|
63
|
+
|
|
64
|
+
const showMore = skills?.length > 3;
|
|
65
|
+
|
|
66
|
+
const renderSkillsList = skills?.slice(0, 3).map(skill => {
|
|
67
|
+
return <SkillStatListItem name={skill?.name} percent={skill?.percent} key={skill?.name} />;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
if (showMore) {
|
|
71
|
+
const otherLength = skills?.length - 3;
|
|
72
|
+
renderSkillsList?.push(<MoreSkillsListItem count={otherLength} percent={'27'} />);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<div
|
|
77
|
+
onClick={onClick}
|
|
78
|
+
className={`flex-col shadow-[0_0_8px_0px_rgba(0,0,0,0.2)] relative $ py-[10px] px-[15px] max-w-[400px] h-[199px] rounded-[20px] ${className}`}
|
|
79
|
+
>
|
|
80
|
+
<section className="flex skill-stats-card-title-container items-center">
|
|
81
|
+
<h3 className="text-[17px] text-gray-900 font-bold">{title}</h3>
|
|
82
|
+
</section>
|
|
83
|
+
|
|
84
|
+
<section className="skill-stats-card-body my-[5px] flex items-center justify-between">
|
|
85
|
+
<img src={SkillGraphPlaceholder} className="skill-graph-container" />
|
|
86
|
+
<div className="skill-stat-list w-full ml-[15px]">{renderSkillsList}</div>
|
|
87
|
+
</section>
|
|
88
|
+
</div>
|
|
89
|
+
);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export default SkillsStatsCard;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Story, Meta } from '@storybook/react';
|
|
3
|
+
|
|
4
|
+
import SmallVCCard from './SmallAchievementCard';
|
|
5
|
+
import { SmallAchievementCardProps } from '../../types';
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Mini Achievement Display Card',
|
|
9
|
+
component: SmallVCCard,
|
|
10
|
+
argTypes: {},
|
|
11
|
+
} as Meta<typeof SmallVCCard>;
|
|
12
|
+
|
|
13
|
+
const Template: Story<SmallAchievementCardProps> = args => <SmallVCCard {...args} />;
|
|
14
|
+
|
|
15
|
+
export const SmallVCCardTest = Template.bind({});
|
|
16
|
+
SmallVCCardTest.args = {
|
|
17
|
+
title: 'Learning History',
|
|
18
|
+
thumbImgSrc: null,
|
|
19
|
+
date: 'Apr 22 2022',
|
|
20
|
+
onClick: () => {
|
|
21
|
+
console.log('//goodbye world');
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SmallAchievementCardProps } from '../../types';
|
|
3
|
+
import { RoundedPill } from '../RoundedPill';
|
|
4
|
+
import { Trophy } from '../svgs';
|
|
5
|
+
|
|
6
|
+
export const SmallAchievementCard: React.FC<SmallAchievementCardProps> = ({
|
|
7
|
+
title = 'Title Lorem Ipsum',
|
|
8
|
+
thumbImgSrc,
|
|
9
|
+
date = 'Apr 20, 2022',
|
|
10
|
+
showStatus = false,
|
|
11
|
+
onClick = () => {},
|
|
12
|
+
}) => {
|
|
13
|
+
const thumbClass = thumbImgSrc ? 'bg-grayscale-50' : 'bg-indigo-200';
|
|
14
|
+
return (
|
|
15
|
+
<button
|
|
16
|
+
onClick={onClick}
|
|
17
|
+
className={`flex-col shadow-[0_0_8px_0px_rgba(0,0,0,0.2)] relative $ py-[8px] px-[8px] w-[160px] h-[209px] rounded-[20px] rounded-square-card-container`}
|
|
18
|
+
>
|
|
19
|
+
<section
|
|
20
|
+
className={`flex h-[110px] ${thumbClass} flex-col justify-center items-center w-full rounded-[20px]`}
|
|
21
|
+
>
|
|
22
|
+
{thumbImgSrc && (
|
|
23
|
+
<img
|
|
24
|
+
className="h-full w-full object-contain"
|
|
25
|
+
src={thumbImgSrc ?? ''}
|
|
26
|
+
alt="Credential Achievement Image"
|
|
27
|
+
/>
|
|
28
|
+
)}
|
|
29
|
+
{(!thumbImgSrc || thumbImgSrc === '') && (
|
|
30
|
+
<Trophy
|
|
31
|
+
className="achievement-placeholder-trophy flex p-[15px]"
|
|
32
|
+
color="#ffffff"
|
|
33
|
+
/>
|
|
34
|
+
)}
|
|
35
|
+
</section>
|
|
36
|
+
|
|
37
|
+
<section className="achievement-title w-full flex justify-center line-clamp-2">
|
|
38
|
+
<p className="text-sm text-grayscale-900 font-bold mt-[10px] text-center">
|
|
39
|
+
{title}
|
|
40
|
+
</p>
|
|
41
|
+
</section>
|
|
42
|
+
<p className="achievement-card-date mt-[5px] text-grayscale-500 text-[12px] w-full text-center">
|
|
43
|
+
{date}
|
|
44
|
+
</p>
|
|
45
|
+
<section className="achievement-card-footer"></section>
|
|
46
|
+
</button>
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export default SmallAchievementCard;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { render, fireEvent } from '@testing-library/react';
|
|
5
|
+
import { describe, expect, test } from 'vitest';
|
|
6
|
+
|
|
7
|
+
import UserProfilePicture from './UserProfilePicture';
|
|
8
|
+
|
|
9
|
+
describe('UserProfilePicture broken-image fallback', () => {
|
|
10
|
+
test('renders the img when a src is provided', () => {
|
|
11
|
+
const { container } = render(
|
|
12
|
+
<UserProfilePicture user={{ image: 'https://example.com/a.png', name: 'Ada' }} />
|
|
13
|
+
);
|
|
14
|
+
expect(container.querySelector('img')).not.toBeNull();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('falls back to initial avatar when the image fails to load', () => {
|
|
18
|
+
const { container } = render(
|
|
19
|
+
<UserProfilePicture user={{ image: 'https://example.com/broken.png', name: 'Ada' }} />
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const img = container.querySelector('img');
|
|
23
|
+
expect(img).not.toBeNull();
|
|
24
|
+
|
|
25
|
+
fireEvent.error(img!);
|
|
26
|
+
|
|
27
|
+
expect(container.querySelector('img')).toBeNull();
|
|
28
|
+
expect(container.textContent).toContain('A');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('falls back to fingerprint icon on error when variant is fingerprint', () => {
|
|
32
|
+
const { container } = render(
|
|
33
|
+
<UserProfilePicture
|
|
34
|
+
user={{ image: 'https://example.com/broken.png', name: '' }}
|
|
35
|
+
avatarFallbackVariant="fingerprint"
|
|
36
|
+
/>
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
fireEvent.error(container.querySelector('img')!);
|
|
40
|
+
|
|
41
|
+
expect(container.querySelector('img')).toBeNull();
|
|
42
|
+
expect(container.querySelector('svg')).not.toBeNull();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
const PersonSilhouette: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
4
|
+
<svg
|
|
5
|
+
width="22"
|
|
6
|
+
height="22"
|
|
7
|
+
viewBox="0 0 22 22"
|
|
8
|
+
fill="none"
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
className={className}
|
|
11
|
+
>
|
|
12
|
+
<path
|
|
13
|
+
d="M10.7115 13.5488C6.86057 13.5488 3.57129 14.156 3.57129 16.5845C3.57129 19.014 6.84004 19.6426 10.7115 19.6426C14.5624 19.6426 17.8516 19.0363 17.8516 16.6069C17.8516 14.1774 14.5838 13.5488 10.7115 13.5488Z"
|
|
14
|
+
fill="#353E64"
|
|
15
|
+
/>
|
|
16
|
+
<path
|
|
17
|
+
opacity="0.4"
|
|
18
|
+
d="M10.7115 11.2361C13.3347 11.2361 15.4365 9.13345 15.4365 6.51113C15.4365 3.88881 13.3347 1.78613 10.7115 1.78613C8.08913 1.78613 5.98645 3.88881 5.98645 6.51113C5.98645 9.13345 8.08913 11.2361 10.7115 11.2361Z"
|
|
19
|
+
fill="#353E64"
|
|
20
|
+
/>
|
|
21
|
+
</svg>
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const FingerprintIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
25
|
+
<svg
|
|
26
|
+
width="32"
|
|
27
|
+
height="31"
|
|
28
|
+
viewBox="0 0 32 31"
|
|
29
|
+
fill="none"
|
|
30
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
31
|
+
className={className}
|
|
32
|
+
>
|
|
33
|
+
<path
|
|
34
|
+
d="M15.612 10.3663C21.746 10.3665 26.7187 15.339 26.7187 21.473C26.7187 23.722 24.8953 25.5453 22.6462 25.5454C20.3972 25.5454 18.5738 23.7222 18.5738 21.473C18.5738 19.8373 17.2476 18.5113 15.612 18.5112C13.9763 18.5112 12.6502 19.8372 12.6502 21.473C12.6502 24.103 13.6282 26.5011 15.2418 28.3294C15.7824 28.9423 15.7241 29.8778 15.1117 30.4191C14.4985 30.9602 13.5617 30.902 13.0204 30.2889C10.9478 27.9403 9.68847 24.8519 9.68847 21.473C9.68847 18.2015 12.3406 15.5494 15.612 15.5494C18.8834 15.5495 21.5356 18.2015 21.5356 21.473C21.5356 22.0864 22.0328 22.5836 22.6462 22.5836C23.2596 22.5835 23.7569 22.0862 23.7569 21.473C23.7569 16.9748 20.1102 13.3282 15.612 13.3281C11.1137 13.3281 7.46712 16.9746 7.46712 21.473C7.46712 22.498 7.65616 23.4759 7.99933 24.3755C8.29047 25.1394 7.90699 25.9958 7.14318 26.2874C6.37916 26.5787 5.52292 26.1951 5.23133 25.4313C4.76156 24.1997 4.50533 22.8644 4.50533 21.473C4.50533 15.339 9.47799 10.3663 15.612 10.3663ZM15.4645 21.5019C16.2659 21.3392 17.0486 21.8576 17.2115 22.6589C17.7602 25.3619 20.1527 27.3964 23.0165 27.3965C23.217 27.3965 23.415 27.3869 23.6094 27.3677C24.4233 27.2868 25.1484 27.8814 25.2292 28.6953C25.3096 29.5088 24.7165 30.2339 23.9031 30.3149C23.6113 30.3438 23.315 30.3583 23.0165 30.3583C18.7164 30.3582 15.1311 27.305 14.3076 23.2489C14.145 22.4475 14.6635 21.6649 15.4645 21.5019ZM15.612 5.18313C22.9079 5.18344 29.0803 9.97908 31.1556 16.5863C31.4005 17.3663 30.9665 18.198 30.1867 18.4432C29.4067 18.688 28.575 18.2542 28.3298 17.4743C26.6312 12.0658 21.5773 8.14523 15.612 8.14492C9.64668 8.14505 4.59309 12.0658 2.89428 17.4743C2.64921 18.2542 1.81744 18.6879 1.03739 18.4432C0.257211 18.1981 -0.176617 17.3666 0.0684418 16.5863C2.14387 9.97898 8.31608 5.18326 15.612 5.18313ZM15.612 0C21.2529 0.000192516 26.3708 2.25505 30.1071 5.90911C30.6913 6.4809 30.7017 7.41857 30.1304 8.0032C29.5586 8.58772 28.6209 8.59782 28.0362 8.02633C24.8309 4.89168 20.4478 2.96198 15.612 2.96179C10.7762 2.96185 6.39334 4.89163 3.18787 8.02633C2.60327 8.59809 1.66569 8.58756 1.09378 8.0032C0.522099 7.41847 0.532273 6.48093 1.11693 5.90911C4.85343 2.255 9.97118 5.92358e-05 15.612 0Z"
|
|
35
|
+
fill="currentColor"
|
|
36
|
+
/>
|
|
37
|
+
</svg>
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
// Copied / Adapted from learn-card-base
|
|
41
|
+
export const UserProfilePicture: React.FC<{
|
|
42
|
+
customContainerClass?: string;
|
|
43
|
+
customImageClass?: string;
|
|
44
|
+
user?: any;
|
|
45
|
+
alt?: string;
|
|
46
|
+
children?: React.ReactNode | null;
|
|
47
|
+
avatarColor?: string;
|
|
48
|
+
avatarFingerprintColor?: string;
|
|
49
|
+
avatarTextClassName?: string;
|
|
50
|
+
avatarIconClassName?: string;
|
|
51
|
+
avatarSilhouetteClassName?: string;
|
|
52
|
+
avatarFallbackVariant?: 'initial' | 'fingerprint';
|
|
53
|
+
}> = ({
|
|
54
|
+
customContainerClass,
|
|
55
|
+
customImageClass,
|
|
56
|
+
user,
|
|
57
|
+
alt,
|
|
58
|
+
children,
|
|
59
|
+
avatarColor,
|
|
60
|
+
avatarFingerprintColor,
|
|
61
|
+
avatarTextClassName,
|
|
62
|
+
avatarIconClassName,
|
|
63
|
+
avatarSilhouetteClassName,
|
|
64
|
+
avatarFallbackVariant = 'initial',
|
|
65
|
+
}) => {
|
|
66
|
+
const baseColor = avatarColor || 'bg-grayscale-700';
|
|
67
|
+
const src = user?.image || user?.profileImage;
|
|
68
|
+
const [errored, setErrored] = React.useState(false);
|
|
69
|
+
|
|
70
|
+
// Reset the error flag whenever the source changes (e.g. good URL after a bad one).
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
setErrored(false);
|
|
73
|
+
}, [src]);
|
|
74
|
+
|
|
75
|
+
const letterToDisplay =
|
|
76
|
+
user?.displayName?.substring(0, 1) ||
|
|
77
|
+
user?.profileId?.substring(0, 1) ||
|
|
78
|
+
user?.name?.substring(0, 1) ||
|
|
79
|
+
user?.email?.substring(0, 1) ||
|
|
80
|
+
'';
|
|
81
|
+
|
|
82
|
+
if (!src || errored) {
|
|
83
|
+
const fingerprintIconClassName = `${avatarIconClassName || 'w-[60%] h-[60%]'} ${
|
|
84
|
+
avatarFingerprintColor || 'text-white/85'
|
|
85
|
+
}`;
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<div
|
|
89
|
+
className={`rounded-full flex items-center justify-center font-poppins font-semibold uppercase select-none text-white text-2xl ${customContainerClass} ${baseColor}`}
|
|
90
|
+
>
|
|
91
|
+
{avatarFallbackVariant === 'fingerprint' ? (
|
|
92
|
+
<FingerprintIcon className={fingerprintIconClassName} />
|
|
93
|
+
) : letterToDisplay ? (
|
|
94
|
+
<span className={avatarTextClassName || ''}>{letterToDisplay}</span>
|
|
95
|
+
) : (
|
|
96
|
+
<PersonSilhouette
|
|
97
|
+
className={avatarSilhouetteClassName || avatarIconClassName}
|
|
98
|
+
/>
|
|
99
|
+
)}
|
|
100
|
+
{children}
|
|
101
|
+
</div>
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<div className={`relative select-none ${customContainerClass}`}>
|
|
107
|
+
<img
|
|
108
|
+
className={`rounded-full ${customImageClass}`}
|
|
109
|
+
alt={alt || 'user'}
|
|
110
|
+
src={src}
|
|
111
|
+
referrerPolicy="no-referrer"
|
|
112
|
+
onError={() => setErrored(true)}
|
|
113
|
+
/>
|
|
114
|
+
{children}
|
|
115
|
+
</div>
|
|
116
|
+
);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default UserProfilePicture;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Story, Meta } from '@storybook/react';
|
|
3
|
+
|
|
4
|
+
import VCCard, { VCCardProps } from './VCCard';
|
|
5
|
+
import {
|
|
6
|
+
JffCredential,
|
|
7
|
+
// simpleConvertTagsToSkills,
|
|
8
|
+
issueeOverride,
|
|
9
|
+
SuperSkillsOprahCredential,
|
|
10
|
+
// superSkillsConvertTags,
|
|
11
|
+
BoostCredential,
|
|
12
|
+
} from '../../helpers/test.helpers';
|
|
13
|
+
|
|
14
|
+
export default {
|
|
15
|
+
title: 'VCCard',
|
|
16
|
+
component: VCCard,
|
|
17
|
+
argTypes: {},
|
|
18
|
+
} as Meta<typeof VCCard>;
|
|
19
|
+
|
|
20
|
+
const Template: Story<VCCardProps> = args => <VCCard {...args} />;
|
|
21
|
+
|
|
22
|
+
const baseArgs = {
|
|
23
|
+
credential: JffCredential,
|
|
24
|
+
// convertTagsToSkills: simpleConvertTagsToSkills,
|
|
25
|
+
issueeOverride,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const VCCardVersion1Test = Template.bind({});
|
|
29
|
+
VCCardVersion1Test.args = { version: '1', ...baseArgs };
|
|
30
|
+
|
|
31
|
+
export const VCCardVersion2Test = Template.bind({});
|
|
32
|
+
VCCardVersion2Test.args = {
|
|
33
|
+
version: '2',
|
|
34
|
+
bottomRightIcon: {
|
|
35
|
+
image: (
|
|
36
|
+
// courtesy of ChatGPT
|
|
37
|
+
<svg width="30" height="30" viewBox="0 0 100 100">
|
|
38
|
+
<polygon
|
|
39
|
+
points="50,0 63.7,36.7 100,40 75,70.7 86.6,106.7 50,85.3 13.4,106.7 25,70.7 0,40 36.3,36.7"
|
|
40
|
+
fill="yellow"
|
|
41
|
+
stroke="orange"
|
|
42
|
+
strokeWidth={3}
|
|
43
|
+
/>
|
|
44
|
+
</svg>
|
|
45
|
+
),
|
|
46
|
+
color: '#000',
|
|
47
|
+
},
|
|
48
|
+
...baseArgs,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const SuperSkillsVersion2Test = Template.bind({});
|
|
52
|
+
SuperSkillsVersion2Test.args = {
|
|
53
|
+
...baseArgs,
|
|
54
|
+
version: '2',
|
|
55
|
+
credential: SuperSkillsOprahCredential,
|
|
56
|
+
// convertTagsToSkills: superSkillsConvertTags,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const BoostCredentialVersion2Test = Template.bind({});
|
|
60
|
+
BoostCredentialVersion2Test.args = {
|
|
61
|
+
...baseArgs,
|
|
62
|
+
version: '2',
|
|
63
|
+
credential: BoostCredential,
|
|
64
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { initLearnCard } from '@learncard/init';
|
|
3
|
+
import { VC, Profile, VerificationItem } from '@learncard/types';
|
|
4
|
+
|
|
5
|
+
import { VCDisplayCard } from '../VCDisplayCard';
|
|
6
|
+
import {
|
|
7
|
+
VCDisplayCard2,
|
|
8
|
+
CredentialIconType,
|
|
9
|
+
} from '../VCDisplayCard2';
|
|
10
|
+
|
|
11
|
+
import { MediaMetadata, VideoMetadata } from '../../types';
|
|
12
|
+
|
|
13
|
+
export type VCCardProps = {
|
|
14
|
+
credential: VC;
|
|
15
|
+
issueeOverride?: Profile;
|
|
16
|
+
className?: string;
|
|
17
|
+
version?: '1' | '2';
|
|
18
|
+
|
|
19
|
+
/* Only used for version 2 */
|
|
20
|
+
subjectImageComponent?: React.ReactNode;
|
|
21
|
+
// convertTagsToSkills?: (tags: string[]) => { [skill: string]: string[] };
|
|
22
|
+
handleXClick?: () => void;
|
|
23
|
+
getFileMetadata?: (url: string) => MediaMetadata;
|
|
24
|
+
getVideoMetadata?: (url: string) => VideoMetadata;
|
|
25
|
+
onMediaAttachmentClick?: (url: string) => void;
|
|
26
|
+
bottomRightIcon?: CredentialIconType;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const VCCard: React.FC<VCCardProps> = ({
|
|
30
|
+
credential,
|
|
31
|
+
issueeOverride,
|
|
32
|
+
className = '',
|
|
33
|
+
version = '1',
|
|
34
|
+
subjectImageComponent,
|
|
35
|
+
// convertTagsToSkills,
|
|
36
|
+
handleXClick,
|
|
37
|
+
getFileMetadata,
|
|
38
|
+
getVideoMetadata,
|
|
39
|
+
onMediaAttachmentClick,
|
|
40
|
+
bottomRightIcon,
|
|
41
|
+
}) => {
|
|
42
|
+
const [loading, setLoading] = useState(true);
|
|
43
|
+
const [vcVerification, setVCVerification] = useState<VerificationItem[]>([]);
|
|
44
|
+
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
const verify = async () => {
|
|
47
|
+
const wallet = await initLearnCard();
|
|
48
|
+
const verification = await wallet.invoke.verifyCredential(credential, {}, true);
|
|
49
|
+
setVCVerification(verification);
|
|
50
|
+
setLoading(false);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
verify();
|
|
54
|
+
}, [credential]);
|
|
55
|
+
|
|
56
|
+
if (version === '1') {
|
|
57
|
+
return (
|
|
58
|
+
<VCDisplayCard
|
|
59
|
+
credential={credential}
|
|
60
|
+
issueeOverride={issueeOverride}
|
|
61
|
+
className={className}
|
|
62
|
+
loading={loading}
|
|
63
|
+
verification={vcVerification}
|
|
64
|
+
/>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
return (
|
|
68
|
+
<VCDisplayCard2
|
|
69
|
+
credential={credential}
|
|
70
|
+
issueeOverride={issueeOverride}
|
|
71
|
+
verificationInProgress={loading}
|
|
72
|
+
verificationItems={vcVerification}
|
|
73
|
+
subjectImageComponent={subjectImageComponent}
|
|
74
|
+
// convertTagsToSkills={convertTagsToSkills}
|
|
75
|
+
handleXClick={handleXClick}
|
|
76
|
+
getFileMetadata={getFileMetadata}
|
|
77
|
+
getVideoMetadata={getVideoMetadata}
|
|
78
|
+
onMediaAttachmentClick={onMediaAttachmentClick}
|
|
79
|
+
bottomRightIcon={bottomRightIcon}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default VCCard;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { VCDisplayCardProps } from '../../types';
|
|
3
|
+
import { VCVerificationCheckWithText } from '../VCVerificationCheck/VCVerificationCheck';
|
|
4
|
+
import VCVerificationPill from '../VCVerificationPill/VCVerificationPill';
|
|
5
|
+
import FlipArrowRight from '../../assets/images/ArrowArcRight.svg';
|
|
6
|
+
import { getNameFromProfile } from '../../helpers/credential.helpers';
|
|
7
|
+
|
|
8
|
+
export const VCDisplayBackFace: React.FC<VCDisplayCardProps> = ({
|
|
9
|
+
issuer,
|
|
10
|
+
credentialSubject,
|
|
11
|
+
className = '',
|
|
12
|
+
loading,
|
|
13
|
+
verification = [],
|
|
14
|
+
handleClick,
|
|
15
|
+
overrideDetailsComponent,
|
|
16
|
+
}) => {
|
|
17
|
+
const descriptionText = credentialSubject?.achievement?.description;
|
|
18
|
+
const criteriaText = credentialSubject?.achievement?.criteria?.narrative;
|
|
19
|
+
const issuerUrl = typeof issuer === 'object' ? issuer.url : '';
|
|
20
|
+
const issuerName = getNameFromProfile(issuer ?? '');
|
|
21
|
+
const defaultDetails = (
|
|
22
|
+
<>
|
|
23
|
+
<div className="width-full">
|
|
24
|
+
<h6 className="line-clamp-1 text-grayscale-900 font-bold uppercase text-xs tracking-wider subpixel-antialiased">
|
|
25
|
+
Description
|
|
26
|
+
</h6>
|
|
27
|
+
<p className="line-clamp-3 subpixel-antialiased text-grayscale-600 text-[14px] lc-line-clamp">
|
|
28
|
+
{descriptionText}
|
|
29
|
+
</p>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div className="width-full mt-[10px]">
|
|
33
|
+
<h6 className="line-clamp-1 text-grayscale-900 font-bold uppercase text-xs tracking-wider subpixel-antialiased">
|
|
34
|
+
Criteria
|
|
35
|
+
</h6>
|
|
36
|
+
<p className="line-clamp-3 subpixel-antialiased text-grayscale-600 text-[14px] lc-line-clamp">
|
|
37
|
+
{criteriaText}
|
|
38
|
+
</p>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div className="width-full mt-[10px] line-clamp-1 overflow-hidden vc-issuer-name-info">
|
|
42
|
+
<h6 className="line-clamp-1 text-grayscale-900 font-bold uppercase text-xs tracking-wider subpixel-antialiased">
|
|
43
|
+
Issuer
|
|
44
|
+
</h6>
|
|
45
|
+
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block overflow-ellipsis break-all">
|
|
46
|
+
{issuerName}
|
|
47
|
+
</p>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
{issuerUrl && (
|
|
51
|
+
<p className="text-indigo-500 font-bold text-xs width-full text-center mt-8">
|
|
52
|
+
{issuerUrl}
|
|
53
|
+
</p>
|
|
54
|
+
)}
|
|
55
|
+
</>
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const renderDetails = overrideDetailsComponent ? overrideDetailsComponent : defaultDetails;
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<div
|
|
62
|
+
className={`z-[9] vc-display-main-card-back flex overflow-hidden flex-col items-center justify-between relative max-w-[400px] h-[100%] max-h-[1100px] min-h-[600px] p-7 rounded-3xl shadow-3xl bg-emerald-700 vc-display-card-full-container ${className}`}
|
|
63
|
+
>
|
|
64
|
+
<section className="flex max-h-[150px] items-end bg-white rounded-bl-[50%] rounded-br-[50%] absolute top-0 w-[110%] h-[55%] min-h-[400px]"></section>
|
|
65
|
+
<section className="flex flex-col items-center justify-center w-full z-10 text-left credential-details-container max-w-[100%] relative">
|
|
66
|
+
<section className="flex flex-row items-start justify-start w-full line-clamp-2">
|
|
67
|
+
<h3
|
|
68
|
+
className="text-2xl line-clamp-2 tracking-wide leading-snug text-left text-emerald-700"
|
|
69
|
+
data-testid="vc-credential-details-title tracking-wide subpixel-antialiased"
|
|
70
|
+
>
|
|
71
|
+
Credential Details
|
|
72
|
+
</h3>
|
|
73
|
+
</section>
|
|
74
|
+
|
|
75
|
+
<section className="flex flex-col mt-2 w-full my-2 min-h-[200px] credential-details-info">
|
|
76
|
+
{renderDetails}
|
|
77
|
+
</section>
|
|
78
|
+
|
|
79
|
+
<div className="w-full mt-2"></div>
|
|
80
|
+
|
|
81
|
+
<button
|
|
82
|
+
onClick={handleClick}
|
|
83
|
+
className="vc-flip-btn bg-white my-3 border-2 text-indigo-500 font-semibold py-2 px-4 shadow-3xl rounded-full"
|
|
84
|
+
>
|
|
85
|
+
<span className="flex justify-center">
|
|
86
|
+
<img
|
|
87
|
+
className="h-8 w-8 my-0 mx-4 scale-x-[-1]"
|
|
88
|
+
src={FlipArrowRight ?? ''}
|
|
89
|
+
alt="Flip Card"
|
|
90
|
+
/>
|
|
91
|
+
</span>
|
|
92
|
+
</button>
|
|
93
|
+
|
|
94
|
+
<section className="flex-col items-center justify-center checklist-container justify-center w-[100%] width-full mt-[20px]">
|
|
95
|
+
<VCVerificationCheckWithText loading={loading} />
|
|
96
|
+
<section>
|
|
97
|
+
{verification.map(item => (
|
|
98
|
+
<VCVerificationPill
|
|
99
|
+
key={item.check}
|
|
100
|
+
status={item.status}
|
|
101
|
+
message={item.message}
|
|
102
|
+
details={item.details}
|
|
103
|
+
/>
|
|
104
|
+
))}
|
|
105
|
+
</section>
|
|
106
|
+
</section>
|
|
107
|
+
</section>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export default VCDisplayBackFace;
|