@learncard/react 2.12.11 → 3.0.1
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 +23 -5
- package/dist/base.css +2 -1
- package/dist/base.js +1 -1
- package/dist/cjs/{AchievementCard-f6bdb95c.js → AchievementCard-6ef39c2b.js} +3 -3
- package/dist/cjs/{AchievementCard-f6bdb95c.js.map → AchievementCard-6ef39c2b.js.map} +1 -1
- package/dist/cjs/{BoostGenericCard-e3fd4feb.js → BoostGenericCard-87cd2091.js} +8 -8
- package/dist/cjs/BoostGenericCard-87cd2091.js.map +1 -0
- package/dist/cjs/{BoostSmallCard-507de790.js → BoostSmallCard-214f91a5.js} +3 -3
- package/dist/cjs/BoostSmallCard-214f91a5.js.map +1 -0
- package/dist/cjs/{Button-9ebe120c.js → Button-d3a8a860.js} +2 -2
- package/dist/cjs/Button-d3a8a860.js.map +1 -0
- package/dist/cjs/{CertificateDisplayCard-9a7ced55.js → CertificateDisplayCard-d4300c7d.js} +32 -21
- package/dist/cjs/CertificateDisplayCard-d4300c7d.js.map +1 -0
- package/dist/cjs/{CircleCheckButton-05f58196.js → CircleCheckButton-1d10936b.js} +2 -2
- package/dist/cjs/{CircleCheckButton-05f58196.js.map → CircleCheckButton-1d10936b.js.map} +1 -1
- package/dist/cjs/{CourseVerticalCard-0d046145.js → CourseVerticalCard-3c538a36.js} +3 -3
- package/dist/cjs/{CourseVerticalCard-0d046145.js.map → CourseVerticalCard-3c538a36.js.map} +1 -1
- package/dist/cjs/{GenericCard-e2faac81.js → GenericCard-f962750a.js} +2 -2
- package/dist/cjs/{GenericCard-e2faac81.js.map → GenericCard-f962750a.js.map} +1 -1
- package/dist/cjs/{JobHistoryCard-e9ac7a1a.js → JobHistoryCard-54f40e2b.js} +3 -3
- package/dist/cjs/JobHistoryCard-54f40e2b.js.map +1 -0
- package/dist/cjs/{JobListCard-a90be136.js → JobListCard-a48c6cac.js} +3 -3
- package/dist/cjs/{JobListCard-a90be136.js.map → JobListCard-a48c6cac.js.map} +1 -1
- package/dist/cjs/{LearnCardCreditCardBackFace-62330eea.js → LearnCardCreditCardBackFace-92a1818e.js} +2 -2
- package/dist/{esm/LearnCardCreditCardBackFace-56642837.js.map → cjs/LearnCardCreditCardBackFace-92a1818e.js.map} +1 -1
- package/dist/cjs/{LearnCardCreditCardFrontFace-75fb4e44.js → LearnCardCreditCardFrontFace-a4c209e3.js} +2 -2
- package/dist/cjs/LearnCardCreditCardFrontFace-a4c209e3.js.map +1 -0
- package/dist/cjs/{MeritBadgeDisplayCard-a45003f4.js → MeritBadgeDisplayCard-30ef639d.js} +25 -19
- package/dist/cjs/MeritBadgeDisplayCard-30ef639d.js.map +1 -0
- package/dist/cjs/{MeritBadgeSkillsCount-1baf2200.js → MeritBadgeSkillsCount-a6127a40.js} +3 -3
- package/dist/cjs/{MeritBadgeSkillsCount-1baf2200.js.map → MeritBadgeSkillsCount-a6127a40.js.map} +1 -1
- package/dist/cjs/{MiniVCThumbnail-9c510f51.js → MiniVCThumbnail-39058b8e.js} +2 -2
- package/dist/cjs/MiniVCThumbnail-39058b8e.js.map +1 -0
- package/dist/cjs/{Notification-24d4de25.js → Notification-09bf74b7.js} +2 -2
- package/dist/cjs/{Notification-24d4de25.js.map → Notification-09bf74b7.js.map} +1 -1
- package/dist/cjs/{NotificationBoostCard-04dd2405.js → NotificationBoostCard-e6a2824f.js} +4 -4
- package/dist/cjs/NotificationBoostCard-e6a2824f.js.map +1 -0
- package/dist/cjs/{NotificationUserAcceptedBoostCard-1c6d1e33.js → NotificationUserAcceptedBoostCard-e88fc1af.js} +2 -2
- package/dist/cjs/{NotificationUserAcceptedBoostCard-1c6d1e33.js.map → NotificationUserAcceptedBoostCard-e88fc1af.js.map} +1 -1
- package/dist/cjs/{NotificationUserCard-4364506c.js → NotificationUserCard-89a0b8ba.js} +2 -2
- package/dist/cjs/{NotificationUserCard-4364506c.js.map → NotificationUserCard-89a0b8ba.js.map} +1 -1
- package/dist/cjs/{PuzzlePiece-e64f4596.js → PuzzlePiece-48ee8924.js} +3 -3
- package/dist/cjs/PuzzlePiece-48ee8924.js.map +1 -0
- package/dist/cjs/{RoundedPill-542ecd7a.js → RoundedPill-5862fa48.js} +3 -3
- package/dist/cjs/RoundedPill-5862fa48.js.map +1 -0
- package/dist/cjs/{SchoolIDCard-10796199.js → SchoolIDCard-0462e21c.js} +2 -2
- package/dist/cjs/{SchoolIDCard-10796199.js.map → SchoolIDCard-0462e21c.js.map} +1 -1
- package/dist/cjs/{SkillTabCard-353cc2d1.js → SkillTabCard-f913aaf7.js} +3 -3
- package/dist/cjs/{SkillTabCard-353cc2d1.js.map → SkillTabCard-f913aaf7.js.map} +1 -1
- package/dist/cjs/{VCCard-6462d6c7.js → VCCard-6298f49f.js} +3 -3
- package/dist/cjs/{VCCard-6462d6c7.js.map → VCCard-6298f49f.js.map} +1 -1
- package/dist/cjs/{VCDisplayBackFace-47066c07.js → VCDisplayBackFace-65e36d2b.js} +7 -7
- package/dist/cjs/VCDisplayBackFace-65e36d2b.js.map +1 -0
- package/dist/cjs/{VCDisplayCard-ac1d4efb.js → VCDisplayCard-51e917ab.js} +4 -4
- package/dist/cjs/VCDisplayCard-51e917ab.js.map +1 -0
- package/dist/cjs/{VCDisplayCard2-d7d3288b.js → VCDisplayCard2-156a6584.js} +28 -22
- package/dist/cjs/VCDisplayCard2-156a6584.js.map +1 -0
- package/dist/cjs/{VCVerificationPill-7d4dd936.js → VCVerificationPill-d4ee15ca.js} +3 -3
- package/dist/cjs/VCVerificationPill-d4ee15ca.js.map +1 -0
- package/dist/cjs/{VerifierStateBadgeAndText-3d7977c9.js → VerifierStateBadgeAndText-04c90074.js} +3 -3
- package/dist/cjs/{VerifierStateBadgeAndText-3d7977c9.js.map → VerifierStateBadgeAndText-04c90074.js.map} +1 -1
- package/dist/cjs/{credential.helpers-e6e353a6.js → credential.helpers-14544e48.js} +241 -7
- package/dist/cjs/credential.helpers-14544e48.js.map +1 -0
- package/dist/cjs/{i18n-ddbb18e7.js → i18n-0648eec1.js} +3 -1
- package/dist/cjs/i18n-0648eec1.js.map +1 -0
- package/dist/cjs/{index-da255c9a.js → index-a03dec43.js} +3 -1
- package/dist/{esm/index-cb3a593b.js.map → cjs/index-a03dec43.js.map} +1 -1
- package/dist/cjs/index.js +36 -36
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/index11.js +3 -3
- package/dist/cjs/index13.js +3 -3
- package/dist/cjs/index14.js +34 -34
- package/dist/cjs/index15.js +1 -1
- package/dist/cjs/index16.js +1 -1
- package/dist/cjs/index17.js +1 -1
- package/dist/cjs/index18.js +1 -1
- package/dist/cjs/index2.js +3 -3
- package/dist/cjs/index22.js +8 -8
- package/dist/cjs/index23.js +1 -1
- package/dist/cjs/index24.js +3 -3
- package/dist/cjs/index25.js +3 -3
- package/dist/cjs/index26.js +1 -1
- package/dist/cjs/index27.js +1 -1
- package/dist/cjs/index29.js +1 -1
- package/dist/cjs/index31.js +1 -1
- package/dist/cjs/index34.js +3 -3
- package/dist/cjs/index39.js +13 -13
- package/dist/cjs/index4.js +8 -8
- package/dist/cjs/index40.js +6 -6
- package/dist/cjs/index41.js +7 -7
- package/dist/cjs/index42.js +9 -9
- package/dist/cjs/index43.js +2 -2
- package/dist/cjs/index46.js +2 -2
- package/dist/cjs/index5.js +3 -3
- package/dist/cjs/index6.js +1 -1
- package/dist/cjs/index7.js +7 -7
- package/dist/cjs/index8.js +2 -2
- package/dist/cjs/{types-91d0677b.js → types-8a7d08fe.js} +2 -2
- package/dist/cjs/{types-91d0677b.js.map → types-8a7d08fe.js.map} +1 -1
- package/dist/cjs/{types.esm-57b8934f.js → types.esm-55f8d7fb.js} +3642 -1570
- package/dist/cjs/types.esm-55f8d7fb.js.map +1 -0
- package/dist/esm/{AchievementCard-d0cf882f.js → AchievementCard-c8df0ca4.js} +3 -3
- package/dist/esm/{AchievementCard-d0cf882f.js.map → AchievementCard-c8df0ca4.js.map} +1 -1
- package/dist/esm/{BoostGenericCard-3481b47c.js → BoostGenericCard-dd2b515a.js} +8 -8
- package/dist/esm/BoostGenericCard-dd2b515a.js.map +1 -0
- package/dist/esm/{BoostSmallCard-3f5d83b9.js → BoostSmallCard-538e22e7.js} +3 -3
- package/dist/esm/BoostSmallCard-538e22e7.js.map +1 -0
- package/dist/esm/{Button-70eedbf6.js → Button-866044a8.js} +2 -2
- package/dist/esm/Button-866044a8.js.map +1 -0
- package/dist/esm/{CertificateDisplayCard-fbd123d1.js → CertificateDisplayCard-46c13c49.js} +32 -21
- package/dist/esm/CertificateDisplayCard-46c13c49.js.map +1 -0
- package/dist/esm/{CircleCheckButton-50702ec6.js → CircleCheckButton-cb929fad.js} +2 -2
- package/dist/esm/{CircleCheckButton-50702ec6.js.map → CircleCheckButton-cb929fad.js.map} +1 -1
- package/dist/esm/{CourseVerticalCard-2544cfbb.js → CourseVerticalCard-34d0cc89.js} +3 -3
- package/dist/esm/{CourseVerticalCard-2544cfbb.js.map → CourseVerticalCard-34d0cc89.js.map} +1 -1
- package/dist/esm/{GenericCard-31644ac4.js → GenericCard-dfa014c7.js} +2 -2
- package/dist/esm/{GenericCard-31644ac4.js.map → GenericCard-dfa014c7.js.map} +1 -1
- package/dist/esm/{JobHistoryCard-e71ab2c7.js → JobHistoryCard-74f98642.js} +3 -3
- package/dist/esm/JobHistoryCard-74f98642.js.map +1 -0
- package/dist/esm/{JobListCard-4fc7fbe4.js → JobListCard-498d59b7.js} +3 -3
- package/dist/esm/{JobListCard-4fc7fbe4.js.map → JobListCard-498d59b7.js.map} +1 -1
- package/dist/esm/{LearnCardCreditCardBackFace-56642837.js → LearnCardCreditCardBackFace-8e2f494a.js} +2 -2
- package/dist/{cjs/LearnCardCreditCardBackFace-62330eea.js.map → esm/LearnCardCreditCardBackFace-8e2f494a.js.map} +1 -1
- package/dist/esm/{LearnCardCreditCardFrontFace-13d29504.js → LearnCardCreditCardFrontFace-73c3d537.js} +2 -2
- package/dist/esm/LearnCardCreditCardFrontFace-73c3d537.js.map +1 -0
- package/dist/esm/{MeritBadgeDisplayCard-2621d029.js → MeritBadgeDisplayCard-9f95dd08.js} +25 -19
- package/dist/esm/MeritBadgeDisplayCard-9f95dd08.js.map +1 -0
- package/dist/esm/{MeritBadgeSkillsCount-b3e3985a.js → MeritBadgeSkillsCount-c20f9f60.js} +3 -3
- package/dist/esm/{MeritBadgeSkillsCount-b3e3985a.js.map → MeritBadgeSkillsCount-c20f9f60.js.map} +1 -1
- package/dist/esm/{MiniVCThumbnail-cc05e1f8.js → MiniVCThumbnail-3800ee40.js} +2 -2
- package/dist/esm/MiniVCThumbnail-3800ee40.js.map +1 -0
- package/dist/esm/{Notification-279ba207.js → Notification-39590182.js} +2 -2
- package/dist/esm/{Notification-279ba207.js.map → Notification-39590182.js.map} +1 -1
- package/dist/esm/{NotificationBoostCard-73efea2d.js → NotificationBoostCard-ff5ec0d7.js} +4 -4
- package/dist/esm/NotificationBoostCard-ff5ec0d7.js.map +1 -0
- package/dist/esm/{NotificationUserAcceptedBoostCard-89fe2317.js → NotificationUserAcceptedBoostCard-f515321d.js} +2 -2
- package/dist/esm/{NotificationUserAcceptedBoostCard-89fe2317.js.map → NotificationUserAcceptedBoostCard-f515321d.js.map} +1 -1
- package/dist/esm/{NotificationUserCard-2c29c86a.js → NotificationUserCard-d4fd260e.js} +2 -2
- package/dist/esm/{NotificationUserCard-2c29c86a.js.map → NotificationUserCard-d4fd260e.js.map} +1 -1
- package/dist/esm/{PuzzlePiece-a3d9cc62.js → PuzzlePiece-9c313d93.js} +3 -3
- package/dist/esm/PuzzlePiece-9c313d93.js.map +1 -0
- package/dist/esm/{RoundedPill-8e97b9e3.js → RoundedPill-ef06f4b8.js} +3 -3
- package/dist/esm/RoundedPill-ef06f4b8.js.map +1 -0
- package/dist/esm/{SchoolIDCard-f82e40bc.js → SchoolIDCard-de65b2bd.js} +2 -2
- package/dist/esm/{SchoolIDCard-f82e40bc.js.map → SchoolIDCard-de65b2bd.js.map} +1 -1
- package/dist/esm/{SkillTabCard-a3f601e8.js → SkillTabCard-4c7bb40f.js} +3 -3
- package/dist/esm/{SkillTabCard-a3f601e8.js.map → SkillTabCard-4c7bb40f.js.map} +1 -1
- package/dist/esm/{VCCard-cd14261b.js → VCCard-1e6261ea.js} +3 -3
- package/dist/esm/{VCCard-cd14261b.js.map → VCCard-1e6261ea.js.map} +1 -1
- package/dist/esm/{VCDisplayBackFace-d8bdf84b.js → VCDisplayBackFace-eb2cad59.js} +7 -7
- package/dist/esm/VCDisplayBackFace-eb2cad59.js.map +1 -0
- package/dist/esm/{VCDisplayCard-213afce8.js → VCDisplayCard-1400714d.js} +4 -4
- package/dist/esm/VCDisplayCard-1400714d.js.map +1 -0
- package/dist/esm/{VCDisplayCard2-f6beca34.js → VCDisplayCard2-e4164d30.js} +28 -22
- package/dist/esm/VCDisplayCard2-e4164d30.js.map +1 -0
- package/dist/esm/{VCVerificationPill-f4a587a5.js → VCVerificationPill-65f7901a.js} +3 -3
- package/dist/esm/VCVerificationPill-65f7901a.js.map +1 -0
- package/dist/esm/{VerifierStateBadgeAndText-f2bbd9fd.js → VerifierStateBadgeAndText-1588afeb.js} +3 -3
- package/dist/esm/{VerifierStateBadgeAndText-f2bbd9fd.js.map → VerifierStateBadgeAndText-1588afeb.js.map} +1 -1
- package/dist/esm/{credential.helpers-30adeb2d.js → credential.helpers-4c72d304.js} +241 -7
- package/dist/esm/credential.helpers-4c72d304.js.map +1 -0
- package/dist/esm/{i18n-35209bfa.js → i18n-b142d48e.js} +3 -1
- package/dist/esm/i18n-b142d48e.js.map +1 -0
- package/dist/esm/{index-cb3a593b.js → index-75c5b01c.js} +2 -2
- package/dist/{cjs/index-da255c9a.js.map → esm/index-75c5b01c.js.map} +1 -1
- package/dist/esm/index.js +36 -36
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index11.js +3 -3
- package/dist/esm/index13.js +3 -3
- package/dist/esm/index14.js +34 -34
- package/dist/esm/index15.js +1 -1
- package/dist/esm/index16.js +1 -1
- package/dist/esm/index17.js +1 -1
- package/dist/esm/index18.js +1 -1
- package/dist/esm/index2.js +3 -3
- package/dist/esm/index22.js +8 -8
- package/dist/esm/index23.js +1 -1
- package/dist/esm/index24.js +3 -3
- package/dist/esm/index25.js +3 -3
- package/dist/esm/index26.js +1 -1
- package/dist/esm/index27.js +1 -1
- package/dist/esm/index29.js +1 -1
- package/dist/esm/index31.js +1 -1
- package/dist/esm/index34.js +3 -3
- package/dist/esm/index39.js +13 -13
- package/dist/esm/index4.js +8 -8
- package/dist/esm/index40.js +6 -6
- package/dist/esm/index41.js +7 -7
- package/dist/esm/index42.js +9 -9
- package/dist/esm/index43.js +2 -2
- package/dist/esm/index46.js +2 -2
- package/dist/esm/index5.js +3 -3
- package/dist/esm/index6.js +1 -1
- package/dist/esm/index7.js +7 -7
- package/dist/esm/index8.js +2 -2
- package/dist/esm/{types-c765e2a4.js → types-23b696f1.js} +2 -2
- package/dist/esm/{types-c765e2a4.js.map → types-23b696f1.js.map} +1 -1
- package/dist/esm/{types.esm-9d538f63.js → types.esm-a70402df.js} +3642 -1570
- package/dist/esm/types.esm-a70402df.js.map +1 -0
- package/dist/main.css +2 -1
- package/dist/main.js +1 -1
- package/package.json +13 -13
- package/src/assets/styles/base.css +18 -2
- package/src/assets/styles/main.css +1 -3
- package/src/assets/styles/theme.css +94 -0
- package/src/assets/styles/theme.test.ts +67 -0
- package/src/components/BoostGenericCard/BoostGenericCard.tsx +3 -3
- package/src/components/BoostSmallCard/BoostSmallCard.tsx +1 -1
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/CertificateDisplayCard/CertificateAwardDate.test.tsx +67 -0
- package/src/components/CertificateDisplayCard/CertificateBackFace.tsx +14 -9
- package/src/components/CertificateDisplayCard/CertificateCornerIcon.tsx +1 -1
- package/src/components/CertificateDisplayCard/CertificateFrontFace.tsx +19 -8
- package/src/components/CertificateDisplayCard/CertificateProfileImageDisplay.tsx +1 -1
- package/src/components/CertificateDisplayCard/MediaAttachmentsBox.tsx +1 -1
- package/src/components/CertificateDisplayCard/VerificationRow.tsx +1 -1
- package/src/components/JobHistoryCard/JobHistoryCard.tsx +2 -2
- package/src/components/JobListCard/JobListCard.tsx +2 -5
- package/src/components/LearnCardCreditCardBackFace/LearnCardCreditCardBackFace.tsx +1 -1
- package/src/components/LearnCardCreditCardFrontFace/LearnCardCreditCardFrontFace.tsx +1 -1
- package/src/components/MeritBadgeDisplayCard/MediaAttachmentsBox.tsx +1 -1
- package/src/components/MeritBadgeDisplayCard/MeritBadgeBackFace.tsx +14 -9
- package/src/components/MeritBadgeDisplayCard/MeritBadgeCornerIcon.tsx +4 -4
- package/src/components/MeritBadgeDisplayCard/MeritBadgeFrontFace.tsx +15 -10
- package/src/components/MeritBadgeDisplayCard/MeritBadgeProfileImageDisplay.tsx +1 -1
- package/src/components/MeritBadgeDisplayCard/VerificationRow.tsx +1 -1
- package/src/components/MiniVCThumbnail/MiniVCThumbnail.tsx +1 -1
- package/src/components/NotificationBoostCard/NotificationBoostCard.tsx +2 -2
- package/src/components/NotificationUserAcceptedBoostCard/NotificationUserAcceptedBoostCard.tsx +1 -1
- package/src/components/NotificationUserCard/NotificationUserCard.tsx +1 -1
- package/src/components/RoundedPill/RoundedPill.tsx +2 -2
- package/src/components/SchoolIdCard/SchoolIDCard.tsx +1 -1
- package/src/components/VCDisplayBackFace/VCDisplayBackFace.tsx +4 -4
- package/src/components/VCDisplayCard/VCDisplayCard.stories.tsx +2 -2
- package/src/components/VCDisplayCard2/IssueHistoryBox.tsx +1 -1
- package/src/components/VCDisplayCard2/MediaAttachmentsBox.tsx +10 -5
- package/src/components/VCDisplayCard2/VC2FrontFaceInfo.tsx +6 -6
- package/src/components/VCDisplayCard2/VCDisplayCard2.tsx +1 -1
- package/src/components/VCDisplayCard2/VCDisplayCard2AvatarFallbacks.stories.tsx +4 -4
- package/src/components/VCDisplayCard2/VCIDDisplayFrontFace.tsx +7 -7
- package/src/components/VCDisplayCard2/VerificationRow.tsx +1 -1
- package/src/components/VCDisplayCard2/__tests__/VC2FrontFaceInfo.test.tsx +1 -1
- package/src/components/VCDisplayFrontFace/VCDisplayFrontFace.tsx +1 -1
- package/src/components/VCVerificationPill/VCVerificationPill.tsx +1 -1
- package/src/components/svgs/PuzzlePiece.tsx +3 -3
- package/src/helpers/credential.helpers.test.ts +96 -0
- package/src/helpers/credential.helpers.tsx +23 -4
- package/src/helpers/useScrollBorders.ts +2 -2
- package/src/i18n/index.tsx +2 -0
- package/dist/cjs/BoostGenericCard-e3fd4feb.js.map +0 -1
- package/dist/cjs/BoostSmallCard-507de790.js.map +0 -1
- package/dist/cjs/Button-9ebe120c.js.map +0 -1
- package/dist/cjs/CertificateDisplayCard-9a7ced55.js.map +0 -1
- package/dist/cjs/JobHistoryCard-e9ac7a1a.js.map +0 -1
- package/dist/cjs/LearnCardCreditCardFrontFace-75fb4e44.js.map +0 -1
- package/dist/cjs/MeritBadgeDisplayCard-a45003f4.js.map +0 -1
- package/dist/cjs/MiniVCThumbnail-9c510f51.js.map +0 -1
- package/dist/cjs/NotificationBoostCard-04dd2405.js.map +0 -1
- package/dist/cjs/PuzzlePiece-e64f4596.js.map +0 -1
- package/dist/cjs/RoundedPill-542ecd7a.js.map +0 -1
- package/dist/cjs/VCDisplayBackFace-47066c07.js.map +0 -1
- package/dist/cjs/VCDisplayCard-ac1d4efb.js.map +0 -1
- package/dist/cjs/VCDisplayCard2-d7d3288b.js.map +0 -1
- package/dist/cjs/VCVerificationPill-7d4dd936.js.map +0 -1
- package/dist/cjs/credential.helpers-e6e353a6.js.map +0 -1
- package/dist/cjs/i18n-ddbb18e7.js.map +0 -1
- package/dist/cjs/types.esm-57b8934f.js.map +0 -1
- package/dist/esm/BoostGenericCard-3481b47c.js.map +0 -1
- package/dist/esm/BoostSmallCard-3f5d83b9.js.map +0 -1
- package/dist/esm/Button-70eedbf6.js.map +0 -1
- package/dist/esm/CertificateDisplayCard-fbd123d1.js.map +0 -1
- package/dist/esm/JobHistoryCard-e71ab2c7.js.map +0 -1
- package/dist/esm/LearnCardCreditCardFrontFace-13d29504.js.map +0 -1
- package/dist/esm/MeritBadgeDisplayCard-2621d029.js.map +0 -1
- package/dist/esm/MiniVCThumbnail-cc05e1f8.js.map +0 -1
- package/dist/esm/NotificationBoostCard-73efea2d.js.map +0 -1
- package/dist/esm/PuzzlePiece-a3d9cc62.js.map +0 -1
- package/dist/esm/RoundedPill-8e97b9e3.js.map +0 -1
- package/dist/esm/VCDisplayBackFace-d8bdf84b.js.map +0 -1
- package/dist/esm/VCDisplayCard-213afce8.js.map +0 -1
- package/dist/esm/VCDisplayCard2-f6beca34.js.map +0 -1
- package/dist/esm/VCVerificationPill-f4a587a5.js.map +0 -1
- package/dist/esm/credential.helpers-30adeb2d.js.map +0 -1
- package/dist/esm/i18n-35209bfa.js.map +0 -1
- package/dist/esm/types.esm-9d538f63.js.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useT } from '../../i18n';
|
|
2
3
|
|
|
3
4
|
import MeritBadgeCornerIcon from './MeritBadgeCornerIcon';
|
|
4
5
|
import MeritBadgeImageDisplay from './MeritBadgeImageDisplay';
|
|
@@ -66,6 +67,7 @@ export const MeritBadgeFrontFace: React.FC<MeritBadgeFrontFaceProps> = ({
|
|
|
66
67
|
hideFrontFaceDetails,
|
|
67
68
|
onVerifierClick,
|
|
68
69
|
}) => {
|
|
70
|
+
const t = useT();
|
|
69
71
|
const {
|
|
70
72
|
title = '',
|
|
71
73
|
createdAt,
|
|
@@ -73,7 +75,10 @@ export const MeritBadgeFrontFace: React.FC<MeritBadgeFrontFaceProps> = ({
|
|
|
73
75
|
issuee: _issuee = '',
|
|
74
76
|
credentialSubject,
|
|
75
77
|
imageUrl,
|
|
76
|
-
} = getInfoFromCredential(credential, 'MMM dd, yyyy', {
|
|
78
|
+
} = getInfoFromCredential(credential, 'MMM dd, yyyy', {
|
|
79
|
+
uppercaseDate: false,
|
|
80
|
+
dateType: 'awarded',
|
|
81
|
+
});
|
|
77
82
|
|
|
78
83
|
const issuee = issueeOverride || _issuee;
|
|
79
84
|
const issuer = issuerOverride || _issuer;
|
|
@@ -155,7 +160,7 @@ export const MeritBadgeFrontFace: React.FC<MeritBadgeFrontFaceProps> = ({
|
|
|
155
160
|
</div>
|
|
156
161
|
|
|
157
162
|
<div
|
|
158
|
-
className={`flex flex-col gap-[15px] items-center px-[20px] pt-[92px] pb-[19px] border-solid border-
|
|
163
|
+
className={`flex flex-col gap-[15px] items-center px-[20px] pt-[92px] pb-[19px] border-solid border-4 ${borderColor} rounded-[30px]`}
|
|
159
164
|
>
|
|
160
165
|
<div className="flex flex-col gap-[5px] w-full">
|
|
161
166
|
<div className="flex flex-col items-center text-grayscale-900">
|
|
@@ -204,12 +209,12 @@ export const MeritBadgeFrontFace: React.FC<MeritBadgeFrontFaceProps> = ({
|
|
|
204
209
|
)}
|
|
205
210
|
<div className="flex flex-col w-full">
|
|
206
211
|
<div className="text-[14px] text-grayscale-900 flex flex-col items-center w-full mb-[10px]">
|
|
207
|
-
<span className="font-jacques flex gap-[5px] items-center w-full
|
|
208
|
-
{issueeName === '0 person'
|
|
209
|
-
'Not yet awarded'
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
212
|
+
<span className="font-jacques flex gap-[5px] items-center w-full text-ellipsis whitespace-nowrap overflow-hidden justify-center">
|
|
213
|
+
{issueeName === '0 person'
|
|
214
|
+
? 'Not yet awarded'
|
|
215
|
+
: createdAt
|
|
216
|
+
? t('credential.awardedOnBy', { date: createdAt })
|
|
217
|
+
: t('credential.by')}
|
|
213
218
|
</span>
|
|
214
219
|
</div>
|
|
215
220
|
|
|
@@ -231,9 +236,9 @@ export const MeritBadgeFrontFace: React.FC<MeritBadgeFrontFaceProps> = ({
|
|
|
231
236
|
</div> */}
|
|
232
237
|
|
|
233
238
|
<div className="flex flex-col gap-[5px] items-center w-full">
|
|
234
|
-
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[25px] leading-[90%] font-sacramento border-b
|
|
239
|
+
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[25px] leading-[90%] font-sacramento border-b border-solid border-grayscale-200 w-full text-center line-clamp-2 wrap-break-word scrollbar-hide">
|
|
235
240
|
{issuerDisplay.isDidValue ? (
|
|
236
|
-
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[14px] leading-[90%] font-jacques tracking-[0.25px] w-full text-center line-clamp-2 break-
|
|
241
|
+
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[14px] leading-[90%] font-jacques tracking-[0.25px] w-full text-center line-clamp-2 wrap-break-word">
|
|
237
242
|
<span className="font-[600]">Digital ID:</span>
|
|
238
243
|
<span className="text-grayscale-600">{issuerName}</span>
|
|
239
244
|
</span>
|
|
@@ -27,7 +27,7 @@ const MeritBadgeProfileImageDisplay: React.FC<MeritBadgeProfileImageDisplayProps
|
|
|
27
27
|
}) => {
|
|
28
28
|
const imageClassName = `${
|
|
29
29
|
size === 'big' ? 'h-[60px] w-[60px]' : 'h-[39px] w-[39px]'
|
|
30
|
-
} rounded-full overflow-hidden border-
|
|
30
|
+
} rounded-full overflow-hidden border-2 border-solid border-grayscale-200`;
|
|
31
31
|
const silhouetteClassName = size === 'big' ? 'h-[43px] w-[43px]' : 'h-[28px] w-[28px]';
|
|
32
32
|
|
|
33
33
|
const profileImage = imageComponent ? (
|
|
@@ -39,7 +39,7 @@ const VerificationRow: React.FC<VerificationRowProps> = ({ verification }) => {
|
|
|
39
39
|
const infoText = ''; // if we want certain verifications to have extra explanation, we can set this variable
|
|
40
40
|
|
|
41
41
|
return (
|
|
42
|
-
<div className="verification-row flex flex-col gap-[5px] font-poppins border-b
|
|
42
|
+
<div className="verification-row flex flex-col gap-[5px] font-poppins border-b border-grayscale-200 border-solid w-full py-[10px] last:border-0 last:pb-0">
|
|
43
43
|
<span
|
|
44
44
|
className="font-[700] text-[11px] uppercase flex items-center gap-[3px] select-none"
|
|
45
45
|
style={{ color: statusColor }}
|
|
@@ -57,7 +57,7 @@ export const MiniVCThumbnail: React.FC<MiniVCThumbnailProps> = ({
|
|
|
57
57
|
className="flex item-center justify-center w-full -mt-3"
|
|
58
58
|
data-testid="mini-vc-thumbnail-badge"
|
|
59
59
|
>
|
|
60
|
-
<div className="max-h-[80px] max-w-[80px] xxsm:h-[60px] xxsm:w-[60px] border-solid border
|
|
60
|
+
<div className="max-h-[80px] max-w-[80px] xxsm:h-[60px] xxsm:w-[60px] border-solid border border-black bg-white z-10">
|
|
61
61
|
<img
|
|
62
62
|
className="h-full w-full object-cover"
|
|
63
63
|
src={badgeImage}
|
|
@@ -98,7 +98,7 @@ export const NotificationBoostCard: React.FC<NotificationBoostCardProps> = ({
|
|
|
98
98
|
|
|
99
99
|
{showIssuerInfo && (
|
|
100
100
|
<div className="notification-card-issuer-info flex items-center mt-[10px]">
|
|
101
|
-
<div className="profile-thumb-img border-
|
|
101
|
+
<div className="profile-thumb-img border-2 border-white border-solid vc-issuee-image h-[35px] w-[35px] rounded-full overflow-hidden mx-[-5px]">
|
|
102
102
|
<UserProfilePicture
|
|
103
103
|
customContainerClass={`h-full w-full object-cover text-xl ${
|
|
104
104
|
!issuerInfo?.image ? 'pt-[3px]' : ''
|
|
@@ -128,7 +128,7 @@ export const NotificationBoostCard: React.FC<NotificationBoostCardProps> = ({
|
|
|
128
128
|
|
|
129
129
|
<button
|
|
130
130
|
onClick={handleCancelClick}
|
|
131
|
-
className={`rounded-[24px] flex items-center justify-center h-[42px] w-[42px] shadow-bottom bg-white font-semibold mr-2 p-
|
|
131
|
+
className={`rounded-[24px] flex items-center justify-center h-[42px] w-[42px] shadow-bottom bg-white font-semibold mr-2 p-0 tracking-wide ${viewButtonStyles}`}
|
|
132
132
|
role="button"
|
|
133
133
|
name="notification-view-button"
|
|
134
134
|
>
|
package/src/components/NotificationUserAcceptedBoostCard/NotificationUserAcceptedBoostCard.tsx
CHANGED
|
@@ -71,7 +71,7 @@ export const NotificationUserAcceptedBoostCard: React.FC<
|
|
|
71
71
|
<div className="flex items-center justify-end w-full mt-3">
|
|
72
72
|
<button
|
|
73
73
|
onClick={handleCancelClick}
|
|
74
|
-
className={`rounded-[24px] flex items-center justify-center h-[42px] w-[42px] shadow-bottom bg-white font-semibold mr-2 p-
|
|
74
|
+
className={`rounded-[24px] flex items-center justify-center h-[42px] w-[42px] shadow-bottom bg-white font-semibold mr-2 p-0 tracking-wide ${viewButtonStyles}`}
|
|
75
75
|
role="button"
|
|
76
76
|
name="notification-view-button"
|
|
77
77
|
>
|
|
@@ -96,7 +96,7 @@ export const NotificationUserCard: React.FC<NotificationUserCardProps> = ({
|
|
|
96
96
|
|
|
97
97
|
<button
|
|
98
98
|
onClick={handleCancelClick}
|
|
99
|
-
className={`rounded-[24px] flex items-center justify-center h-[42px] w-[42px] shadow-bottom bg-white font-semibold mr-2 p-
|
|
99
|
+
className={`rounded-[24px] flex items-center justify-center h-[42px] w-[42px] shadow-bottom bg-white font-semibold mr-2 p-0 tracking-wide ${viewButtonStyles}`}
|
|
100
100
|
role="button"
|
|
101
101
|
name="notification-view-button"
|
|
102
102
|
>
|
|
@@ -87,7 +87,7 @@ export const RoundedPill: React.FC<RoundedPillProps> = ({
|
|
|
87
87
|
}) => {
|
|
88
88
|
const backgroundColor = `bg-${TYPE_TO_BG_COLOR_CLASS[type]}`;
|
|
89
89
|
const iconBgColor = `bg-${TYPE_TO_FOREGROUND_COLOR[type]}`;
|
|
90
|
-
const circleClass = `flex w-full items-center justify-center icon-display h-[40px] w-[40px] rounded-full ${iconBgColor} absolute
|
|
90
|
+
const circleClass = `flex w-full items-center justify-center icon-display h-[40px] w-[40px] rounded-full ${iconBgColor} absolute shrink-0 `;
|
|
91
91
|
|
|
92
92
|
const handleClick = () => {
|
|
93
93
|
onClick?.();
|
|
@@ -108,7 +108,7 @@ export const RoundedPill: React.FC<RoundedPillProps> = ({
|
|
|
108
108
|
{!locked && (
|
|
109
109
|
<div className={circleClass}>
|
|
110
110
|
<img
|
|
111
|
-
className="h-full w-full object-cover max-h-[24px] max-w-[24px]
|
|
111
|
+
className="h-full w-full object-cover max-h-[24px] max-w-[24px] shrink-0 "
|
|
112
112
|
src={iconSrc ?? ''}
|
|
113
113
|
alt="Icon image"
|
|
114
114
|
/>
|
|
@@ -29,7 +29,7 @@ export const SchoolIDCard: React.FC<SchoolIDCardProps> = ({
|
|
|
29
29
|
if (userImage && userImage?.trim() !== '') {
|
|
30
30
|
issueeImageEl = (
|
|
31
31
|
<div
|
|
32
|
-
className="h-[80px] w-[80px] rounded-full overflow-hidden bg-no-repeat bg-cover bg-center border-solid border-
|
|
32
|
+
className="h-[80px] w-[80px] rounded-full overflow-hidden bg-no-repeat bg-cover bg-center border-solid border-2 border-white mr-2"
|
|
33
33
|
style={{ backgroundImage: `url(${userImage})` }}
|
|
34
34
|
/>
|
|
35
35
|
);
|
|
@@ -42,7 +42,7 @@ export const VCDisplayBackFace: React.FC<VCDisplayCardProps> = ({
|
|
|
42
42
|
<h6 className="line-clamp-1 text-grayscale-900 font-bold uppercase text-xs tracking-wider subpixel-antialiased">
|
|
43
43
|
Issuer
|
|
44
44
|
</h6>
|
|
45
|
-
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block
|
|
45
|
+
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block text-ellipsis break-all">
|
|
46
46
|
{issuerName}
|
|
47
47
|
</p>
|
|
48
48
|
</div>
|
|
@@ -59,10 +59,10 @@ export const VCDisplayBackFace: React.FC<VCDisplayCardProps> = ({
|
|
|
59
59
|
|
|
60
60
|
return (
|
|
61
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-
|
|
62
|
+
className={`z-[9] vc-display-main-card-back flex overflow-hidden flex-col items-center justify-between relative max-w-[400px] h-full max-h-[1100px] min-h-[600px] p-7 rounded-3xl shadow-3xl bg-emerald-700 vc-display-card-full-container ${className}`}
|
|
63
63
|
>
|
|
64
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-
|
|
65
|
+
<section className="flex flex-col items-center justify-center w-full z-10 text-left credential-details-container max-w-full relative">
|
|
66
66
|
<section className="flex flex-row items-start justify-start w-full line-clamp-2">
|
|
67
67
|
<h3
|
|
68
68
|
className="text-2xl line-clamp-2 tracking-wide leading-snug text-left text-emerald-700"
|
|
@@ -91,7 +91,7 @@ export const VCDisplayBackFace: React.FC<VCDisplayCardProps> = ({
|
|
|
91
91
|
</span>
|
|
92
92
|
</button>
|
|
93
93
|
|
|
94
|
-
<section className="flex-col items-center justify-center checklist-container justify-center w-
|
|
94
|
+
<section className="flex-col items-center justify-center checklist-container justify-center w-full width-full mt-[20px]">
|
|
95
95
|
<VCVerificationCheckWithText loading={loading} />
|
|
96
96
|
<section>
|
|
97
97
|
{verification.map(item => (
|
|
@@ -47,7 +47,7 @@ const DetailsOverrideTest = (
|
|
|
47
47
|
<h6 className="line-clamp-1 text-grayscale-900 font-bold uppercase text-xs tracking-wider subpixel-antialiased">
|
|
48
48
|
Issuer
|
|
49
49
|
</h6>
|
|
50
|
-
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block
|
|
50
|
+
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block text-ellipsis break-all">
|
|
51
51
|
override details issuer override details issuer override details issuer override
|
|
52
52
|
details issuer override details issuer override details issuer
|
|
53
53
|
</p>
|
|
@@ -57,7 +57,7 @@ const DetailsOverrideTest = (
|
|
|
57
57
|
<h6 className="line-clamp-1 text-grayscale-900 font-bold uppercase text-xs tracking-wider subpixel-antialiased">
|
|
58
58
|
other field
|
|
59
59
|
</h6>
|
|
60
|
-
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block
|
|
60
|
+
<p className="max-w-[344px] line-clamp-1 subpixel-antialiased text-grayscale-600 text-[14px] block text-ellipsis break-all">
|
|
61
61
|
override details
|
|
62
62
|
</p>
|
|
63
63
|
</div>
|
|
@@ -15,7 +15,7 @@ const IssueHistoryBox: React.FC<SkillsBoxProps> = ({
|
|
|
15
15
|
let renderIssueHistory = issueHistory?.map(issueItem => {
|
|
16
16
|
return (
|
|
17
17
|
<div
|
|
18
|
-
className="flex items-center issue-log-item border-b
|
|
18
|
+
className="flex items-center issue-log-item border-b last:border-b-0 py-[5px] border-grayscale-200 border-solid w-full"
|
|
19
19
|
key={issueItem?.id}
|
|
20
20
|
>
|
|
21
21
|
<div className="profile-thumb-img vc-issuee-image h-[35px] w-[35px] rounded-full overflow-hidden">
|
|
@@ -157,8 +157,9 @@ const MediaAttachmentsBox: React.FC<MediaAttachmentsBoxProps> = ({
|
|
|
157
157
|
className="absolute top-0 left-0 right-0 bottom-0 bg-cover bg-no-repeat font-poppins text-white text-[12px] font-[400] leading-[17px] flex flex-col justify-end items-start p-[10px] text-left bg-rose-600 rounded-[15px]"
|
|
158
158
|
style={{
|
|
159
159
|
backgroundImage: metadata?.imageUrl
|
|
160
|
-
? `linear-gradient(180deg, rgba(0, 0, 0, 0) 44.20%, rgba(0, 0, 0, 0.6) 69%), url(${
|
|
161
|
-
|
|
160
|
+
? `linear-gradient(180deg, rgba(0, 0, 0, 0) 44.20%, rgba(0, 0, 0, 0.6) 69%), url(${
|
|
161
|
+
metadata?.imageUrl ?? ''
|
|
162
|
+
})`
|
|
162
163
|
: undefined,
|
|
163
164
|
}}
|
|
164
165
|
>
|
|
@@ -166,8 +167,9 @@ const MediaAttachmentsBox: React.FC<MediaAttachmentsBoxProps> = ({
|
|
|
166
167
|
<VideoIcon size="60" className="m-auto" />
|
|
167
168
|
)}
|
|
168
169
|
<div
|
|
169
|
-
className={`absolute ${
|
|
170
|
-
|
|
170
|
+
className={`absolute ${
|
|
171
|
+
iconTop ? 'top-[10px]' : 'bottom-[10px]'
|
|
172
|
+
} left-[10px] z-10 flex items-center gap-[5px]`}
|
|
171
173
|
>
|
|
172
174
|
{metadata?.imageUrl && <VideoIcon />}
|
|
173
175
|
{metadata?.videoLength && (
|
|
@@ -183,7 +185,10 @@ const MediaAttachmentsBox: React.FC<MediaAttachmentsBoxProps> = ({
|
|
|
183
185
|
} else {
|
|
184
186
|
innerContent = (
|
|
185
187
|
<div className="absolute top-0 left-0 right-0 bottom-0 h-full w-full flex items-center justify-center">
|
|
186
|
-
<img
|
|
188
|
+
<img
|
|
189
|
+
className="rounded-[15px] object-cover h-full w-full"
|
|
190
|
+
src={media.url}
|
|
191
|
+
/>
|
|
187
192
|
<Camera className="absolute bottom-[10px] left-[10px] z-10" />
|
|
188
193
|
</div>
|
|
189
194
|
);
|
|
@@ -134,7 +134,7 @@ const VC2FrontFaceInfo: React.FC<VC2FrontFaceInfoProps> = ({
|
|
|
134
134
|
avatarIconClassName={avatarSilhouetteClassName}
|
|
135
135
|
avatarSilhouetteClassName={avatarSilhouetteClassName}
|
|
136
136
|
avatarFallbackVariant={avatarFallbackVariant}
|
|
137
|
-
customContainerClass={`h-full w-full ${bigText ? '
|
|
137
|
+
customContainerClass={`h-full w-full ${bigText ? 'text-4xl!' : ''}`}
|
|
138
138
|
/>
|
|
139
139
|
);
|
|
140
140
|
};
|
|
@@ -205,7 +205,7 @@ const VC2FrontFaceInfo: React.FC<VC2FrontFaceInfoProps> = ({
|
|
|
205
205
|
<>
|
|
206
206
|
<h3 className="flex flex-col text-center leading-[130%] w-full">
|
|
207
207
|
{!issueeDisplay.isMissing && issueeDisplay.isDidValue && (
|
|
208
|
-
<span className="flex flex-wrap items-baseline justify-center gap-x-1 text-[17px] leading-normal font-
|
|
208
|
+
<span className="flex flex-wrap items-baseline justify-center gap-x-1 text-[17px] leading-normal font-semibold font-poppins max-w-full wrap-break-word">
|
|
209
209
|
<span className="text-grayscale-900">Digital ID:</span>
|
|
210
210
|
<span className="text-grayscale-500 underline">
|
|
211
211
|
{issueeDisplay.displayName}
|
|
@@ -213,7 +213,7 @@ const VC2FrontFaceInfo: React.FC<VC2FrontFaceInfoProps> = ({
|
|
|
213
213
|
</span>
|
|
214
214
|
)}
|
|
215
215
|
{!issueeDisplay.isMissing && !issueeDisplay.isDidValue && (
|
|
216
|
-
<span className="font-poppins font-semibold text-[20px] leading-[130%] max-w-full line-clamp-2 break-
|
|
216
|
+
<span className="font-poppins font-semibold text-[20px] leading-[130%] max-w-full line-clamp-2 wrap-break-word text-grayscale-900">
|
|
217
217
|
{issueeDisplay.displayName}
|
|
218
218
|
</span>
|
|
219
219
|
)}
|
|
@@ -239,12 +239,12 @@ const VC2FrontFaceInfo: React.FC<VC2FrontFaceInfoProps> = ({
|
|
|
239
239
|
{createdAt}
|
|
240
240
|
</span>
|
|
241
241
|
{!issuerDisplay.isMissing && (
|
|
242
|
-
<span className="issued-by max-w-full break-
|
|
242
|
+
<span className="issued-by max-w-full wrap-break-word text-center line-clamp-2 text-[14px]">
|
|
243
243
|
<span className="font-medium text-grayscale-900">
|
|
244
244
|
{t('credential.by')}
|
|
245
245
|
</span>{' '}
|
|
246
246
|
{issuerDisplay.isDidValue ? (
|
|
247
|
-
<span className="font-
|
|
247
|
+
<span className="font-semibold font-poppins wrap-break-word">
|
|
248
248
|
<span className="text-grayscale-900">
|
|
249
249
|
Digital ID:
|
|
250
250
|
</span>{' '}
|
|
@@ -253,7 +253,7 @@ const VC2FrontFaceInfo: React.FC<VC2FrontFaceInfoProps> = ({
|
|
|
253
253
|
</span>
|
|
254
254
|
</span>
|
|
255
255
|
) : (
|
|
256
|
-
<strong className="font-bold text-grayscale-900 break-
|
|
256
|
+
<strong className="font-bold text-grayscale-900 wrap-break-word">
|
|
257
257
|
{issuerDisplay.displayName}
|
|
258
258
|
</strong>
|
|
259
259
|
)}
|
|
@@ -351,7 +351,7 @@ export const VCDisplayCard2: React.FC<VCDisplayCard2Props> = ({
|
|
|
351
351
|
|
|
352
352
|
// these are constants so that the real header and the hidden-for-spacing header are identical
|
|
353
353
|
const headerClassName =
|
|
354
|
-
'vc-card-header px-[20px] pb-[10px] pt-[3px] overflow-visible mt-[40px] text-center bg-white border-y-[5px] border-[#EEF2FF] w-[calc(100
|
|
354
|
+
'vc-card-header px-[20px] pb-[10px] pt-[3px] overflow-visible mt-[40px] text-center bg-white border-y-[5px] border-[#EEF2FF] w-[calc(100%+16px)] rounded-t-[8px] z-50';
|
|
355
355
|
const headerFitTextClassName =
|
|
356
356
|
'vc-card-header-main-title text-[#18224E] pt-[3px] leading-[80%] text-[32px]';
|
|
357
357
|
|
|
@@ -252,8 +252,8 @@ const AvatarFallbackMatrix: React.FC<{ matrixType: AvatarFallbackMatrixType }> =
|
|
|
252
252
|
|
|
253
253
|
return (
|
|
254
254
|
<div className="bg-grayscale-100 min-h-screen p-8">
|
|
255
|
-
<div className="mx-auto max-w-[1200px] space-y-8">
|
|
256
|
-
<div className="space-y-2">
|
|
255
|
+
<div className="mx-auto max-w-[1200px] space-y-v3-8">
|
|
256
|
+
<div className="space-y-v3-2">
|
|
257
257
|
<h1 className="text-xl font-semibold text-grayscale-900 font-poppins">
|
|
258
258
|
{heading}
|
|
259
259
|
</h1>
|
|
@@ -267,9 +267,9 @@ const AvatarFallbackMatrix: React.FC<{ matrixType: AvatarFallbackMatrixType }> =
|
|
|
267
267
|
{matrixCases.map(testCase => (
|
|
268
268
|
<section
|
|
269
269
|
key={testCase.title}
|
|
270
|
-
className="rounded-[28px] bg-white p-6 shadow-[0_18px_50px_rgba(24,34,78,0.12)] space-y-4"
|
|
270
|
+
className="rounded-[28px] bg-white p-6 shadow-[0_18px_50px_rgba(24,34,78,0.12)] space-y-v3-4"
|
|
271
271
|
>
|
|
272
|
-
<div className="space-y-1">
|
|
272
|
+
<div className="space-y-v3-1">
|
|
273
273
|
<h2 className="text-lg font-semibold text-grayscale-900 font-poppins">
|
|
274
274
|
{testCase.title}
|
|
275
275
|
</h2>
|
|
@@ -141,8 +141,8 @@ const VCIDDisplayFrontFace: React.FC<VCIDDisplayFrontFaceProps> = ({
|
|
|
141
141
|
<TruncateTextBox
|
|
142
142
|
text={description}
|
|
143
143
|
className="description-box"
|
|
144
|
-
containerClassName="
|
|
145
|
-
textClassName="
|
|
144
|
+
containerClassName="p-0! shadow-none! text-center! w-full!"
|
|
145
|
+
textClassName="font-poppins! text-base! text-grayscale-700! text-center! w-full!"
|
|
146
146
|
truncateThreshold={204}
|
|
147
147
|
/>
|
|
148
148
|
</>
|
|
@@ -178,31 +178,31 @@ const VCIDDisplayFrontFace: React.FC<VCIDDisplayFrontFaceProps> = ({
|
|
|
178
178
|
}`}
|
|
179
179
|
>
|
|
180
180
|
{isSelfVerified && (
|
|
181
|
-
<span className="uppercase font-poppins text-base font-
|
|
181
|
+
<span className="uppercase font-poppins text-base font-medium text-green-dark flex gap-[3px] items-center">
|
|
182
182
|
<PersonBadge className="w-[20px] h-[20px]" />
|
|
183
183
|
Self Issued
|
|
184
184
|
</span>
|
|
185
185
|
)}
|
|
186
186
|
{verifierState === VERIFIER_STATES.trustedVerifier && (
|
|
187
|
-
<span className="uppercase font-poppins text-base font-
|
|
187
|
+
<span className="uppercase font-poppins text-base font-medium text-blue-light flex gap-[3px] items-center text-center">
|
|
188
188
|
<VerifiedBadge className="w-[20px] h-[20px]" />
|
|
189
189
|
{unknownVerifierTitle ?? 'Trusted Issuer'}
|
|
190
190
|
</span>
|
|
191
191
|
)}
|
|
192
192
|
{verifierState === VERIFIER_STATES.unknownVerifier && (
|
|
193
|
-
<span className="uppercase font-poppins text-base font-
|
|
193
|
+
<span className="uppercase font-poppins text-base font-medium text-orange-500 flex gap-[3px] items-center">
|
|
194
194
|
<UnknownVerifierBadge className="w-[20px] h-[20px]" />
|
|
195
195
|
Unknown Issuer
|
|
196
196
|
</span>
|
|
197
197
|
)}
|
|
198
198
|
{verifierState === VERIFIER_STATES.appIssuer && (
|
|
199
|
-
<span className="uppercase font-poppins text-base font-
|
|
199
|
+
<span className="uppercase font-poppins text-base font-medium text-cyan-600 flex gap-[3px] items-center">
|
|
200
200
|
<VerifiedBadge className="w-[20px] h-[20px]" />
|
|
201
201
|
App Issuer
|
|
202
202
|
</span>
|
|
203
203
|
)}
|
|
204
204
|
{verifierState === VERIFIER_STATES.untrustedVerifier && (
|
|
205
|
-
<span className="uppercase font-poppins text-base font-
|
|
205
|
+
<span className="uppercase font-poppins text-base font-medium text-red-mastercard flex gap-[3px] items-center">
|
|
206
206
|
<RedFlag className="w-[20px] h-[20px]" />
|
|
207
207
|
Untrusted Issuer
|
|
208
208
|
</span>
|
|
@@ -63,7 +63,7 @@ const VerificationRow: React.FC<VerificationRowProps> = ({ verification }) => {
|
|
|
63
63
|
const infoText = ''; // if we want certain verifications to have extra explanation, we can set this variable
|
|
64
64
|
|
|
65
65
|
return (
|
|
66
|
-
<div className="verification-row flex flex-col gap-[5px] font-poppins border-b
|
|
66
|
+
<div className="verification-row flex flex-col gap-[5px] font-poppins border-b border-grayscale-200 border-solid w-full py-[10px] last:border-0 last:pb-0">
|
|
67
67
|
<span
|
|
68
68
|
className="font-[700] text-[11px] leading-[16px] uppercase flex items-center gap-[3px] select-none"
|
|
69
69
|
style={{ color: statusColor }}
|
|
@@ -124,7 +124,7 @@ describe('VC2FrontFaceInfo', () => {
|
|
|
124
124
|
expect(issuedBy).not.toBeNull();
|
|
125
125
|
// The bug was whitespace-nowrap forcing one line that overflowed the card.
|
|
126
126
|
expect(issuedBy?.className).not.toContain('whitespace-nowrap');
|
|
127
|
-
expect(issuedBy?.className).toContain('break-
|
|
127
|
+
expect(issuedBy?.className).toContain('wrap-break-word');
|
|
128
128
|
// line-clamp-2 only clamps on a block/-webkit-box, not a flex container,
|
|
129
129
|
// so the container must NOT be `flex` (the original review-miss).
|
|
130
130
|
expect(issuedBy?.className).toContain('line-clamp-2');
|
|
@@ -75,7 +75,7 @@ const VCDisplayFrontFace: React.FC<VCDisplayCardProps> = ({
|
|
|
75
75
|
|
|
76
76
|
return (
|
|
77
77
|
<div
|
|
78
|
-
className={`z-[9] vc-display-main-card-front flex overflow-hidden flex-col items-center justify-between relative max-w-[400px] h-
|
|
78
|
+
className={`z-[9] vc-display-main-card-front flex overflow-hidden flex-col items-center justify-between relative max-w-[400px] h-full min-h-[600px] p-7 rounded-3xl shadow-3xl bg-emerald-700 vc-display-card-full-container ${className}`}
|
|
79
79
|
>
|
|
80
80
|
<section className="bg-white rounded-bl-[50%] rounded-br-[50%] absolute top-0 w-[110%] h-[77%]"></section>
|
|
81
81
|
<section className="flex flex-col items-center justify-center z-10 text-center credential-thumb-img">
|
|
@@ -45,7 +45,7 @@ export const ValidationStateIndicator: React.FC<VerifiableStateIndicatorProps> =
|
|
|
45
45
|
|
|
46
46
|
return (
|
|
47
47
|
<div className={`relative rounded-full w-[30px] h-[30px] ${bgColor}`}>
|
|
48
|
-
<div className="relative w-
|
|
48
|
+
<div className="relative w-full h-full flex items-center justify-center rounded-[50%] bg-white rounded-full overflow-hidden">
|
|
49
49
|
<img
|
|
50
50
|
className="h-full w-full object-contain p-1"
|
|
51
51
|
src={source ?? ''}
|
|
@@ -4,9 +4,9 @@ const PuzzlePiece: React.FC<{
|
|
|
4
4
|
className?: string;
|
|
5
5
|
size?: string;
|
|
6
6
|
fill?: string;
|
|
7
|
-
version?: 'outline' | 'filled' | 'with-plus';
|
|
8
|
-
}> = ({ className = '', size = '21', fill = 'none', version = 'outline' }) => {
|
|
9
|
-
if (version === 'outline') {
|
|
7
|
+
version?: 'outline-solid' | 'filled' | 'with-plus';
|
|
8
|
+
}> = ({ className = '', size = '21', fill = 'none', version = 'outline-solid' }) => {
|
|
9
|
+
if (version === 'outline-solid') {
|
|
10
10
|
return (
|
|
11
11
|
<svg
|
|
12
12
|
width={size}
|
|
@@ -106,3 +106,99 @@ describe('Credential Helpers', () => {
|
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
108
|
});
|
|
109
|
+
|
|
110
|
+
describe('award-date formatting', () => {
|
|
111
|
+
it.each(['awarded', 'issuance'] as const)(
|
|
112
|
+
'falls back safely for a large malformed award date in %s mode',
|
|
113
|
+
dateType => {
|
|
114
|
+
const options = { uppercaseDate: false, dateType } as const;
|
|
115
|
+
const malformed = ' '.repeat(100_000);
|
|
116
|
+
expect(
|
|
117
|
+
getInfoFromCredential(
|
|
118
|
+
{ ...VC2CredentialWithValidFrom, awardedDate: malformed } as never,
|
|
119
|
+
'MMM dd, yyyy',
|
|
120
|
+
options
|
|
121
|
+
).createdAt
|
|
122
|
+
).toBe(
|
|
123
|
+
getInfoFromCredential(VC2CredentialWithValidFrom as never, 'MMM dd, yyyy', options)
|
|
124
|
+
.createdAt
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
it.each(['2027-10-01T00:30+02', '2027-10-01T00:30+0200', '2027-10-01T00:30+02:00'])(
|
|
129
|
+
'recognizes an explicit award timezone in %s',
|
|
130
|
+
awardedDate => {
|
|
131
|
+
expect(
|
|
132
|
+
getInfoFromCredential(
|
|
133
|
+
{ ...VC2CredentialWithValidFrom, awardedDate } as never,
|
|
134
|
+
'MMM dd, yyyy',
|
|
135
|
+
{ uppercaseDate: false, dateType: 'awarded' }
|
|
136
|
+
).createdAt
|
|
137
|
+
).toBe('Sep 30, 2027');
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
it.each(['20271001', '2027-10-01T00:00', '2027-10-01T00:00:00', '2027-10-01T20:00:00'])(
|
|
141
|
+
'shows a consistent calendar award day for %s',
|
|
142
|
+
awardedDate => {
|
|
143
|
+
expect(
|
|
144
|
+
getInfoFromCredential(
|
|
145
|
+
{ ...VC2CredentialWithValidFrom, awardedDate } as never,
|
|
146
|
+
'MMM dd, yyyy',
|
|
147
|
+
{ uppercaseDate: false, dateType: 'awarded' }
|
|
148
|
+
).createdAt
|
|
149
|
+
).toBe('Oct 01, 2027');
|
|
150
|
+
}
|
|
151
|
+
);
|
|
152
|
+
it('uses the standard award date only when requested and retains issuance metadata', () => {
|
|
153
|
+
const credential = { ...VC2CredentialWithValidFrom, awardedDate: '2027-10-01T00:00:00Z' };
|
|
154
|
+
expect(
|
|
155
|
+
getInfoFromCredential(credential as never, 'MMM dd, yyyy', {
|
|
156
|
+
uppercaseDate: false,
|
|
157
|
+
dateType: 'awarded',
|
|
158
|
+
}).createdAt
|
|
159
|
+
).toBe('Oct 01, 2027');
|
|
160
|
+
expect(getInfoFromCredential(credential as never).createdAt).toBe(
|
|
161
|
+
getInfoFromCredential(VC2CredentialWithValidFrom as never).createdAt
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
it('falls back for missing or invalid award dates without inventing a date for an undated draft', () => {
|
|
165
|
+
expect(
|
|
166
|
+
getInfoFromCredential(
|
|
167
|
+
{ ...VC2CredentialWithValidFrom, awardedDate: 'not-a-date' } as never,
|
|
168
|
+
'MMM dd, yyyy',
|
|
169
|
+
{ uppercaseDate: false, dateType: 'awarded' }
|
|
170
|
+
).createdAt
|
|
171
|
+
).toBe(
|
|
172
|
+
getInfoFromCredential(VC2CredentialWithValidFrom as never, 'MMM dd, yyyy', {
|
|
173
|
+
uppercaseDate: false,
|
|
174
|
+
}).createdAt
|
|
175
|
+
);
|
|
176
|
+
expect(
|
|
177
|
+
getInfoFromCredential(VC2CredentialNoDate as never, 'MMM dd, yyyy', {
|
|
178
|
+
dateType: 'awarded',
|
|
179
|
+
}).createdAt
|
|
180
|
+
).toBe('');
|
|
181
|
+
});
|
|
182
|
+
it('keeps the UTC award day stable at a timezone boundary', () => {
|
|
183
|
+
expect(
|
|
184
|
+
getInfoFromCredential(
|
|
185
|
+
{
|
|
186
|
+
...VC2CredentialWithValidFrom,
|
|
187
|
+
awardedDate: '2027-10-01T23:30:00-02:00',
|
|
188
|
+
} as never,
|
|
189
|
+
'MMM dd, yyyy',
|
|
190
|
+
{ uppercaseDate: false, dateType: 'awarded' }
|
|
191
|
+
).createdAt
|
|
192
|
+
).toBe('Oct 02, 2027');
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
it('treats a date-only award as a UTC calendar day', () => {
|
|
197
|
+
expect(
|
|
198
|
+
getInfoFromCredential(
|
|
199
|
+
{ ...VC2CredentialWithValidFrom, awardedDate: '2027-10-01' } as never,
|
|
200
|
+
'MMM dd, yyyy',
|
|
201
|
+
{ uppercaseDate: false, dateType: 'awarded' }
|
|
202
|
+
).createdAt
|
|
203
|
+
).toBe('Oct 01, 2027');
|
|
204
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { format } from 'date-fns';
|
|
2
|
+
import { format, isValid, parseISO } from 'date-fns';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
Image,
|
|
@@ -43,7 +43,9 @@ export const getImageFromProfile = (profile: Profile): string => {
|
|
|
43
43
|
export const getInfoFromCredential = (
|
|
44
44
|
credential: VC | AchievementCredential,
|
|
45
45
|
dateFormat: string = 'dd MMM yyyy',
|
|
46
|
-
options: { uppercaseDate?: boolean } = {
|
|
46
|
+
options: { uppercaseDate?: boolean; dateType?: 'issuance' | 'awarded' } = {
|
|
47
|
+
uppercaseDate: true,
|
|
48
|
+
}
|
|
47
49
|
): CredentialInfo => {
|
|
48
50
|
const { issuer, issuanceDate, validFrom } = credential;
|
|
49
51
|
|
|
@@ -57,12 +59,29 @@ export const getInfoFromCredential = (
|
|
|
57
59
|
|
|
58
60
|
// Support both VC 2.0 (validFrom) and VC 1.0 (issuanceDate)
|
|
59
61
|
// Gracefully handle missing dates
|
|
60
|
-
const
|
|
62
|
+
const awardDateText = typeof credential.awardedDate === 'string' ? credential.awardedDate : '';
|
|
63
|
+
const awardedDate =
|
|
64
|
+
options.dateType === 'awarded' && awardDateText ? parseISO(awardDateText) : undefined;
|
|
65
|
+
const validAwardedDate = awardedDate && isValid(awardedDate) ? awardedDate : undefined;
|
|
66
|
+
const dateValue = validAwardedDate ?? (validFrom || issuanceDate);
|
|
61
67
|
let createdAt = '';
|
|
62
68
|
|
|
63
69
|
if (dateValue) {
|
|
64
70
|
try {
|
|
65
|
-
|
|
71
|
+
const date = dateValue instanceof Date ? dateValue : new Date(dateValue);
|
|
72
|
+
// Offset-less ISO values describe a calendar day. Only explicit
|
|
73
|
+
// instants need UTC conversion, matching the Details date helper.
|
|
74
|
+
// Inspect at most six suffix characters; never scan arbitrary input
|
|
75
|
+
// with a backtracking wildcard when looking for a timezone.
|
|
76
|
+
const hasAwardOffset =
|
|
77
|
+
validAwardedDate &&
|
|
78
|
+
(awardDateText.includes('T') || awardDateText.includes(' ')) &&
|
|
79
|
+
/(?:Z|[+-]\d{2}(?::?\d{2})?)$/i.test(awardDateText.slice(-6));
|
|
80
|
+
const displayDate =
|
|
81
|
+
validAwardedDate && hasAwardOffset
|
|
82
|
+
? new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())
|
|
83
|
+
: date;
|
|
84
|
+
createdAt = format(displayDate, dateFormat);
|
|
66
85
|
if (options.uppercaseDate) {
|
|
67
86
|
createdAt = createdAt.toUpperCase();
|
|
68
87
|
}
|
|
@@ -2,9 +2,9 @@ import React, { useEffect, type RefObject } from 'react';
|
|
|
2
2
|
|
|
3
3
|
export const useScrollBorders = <Ref extends HTMLElement>({
|
|
4
4
|
ref,
|
|
5
|
-
topShowClassName = 'border-t border-t-
|
|
5
|
+
topShowClassName = 'border-t border-t-(--color-grayscale-line)',
|
|
6
6
|
topHideClassName = 'border-t border-t-transparent',
|
|
7
|
-
bottomShowClassName = 'border-b border-b-
|
|
7
|
+
bottomShowClassName = 'border-b border-b-(--color-grayscale-line)',
|
|
8
8
|
bottomHideClassName = 'border-b border-b-transparent',
|
|
9
9
|
}: {
|
|
10
10
|
ref?: RefObject<Ref>;
|