kyd-shared-badge 0.3.60 → 0.3.62

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kyd-shared-badge",
3
- "version": "0.3.60",
3
+ "version": "0.3.62",
4
4
  "private": false,
5
5
  "main": "./src/index.ts",
6
6
  "module": "./src/index.ts",
@@ -10,15 +10,11 @@ import BusinessRuleLink from './components/BusinessRuleLink';
10
10
  import IpRiskAnalysisDisplay from './components/IpRiskAnalysisDisplay';
11
11
  import GraphInsights from './components/GraphInsights';
12
12
  import ConnectedPlatforms from './components/ConnectedPlatforms';
13
- import { FaGithub, FaGitlab, FaStackOverflow, FaLinkedin, FaGoogle, FaKaggle } from 'react-icons/fa';
14
- import { SiCredly, SiFiverr } from 'react-icons/si';
15
- import GaugeCard from './components/GaugeCard';
16
- import RiskCard from './components/RiskCard';
17
13
  import AiIcon from './components/icons/ai';
18
14
  import CodeIcon from './components/icons/code';
19
15
  import RiskIcon from './components/icons/risk';
20
16
 
21
- import { yellow, green } from './colors';
17
+ import { yellow } from './colors';
22
18
  import Skills from './components/Skills';
23
19
  import CategoryBars from './components/CategoryBars';
24
20
  import SkillsAppendixTable from './components/SkillsAppendixTable';
@@ -31,8 +27,7 @@ import SummaryCards from './components/SummaryCards';
31
27
  import TopContributingFactors from './components/TopContributingFactors';
32
28
  import AiUsageBody from './components/AiUsageBody';
33
29
  import SanctionsMatches from './components/SanctionsMatches';
34
- import AppendixContent from './components/AppendixContent';
35
- import { ProviderIcon, getProviderDisplayName, getProviderTooltipCopy, getCategoryTooltipCopy, barColor } from './utils/provider';
30
+ import { getCategoryTooltipCopy, barColor } from './utils/provider';
36
31
  import { matchLabelToColor } from './colors';
37
32
  import { useEffect, useMemo, useState } from 'react';
