@learncard/react 2.8.43 → 2.8.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cjs/{CertificateDisplayCard-16391b05.js → CertificateDisplayCard-2d9dc687.js} +3 -3
  2. package/dist/cjs/{CertificateDisplayCard-16391b05.js.map → CertificateDisplayCard-2d9dc687.js.map} +1 -1
  3. package/dist/cjs/{Lightbox-95f6be41.js → Lightbox-9aeb2f7b.js} +2 -2
  4. package/dist/cjs/Lightbox-9aeb2f7b.js.map +1 -0
  5. package/dist/cjs/{MeritBadgeDisplayCard-a6a90955.js → MeritBadgeDisplayCard-77b7bbc0.js} +3 -3
  6. package/dist/cjs/{MeritBadgeDisplayCard-a6a90955.js.map → MeritBadgeDisplayCard-77b7bbc0.js.map} +1 -1
  7. package/dist/cjs/{VCCard-67930803.js → VCCard-dae617d7.js} +2 -2
  8. package/dist/cjs/{VCCard-67930803.js.map → VCCard-dae617d7.js.map} +1 -1
  9. package/dist/cjs/{VCDisplayCard2-d19c75f5.js → VCDisplayCard2-d49e0798.js} +5 -5
  10. package/dist/cjs/{VCDisplayCard2-d19c75f5.js.map → VCDisplayCard2-d49e0798.js.map} +1 -1
  11. package/dist/cjs/{VerifierStateBadgeAndText-e51fca29.js → VerifierStateBadgeAndText-08aea854.js} +6 -7
  12. package/dist/cjs/{VerifierStateBadgeAndText-e51fca29.js.map → VerifierStateBadgeAndText-08aea854.js.map} +1 -1
  13. package/dist/cjs/index.js +6 -6
  14. package/dist/cjs/index13.js +6 -6
  15. package/dist/cjs/index19.js +1 -1
  16. package/dist/cjs/index21.js +3 -3
  17. package/dist/cjs/index38.js +6 -6
  18. package/dist/cjs/index41.js +5 -5
  19. package/dist/cjs/index6.js +3 -3
  20. package/dist/esm/{CertificateDisplayCard-d9795c01.js → CertificateDisplayCard-b46c7cab.js} +3 -3
  21. package/dist/esm/{CertificateDisplayCard-d9795c01.js.map → CertificateDisplayCard-b46c7cab.js.map} +1 -1
  22. package/dist/esm/{Lightbox-73ecfdc4.js → Lightbox-2ae83d79.js} +2 -2
  23. package/dist/esm/Lightbox-2ae83d79.js.map +1 -0
  24. package/dist/esm/{MeritBadgeDisplayCard-1cd9ed27.js → MeritBadgeDisplayCard-4bcdc2c4.js} +3 -3
  25. package/dist/esm/{MeritBadgeDisplayCard-1cd9ed27.js.map → MeritBadgeDisplayCard-4bcdc2c4.js.map} +1 -1
  26. package/dist/esm/{VCCard-9207104e.js → VCCard-405b8556.js} +2 -2
  27. package/dist/esm/{VCCard-9207104e.js.map → VCCard-405b8556.js.map} +1 -1
  28. package/dist/esm/{VCDisplayCard2-79d5d041.js → VCDisplayCard2-a37a905e.js} +5 -5
  29. package/dist/esm/{VCDisplayCard2-79d5d041.js.map → VCDisplayCard2-a37a905e.js.map} +1 -1
  30. package/dist/esm/{VerifierStateBadgeAndText-8c6f48b4.js → VerifierStateBadgeAndText-151db666.js} +6 -7
  31. package/dist/esm/{VerifierStateBadgeAndText-8c6f48b4.js.map → VerifierStateBadgeAndText-151db666.js.map} +1 -1
  32. package/dist/esm/index.js +6 -6
  33. package/dist/esm/index13.js +6 -6
  34. package/dist/esm/index19.js +1 -1
  35. package/dist/esm/index21.js +3 -3
  36. package/dist/esm/index38.js +6 -6
  37. package/dist/esm/index41.js +5 -5
  38. package/dist/esm/index6.js +3 -3
  39. package/package.json +1 -1
  40. package/dist/cjs/Lightbox-95f6be41.js.map +0 -1
  41. package/dist/esm/Lightbox-73ecfdc4.js.map +0 -1
package/dist/esm/index.js CHANGED
@@ -3,8 +3,8 @@ export { B as BoostGenericCard } from './BoostGenericCard-bab20c6e.js';
3
3
  export { B as BoostSmallCard } from './BoostSmallCard-e0afec44.js';
4
4
  export { B as Button } from './Button-5f805204.js';
