@learncard/react 2.11.0 → 2.12.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.
Files changed (127) hide show
  1. package/dist/base.css +1 -1
  2. package/dist/base.js +1 -1
  3. package/dist/cjs/{BoostGenericCard-feaf99bd.js → BoostGenericCard-71899305.js} +22 -3
  4. package/dist/cjs/BoostGenericCard-71899305.js.map +1 -0
  5. package/dist/cjs/{CertificateDisplayCard-de7d7318.js → CertificateDisplayCard-f10b46b1.js} +5 -5
  6. package/dist/cjs/{CertificateDisplayCard-de7d7318.js.map → CertificateDisplayCard-f10b46b1.js.map} +1 -1
  7. package/dist/cjs/{Lightbox-d72e19ba.js → Lightbox-e2996736.js} +100 -2
  8. package/dist/cjs/Lightbox-e2996736.js.map +1 -0
  9. package/dist/cjs/{MeritBadgeDisplayCard-6edd0a69.js → MeritBadgeDisplayCard-d50cfb5e.js} +5 -5
  10. package/dist/cjs/{MeritBadgeDisplayCard-6edd0a69.js.map → MeritBadgeDisplayCard-d50cfb5e.js.map} +1 -1
  11. package/dist/cjs/{MeritBadgeSkillsCount-7ac48ce3.js → MeritBadgeSkillsCount-e46503f5.js} +2 -2
  12. package/dist/cjs/{MeritBadgeSkillsCount-7ac48ce3.js.map → MeritBadgeSkillsCount-e46503f5.js.map} +1 -1
  13. package/dist/cjs/{SchoolIDCard-10796199.js → SchoolIDCard-2d3cbb2c.js} +3 -1184
  14. package/dist/cjs/SchoolIDCard-2d3cbb2c.js.map +1 -0
  15. package/dist/cjs/{VCCard-0b85bc7d.js → VCCard-42479c97.js} +3 -3
  16. package/dist/cjs/{VCCard-0b85bc7d.js.map → VCCard-42479c97.js.map} +1 -1
  17. package/dist/cjs/{VCDisplayBackFace-45a8d94f.js → VCDisplayBackFace-d1cf9f73.js} +3 -3
  18. package/dist/cjs/{VCDisplayBackFace-45a8d94f.js.map → VCDisplayBackFace-d1cf9f73.js.map} +1 -1
  19. package/dist/cjs/{VCDisplayCard-9e43c7db.js → VCDisplayCard-cf46c224.js} +3 -3
  20. package/dist/cjs/{VCDisplayCard-9e43c7db.js.map → VCDisplayCard-cf46c224.js.map} +1 -1
  21. package/dist/cjs/{VCDisplayCard2-81d04ca4.js → VCDisplayCard2-4a201a8a.js} +93 -68
  22. package/dist/cjs/VCDisplayCard2-4a201a8a.js.map +1 -0
  23. package/dist/cjs/{VCVerificationPill-9416f420.js → VCVerificationPill-6c9dcf80.js} +2 -2
  24. package/dist/cjs/{VCVerificationPill-9416f420.js.map → VCVerificationPill-6c9dcf80.js.map} +1 -1
  25. package/dist/cjs/{VerifierStateBadgeAndText-54065ad8.js → VerifierStateBadgeAndText-934239ab.js} +13 -4
  26. package/dist/{esm/VerifierStateBadgeAndText-2859597e.js.map → cjs/VerifierStateBadgeAndText-934239ab.js.map} +1 -1
  27. package/dist/cjs/{credential.helpers-cf5b7e3c.js → credential.helpers-17a10601.js} +2 -2
  28. package/dist/cjs/{credential.helpers-cf5b7e3c.js.map → credential.helpers-17a10601.js.map} +1 -1
  29. package/dist/cjs/index-47efbf5b.js +1186 -0
  30. package/dist/cjs/index-47efbf5b.js.map +1 -0
  31. package/dist/cjs/index.js +24 -16
  32. package/dist/cjs/index.js.map +1 -1
  33. package/dist/cjs/index14.js +17 -14
  34. package/dist/cjs/index14.js.map +1 -1
  35. package/dist/cjs/index20.js +2 -1
  36. package/dist/cjs/index20.js.map +1 -1
  37. package/dist/cjs/index22.js +6 -6
  38. package/dist/cjs/index31.js +2 -1
  39. package/dist/cjs/index31.js.map +1 -1
  40. package/dist/cjs/index39.js +12 -11
  41. package/dist/cjs/index39.js.map +1 -1
  42. package/dist/cjs/index4.js +3 -3
  43. package/dist/cjs/index40.js +4 -4
  44. package/dist/cjs/index41.js +5 -5
  45. package/dist/cjs/index42.js +9 -7
  46. package/dist/cjs/index42.js.map +1 -1
  47. package/dist/cjs/index43.js +1 -1
  48. package/dist/cjs/index46.js +2 -2
  49. package/dist/cjs/index7.js +5 -5
  50. package/dist/cjs/{types.esm-e775534b.js → types.esm-73624b33.js} +12 -3
  51. package/dist/cjs/types.esm-73624b33.js.map +1 -0
  52. package/dist/esm/{BoostGenericCard-f0c9952c.js → BoostGenericCard-3b3ff784.js} +22 -3
  53. package/dist/esm/BoostGenericCard-3b3ff784.js.map +1 -0
  54. package/dist/esm/{CertificateDisplayCard-34e0b6a8.js → CertificateDisplayCard-f26ef278.js} +5 -5
  55. package/dist/esm/{CertificateDisplayCard-34e0b6a8.js.map → CertificateDisplayCard-f26ef278.js.map} +1 -1
  56. package/dist/esm/{Lightbox-f0338a0c.js → Lightbox-11f4888d.js} +95 -3
  57. package/dist/esm/Lightbox-11f4888d.js.map +1 -0
  58. package/dist/esm/{MeritBadgeDisplayCard-c6f65ac6.js → MeritBadgeDisplayCard-0d0b28c7.js} +5 -5
  59. package/dist/esm/{MeritBadgeDisplayCard-c6f65ac6.js.map → MeritBadgeDisplayCard-0d0b28c7.js.map} +1 -1
  60. package/dist/esm/{MeritBadgeSkillsCount-c51c5111.js → MeritBadgeSkillsCount-09e211fc.js} +2 -2
  61. package/dist/esm/{MeritBadgeSkillsCount-c51c5111.js.map → MeritBadgeSkillsCount-09e211fc.js.map} +1 -1
  62. package/dist/esm/{SchoolIDCard-f82e40bc.js → SchoolIDCard-fbd1cf6c.js} +2 -1183
  63. package/dist/esm/SchoolIDCard-fbd1cf6c.js.map +1 -0
  64. package/dist/esm/{VCCard-6c85ef2e.js → VCCard-7e5e00d7.js} +3 -3
  65. package/dist/esm/{VCCard-6c85ef2e.js.map → VCCard-7e5e00d7.js.map} +1 -1
  66. package/dist/esm/{VCDisplayBackFace-211f4bfb.js → VCDisplayBackFace-ae74476d.js} +3 -3
  67. package/dist/esm/{VCDisplayBackFace-211f4bfb.js.map → VCDisplayBackFace-ae74476d.js.map} +1 -1
  68. package/dist/esm/{VCDisplayCard-04660178.js → VCDisplayCard-ac1f367a.js} +3 -3
  69. package/dist/esm/{VCDisplayCard-04660178.js.map → VCDisplayCard-ac1f367a.js.map} +1 -1
  70. package/dist/esm/{VCDisplayCard2-d4594742.js → VCDisplayCard2-7011596e.js} +94 -70
  71. package/dist/esm/VCDisplayCard2-7011596e.js.map +1 -0
  72. package/dist/esm/{VCVerificationPill-eafbb82e.js → VCVerificationPill-04ffdf56.js} +2 -2
  73. package/dist/esm/{VCVerificationPill-eafbb82e.js.map → VCVerificationPill-04ffdf56.js.map} +1 -1
  74. package/dist/esm/{VerifierStateBadgeAndText-2859597e.js → VerifierStateBadgeAndText-750a6c24.js} +13 -4
  75. package/dist/{cjs/VerifierStateBadgeAndText-54065ad8.js.map → esm/VerifierStateBadgeAndText-750a6c24.js.map} +1 -1
  76. package/dist/esm/{credential.helpers-845e8c09.js → credential.helpers-4fbdd8e8.js} +2 -2
  77. package/dist/esm/{credential.helpers-845e8c09.js.map → credential.helpers-4fbdd8e8.js.map} +1 -1
  78. package/dist/esm/index-cbd2e9db.js +1184 -0
  79. package/dist/esm/index-cbd2e9db.js.map +1 -0
  80. package/dist/esm/index.js +16 -15
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/index14.js +15 -14
  83. package/dist/esm/index14.js.map +1 -1
  84. package/dist/esm/index20.js +1 -1
  85. package/dist/esm/index22.js +6 -6
  86. package/dist/esm/index31.js +2 -1
  87. package/dist/esm/index31.js.map +1 -1
  88. package/dist/esm/index39.js +12 -11
  89. package/dist/esm/index39.js.map +1 -1
  90. package/dist/esm/index4.js +3 -3
  91. package/dist/esm/index40.js +4 -4
  92. package/dist/esm/index41.js +5 -5
  93. package/dist/esm/index42.js +8 -7
  94. package/dist/esm/index42.js.map +1 -1
  95. package/dist/esm/index43.js +1 -1
  96. package/dist/esm/index46.js +2 -2
  97. package/dist/esm/index7.js +5 -5
  98. package/dist/esm/{types.esm-5b5092be.js → types.esm-5f75bd4a.js} +12 -3
  99. package/dist/esm/types.esm-5f75bd4a.js.map +1 -0
  100. package/dist/index.d.ts +81 -9
  101. package/dist/main.css +1 -1
  102. package/dist/main.js +1 -1
  103. package/package.json +3 -3
  104. package/src/assets/styles/main.css +10 -0
  105. package/src/components/BoostGenericCard/BoostGenericCard.tsx +9 -2
  106. package/src/components/BoostGenericCard/__tests__/BoostGenericCard.thumb.test.tsx +59 -0
  107. package/src/components/Lightbox/ExternalVideoFallback.tsx +53 -0
  108. package/src/components/Lightbox/Lightbox.tsx +23 -9
  109. package/src/components/Lightbox/__tests__/Lightbox.video.test.tsx +139 -0
  110. package/src/components/Lightbox/index.ts +1 -0
  111. package/src/components/VCDisplayCard2/FitText.tsx +75 -46
  112. package/src/components/VCDisplayCard2/VCDisplayCard2.tsx +59 -19
  113. package/src/components/VCDisplayCard2/__tests__/FitText.test.tsx +140 -0
  114. package/src/components/VCDisplayCard2/__tests__/VCDisplayCard2Variant.test.ts +31 -0
  115. package/src/helpers/externalUrl.helpers.ts +51 -0
  116. package/src/helpers/video.helpers.ts +41 -0
  117. package/src/index.ts +5 -0
  118. package/dist/cjs/BoostGenericCard-feaf99bd.js.map +0 -1
  119. package/dist/cjs/Lightbox-d72e19ba.js.map +0 -1
  120. package/dist/cjs/SchoolIDCard-10796199.js.map +0 -1
  121. package/dist/cjs/VCDisplayCard2-81d04ca4.js.map +0 -1
  122. package/dist/cjs/types.esm-e775534b.js.map +0 -1
  123. package/dist/esm/BoostGenericCard-f0c9952c.js.map +0 -1
  124. package/dist/esm/Lightbox-f0338a0c.js.map +0 -1
  125. package/dist/esm/SchoolIDCard-f82e40bc.js.map +0 -1
  126. package/dist/esm/VCDisplayCard2-d4594742.js.map +0 -1
  127. package/dist/esm/types.esm-5b5092be.js.map +0 -1
