@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
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* Keep utilities unlayered to preserve the existing Ionic/Sass cascade. */
|
|
2
|
+
@import 'tailwindcss/theme.css' layer(theme);
|
|
3
|
+
@import 'tailwindcss/utilities.css' source(none);
|
|
4
|
+
@import '../../../../learn-card-base/src/assets/styles/tailwind-v3-theme.css';
|
|
5
|
+
@import '../../../../learn-card-base/src/assets/styles/tailwind-v3-colors.css'
|
|
6
|
+
theme(inline reference);
|
|
7
|
+
@source "../../**/*.{js,jsx,ts,tsx}";
|
|
8
|
+
@source inline("bg-orange-200");
|
|
9
|
+
@source inline("bg-orange-300");
|
|
10
|
+
@source inline("bg-orange-700");
|
|
11
|
+
@source inline("border-orange-700");
|
|
12
|
+
@source inline("text-orange-700");
|
|
13
|
+
@source inline("text-orange-900");
|
|
14
|
+
|
|
15
|
+
@theme inline reference {
|
|
16
|
+
--color-grayscale-50: #fbfbfc;
|
|
17
|
+
--color-grayscale-100: #eff0f5;
|
|
18
|
+
--color-grayscale-200: #e2e3e9;
|
|
19
|
+
--color-grayscale-300: #c5c8d3;
|
|
20
|
+
--color-grayscale-400: #a8acbd;
|
|
21
|
+
--color-grayscale-500: #8b91a7;
|
|
22
|
+
--color-grayscale-600: #6f7590;
|
|
23
|
+
--color-grayscale-700: #52597a;
|
|
24
|
+
--color-grayscale-800: #353e64;
|
|
25
|
+
--color-grayscale-900: #18224e;
|
|
26
|
+
--color-emerald-50: #d6faf0;
|
|
27
|
+
--color-emerald-100: #bfeee1;
|
|
28
|
+
--color-emerald-200: #9fe5d2;
|
|
29
|
+
--color-emerald-300: #80e0c6;
|
|
30
|
+
--color-emerald-400: #34eab9;
|
|
31
|
+
--color-emerald-500: #40cba6;
|
|
32
|
+
--color-emerald-600: #20c397;
|
|
33
|
+
--color-emerald-700: #00ba88;
|
|
34
|
+
--color-emerald-800: #008b66;
|
|
35
|
+
--color-emerald-900: #004633;
|
|
36
|
+
--color-cyan-50: #e7f9fd;
|
|
37
|
+
--color-cyan-100: #d0f3fc;
|
|
38
|
+
--color-cyan-200: #a0e7f8;
|
|
39
|
+
--color-cyan-300: #a0e7f8;
|
|
40
|
+
--color-cyan-400: #88e0f7;
|
|
41
|
+
--color-cyan-500: #71daf5;
|
|
42
|
+
--color-cyan-600: #59d4f4;
|
|
43
|
+
--color-cyan-700: #41cef2;
|
|
44
|
+
--color-cyan-800: #319bb5;
|
|
45
|
+
--color-cyan-900: #184d5b;
|
|
46
|
+
--color-spice-50: #ffede7;
|
|
47
|
+
--color-spice-100: #ffdbcf;
|
|
48
|
+
--color-spice-200: #ffb7a0;
|
|
49
|
+
--color-spice-300: #ff9470;
|
|
50
|
+
--color-spice-400: #ff7040;
|
|
51
|
+
--color-spice-500: #ff5820;
|
|
52
|
+
--color-spice-600: #ff4000;
|
|
53
|
+
--color-spice-700: #df3800;
|
|
54
|
+
--color-spice-800: #bf3000;
|
|
55
|
+
--color-spice-900: #802000;
|
|
56
|
+
--color-indigo-50: #eef2ff;
|
|
57
|
+
--color-indigo-100: #e0e7ff;
|
|
58
|
+
--color-indigo-200: #c7d2fe;
|
|
59
|
+
--color-indigo-300: #a5b4fc;
|
|
60
|
+
--color-indigo-400: #818cf8;
|
|
61
|
+
--color-indigo-500: #6366f1;
|
|
62
|
+
--color-indigo-600: #4f46e5;
|
|
63
|
+
--color-indigo-700: #4338ca;
|
|
64
|
+
--color-indigo-800: #3730a3;
|
|
65
|
+
--color-indigo-900: #312e81;
|
|
66
|
+
--color-blue-light: #026bff;
|
|
67
|
+
--color-green-dark: #05b65d;
|
|
68
|
+
--color-orange-500: #ef5d35;
|
|
69
|
+
--color-orange-800: #9a3412;
|
|
70
|
+
--color-red-mastercard: #eb001b;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@theme static {
|
|
74
|
+
--shadow-bottom: 0px 4px 0px rgba(0, 0, 0, 0.25);
|
|
75
|
+
--shadow-3xl: 0px 0px 8px rgba(0, 0, 0, 0.25);
|
|
76
|
+
--shadow-card-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.25);
|
|
77
|
+
--spacing-25pct: 25%;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Emit literal card font families, as V3 did. Host app tokens use the same
|
|
81
|
+
names and must not retroactively change utilities compiled by this package. */
|
|
82
|
+
@theme inline {
|
|
83
|
+
--font-mouse: 'Mouse Memoirs';
|
|
84
|
+
--font-montserrat: Montserrat, Helvetica, Serif;
|
|
85
|
+
--font-poppins: Poppins;
|
|
86
|
+
--font-jacques: 'Jacques Francois';
|
|
87
|
+
--font-sacramento: Sacramento;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@custom-variant xxsm (@media (max-width: 240px));
|
|
91
|
+
@custom-variant xxxsm (@media (max-width: 200px));
|
|
92
|
+
@utility text-shadow {
|
|
93
|
+
text-shadow: 1px 2px 0px rgb(0 0 0 / 35%);
|
|
94
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { compile } from '@tailwindcss/node';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { rollup } from 'rollup';
|
|
6
|
+
import configs from '../../../rollup.config.js';
|
|
7
|
+
|
|
8
|
+
describe('published stylesheet theme contract', () => {
|
|
9
|
+
it('keeps palette tokens out of the actual Rollup CSS assets', async () => {
|
|
10
|
+
const config = configs[1];
|
|
11
|
+
const bundle = await rollup(config);
|
|
12
|
+
try {
|
|
13
|
+
const { output } = await bundle.generate(config.output[0]);
|
|
14
|
+
const styles = output.filter(
|
|
15
|
+
asset => asset.type === 'asset' && asset.fileName.endsWith('.css')
|
|
16
|
+
);
|
|
17
|
+
expect(styles.map(asset => asset.fileName).sort()).toEqual(['base.css', 'main.css']);
|
|
18
|
+
for (const asset of styles) {
|
|
19
|
+
if (asset.type !== 'asset') continue;
|
|
20
|
+
const css =
|
|
21
|
+
typeof asset.source === 'string'
|
|
22
|
+
? asset.source
|
|
23
|
+
: Buffer.from(asset.source).toString('utf8');
|
|
24
|
+
expect(css).not.toMatch(/--color-[\w-]+\s*:/);
|
|
25
|
+
expect(css).not.toMatch(/--tw-border-style:\s*none/);
|
|
26
|
+
if (asset.fileName === 'main.css') {
|
|
27
|
+
expect(css).toContain('#d6faf0');
|
|
28
|
+
expect(css).toContain('#ef5d35');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} finally {
|
|
32
|
+
await bundle.close();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('inlines the original palette and fonts without exporting host color tokens', async () => {
|
|
37
|
+
const compiler = await compile("@import './src/assets/styles/main.css';", {
|
|
38
|
+
base: resolve('.'),
|
|
39
|
+
onDependency: () => undefined,
|
|
40
|
+
});
|
|
41
|
+
const css = compiler.build([
|
|
42
|
+
'bg-emerald-50',
|
|
43
|
+
'text-orange-500',
|
|
44
|
+
'bg-rose-500',
|
|
45
|
+
'font-jacques',
|
|
46
|
+
'text-xs',
|
|
47
|
+
]);
|
|
48
|
+
expect(css).toMatch(/\.bg-emerald-50\s*\{\s*background-color: #d6faf0;/);
|
|
49
|
+
expect(css).toMatch(/\.text-orange-500\s*\{\s*color: #ef5d35;/);
|
|
50
|
+
expect(css).toMatch(/\.bg-rose-500\s*\{\s*background-color: #f43f5e;/);
|
|
51
|
+
expect(css).toMatch(/font-family: ["']?Jacques Francois["']?;/);
|
|
52
|
+
expect(css).not.toMatch(/--color-[\w-]+\s*:/);
|
|
53
|
+
expect(css).toContain('--text-xs: 0.75rem');
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('keeps the optional reset independent of host palette tokens', async () => {
|
|
57
|
+
const compiler = await compile("@import './src/assets/styles/base.css';", {
|
|
58
|
+
base: resolve('.'),
|
|
59
|
+
onDependency: () => undefined,
|
|
60
|
+
});
|
|
61
|
+
const css = compiler.build([]);
|
|
62
|
+
expect(css).not.toMatch(/--color-[\w-]+\s*:/);
|
|
63
|
+
expect(css).toContain('border-color: #e5e7eb');
|
|
64
|
+
expect(css).toContain('color: #9ca3af');
|
|
65
|
+
expect(css).not.toMatch(/--tw-border-style:\s*none/);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -94,7 +94,7 @@ export const BoostGenericCard: React.FC<BoostGenericCardProps> = ({
|
|
|
94
94
|
|
|
95
95
|
<button
|
|
96
96
|
type="button"
|
|
97
|
-
className="boost-generic-card-button z-10 flex flex-col
|
|
97
|
+
className="boost-generic-card-button z-10 flex flex-col grow rounded-[20px]"
|
|
98
98
|
onClick={handleInnerClick}
|
|
99
99
|
>
|
|
100
100
|
{/* Thumbnail — filter on the wrapper so it desaturates a
|
|
@@ -127,7 +127,7 @@ export const BoostGenericCard: React.FC<BoostGenericCardProps> = ({
|
|
|
127
127
|
|
|
128
128
|
{/* Details Section: grows to fill available space */}
|
|
129
129
|
<section
|
|
130
|
-
className={`flex flex-col
|
|
130
|
+
className={`flex flex-col grow items-center justify-end pt-1 w-full ${
|
|
131
131
|
linkedCredentialsCount === 0 ? 'pb-[20px]' : ''
|
|
132
132
|
}`}
|
|
133
133
|
>
|
|
@@ -156,7 +156,7 @@ export const BoostGenericCard: React.FC<BoostGenericCardProps> = ({
|
|
|
156
156
|
|
|
157
157
|
{/* Verifier & Issuer */}
|
|
158
158
|
<div className="mt-1 w-full px-4 text-center">
|
|
159
|
-
<span className="line-clamp-2 break-
|
|
159
|
+
<span className="line-clamp-2 wrap-break-word text-[12px] leading-snug text-grayscale-700">
|
|
160
160
|
{verifierBadge && (
|
|
161
161
|
<span className="mr-1 inline-block align-middle">
|
|
162
162
|
{verifierBadge}
|
|
@@ -52,7 +52,7 @@ export const BoostSmallCard: React.FC<BoostSmallCardProps> = ({
|
|
|
52
52
|
return (
|
|
53
53
|
<div
|
|
54
54
|
key={issueItem?.id}
|
|
55
|
-
className="profile-thumb-img border
|
|
55
|
+
className="profile-thumb-img border border-white border-solid vc-issuee-image h-[35px] w-[35px] rounded-full overflow-hidden mx-[-5px]"
|
|
56
56
|
>
|
|
57
57
|
<UserProfilePicture
|
|
58
58
|
customContainerClass={`h-full w-full object-cover ${
|
|
@@ -11,7 +11,7 @@ export const Button: React.FC<ButtonProps> = ({ text, onClick, className = '' })
|
|
|
11
11
|
<button
|
|
12
12
|
type="button"
|
|
13
13
|
onClick={onClick}
|
|
14
|
-
className={`p-4 border rounded text-gray-700 ${className}`}
|
|
14
|
+
className={`p-4 border rounded-sm text-gray-700 ${className}`}
|
|
15
15
|
>
|
|
16
16
|
{text}
|
|
17
17
|
</button>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render, screen, cleanup } from '@testing-library/react';
|
|
4
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import CertificateFrontFace from './CertificateFrontFace';
|
|
6
|
+
import CertificateBackFace from './CertificateBackFace';
|
|
7
|
+
import MeritBadgeFrontFace from '../MeritBadgeDisplayCard/MeritBadgeFrontFace';
|
|
8
|
+
import MeritBadgeBackFace from '../MeritBadgeDisplayCard/MeritBadgeBackFace';
|
|
9
|
+
import { I18nProvider } from '../../i18n';
|
|
10
|
+
import type { VC } from '@learncard/types';
|
|
11
|
+
|
|
12
|
+
const credential = {
|
|
13
|
+
'@context': ['https://www.w3.org/ns/credentials/v2'],
|
|
14
|
+
type: ['VerifiableCredential', 'OpenBadgeCredential'],
|
|
15
|
+
issuer: { id: 'did:example:issuer', name: 'Example school' },
|
|
16
|
+
validFrom: '2026-10-26T12:00:00Z',
|
|
17
|
+
awardedDate: '2027-10-01T00:00:00Z',
|
|
18
|
+
credentialSubject: {
|
|
19
|
+
id: 'did:example:learner',
|
|
20
|
+
achievement: { name: 'Web Foundations', description: 'Completed the course.' },
|
|
21
|
+
},
|
|
22
|
+
} as unknown as VC;
|
|
23
|
+
|
|
24
|
+
afterEach(cleanup);
|
|
25
|
+
|
|
26
|
+
describe.each([
|
|
27
|
+
['certificate front', (value: VC) => <CertificateFrontFace credential={value} />],
|
|
28
|
+
[
|
|
29
|
+
'certificate back',
|
|
30
|
+
(value: VC) => <CertificateBackFace credential={value} verificationItems={[]} />,
|
|
31
|
+
],
|
|
32
|
+
['award front', (value: VC) => <MeritBadgeFrontFace credential={value} />],
|
|
33
|
+
['award back', (value: VC) => <MeritBadgeBackFace credential={value} verificationItems={[]} />],
|
|
34
|
+
] as const)('%s award date', (_, renderFace) => {
|
|
35
|
+
it('shows the mapped award day instead of the issuance day', () => {
|
|
36
|
+
render(renderFace(credential));
|
|
37
|
+
expect(screen.getByText(/^Awarded on Oct 01, 2027(?: by)?$/)).toBeTruthy();
|
|
38
|
+
expect(screen.queryByText(/Awarded on Oct 26, 2026/)).toBeNull();
|
|
39
|
+
});
|
|
40
|
+
it('retains the legacy issuance-date fallback', () => {
|
|
41
|
+
render(renderFace({ ...credential, awardedDate: undefined }));
|
|
42
|
+
expect(screen.getByText(/^Awarded on Oct 26, 2026(?: by)?$/)).toBeTruthy();
|
|
43
|
+
});
|
|
44
|
+
it('retains the issuance-date fallback when the award date is invalid', () => {
|
|
45
|
+
render(renderFace({ ...credential, awardedDate: 'not-a-date' }));
|
|
46
|
+
expect(screen.getByText(/^Awarded on Oct 26, 2026(?: by)?$/)).toBeTruthy();
|
|
47
|
+
});
|
|
48
|
+
it('omits the date for an undated draft', () => {
|
|
49
|
+
render(renderFace({ ...credential, awardedDate: undefined, validFrom: undefined }));
|
|
50
|
+
expect(screen.queryByText(/Awarded on/)).toBeNull();
|
|
51
|
+
});
|
|
52
|
+
it('resolves the award label through the host translation adapter', () => {
|
|
53
|
+
render(
|
|
54
|
+
<I18nProvider
|
|
55
|
+
locale="fr"
|
|
56
|
+
resolve={(key, params) =>
|
|
57
|
+
key.startsWith('credential.awardedOn')
|
|
58
|
+
? `Décernée le ${params?.date}`
|
|
59
|
+
: undefined
|
|
60
|
+
}
|
|
61
|
+
>
|
|
62
|
+
{renderFace(credential)}
|
|
63
|
+
</I18nProvider>
|
|
64
|
+
);
|
|
65
|
+
expect(screen.getByText('Décernée le Oct 01, 2027')).toBeTruthy();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useT } from '../../i18n';
|
|
2
3
|
import { getCategoryDarkColor, getInfoFromCredential } from '../../helpers/credential.helpers';
|
|
3
4
|
import { VC, VerificationItem } from '@learncard/types';
|
|
4
5
|
import {
|
|
@@ -44,8 +45,10 @@ export const CertificateBackFace: React.FC<CertificateBackFaceProps> = ({
|
|
|
44
45
|
handleViewFrontFace,
|
|
45
46
|
customLinkedCredentialsComponent,
|
|
46
47
|
}) => {
|
|
48
|
+
const t = useT();
|
|
47
49
|
const { createdAt, credentialSubject } = getInfoFromCredential(credential, 'MMM dd, yyyy', {
|
|
48
50
|
uppercaseDate: false,
|
|
51
|
+
dateType: 'awarded',
|
|
49
52
|
});
|
|
50
53
|
|
|
51
54
|
const { description } = credentialSubject?.achievement ?? {};
|
|
@@ -83,15 +86,17 @@ export const CertificateBackFace: React.FC<CertificateBackFaceProps> = ({
|
|
|
83
86
|
)}
|
|
84
87
|
|
|
85
88
|
<TruncateTextBox headerText="About" text={description}>
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
{createdAt && (
|
|
90
|
+
<span
|
|
91
|
+
className={`text-grayscale-600 font-poppins text-[12px] font-[600] w-full ${
|
|
92
|
+
description
|
|
93
|
+
? 'pt-[10px] border-t border-solid border-grayscale-200'
|
|
94
|
+
: ''
|
|
95
|
+
}`}
|
|
96
|
+
>
|
|
97
|
+
{t('credential.awardedOn', { date: createdAt })}
|
|
98
|
+
</span>
|
|
99
|
+
)}
|
|
95
100
|
</TruncateTextBox>
|
|
96
101
|
|
|
97
102
|
{criteria && <TruncateTextBox headerText="Criteria" text={criteria} />}
|
|
@@ -27,7 +27,7 @@ const CertificateCornerIcon: React.FC<CertificateCornerIconProps> = ({
|
|
|
27
27
|
break;
|
|
28
28
|
case 'bottom-left':
|
|
29
29
|
iconPositionClassName = 'bottom-0 left-0';
|
|
30
|
-
cornerPositionClassName = 'top-0 right-0 rotate-
|
|
30
|
+
cornerPositionClassName = 'top-0 right-0 rotate-270';
|
|
31
31
|
break;
|
|
32
32
|
case 'bottom-right':
|
|
33
33
|
iconPositionClassName = 'bottom-0 right-0';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useT } from '../../i18n';
|
|
2
3
|
|
|
3
4
|
import CertificateCornerIcon from './CertificateCornerIcon';
|
|
4
5
|
import CertificateImageDisplay from './CertificateImageDisplay';
|
|
@@ -68,6 +69,7 @@ export const CertificateFrontFace: React.FC<CertificateFrontFaceProps> = ({
|
|
|
68
69
|
hideFrontFaceDetails,
|
|
69
70
|
onVerifierClick,
|
|
70
71
|
}) => {
|
|
72
|
+
const t = useT();
|
|
71
73
|
const {
|
|
72
74
|
title = '',
|
|
73
75
|
createdAt,
|
|
@@ -75,7 +77,10 @@ export const CertificateFrontFace: React.FC<CertificateFrontFaceProps> = ({
|
|
|
75
77
|
issuee: _issuee = '',
|
|
76
78
|
credentialSubject,
|
|
77
79
|
imageUrl,
|
|
78
|
-
} = getInfoFromCredential(credential, 'MMM dd, yyyy', {
|
|
80
|
+
} = getInfoFromCredential(credential, 'MMM dd, yyyy', {
|
|
81
|
+
uppercaseDate: false,
|
|
82
|
+
dateType: 'awarded',
|
|
83
|
+
});
|
|
79
84
|
|
|
80
85
|
const issuee = issueeOverride || _issuee;
|
|
81
86
|
const issuer = issuerOverride || _issuer;
|
|
@@ -166,14 +171,14 @@ export const CertificateFrontFace: React.FC<CertificateFrontFaceProps> = ({
|
|
|
166
171
|
</div>
|
|
167
172
|
|
|
168
173
|
<div
|
|
169
|
-
className={`flex flex-col gap-[15px] items-center px-[20px] pt-[55px] pb-[20px] border-solid border-
|
|
174
|
+
className={`flex flex-col gap-[15px] items-center px-[20px] pt-[55px] pb-[20px] border-solid border-4 ${borderColor} rounded-[30px]`}
|
|
170
175
|
>
|
|
171
176
|
<div className="flex flex-col gap-[5px] items-center">
|
|
172
177
|
<h1 className="text-grayscale-900 text-center text-[20px] font-jacques">
|
|
173
178
|
{title}
|
|
174
179
|
</h1>
|
|
175
180
|
<div
|
|
176
|
-
className={`${textLightColor} uppercase text-[14px] font-notoSans font-
|
|
181
|
+
className={`${textLightColor} uppercase text-[14px] font-notoSans font-semibold`}
|
|
177
182
|
>
|
|
178
183
|
{formattedDisplayType}
|
|
179
184
|
</div>
|
|
@@ -218,7 +223,11 @@ export const CertificateFrontFace: React.FC<CertificateFrontFaceProps> = ({
|
|
|
218
223
|
</>
|
|
219
224
|
)}
|
|
220
225
|
</span>
|
|
221
|
-
{!hideIssueDate &&
|
|
226
|
+
{!hideIssueDate && createdAt && (
|
|
227
|
+
<span className="font-jacques">
|
|
228
|
+
{t('credential.awardedOn', { date: createdAt })}
|
|
229
|
+
</span>
|
|
230
|
+
)}
|
|
222
231
|
</div>
|
|
223
232
|
|
|
224
233
|
<div className="flex flex-col gap-[10px] items-center">
|
|
@@ -263,14 +272,14 @@ export const CertificateFrontFace: React.FC<CertificateFrontFaceProps> = ({
|
|
|
263
272
|
Certified by
|
|
264
273
|
</span>
|
|
265
274
|
{issuerDisplay.isDidValue ? (
|
|
266
|
-
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[14px] leading-[90%] font-jacques tracking-[0.25px] border-b
|
|
267
|
-
<span className="font-
|
|
275
|
+
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[14px] leading-[90%] font-jacques tracking-[0.25px] border-b border-solid border-grayscale-200 w-full text-center line-clamp-2 wrap-break-word scrollbar-hide">
|
|
276
|
+
<span className="font-semibold">
|
|
268
277
|
{issuerDisplay.isDidValue ? 'Digital ID: ' : ''}
|
|
269
278
|
</span>
|
|
270
279
|
<span className="text-grayscale-600">{issuerName}</span>
|
|
271
280
|
</span>
|
|
272
281
|
) : (
|
|
273
|
-
<span className="mb-[3px] pt-[3px] text-grayscale-900 text-[25px] leading-[90%] font-sacramento border-b
|
|
282
|
+
<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">
|
|
274
283
|
{issuerName}
|
|
275
284
|
</span>
|
|
276
285
|
)}
|
|
@@ -282,7 +291,9 @@ export const CertificateFrontFace: React.FC<CertificateFrontFaceProps> = ({
|
|
|
282
291
|
/>
|
|
283
292
|
</div>
|
|
284
293
|
{customBodyContentSlot && customBodyContentSlot}
|
|
285
|
-
<div
|
|
294
|
+
<div
|
|
295
|
+
className={`${textLightColor} uppercase text-[14px] font-notoSans font-semibold`}
|
|
296
|
+
>
|
|
286
297
|
{categoryTitle}
|
|
287
298
|
</div>
|
|
288
299
|
</div>
|
|
@@ -24,7 +24,7 @@ const CertificateProfileImageDisplay: React.FC<CertificateProfileImageDisplayPro
|
|
|
24
24
|
avatarFallbackVariant = 'initial',
|
|
25
25
|
}) => {
|
|
26
26
|
const imageClassName =
|
|
27
|
-
'h-[50px] w-[50px] rounded-full overflow-hidden border-
|
|
27
|
+
'h-[50px] w-[50px] rounded-full overflow-hidden border-2 border-solid border-grayscale-200';
|
|
28
28
|
const fingerprintClassName = isIssuer ? 'h-[38px] w-[38px]' : 'h-[36px] w-[36px]';
|
|
29
29
|
const silhouetteClassName = 'h-[38px] w-[38px]';
|
|
30
30
|
|
|
@@ -221,7 +221,7 @@ const MediaAttachmentsBox: React.FC<MediaAttachmentsBoxProps> = ({
|
|
|
221
221
|
className="flex bg-grayscale-100 items-center rounded-[15px] w-full"
|
|
222
222
|
>
|
|
223
223
|
<button
|
|
224
|
-
className="relative h-[80px] w-[80px] rounded-[15px] overflow-hidden
|
|
224
|
+
className="relative h-[80px] w-[80px] rounded-[15px] overflow-hidden shrink-0"
|
|
225
225
|
onClick={e => {
|
|
226
226
|
e.stopPropagation();
|
|
227
227
|
handleMediaAttachmentClick(media.url, media.type);
|
|
@@ -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 }}
|
|
@@ -21,11 +21,11 @@ export const JobHistoryCard: React.FC<JobHistoryCardProps> = ({
|
|
|
21
21
|
className={`job-history-card flex h-[88px] max-w-[335px] justify-between shadow-[0_0_8px_0px_rgba(0,0,0,0.2)] relative $ py-[10px] px-[15px] rounded-[20px] ${className}`}
|
|
22
22
|
>
|
|
23
23
|
{dateRange && (
|
|
24
|
-
<div className="flex
|
|
24
|
+
<div className="flex shrink-0 rounded-[20px] bg-emerald-600 pl-[15px] font-bold text-grayscale-50 job-card-date-display w-[108px] h-full items-center">
|
|
25
25
|
<p className="line-clamp-2">{dateRange}</p>
|
|
26
26
|
</div>
|
|
27
27
|
)}
|
|
28
|
-
<div className="flex
|
|
28
|
+
<div className="flex grow flex-col job-history-details-display pl-[12px]">
|
|
29
29
|
<p className="text-grayscale-900 font-bold line-clamp-1">{title}</p>
|
|
30
30
|
<p className="text-grayscale-600 text-sm line-clamp-1">{company}</p>
|
|
31
31
|
<p className="text-sm text-indigo-700 uppercase font-bold line-clamp-1">
|
|
@@ -112,15 +112,12 @@ export const JobListCard: React.FC<JobListCardProps> = ({
|
|
|
112
112
|
{topText}
|
|
113
113
|
</div>
|
|
114
114
|
</div>
|
|
115
|
-
<p className="text-grayscale-500 text-xs line-clamp-1
|
|
116
|
-
{' '}
|
|
117
|
-
{postDateDisplay}
|
|
118
|
-
</p>
|
|
115
|
+
<p className="text-grayscale-500 text-xs line-clamp-1 shrink-0"> {postDateDisplay}</p>
|
|
119
116
|
|
|
120
117
|
<div className="job-listing-center flex mt-[5px]">
|
|
121
118
|
{imgThumb && (
|
|
122
119
|
<img
|
|
123
|
-
className="object-cover w-[80px]
|
|
120
|
+
className="object-cover w-[80px] shrink-0 items-center justify-center rounded-[15px] mr-[10px]"
|
|
124
121
|
src={imgThumb}
|
|
125
122
|
/>
|
|
126
123
|
)}
|
|
@@ -86,7 +86,7 @@ export const LearnCardCreditCardBackFace: React.FC<LearnCardCreditCardBackFacePr
|
|
|
86
86
|
</div>
|
|
87
87
|
</div>
|
|
88
88
|
<div>
|
|
89
|
-
<div className="h-[33px] w-[55px] rounded-[60px] bg-
|
|
89
|
+
<div className="h-[33px] w-[55px] rounded-[60px] bg-linear-to-r/srgb from-[#F4F5F5] to-[#E3E5E8]" />
|
|
90
90
|
</div>
|
|
91
91
|
</div>
|
|
92
92
|
|
|
@@ -43,7 +43,7 @@ export const LearnCardCreditCardFrontFace: React.FC<LearnCardCreditCardFrontFace
|
|
|
43
43
|
<div className="absolute top-[-40px] left-0 w-[55%] h-[140%] rounded-tr-[150px] rounded-br-[150px] bg-grayscale-900 credit-card-bubble" />
|
|
44
44
|
{showActionButton && (
|
|
45
45
|
<button
|
|
46
|
-
className="absolute top-2 right-4 bg-grayscale-500 border-
|
|
46
|
+
className="absolute top-2 right-4 bg-grayscale-500 border-2 rounded-3xl border-solid border-color-grayscale-900 min-w-[110px] p-[2px] font-bold text-xs tracking-wide leading-snug text-center text-white"
|
|
47
47
|
onClick={onClick}
|
|
48
48
|
data-testid="credit-card-frontface-button"
|
|
49
49
|
>
|
|
@@ -221,7 +221,7 @@ const MediaAttachmentsBox: React.FC<MediaAttachmentsBoxProps> = ({
|
|
|
221
221
|
className="flex media-attachment-box bg-grayscale-100 items-center rounded-[15px] w-full"
|
|
222
222
|
>
|
|
223
223
|
<button
|
|
224
|
-
className="relative h-[80px] w-[80px] rounded-[15px] overflow-hidden
|
|
224
|
+
className="relative h-[80px] w-[80px] rounded-[15px] overflow-hidden shrink-0"
|
|
225
225
|
onClick={e => {
|
|
226
226
|
e.stopPropagation();
|
|
227
227
|
handleMediaAttachmentClick(media.url, media.type);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useT } from '../../i18n';
|
|
2
3
|
import { getCategoryDarkColor, getInfoFromCredential } from '../../helpers/credential.helpers';
|
|
3
4
|
import { VC, VerificationItem } from '@learncard/types';
|
|
4
5
|
import {
|
|
@@ -44,8 +45,10 @@ export const MeritBadgeBackFace: React.FC<MeritBadgeBackFaceProps> = ({
|
|
|
44
45
|
handleViewFrontFace,
|
|
45
46
|
customLinkedCredentialsComponent,
|
|
46
47
|
}) => {
|
|
48
|
+
const t = useT();
|
|
47
49
|
const { createdAt, credentialSubject } = getInfoFromCredential(credential, 'MMM dd, yyyy', {
|
|
48
50
|
uppercaseDate: false,
|
|
51
|
+
dateType: 'awarded',
|
|
49
52
|
});
|
|
50
53
|
|
|
51
54
|
const { description } = credentialSubject?.achievement ?? {};
|
|
@@ -83,15 +86,17 @@ export const MeritBadgeBackFace: React.FC<MeritBadgeBackFaceProps> = ({
|
|
|
83
86
|
)}
|
|
84
87
|
|
|
85
88
|
<TruncateTextBox headerText="About" text={description}>
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
{createdAt && (
|
|
90
|
+
<span
|
|
91
|
+
className={`text-grayscale-600 font-poppins text-[12px] font-[600] w-full ${
|
|
92
|
+
description
|
|
93
|
+
? 'pt-[10px] border-t border-solid border-grayscale-200'
|
|
94
|
+
: ''
|
|
95
|
+
}`}
|
|
96
|
+
>
|
|
97
|
+
{t('credential.awardedOn', { date: createdAt })}
|
|
98
|
+
</span>
|
|
99
|
+
)}
|
|
95
100
|
</TruncateTextBox>
|
|
96
101
|
|
|
97
102
|
{criteria && <TruncateTextBox headerText="Criteria" text={criteria} />}
|
|
@@ -16,20 +16,20 @@ const MeritBadgeCornerIcon: React.FC<MeritBadgeCornerIconProps> = ({ categoryTyp
|
|
|
16
16
|
switch (position) {
|
|
17
17
|
case 'top-left':
|
|
18
18
|
iconPositionClassName = 'top-[3px] left-[3px] pb-[10px] pr-[10px] pl-[4px] pt-[4px]';
|
|
19
|
-
cornerPositionClassName = 'bottom-
|
|
19
|
+
cornerPositionClassName = '-bottom-px right-0';
|
|
20
20
|
break;
|
|
21
21
|
case 'top-right':
|
|
22
22
|
iconPositionClassName = 'top-[3px] right-[3px] pl-[10px] pb-[10px] pr-[4px] pt-[4px]';
|
|
23
|
-
cornerPositionClassName = 'bottom-
|
|
23
|
+
cornerPositionClassName = '-bottom-px left-0 rotate-90';
|
|
24
24
|
break;
|
|
25
25
|
case 'bottom-left':
|
|
26
26
|
iconPositionClassName = 'bottom-[3px] left-[3px] pr-[10px] pt-[10px] pl-[4px] pb-[4px]';
|
|
27
|
-
cornerPositionClassName = 'top-0 right-0 rotate-
|
|
27
|
+
cornerPositionClassName = 'top-0 right-0 rotate-270';
|
|
28
28
|
break;
|
|
29
29
|
case 'bottom-right':
|
|
30
30
|
iconPositionClassName =
|
|
31
31
|
'bottom-[3px] right-[3px] pl-[10px] pt-[10px] pr-[4px] pb-[4px]';
|
|
32
|
-
cornerPositionClassName = 'top-
|
|
32
|
+
cornerPositionClassName = '-top-px left-0 rotate-180';
|
|
33
33
|
break;
|
|
34
34
|
}
|
|
35
35
|
|