5
5
  export { C as CertDisplayCardSkillsCount } from './CertDisplayCardSkillsCount-a64249e2.js';
6
- export { C as CertificateBackFace, a as CertificateDisplayCard, b as CertificateFrontFace } from './CertificateDisplayCard-d9795c01.js';
7
- export { S as SelectedSkills, V as VERIFIER_STATES, a as VerifierStateBadgeAndText } from './VerifierStateBadgeAndText-8c6f48b4.js';
6
+ export { C as CertificateBackFace, a as CertificateDisplayCard, b as CertificateFrontFace } from './CertificateDisplayCard-b46c7cab.js';
7
+ export { S as SelectedSkills, V as VERIFIER_STATES, a as VerifierStateBadgeAndText } from './VerifierStateBadgeAndText-151db666.js';
8
8
  export { C as CircleCheckButton } from './CircleCheckButton-5a97f071.js';
9
9
  export { a as CircleIcon, C as CountCircle } from './CircleIcon-4200733b.js';
10
10
  export { C as CourseCard } from './CourseCard-663ff174.js';
@@ -16,9 +16,9 @@ export { a as JobListCard, J as JobListingBubble } from './JobListCard-0d1c4184.
16
16
  export { L as LearnCardCreditCardBackFace } from './LearnCardCreditCardBackFace-9baa9e6b.js';
17
17
  export { L as LearnCardCreditCardFrontFace } from './LearnCardCreditCardFrontFace-d50efb25.js';
18
18
  export { L as LearnPill } from './LearnPill-74bcb08c.js';
19
- export { L as Lightbox } from './Lightbox-73ecfdc4.js';
19
+ export { L as Lightbox } from './Lightbox-2ae83d79.js';
20
20
  export { C as CircleLoadingState } from './CircleSpinner-9b8b1a6b.js';
21
- export { M as MeritBadgeBackFace, a as MeritBadgeDisplayCard, b as MeritBadgeFrontFace } from './MeritBadgeDisplayCard-1cd9ed27.js';
21
+ export { M as MeritBadgeBackFace, a as MeritBadgeDisplayCard, b as MeritBadgeFrontFace } from './MeritBadgeDisplayCard-4bcdc2c4.js';
22
22
  export { M as MeritBadgeSkillsCount } from './MeritBadgeSkillsCount-9cabd05b.js';
23
23
  export { M as MiniVCThumbnail } from './MiniVCThumbnail-6a07e810.js';
24
24
  export { N as Notification } from './Notification-95d159d2.js';
@@ -37,10 +37,10 @@ export { a as SkillsCard, S as SkillsMeterSegment } from './SkillsCard-92a51db2.
37
37
  export { S as SkillsStatsCard } from './SkillsStatsCard-1628fe9c.js';
38
38
  export { S as SmallAchievementCard } from './SmallAchievementCard-d0220751.js';
39
39
  export { U as UserProfilePicture } from './UserProfilePicture-ecc82a6c.js';
40
- export { V as VCCard } from './VCCard-9207104e.js';
40
+ export { V as VCCard } from './VCCard-405b8556.js';
41
41
  export { V as VCDisplayBackFace } from './VCDisplayBackFace-eb893506.js';
42
42
  export { V as VCDisplayCard } from './VCDisplayCard-c18f9f90.js';
43
- export { V as VCDisplayCard2, a as VCDisplayCardSkillsCount, b as VCIDDisplayCard } from './VCDisplayCard2-79d5d041.js';
43
+ export { V as VCDisplayCard2, a as VCDisplayCardSkillsCount, b as VCIDDisplayCard } from './VCDisplayCard2-a37a905e.js';
44
44
  export { V as VCThumbnail } from './VCThumbnail-3c254bda.js';
45
45
  export { V as VCVerificationCheck, a as VCVerificationCheckWithSpinner, b as VCVerificationCheckWithText } from './VCVerificationCheck-80249524.js';
46
46
  export { V as ValidationStateIndicator } from './VCVerificationPill-b4684ca4.js';
@@ -3,8 +3,8 @@ export { B as BoostGenericCard } from './BoostGenericCard-bab20c6e.js';
3
3
  export { B as BoostSmallCard } from './BoostSmallCard-e0afec44.js';
4
4
  export { B as Button } from './Button-5f805204.js';
5
5
  export { C as CertDisplayCardSkillsCount } from './CertDisplayCardSkillsCount-a64249e2.js';