38
33
  type ChatWidgetProps = Partial<{
@@ -2,8 +2,7 @@
2
2
 
3
3
  import React, { useEffect } from 'react';
4
4
  import { formatLocalDate } from '../utils/date';
5
- import { FaGithub, FaGitlab, FaStackOverflow, FaLinkedin, FaGoogle, FaKaggle } from 'react-icons/fa';
6
- import { SiCredly, SiFiverr } from 'react-icons/si';
5
+ import { ProviderIcon } from '../utils/provider';
7
6
 
8
7
  type ConnectedAccount = {
9
8
  name?: string;
@@ -12,19 +11,6 @@ type ConnectedAccount = {
12
11
  observedAt?: string | null;
13
12
  };
14
13
 
15
- const ProviderIcon = ({ name }: { name?: string }) => {
16
- const n = (name || '').toLowerCase();
17
- if (n.includes('github')) return <FaGithub />;
18
- if (n.includes('gitlab')) return <FaGitlab />;
19
- if (n.includes('stack')) return <FaStackOverflow />;
20
- if (n.includes('credly')) return <SiCredly />;
21
- if (n.includes('fiverr')) return <SiFiverr />;
22
- if (n.includes('kaggle')) return <FaKaggle />;
23
- if (n.includes('google')) return <FaGoogle />;
24
- if (n.includes('linkedin')) return <FaLinkedin />;
25
- return <span className="inline-block w-4 h-4 rounded-full" style={{ backgroundColor: 'var(--icon-button-secondary)' }} />;
26
- };
27
-
28
14
  const formatProviderName = (name?: string) => {
29
15
  const n = (name || '').trim();
30
16
  if (!n) return '';
@@ -1,20 +1,22 @@
1
1
  'use client';
2
2
 
3
- import React from 'react';
4
3
  import { FaGithub, FaGitlab, FaStackOverflow, FaLinkedin, FaGoogle, FaKaggle } from 'react-icons/fa';
5
- import { SiCredly, SiFiverr } from 'react-icons/si';
4
+ import { SiCoursera, SiCredly, SiFiverr, SiToptal, SiUdemy } from 'react-icons/si';
6
5
 
7
- export const ProviderIcon = ({ name }: { name?: string }) => {
6
+ export const ProviderIcon = ({ name, className }: { name?: string; className?: string }) => {
8
7
  const n = (name || '').toLowerCase();
9
- if (n.includes('github')) return <FaGithub />;
10
- if (n.includes('gitlab')) return <FaGitlab />;
11
- if (n.includes('stack')) return <FaStackOverflow />;
12
- if (n.includes('credly')) return <SiCredly />;
13
- if (n.includes('fiverr')) return <SiFiverr />;
14
- if (n.includes('kaggle')) return <FaKaggle />;
15
- if (n.includes('google')) return <FaGoogle />;
16
- if (n.includes('linkedin')) return <FaLinkedin />;
17
- return <span className="inline-block w-3 h-3 rounded-full" style={{ backgroundColor: 'var(--icon-button-secondary)' }} />;
8
+ if (n.includes('github')) return <FaGithub className={className} />;
9
+ if (n.includes('gitlab')) return <FaGitlab className={className} />;
10
+ if (n.includes('stack')) return <FaStackOverflow className={className} />;
11
+ if (n.includes('credly')) return <SiCredly className={className} />;
12
+ if (n.includes('fiverr')) return <SiFiverr className={className} />;
13
+ if (n.includes('kaggle')) return <FaKaggle className={className} />;
14
+ if (n.includes('google')) return <FaGoogle className={className} />;
15
+ if (n.includes('linkedin')) return <FaLinkedin className={className} />;
16
+ if (n.includes('toptal')) return <SiToptal className={className} />;
17
+ if (n.includes('coursera')) return <SiCoursera className={className} />;
18
+ if (n.includes('udemy')) return <SiUdemy className={className} />;
19
+ return <span className={className || 'inline-block w-3 h-3 rounded-full'} style={{ backgroundColor: 'var(--icon-button-secondary)' }} />;
18
20
  };
19
21
 
20
22
  export const getProviderDisplayName = (name?: string): string => {
@@ -27,6 +29,9 @@ export const getProviderDisplayName = (name?: string): string => {
27
29
  if (n.includes('kaggle')) return 'Kaggle';
28
30
  if (n.includes('google')) return 'Google Scholar';
29
31
  if (n.includes('linkedin')) return 'LinkedIn';
32
+ if (n.includes('toptal')) return 'TopTal';
33
+ if (n.includes('coursera')) return 'Coursera';
34
+ if (n.includes('udemy')) return 'Udemy';
30
35
  return name || 'Provider';
31
36
  };
32
37
 
@@ -40,23 +45,26 @@ export const getProviderTooltipCopy = (provider?: string): string => {
40
45
  if (n.includes('kaggle')) return 'Competition results, notebooks, and dataset contributions that reflect analytical skill.';
41
46
  if (n.includes('google')) return 'Publications, citations, and scholarly presence indicating research impact.';
42
47
  if (n.includes('linkedin')) return 'Professional history, endorsements, and network signals indicating credibility.';
48
+ if (n.includes('toptal')) return 'Professional history, endorsements, and network signals indicating credibility.';
49
+ if (n.includes('coursera')) return 'Professional history, training, and course completion signals indicating credibility.';
50
+ if (n.includes('udemy')) return 'Professional history, training, and course completion signals indicating credibility.';
43
51
  return 'Signals contributed from this provider relevant to capability and trust.';
44
52
  };
45
53
 
46
54
  export const getCategoryTooltipCopy = (category: string): string => {
47
55
  const name = (category || '').toLowerCase();
48
- if (/network|connection|collab|peer/.test(name)) return 'Signals from the developers professional connections, collaborations, and peer recognition.';
49
- if (/project|repo|portfolio|work/.test(name)) return 'Signals from a developers visible projects, repositories, or published work that indicate breadth and quality of output.';
56
+ if (/network|connection|collab|peer/.test(name)) return 'Signals from the developer\'s professional connections, collaborations, and peer recognition.';
57
+ if (/project|repo|portfolio|work/.test(name)) return 'Signals from a developer\'s visible projects, repositories, or published work that indicate breadth and quality of output.';
50
58
  if (/skill|cert|assessment|endorse/.test(name)) return 'Signals tied to specific technical abilities, such as verified certifications, assessments, or endorsements.';
51
59
  if (/experience|tenure|history/.test(name)) return 'Signals of tenure and diversity of professional or project involvement over time.';
52
60
  if (/activity|recency|frequency|engage/.test(name)) return 'Signals of recency and frequency of developer engagement in professional or technical platforms.';
53
61
  if (/sanction|legal|criminal|regulatory|ofac|fbi|watchlist/.test(name)) return 'Signals of legal, criminal, or regulatory red flags linked to an identity.';
54
- if (/identity|authentic|consisten/.test(name)) return 'Signals that indicate whether a developers identity is genuine and consistent across platforms.';
62
+ if (/identity|authentic|consisten/.test(name)) return 'Signals that indicate whether a developer\'s identity is genuine and consistent across platforms.';
55
63
  if (/reputation|review|rating|feedback|perceive|peer/.test(name)) return 'Signals of how peers, clients, and communities perceive the developer.';
56
- if (/geo|jurisdiction|country|region|ip|location/.test(name)) return 'Signals tied to a developers geographic or jurisdictional context.';
64
+ if (/geo|jurisdiction|country|region|ip|location/.test(name)) return 'Signals tied to a developer\'s geographic or jurisdictional context.';
57
65
  if (/security|cyber/.test(name)) return 'Signals of security posture and potential cyber-risk exposure.';
58
66
  if (/risk/.test(name)) return 'KYD Risk surfaces signals of authenticity, reputation, and environmental telemetry that indicate potential risks in engaging with a developer.';
59
- if (/tech|technical/.test(name)) return 'KYD Technical surfaces signals from a developers portfolio, skills, experience, activity, and network to indicate the likelihood of technical capability.';
67
+ if (/tech|technical/.test(name)) return "KYD Technical surfaces signals from a developer's portfolio, skills, experience, activity, and network to indicate the likelihood of technical capability.";
60
68
  return 'Share of overall contribution by category based on applied weights.';
61
69
  };
62
70