@@ -3,7 +3,7 @@ import { W as WalletCategoryTypes } from './index-28917993.js';
3
3
  import { T as TYPE_TO_IMG_SRC, a as TYPE_TO_WALLET_DARK_COLOR } from './index-7542e9ee.js';
4
4
  import { B as BadgeDisplayIcon, A as AwardDisplayIcon, a as CourseDisplayIcon, I as IDDisplayIcon, C as CertificateDisplayIcon } from './IDDisplayIcon-f6993140.js';
5
5
  import { P as PuzzlePiece } from './PuzzlePiece-a3d9cc62.js';
6
- import { c as categorizeSkills } from './credential.helpers-845e8c09.js';
6
+ import { c as categorizeSkills } from './credential.helpers-4fbdd8e8.js';
7
7
  import { T as ThreeDotVertical } from './ThreeDotVertical-ccbbc8ef.js';
8
8
  import { B as BadgeThumbnailImg } from './BadgeThumbnailImg-7d436367.js';
9
9
  import { u as useT } from './i18n-08b606cb.js';
@@ -72,6 +72,25 @@ const getLifecycleTreatment = (status = "active") => {
72
72
  };
73
73
  };
74
74
 
75
+ var __defProp = Object.defineProperty;
76
+ var __defProps = Object.defineProperties;
77
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
78
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
79
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
80
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
81
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
82
+ var __spreadValues = (a, b) => {
83
+ for (var prop in b || (b = {}))
84
+ if (__hasOwnProp.call(b, prop))
85
+ __defNormalProp(a, prop, b[prop]);
86
+ if (__getOwnPropSymbols)
87
+ for (var prop of __getOwnPropSymbols(b)) {
88
+ if (__propIsEnum.call(b, prop))
89
+ __defNormalProp(a, prop, b[prop]);
90
+ }
91
+ return a;
92
+ };
93
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
75
94
  const BoostGenericCard = ({
76
95
  title,
77
96
  customTitle,
@@ -152,7 +171,7 @@ const BoostGenericCard = ({
152
171
  className: "z-10 flex flex-col flex-grow",
153
172
  onClick: handleInnerClick
154
173
  },
155
- /* @__PURE__ */ React.createElement("div", { style: inactiveMediaStyle }, customThumbComponent || /* @__PURE__ */ React.createElement("section", { className: defaultThumbClass }, (thumbImgSrc == null ? void 0 : thumbImgSrc.trim()) ? /* @__PURE__ */ React.createElement(
174
+ /* @__PURE__ */ React.createElement("div", { style: __spreadProps(__spreadValues({}, inactiveMediaStyle), { width: "100%" }) }, customThumbComponent || /* @__PURE__ */ React.createElement("section", { className: defaultThumbClass }, (thumbImgSrc == null ? void 0 : thumbImgSrc.trim()) ? /* @__PURE__ */ React.createElement(
156
175
  BadgeThumbnailImg,
157
176
  {
158
177
  className: "w-full h-full rounded-full object-cover",
@@ -214,4 +233,4 @@ const BoostGenericCard = ({
214
233
  };
215
234
 
216
235
  export { BoostGenericCard as B, getLifecycleTreatment as g };
217
- //# sourceMappingURL=BoostGenericCard-f0c9952c.js.map
236
+ //# sourceMappingURL=BoostGenericCard-3b3ff784.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoostGenericCard-3b3ff784.js","sources":["../../src/components/BoostGenericCard/AlignmentSkillsCount.tsx","../../src/helpers/display.helpers.ts","../../src/helpers/lifecycle.helpers.ts","../../src/components/BoostGenericCard/BoostGenericCard.tsx"],"sourcesContent":["import React from 'react';\nimport PuzzlePiece from '../svgs/PuzzlePiece';\nimport { VC } from '@learncard/types';\nimport { categorizeSkills } from '../../helpers/credential.helpers';\n\ntype AlignmentSkillsCountProps = {\n credential?: VC;\n onClick?: () => void;\n className?: string;\n};\n\nconst AlignmentSkillsCount: React.FC<AlignmentSkillsCountProps> = ({\n credential,\n onClick,\n className = '',\n}) => {\n if (!credential) return <></>;\n\n const achievement = (credential?.credentialSubject as any)?.achievement;\n let alignmentCount = achievement?.alignment?.length || 0;\n\n if (alignmentCount === 0 && credential.skills?.length > 0) {\n // fallback to legacy skills field if present and no alignments\n const skillsMap = categorizeSkills(credential.skills ?? []);\n\n // Calculate total count of skills and subskills\n const totalSkills: any = Object.values(skillsMap).reduce(\n (total: any, category: any) => total + category?.length,\n 0\n );\n const totalSubskills: any = Object.values(skillsMap).reduce(\n (total: any, category: any) => total + (category?.totalSubskillsCount || 0),\n 0\n );\n\n const total: any = totalSkills + totalSubskills;\n alignmentCount = total;\n }\n\n return (\n <div\n role={onClick ? ('button' as const) : undefined}\n onClick={onClick}\n className={`px-[10px] py-[2px] flex gap-[3px] items-center rounded-[5px] overflow-hidden bg-violet-100 ${className}`}\n >\n <PuzzlePiece className=\"w-[20px] h-[20px] text-grayscale-800\" version=\"filled\" />\n <p className=\"text-[12px] text-grayscale-800 font-poppins font-[600]\">\n {`${alignmentCount} Skill${alignmentCount !== 1 ? 's' : ''}`}\n </p>\n </div>\n );\n};\n\nexport default AlignmentSkillsCount;\n","import { LCCategoryEnum } from '../types';\n\nimport { BadgeDisplayIcon } from '../components/svgs/BadgeDisplayIcon';\nimport { CertificateDisplayIcon } from '../components/svgs/CertificateDisplayIcon';\nimport { IDDisplayIcon } from '../components/svgs/IDDisplayIcon';\nimport { CourseDisplayIcon } from '../components/svgs/CourseDisplayIcon';\nimport { AwardDisplayIcon } from '../components/svgs/AwardDisplayIcon';\n\nexport enum DisplayTypeEnum {\n Badge = 'badge',\n Certificate = 'certificate',\n ID = 'id',\n Course = 'course',\n Award = 'award',\n}\n\nexport const getDefaultDisplayType = (category: string): DisplayTypeEnum => {\n if (category === LCCategoryEnum.socialBadge || category === LCCategoryEnum.workHistory) {\n return DisplayTypeEnum.Badge;\n }\n\n if (category === LCCategoryEnum.id || category === LCCategoryEnum.membership) {\n return DisplayTypeEnum.ID;\n }\n\n if (\n category === LCCategoryEnum.achievement ||\n category === LCCategoryEnum.accommodations ||\n category === LCCategoryEnum.accomplishments ||\n category === LCCategoryEnum.learningHistory\n ) {\n return DisplayTypeEnum.Certificate;\n }\n\n return DisplayTypeEnum.Badge;\n};\n\nexport const getDisplayIcon = (displayType: DisplayTypeEnum): React.FC<{ className?: string }> => {\n switch (displayType) {\n case DisplayTypeEnum.Badge:\n return BadgeDisplayIcon;\n case DisplayTypeEnum.Certificate:\n return CertificateDisplayIcon;\n case DisplayTypeEnum.ID:\n return IDDisplayIcon;\n case DisplayTypeEnum.Course:\n return CourseDisplayIcon;\n case DisplayTypeEnum.Award:\n return AwardDisplayIcon;\n default:\n return BadgeDisplayIcon;\n }\n};\n","import type { CSSProperties } from 'react';\n\nexport type CredentialLifecycleStatus = 'active' | 'revoked' | 'suspended';\n\nexport type LifecycleTreatment = {\n /** True when the credential is revoked or suspended. */\n isInactive: boolean;\n /** Inline filter for media (images / thumbnails); `undefined` when active.\n * Inline style (not a Tailwind class) so it applies regardless of whether the\n * consumer app's Tailwind scans this package or generates the utility. */\n mediaStyle: CSSProperties | undefined;\n /** Inline style for de-emphasizing text; `undefined` when active. */\n textStyle: CSSProperties | undefined;\n /** Pill background color for the status chip (only meaningful when `isInactive`). */\n pillBg: string;\n};\n\nconst REVOKED_COLOR = '#DC2626'; // red-600\nconst SUSPENDED_COLOR = '#D97706'; // amber-600\n\n/**\n * Shared visual treatment for a revoked/suspended credential, used by both the\n * grid card (`BoostGenericCard`) and the list row (`BoostListItem`) so the two\n * views stay in sync. Values are inert (`isInactive: false`, `undefined` styles)\n * for active credentials.\n */\nexport const getLifecycleTreatment = (\n status: CredentialLifecycleStatus = 'active'\n): LifecycleTreatment => {\n const isInactive = status === 'revoked' || status === 'suspended';\n\n return {\n isInactive,\n mediaStyle: isInactive ? { filter: 'grayscale(1) brightness(0.9)' } : undefined,\n textStyle: isInactive ? { filter: 'grayscale(1)', opacity: 0.6 } : undefined,\n pillBg: status === 'suspended' ? SUSPENDED_COLOR : REVOKED_COLOR,\n };\n};\n","import React from 'react';\nimport { BoostGenericCardProps, WalletCategoryTypes } from '../../types';\nimport { TYPE_TO_IMG_SRC, TYPE_TO_WALLET_DARK_COLOR } from '../../constants';\nimport { DisplayTypeEnum, getDisplayIcon } from '../../helpers/display.helpers';\nimport AlignmentSkillsCount from './AlignmentSkillsCount';\nimport ThreeDotVertical from '../svgs/ThreeDotVertical';\nimport { CircleCheckButton } from '../CircleCheckButton';\nimport BadgeThumbnailImg from '../BadgeThumbnailImg/BadgeThumbnailImg';\nimport { getLifecycleTreatment } from '../../helpers/lifecycle.helpers';\nimport { useT } from '../../i18n';\n\nexport const BoostGenericCard: React.FC<BoostGenericCardProps> = ({\n title,\n customTitle,\n thumbImgSrc,\n customThumbClass = '',\n customHeaderClass = '',\n type = WalletCategoryTypes.achievements,\n className,\n onCheckClick,\n showChecked,\n checkStatus,\n customThumbComponent,\n innerOnClick,\n bgImgSrc,\n issuerName,\n customIssuerName,\n dateDisplay,\n customDateDisplay,\n optionsTriggerOnClick,\n verifierBadge,\n credential,\n isInSkillsModal,\n displayType,\n linkedCredentialsCount = 0,\n linkedCredentialsClassName = '',\n checkBtnClass = '',\n lifecycleStatus = 'active',\n}) => {\n const t = useT();\n const thumbClass = TYPE_TO_WALLET_DARK_COLOR[type]\n ? `bg-${TYPE_TO_WALLET_DARK_COLOR[type]}`\n : 'bg-grayscale-50';\n const defaultThumbClass = `small-boost-card-thumb flex h-[110px] w-[110px] my-[10px] mx-auto ${thumbClass} overflow-hidden flex-col justify-center items-center rounded-full ${customThumbClass}`;\n const imgSrc = thumbImgSrc?.trim() !== '' ? thumbImgSrc : TYPE_TO_IMG_SRC[type];\n\n const handleInnerClick = () => innerOnClick?.();\n const handleOptionsClick = () => optionsTriggerOnClick?.();\n\n const DisplayIcon = getDisplayIcon(displayType as DisplayTypeEnum);\n\n // Shared revoked/suspended treatment (see getLifecycleTreatment). Inline styles are\n // used (not Tailwind classes) because the consumer app's Tailwind doesn't scan this\n // package and it ships no utility CSS, so utility classes here have no backing rule.\n const {\n isInactive,\n mediaStyle: inactiveMediaStyle,\n textStyle: inactiveTextStyle,\n pillBg,\n } = getLifecycleTreatment(lifecycleStatus);\n const pillLabel = t(`credential.lifecycle.${lifecycleStatus}`);\n const pillLeft = showChecked ? 'left-[44px]' : 'left-[8px]';\n\n return (\n <div\n className={`flex bg-white flex-col shadow-bottom relative p-0 w-[160px] h-[285px] rounded-[20px] overflow-hidden ${className}`}\n >\n {isInactive && (\n <span\n className={`absolute top-[8px] ${pillLeft} z-20 rounded-full px-[9px] py-[3px] text-[10px] font-extrabold uppercase tracking-wide text-white`}\n style={{ backgroundColor: pillBg }}\n >\n {pillLabel}\n </span>\n )}\n\n {optionsTriggerOnClick && (\n <section\n className=\"absolute cursor-pointer h-[30px] w-[30px] top-[5px] right-[5px] rounded-full bg-white/70 flex items-center justify-center z-20\"\n onClick={handleOptionsClick}\n >\n <ThreeDotVertical className=\"h-[20px] w-[20px] text-grayscale-900\" />\n </section>\n )}\n\n {bgImgSrc && (\n <section\n className=\"absolute top-[-50px] left-0 rounded-b-full overflow-hidden z-0\"\n style={inactiveMediaStyle}\n >\n <img className=\"h-full w-full object-cover\" src={bgImgSrc} />\n </section>\n )}\n\n <button\n type=\"button\"\n className=\"z-10 flex flex-col flex-grow\"\n onClick={handleInnerClick}\n >\n {/* Thumbnail — filter on the wrapper so it desaturates a\n customThumbComponent too, not just the default thumb section.\n The explicit width is load-bearing on iOS 18 WebKit: a bare block\n child of a <button> flex container is laid out shrink-to-fit there\n (UA align-items: flex-start per the HTML spec), so without it the\n badge collapses to its 116px circle and the header artwork stops\n running under the options button. iOS 26+/desktop engines compute\n align-items: normal and stretch, which masks the bug (LC-2066).\n width is spread last so nothing can ever override it. */}\n <div style={{ ...inactiveMediaStyle, width: '100%' }}>\n {customThumbComponent || (\n <section className={defaultThumbClass}>\n {thumbImgSrc?.trim() ? (\n <BadgeThumbnailImg\n className=\"w-full h-full rounded-full object-cover\"\n src={thumbImgSrc}\n alt=\"Credential Achievement\"\n />\n ) : (\n <img\n className=\"max-w-full p-0 object-cover rounded-full\"\n src={imgSrc}\n />\n )}\n </section>\n )}\n </div>\n\n {/* Details Section: grows to fill available space */}\n <section\n className={`flex flex-col flex-grow items-center justify-end pt-1 w-full ${\n linkedCredentialsCount === 0 ? 'pb-[20px]' : ''\n }`}\n >\n <div className=\"px-1 flex flex-col items-center justify-center w-full\">\n {/* Title - dynamically size based on length */}\n {!customTitle ? (\n <p\n className={`\n ${customHeaderClass}\n font-medium text-center text-grayscale-900 line-clamp-2\n h-[50px] flex items-center justify-center\n ${\n (title?.length ?? 0) > 35\n ? 'text-[13px] leading-tight'\n : 'text-[16px]'\n }\n `}\n style={inactiveTextStyle}\n title={title}\n >\n {title}\n </p>\n ) : (\n customTitle\n )}\n\n {/* Verifier & Issuer */}\n <div className=\"mt-1 w-full px-4 text-center\">\n <span className=\"line-clamp-2 break-words text-[12px] leading-snug text-grayscale-700\">\n {verifierBadge && (\n <span className=\"mr-1 inline-block align-middle\">\n {verifierBadge}\n </span>\n )}\n {customIssuerName || (\n <span className=\"font-bold\" style={inactiveTextStyle}>\n {issuerName}\n </span>\n )}\n </span>\n </div>\n\n {/* Date */}\n {customDateDisplay || (\n <span className=\"text-[11px] text-grayscale-700 mt-1\">\n {dateDisplay}\n </span>\n )}\n\n {/* Skills count if in modal */}\n {isInSkillsModal && credential && (\n <AlignmentSkillsCount\n credential={credential}\n onClick={handleInnerClick}\n className=\"mt-[16px]\"\n />\n )}\n </div>\n\n {/* Linked Credentials moved inside details */}\n {linkedCredentialsCount > 0 && (\n <div\n className={`mt-auto flex items-center justify-center py-1 w-full ${linkedCredentialsClassName}`}\n >\n <DisplayIcon className=\"h-[20px] w-[20px] text-grayscale-900\" />\n <span className=\"ml-1 text-sm font-semibold text-grayscale-900\">\n +{linkedCredentialsCount} Linked\n </span>\n </div>\n )}\n </section>\n </button>\n\n {/* Optional Check Button overlay */}\n {showChecked && (\n <div className=\"absolute top-[5px] left-[5px] z-20\">\n <CircleCheckButton\n checked={checkStatus}\n onClick={onCheckClick}\n className={checkBtnClass}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default BoostGenericCard;\n"],"names":["total"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { I as InfoIcon, c as capitalize, E as ExclamationPoint, A as AcuteCheckmark, d as getBaseUrl, e as VideoIcon, C as Camera, G as GenericDocumentIcon, L as LinkIcon, p as prettyBytes, h as LeftArrow, j as SkillsBox, R as RoundedCorner, k as IssuerSeal, r as resolveProfileDisplay, l as isAppDidWeb, V as VERIFIER_STATES, m as VerifierStateBadgeAndText, F as FatArrow } from './VerifierStateBadgeAndText-2859597e.js';
3
- import { g as getTotalCountOfSkills, c as categorizeSkills, a as getColorForVerificationStatus, b as getInfoFromCredential, d as getCategoryDarkColor, e as getCategoryLightColor, f as getCategoryIcon, h as getImageFromProfile } from './credential.helpers-845e8c09.js';
2
+ import { I as InfoIcon, c as capitalize, E as ExclamationPoint, A as AcuteCheckmark, d as getBaseUrl, e as VideoIcon, C as Camera, G as GenericDocumentIcon, L as LinkIcon, p as prettyBytes, h as LeftArrow, j as SkillsBox, R as RoundedCorner, k as IssuerSeal, r as resolveProfileDisplay, l as isAppDidWeb, V as VERIFIER_STATES, m as VerifierStateBadgeAndText, F as FatArrow } from './VerifierStateBadgeAndText-750a6c24.js';
3
+ import { g as getTotalCountOfSkills, c as categorizeSkills, a as getColorForVerificationStatus, b as getInfoFromCredential, d as getCategoryDarkColor, e as getCategoryLightColor, f as getCategoryIcon, h as getImageFromProfile } from './credential.helpers-4fbdd8e8.js';
4
4
  import { P as PuzzlePiece } from './PuzzlePiece-a3d9cc62.js';
5
5
  import { U as UserProfilePicture } from './UserProfilePicture-50c34186.js';
6
6
  import { a as LCCategoryEnum } from './index-28917993.js';
7
- import { V as VerificationStatusEnum } from './types.esm-5b5092be.js';
8
- import { X, L as Lightbox } from './Lightbox-f0338a0c.js';
7
+ import { V as VerificationStatusEnum } from './types.esm-5f75bd4a.js';
8
+ import { X, L as Lightbox } from './Lightbox-11f4888d.js';
9
9
  import ThreeDots from './DotsThreeOutline.svg';
10
10
 
11
11
  const ExternalLinkIcon = () => /* @__PURE__ */ React.createElement(
@@ -1018,4 +1018,4 @@ const CertificateDisplayCard = ({
1018
1018
  };
1019
1019
 
1020
1020
  export { AlignmentsBox as A, CertDisplayCardSkillsCount as C, CertificateBackFace as a, CertificateDisplayCard as b, CertificateFrontFace as c };
1021
- //# sourceMappingURL=CertificateDisplayCard-34e0b6a8.js.map
1021
+ //# sourceMappingURL=CertificateDisplayCard-f26ef278.js.map