6
- export { C as CertificateBackFace, a as CertificateDisplayCard, b as CertificateFrontFace } from './CertificateDisplayCard-d9795c01.js';
7
- export { S as SelectedSkills, V as VERIFIER_STATES, a as VerifierStateBadgeAndText } from './VerifierStateBadgeAndText-8c6f48b4.js';
6
+ export { C as CertificateBackFace, a as CertificateDisplayCard, b as CertificateFrontFace } from './CertificateDisplayCard-b46c7cab.js';
7
+ export { S as SelectedSkills, V as VERIFIER_STATES, a as VerifierStateBadgeAndText } from './VerifierStateBadgeAndText-151db666.js';
8
8
  export { C as CircleCheckButton } from './CircleCheckButton-5a97f071.js';
9
9
  export { a as CircleIcon, C as CountCircle } from './CircleIcon-4200733b.js';
10
10
  export { C as CourseCard } from './CourseCard-663ff174.js';
@@ -16,9 +16,9 @@ export { a as JobListCard, J as JobListingBubble } from './JobListCard-0d1c4184.
16
16
  export { L as LearnCardCreditCardBackFace } from './LearnCardCreditCardBackFace-9baa9e6b.js';
17
17
  export { L as LearnCardCreditCardFrontFace } from './LearnCardCreditCardFrontFace-d50efb25.js';
18
18
  export { L as LearnPill } from './LearnPill-74bcb08c.js';
19
- export { L as Lightbox } from './Lightbox-73ecfdc4.js';
19
+ export { L as Lightbox } from './Lightbox-2ae83d79.js';
20
20
  export { C as CircleLoadingState } from './CircleSpinner-9b8b1a6b.js';
21
- export { M as MeritBadgeBackFace, a as MeritBadgeDisplayCard, b as MeritBadgeFrontFace } from './MeritBadgeDisplayCard-1cd9ed27.js';
21
+ export { M as MeritBadgeBackFace, a as MeritBadgeDisplayCard, b as MeritBadgeFrontFace } from './MeritBadgeDisplayCard-4bcdc2c4.js';
22
22
  export { M as MeritBadgeSkillsCount } from './MeritBadgeSkillsCount-9cabd05b.js';
23
23
  export { M as MiniVCThumbnail } from './MiniVCThumbnail-6a07e810.js';
24
24
  export { N as Notification } from './Notification-95d159d2.js';
@@ -37,10 +37,10 @@ export { a as SkillsCard, S as SkillsMeterSegment } from './SkillsCard-92a51db2.
37
37
  export { S as SkillsStatsCard } from './SkillsStatsCard-1628fe9c.js';
38
38
  export { S as SmallAchievementCard } from './SmallAchievementCard-d0220751.js';
39
39
  export { U as UserProfilePicture } from './UserProfilePicture-ecc82a6c.js';
40
- export { V as VCCard } from './VCCard-9207104e.js';
40
+ export { V as VCCard } from './VCCard-405b8556.js';
41
41
  export { V as VCDisplayBackFace } from './VCDisplayBackFace-eb893506.js';
42
42
  export { V as VCDisplayCard } from './VCDisplayCard-c18f9f90.js';
43
- export { V as VCDisplayCard2, a as VCDisplayCardSkillsCount, b as VCIDDisplayCard } from './VCDisplayCard2-79d5d041.js';
43
+ export { V as VCDisplayCard2, a as VCDisplayCardSkillsCount, b as VCIDDisplayCard } from './VCDisplayCard2-a37a905e.js';
44
44
  export { V as VCThumbnail } from './VCThumbnail-3c254bda.js';
45
45
  export { V as VCVerificationCheck, a as VCVerificationCheckWithSpinner, b as VCVerificationCheckWithText } from './VCVerificationCheck-80249524.js';
46
46
  export { V as ValidationStateIndicator } from './VCVerificationPill-b4684ca4.js';
@@ -1,4 +1,4 @@
1
- export { L as Lightbox } from './Lightbox-73ecfdc4.js';
1
+ export { L as Lightbox } from './Lightbox-2ae83d79.js';
2
2
  import 'react';
3
3
  import 'react-dom';
4
4
  //# sourceMappingURL=index19.js.map
@@ -1,10 +1,10 @@
1
1
  import 'react';
2
2
  import './CaretRightFilled.svg';
3
- export { M as MeritBadgeBackFace, a as MeritBadgeDisplayCard, b as MeritBadgeFrontFace } from './MeritBadgeDisplayCard-1cd9ed27.js';
3
+ export { M as MeritBadgeBackFace, a as MeritBadgeDisplayCard, b as MeritBadgeFrontFace } from './MeritBadgeDisplayCard-4bcdc2c4.js';
4
4
  import './index-1fa04a2d.js';
5
5
  import './types.esm-a78423b0.js';
6
6
  export { M as MeritBadgeSkillsCount } from './MeritBadgeSkillsCount-9cabd05b.js';
7
- import './VerifierStateBadgeAndText-8c6f48b4.js';
7
+ import './VerifierStateBadgeAndText-151db666.js';
8
8
  import './athletics.png';
9
9
  import './business.png';
10
10
  import './creative.png';
@@ -19,7 +19,7 @@ import './credential.helpers-e29ca7c7.js';
19
19
  import './index-28917993.js';
20
20
  import './User-161c7f37.js';
21
21
  import './Trophy-ad67f46a.js';
22
- import './Lightbox-73ecfdc4.js';
22
+ import './Lightbox-2ae83d79.js';
23
23
  import 'react-dom';
24
24
  import './DotsThreeOutline.svg';
25
25
  //# sourceMappingURL=index21.js.map
@@ -1,4 +1,4 @@
1
- export { V as VCCard } from './VCCard-9207104e.js';
1
+ export { V as VCCard } from './VCCard-405b8556.js';
2
2
  import 'react';
3
3
  import '@learncard/init';
4
4
  import './VCDisplayCard-c18f9f90.js';
@@ -21,8 +21,8 @@ import './RedXCircle.svg';
21
21
  import './GreenCheckCircle.svg';
22
22
  import './YellowWarningCircle.svg';
23
23
  import './ArrowArcRight.svg';
24
- import './VCDisplayCard2-79d5d041.js';
25
- import './VerifierStateBadgeAndText-8c6f48b4.js';
24
+ import './VCDisplayCard2-a37a905e.js';
25
+ import './VerifierStateBadgeAndText-151db666.js';
26
26
  import './athletics.png';
27
27
  import './business.png';
28
28
  import './creative.png';
@@ -32,13 +32,13 @@ import './medical.png';
32
32
  import './social.png';
33
33
  import './stem.png';
34
34
  import './trade.png';
35
- import './Lightbox-73ecfdc4.js';
35
+ import './Lightbox-2ae83d79.js';
36
36
  import 'react-dom';
37
- import './CertificateDisplayCard-d9795c01.js';
37
+ import './CertificateDisplayCard-b46c7cab.js';
38
38
  import './CertDisplayCardSkillsCount-a64249e2.js';
39
39
  import './CaretRightFilled.svg';
40
40
  import './DotsThreeOutline.svg';
41
41
  import './QRCodeIcon-e9569804.js';
42
42
  import './id-sleeve.png';
43
- import './MeritBadgeDisplayCard-1cd9ed27.js';
43
+ import './MeritBadgeDisplayCard-4bcdc2c4.js';
44
44
  //# sourceMappingURL=index38.js.map
@@ -1,5 +1,5 @@
1
1
  import 'react';
2
- export { S as SelectedSkills } from './VerifierStateBadgeAndText-8c6f48b4.js';
2
+ export { S as SelectedSkills } from './VerifierStateBadgeAndText-151db666.js';
3
3
  import './athletics.png';
4
4
  import './business.png';
5
5
  import './creative.png';
@@ -10,7 +10,7 @@ import './social.png';
10
10
  import './stem.png';
11
11
  import './trade.png';
12
12
  import './index-1fa04a2d.js';
13
- export { V as VCDisplayCard2, a as VCDisplayCardSkillsCount, b as VCIDDisplayCard } from './VCDisplayCard2-79d5d041.js';
13
+ export { V as VCDisplayCard2, a as VCDisplayCardSkillsCount, b as VCIDDisplayCard } from './VCDisplayCard2-a37a905e.js';
14
14
  import './types.esm-a78423b0.js';
15
15
  import './CaretRightFilled.svg';
16
16
  import './id-sleeve.png';
@@ -23,11 +23,11 @@ import './credential.helpers-e29ca7c7.js';
23
23
  import './index-28917993.js';
24
24
  import './User-161c7f37.js';
25
25
  import './Trophy-ad67f46a.js';
26
- import './Lightbox-73ecfdc4.js';
26
+ import './Lightbox-2ae83d79.js';
27
27
  import 'react-dom';
28
- import './CertificateDisplayCard-d9795c01.js';
28
+ import './CertificateDisplayCard-b46c7cab.js';
29
29
  import './CertDisplayCardSkillsCount-a64249e2.js';
30
30
  import './DotsThreeOutline.svg';
31
31
  import './QRCodeIcon-e9569804.js';
32
- import './MeritBadgeDisplayCard-1cd9ed27.js';
32
+ import './MeritBadgeDisplayCard-4bcdc2c4.js';
33
33
  //# sourceMappingURL=index41.js.map
@@ -1,17 +1,17 @@
1
1
  import 'react';
2
2
  import './CaretRightFilled.svg';
3
3
  export { C as CertDisplayCardSkillsCount } from './CertDisplayCardSkillsCount-a64249e2.js';
4
- export { C as CertificateBackFace, a as CertificateDisplayCard, b as CertificateFrontFace } from './CertificateDisplayCard-d9795c01.js';
4
+ export { C as CertificateBackFace, a as CertificateDisplayCard, b as CertificateFrontFace } from './CertificateDisplayCard-b46c7cab.js';
5
5
  import './index-1fa04a2d.js';
6
6
  import './types.esm-a78423b0.js';
7
- export { V as VERIFIER_STATES, a as VerifierStateBadgeAndText } from './VerifierStateBadgeAndText-8c6f48b4.js';
7
+ export { V as VERIFIER_STATES, a as VerifierStateBadgeAndText } from './VerifierStateBadgeAndText-151db666.js';
8
8
  import './PuzzlePiece-1fb12c2e.js';
9
9
  import './credential.helpers-e29ca7c7.js';
10
10
  import './index-28917993.js';
11
11
  import './User-161c7f37.js';
12
12
  import './Trophy-ad67f46a.js';
13
13
  import './UserProfilePicture-ecc82a6c.js';
14
- import './Lightbox-73ecfdc4.js';
14
+ import './Lightbox-2ae83d79.js';
15
15
  import 'react-dom';
16
16
  import './DotsThreeOutline.svg';
17
17
  import './athletics.png';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@learncard/react",
3
- "version": "2.8.43",
3
+ "version": "2.8.44",
4
4
  "description": "",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -1 +0,0 @@
1
- {"version":3,"file":"Lightbox-95f6be41.js","sources":["../../src/components/svgs/X.tsx","../../src/helpers/video.helpers.ts","../../src/components/Lightbox/Lightbox.tsx"],"sourcesContent":["import React from 'react';\n\ntype XProps = {\n className?: string;\n strokeWidth?: string;\n};\n\nconst X: React.FC<XProps> = ({ className = '', strokeWidth = '2' }) => {\n return (\n <svg\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-label=\"X\"\n >\n <path\n d=\"M25 7L7 25\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M25 25L7 7\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default X;\n","export type VideoPlatform = 'youtube' | 'vimeo' | 'drive' | 'loom' | 'unknown';\n\nexport type VideoMetadata = {\n type: VideoPlatform;\n videoId: string | null;\n embedUrl: string | null;\n thumbnailUrl: string | null;\n};\n\nexport const getVideoMetadata = async (url: string): Promise<VideoMetadata> => {\n try {\n const parsed = new URL(url);\n const host = parsed.hostname.replace(/^www\\./, '');\n let id: string | null = null;\n\n // YouTube\n if (host === 'youtu.be' || host.includes('youtube.com')) {\n if (host === 'youtu.be') {\n id = parsed.pathname.slice(1);\n } else {\n id =\n parsed.searchParams.get('v') ||\n parsed.pathname.split('/').filter(Boolean).pop() ||\n null;\n }\n if (id) {\n let thumb = `https://img.youtube.com/vi/${id}/maxresdefault.jpg`;\n try {\n const res = await fetch(thumb, { method: 'HEAD' });\n if (!res.ok) thumb = `https://img.youtube.com/vi/${id}/hqdefault.jpg`;\n } catch {\n thumb = `https://img.youtube.com/vi/${id}/hqdefault.jpg`;\n }\n return {\n type: 'youtube',\n videoId: id,\n embedUrl: `https://www.youtube.com/embed/${id}`,\n thumbnailUrl: thumb,\n };\n }\n }\n\n // Vimeo\n if (host.includes('vimeo.com')) {\n const match = url.match(/vimeo\\.com\\/(\\d+)/);\n id = match?.[1] ?? null;\n if (id) {\n try {\n const oembed = `https://vimeo.com/api/oembed.json?url=${encodeURIComponent(\n url\n )}`;\n const data = await fetch(oembed).then(r => r.json());\n return {\n type: 'vimeo',\n videoId: id,\n embedUrl: `https://player.vimeo.com/video/${id}`,\n thumbnailUrl: data.thumbnail_url,\n };\n } catch (e) {\n // Fallback if oEmbed fails\n return {\n type: 'vimeo',\n videoId: id,\n embedUrl: `https://player.vimeo.com/video/${id}`,\n thumbnailUrl: null,\n };\n }\n }\n }\n\n // Google Drive\n if (host === 'drive.google.com' || host === 'docs.google.com') {\n const match = parsed.pathname.match(/\\/d\\/([^/]+)/);\n id = match?.[1] ?? parsed.searchParams.get('id');\n if (id) {\n return {\n type: 'drive',\n videoId: id,\n embedUrl: `https://drive.google.com/file/d/${id}/preview`,\n thumbnailUrl: `https://drive.google.com/thumbnail?sz=w320-h320&id=${id}`,\n };\n }\n }\n\n // Loom\n if (host === 'loom.com') {\n const match = parsed.pathname.match(/\\/(?:share|embed|watch)\\/([A-Za-z0-9]+)/);\n id = match?.[1] ?? null;\n if (id) {\n const embedUrl = `https://www.loom.com/embed/${id}`;\n try {\n const oembedUrl = `https://www.loom.com/api/oembed?url=${encodeURIComponent(\n url\n )}`;\n const response = await fetch(oembedUrl);\n if (!response.ok) {\n throw new Error(`oEmbed API returned ${response.status}`);\n }\n const data = await response.json();\n return {\n type: 'loom',\n videoId: id,\n embedUrl,\n thumbnailUrl: data.thumbnail_url,\n };\n } catch (e) {\n // Fallback if oEmbed fails\n console.warn('Loom oEmbed fetch failed:', e);\n return {\n type: 'loom',\n videoId: id,\n embedUrl,\n thumbnailUrl: null,\n };\n }\n }\n }\n\n // Fallback\n return { type: 'unknown', videoId: null, embedUrl: null, thumbnailUrl: null };\n } catch (e) {\n console.error('getVideoMetadata error:', e);\n return { type: 'unknown', videoId: null, embedUrl: null, thumbnailUrl: null };\n }\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport X from '../svgs/X';\n\nimport { getVideoMetadata, VideoMetadata } from '../../helpers/video.helpers';\n\nexport type LightboxItemType = 'photo' | 'video';\n\nexport type LightboxItem = {\n url: string;\n type: LightboxItemType;\n};\n\nexport type LightboxImage = LightboxItem & {\n type: 'photo';\n alt?: string;\n};\n\nexport type LightboxVideo = LightboxItem & {\n type: 'video';\n};\n\nexport type LightboxProps = {\n items: LightboxItem[];\n currentUrl: string | undefined;\n setCurrentUrl: (url: string | undefined) => void;\n showCloseButton?: boolean;\n enableImageClick?: boolean;\n};\n\nexport const Lightbox: React.FC<LightboxProps> = ({\n items,\n currentUrl,\n setCurrentUrl,\n showCloseButton = true,\n enableImageClick = false,\n}) => {\n const currentItem = items.find(item => item.url === currentUrl);\n const innerRef = useRef<HTMLImageElement>(null);\n const [videoMetadata, setVideoMetadata] = useState<VideoMetadata | null>(null);\n\n const goToNextItem = useCallback(() => {\n const currentIndex = items.findIndex(item => item.url === currentUrl);\n const nextItem = items.at((currentIndex + 1) % items.length);\n if (nextItem) setCurrentUrl(nextItem.url);\n }, [currentUrl, items, setCurrentUrl]);\n\n const goToPreviousItem = useCallback(() => {\n const currentIndex = items.findIndex(item => item.url === currentUrl);\n const previousItem = items.at((currentIndex - 1 + items.length) % items.length);\n if (previousItem) setCurrentUrl(previousItem.url);\n }, [currentUrl, items, setCurrentUrl]);\n\n useEffect(() => {\n const keydownListener = (e: KeyboardEvent) => {\n if (!currentUrl || !currentItem) return;\n\n if (e.key === 'Escape') {\n e.preventDefault();\n setCurrentUrl(undefined);\n }\n\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n goToNextItem();\n }\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n goToPreviousItem();\n }\n };\n\n window.addEventListener('keydown', keydownListener);\n return () => window.removeEventListener('keydown', keydownListener);\n }, [currentUrl, currentItem, goToNextItem, goToPreviousItem, setCurrentUrl]);\n\n useEffect(() => {\n const fetchMetadata = async () => {\n if (currentItem?.type === 'video') {\n const metadata = await getVideoMetadata(currentItem.url);\n setVideoMetadata(metadata);\n } else {\n setVideoMetadata(null);\n }\n };\n\n fetchMetadata();\n }, []);\n\n if (!currentUrl || !currentItem) return null;\n\n return createPortal(\n <div\n className=\"absolute top-0 left-0 w-screen h-screen bg-[rgba(0,0,0,0.9)] text-white flex justify-center items-center z-[999999]\"\n onClick={e => {\n if (e.target !== innerRef.current) {\n setCurrentUrl(undefined);\n }\n }}\n >\n {showCloseButton && (\n <button onClick={() => setCurrentUrl(undefined)}>\n <X className=\"absolute w-[30px] h-[30px] top-[20px] right-[20px] cursor-pointer text-white z-[999999]\" />\n </button>\n )}\n {currentItem.type === 'photo' && (\n <img\n className=\"cursor-pointer max-w-[90vw] max-h-[90vh]\"\n src={currentUrl}\n onClick={() => enableImageClick && window.open(currentUrl, '_blank')}\n ref={innerRef}\n alt=\"\"\n />\n )}\n\n {currentItem.type === 'video' && videoMetadata?.embedUrl && (\n <div className=\"relative w-[90vw] max-w-[800px] aspect-video\">\n <iframe\n src={videoMetadata.embedUrl}\n className=\"absolute top-0 left-0 w-full h-full rounded-md\"\n title=\"Video player\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </div>\n )}\n </div>,\n document.body\n );\n};\n"],"names":["React","__async","useRef","useState","useCallback","useEffect","createPortal"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Lightbox-73ecfdc4.js","sources":["../../src/components/svgs/X.tsx","../../src/helpers/video.helpers.ts","../../src/components/Lightbox/Lightbox.tsx"],"sourcesContent":["import React from 'react';\n\ntype XProps = {\n className?: string;\n strokeWidth?: string;\n};\n\nconst X: React.FC<XProps> = ({ className = '', strokeWidth = '2' }) => {\n return (\n <svg\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n aria-label=\"X\"\n >\n <path\n d=\"M25 7L7 25\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M25 25L7 7\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nexport default X;\n","export type VideoPlatform = 'youtube' | 'vimeo' | 'drive' | 'loom' | 'unknown';\n\nexport type VideoMetadata = {\n type: VideoPlatform;\n videoId: string | null;\n embedUrl: string | null;\n thumbnailUrl: string | null;\n};\n\nexport const getVideoMetadata = async (url: string): Promise<VideoMetadata> => {\n try {\n const parsed = new URL(url);\n const host = parsed.hostname.replace(/^www\\./, '');\n let id: string | null = null;\n\n // YouTube\n if (host === 'youtu.be' || host.includes('youtube.com')) {\n if (host === 'youtu.be') {\n id = parsed.pathname.slice(1);\n } else {\n id =\n parsed.searchParams.get('v') ||\n parsed.pathname.split('/').filter(Boolean).pop() ||\n null;\n }\n if (id) {\n let thumb = `https://img.youtube.com/vi/${id}/maxresdefault.jpg`;\n try {\n const res = await fetch(thumb, { method: 'HEAD' });\n if (!res.ok) thumb = `https://img.youtube.com/vi/${id}/hqdefault.jpg`;\n } catch {\n thumb = `https://img.youtube.com/vi/${id}/hqdefault.jpg`;\n }\n return {\n type: 'youtube',\n videoId: id,\n embedUrl: `https://www.youtube.com/embed/${id}`,\n thumbnailUrl: thumb,\n };\n }\n }\n\n // Vimeo\n if (host.includes('vimeo.com')) {\n const match = url.match(/vimeo\\.com\\/(\\d+)/);\n id = match?.[1] ?? null;\n if (id) {\n try {\n const oembed = `https://vimeo.com/api/oembed.json?url=${encodeURIComponent(\n url\n )}`;\n const data = await fetch(oembed).then(r => r.json());\n return {\n type: 'vimeo',\n videoId: id,\n embedUrl: `https://player.vimeo.com/video/${id}`,\n thumbnailUrl: data.thumbnail_url,\n };\n } catch (e) {\n // Fallback if oEmbed fails\n return {\n type: 'vimeo',\n videoId: id,\n embedUrl: `https://player.vimeo.com/video/${id}`,\n thumbnailUrl: null,\n };\n }\n }\n }\n\n // Google Drive\n if (host === 'drive.google.com' || host === 'docs.google.com') {\n const match = parsed.pathname.match(/\\/d\\/([^/]+)/);\n id = match?.[1] ?? parsed.searchParams.get('id');\n if (id) {\n return {\n type: 'drive',\n videoId: id,\n embedUrl: `https://drive.google.com/file/d/${id}/preview`,\n thumbnailUrl: `https://drive.google.com/thumbnail?sz=w320-h320&id=${id}`,\n };\n }\n }\n\n // Loom\n if (host === 'loom.com') {\n const match = parsed.pathname.match(/\\/(?:share|embed|watch)\\/([A-Za-z0-9]+)/);\n id = match?.[1] ?? null;\n if (id) {\n const embedUrl = `https://www.loom.com/embed/${id}`;\n try {\n const oembedUrl = `https://www.loom.com/api/oembed?url=${encodeURIComponent(\n url\n )}`;\n const response = await fetch(oembedUrl);\n if (!response.ok) {\n throw new Error(`oEmbed API returned ${response.status}`);\n }\n const data = await response.json();\n return {\n type: 'loom',\n videoId: id,\n embedUrl,\n thumbnailUrl: data.thumbnail_url,\n };\n } catch (e) {\n // Fallback if oEmbed fails\n console.warn('Loom oEmbed fetch failed:', e);\n return {\n type: 'loom',\n videoId: id,\n embedUrl,\n thumbnailUrl: null,\n };\n }\n }\n }\n\n // Fallback\n return { type: 'unknown', videoId: null, embedUrl: null, thumbnailUrl: null };\n } catch (e) {\n console.error('getVideoMetadata error:', e);\n return { type: 'unknown', videoId: null, embedUrl: null, thumbnailUrl: null };\n }\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport X from '../svgs/X';\n\nimport { getVideoMetadata, VideoMetadata } from '../../helpers/video.helpers';\n\nexport type LightboxItemType = 'photo' | 'video';\n\nexport type LightboxItem = {\n url: string;\n type: LightboxItemType;\n};\n\nexport type LightboxImage = LightboxItem & {\n type: 'photo';\n alt?: string;\n};\n\nexport type LightboxVideo = LightboxItem & {\n type: 'video';\n};\n\nexport type LightboxProps = {\n items: LightboxItem[];\n currentUrl: string | undefined;\n setCurrentUrl: (url: string | undefined) => void;\n showCloseButton?: boolean;\n enableImageClick?: boolean;\n};\n\nexport const Lightbox: React.FC<LightboxProps> = ({\n items,\n currentUrl,\n setCurrentUrl,\n showCloseButton = true,\n enableImageClick = false,\n}) => {\n const currentItem = items.find(item => item.url === currentUrl);\n const innerRef = useRef<HTMLImageElement>(null);\n const [videoMetadata, setVideoMetadata] = useState<VideoMetadata | null>(null);\n\n const goToNextItem = useCallback(() => {\n const currentIndex = items.findIndex(item => item.url === currentUrl);\n const nextItem = items.at((currentIndex + 1) % items.length);\n if (nextItem) setCurrentUrl(nextItem.url);\n }, [currentUrl, items, setCurrentUrl]);\n\n const goToPreviousItem = useCallback(() => {\n const currentIndex = items.findIndex(item => item.url === currentUrl);\n const previousItem = items.at((currentIndex - 1 + items.length) % items.length);\n if (previousItem) setCurrentUrl(previousItem.url);\n }, [currentUrl, items, setCurrentUrl]);\n\n useEffect(() => {\n const keydownListener = (e: KeyboardEvent) => {\n if (!currentUrl || !currentItem) return;\n\n if (e.key === 'Escape') {\n e.preventDefault();\n setCurrentUrl(undefined);\n }\n\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n goToNextItem();\n }\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n goToPreviousItem();\n }\n };\n\n window.addEventListener('keydown', keydownListener);\n return () => window.removeEventListener('keydown', keydownListener);\n }, [currentUrl, currentItem, goToNextItem, goToPreviousItem, setCurrentUrl]);\n\n useEffect(() => {\n const fetchMetadata = async () => {\n if (currentItem?.type === 'video') {\n const metadata = await getVideoMetadata(currentItem.url);\n setVideoMetadata(metadata);\n } else {\n setVideoMetadata(null);\n }\n };\n\n fetchMetadata();\n }, []);\n\n if (!currentUrl || !currentItem) return null;\n\n return createPortal(\n <div\n className=\"absolute top-0 left-0 w-screen h-screen bg-[rgba(0,0,0,0.9)] text-white flex justify-center items-center z-[999999]\"\n onClick={e => {\n if (e.target !== innerRef.current) {\n setCurrentUrl(undefined);\n }\n }}\n >\n {showCloseButton && (\n <button onClick={() => setCurrentUrl(undefined)}>\n <X className=\"absolute w-[30px] h-[30px] top-[20px] right-[20px] cursor-pointer text-white z-[999999]\" />\n </button>\n )}\n {currentItem.type === 'photo' && (\n <img\n className=\"cursor-pointer max-w-[90vw] max-h-[90vh]\"\n src={currentUrl}\n onClick={() => enableImageClick && window.open(currentUrl, '_blank')}\n ref={innerRef}\n alt=\"\"\n />\n )}\n\n {currentItem.type === 'video' && videoMetadata?.embedUrl && (\n <div className=\"relative w-[90vw] max-w-[800px] aspect-video\">\n <iframe\n src={videoMetadata.embedUrl}\n className=\"absolute top-0 left-0 w-full h-full rounded-md\"\n title=\"Video player\"\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </div>\n )}\n </div>,\n document.body\n );\n};\n"],"names":["__async"],"mappings":"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"}