@brightlocal/icons 2.1.0 → 2.2.0

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 (97) hide show
  1. package/dist/custom/index.cjs +1 -0
  2. package/dist/custom/index.d.ts +8 -0
  3. package/dist/custom/index.d.ts.map +1 -1
  4. package/dist/custom/index.js +12 -0
  5. package/dist/custom/motif-circle.cjs +1 -0
  6. package/dist/custom/motif-circle.d.ts +18 -0
  7. package/dist/custom/motif-circle.d.ts.map +1 -0
  8. package/dist/custom/motif-circle.js +17 -0
  9. package/dist/custom/motif-sparkle.cjs +1 -0
  10. package/dist/custom/motif-sparkle.d.ts +21 -0
  11. package/dist/custom/motif-sparkle.d.ts.map +1 -0
  12. package/dist/custom/motif-sparkle.js +17 -0
  13. package/dist/custom/motif-starburst.cjs +1 -0
  14. package/dist/custom/motif-starburst.d.ts +20 -0
  15. package/dist/custom/motif-starburst.d.ts.map +1 -0
  16. package/dist/custom/motif-starburst.js +20 -0
  17. package/dist/custom/motif-sunrise.cjs +1 -0
  18. package/dist/custom/motif-sunrise.d.ts +20 -0
  19. package/dist/custom/motif-sunrise.d.ts.map +1 -0
  20. package/dist/custom/motif-sunrise.js +17 -0
  21. package/dist/dynamic.cjs +1 -1
  22. package/dist/dynamic.d.ts +2 -0
  23. package/dist/dynamic.d.ts.map +1 -1
  24. package/dist/dynamic.js +8 -6
  25. package/dist/flag/flag-icon.cjs +1 -0
  26. package/dist/flag/flag-icon.d.ts +13 -0
  27. package/dist/flag/flag-icon.d.ts.map +1 -0
  28. package/dist/flag/flag-icon.js +56 -0
  29. package/dist/flag/index.cjs +1 -0
  30. package/dist/flag/index.d.ts +1 -1
  31. package/dist/flag/index.js +526 -0
  32. package/dist/icons/dynamic-icon.cjs +1 -1
  33. package/dist/icons/dynamic-icon.d.ts +5 -1
  34. package/dist/icons/dynamic-icon.d.ts.map +1 -1
  35. package/dist/icons/dynamic-icon.js +32 -21
  36. package/dist/index.cjs +1 -1
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1109 -1087
  40. package/dist/social-media/capterra-neutral.cjs +1 -0
  41. package/dist/social-media/capterra-neutral.d.ts +17 -0
  42. package/dist/social-media/capterra-neutral.d.ts.map +1 -0
  43. package/dist/social-media/capterra-neutral.js +24 -0
  44. package/dist/social-media/capterra-original.cjs +1 -0
  45. package/dist/social-media/capterra-original.d.ts +17 -0
  46. package/dist/social-media/capterra-original.d.ts.map +1 -0
  47. package/dist/social-media/capterra-original.js +24 -0
  48. package/dist/social-media/dynamic-imports.cjs +1 -1
  49. package/dist/social-media/dynamic-imports.d.ts +18 -0
  50. package/dist/social-media/dynamic-imports.d.ts.map +1 -1
  51. package/dist/social-media/dynamic-imports.js +6 -0
  52. package/dist/social-media/g2-neutral.cjs +1 -0
  53. package/dist/social-media/g2-neutral.d.ts +17 -0
  54. package/dist/social-media/g2-neutral.d.ts.map +1 -0
  55. package/dist/social-media/g2-neutral.js +20 -0
  56. package/dist/social-media/g2-original.cjs +1 -0
  57. package/dist/social-media/g2-original.d.ts +17 -0
  58. package/dist/social-media/g2-original.d.ts.map +1 -0
  59. package/dist/social-media/g2-original.js +20 -0
  60. package/dist/social-media/index.cjs +1 -0
  61. package/dist/social-media/index.d.ts +13 -1
  62. package/dist/social-media/index.d.ts.map +1 -1
  63. package/dist/social-media/index.js +256 -0
  64. package/dist/social-media/trustpilot-neutral.cjs +1 -0
  65. package/dist/social-media/trustpilot-neutral.d.ts +17 -0
  66. package/dist/social-media/trustpilot-neutral.d.ts.map +1 -0
  67. package/dist/social-media/trustpilot-neutral.js +19 -0
  68. package/dist/social-media/trustpilot-original.cjs +1 -0
  69. package/dist/social-media/trustpilot-original.d.ts +17 -0
  70. package/dist/social-media/trustpilot-original.d.ts.map +1 -0
  71. package/dist/social-media/trustpilot-original.js +19 -0
  72. package/package.json +1 -1
  73. package/src/assets/social-media/capterra-neutral.svg +15 -0
  74. package/src/assets/social-media/capterra-original.svg +15 -0
  75. package/src/assets/social-media/g2-neutral.svg +7 -0
  76. package/src/assets/social-media/g2-original.svg +7 -0
  77. package/src/assets/social-media/trustpilot-neutral.svg +6 -0
  78. package/src/assets/social-media/trustpilot-original.svg +6 -0
  79. package/src/custom/index.ts +8 -0
  80. package/src/custom/motif-circle.tsx +31 -0
  81. package/src/custom/motif-sparkle.tsx +34 -0
  82. package/src/custom/motif-starburst.tsx +36 -0
  83. package/src/custom/motif-sunrise.tsx +33 -0
  84. package/src/dynamic.ts +4 -0
  85. package/src/flag/flag-icon.tsx +70 -0
  86. package/src/flag/index.ts +1 -1
  87. package/src/flag/kna.tsx +1 -1
  88. package/src/icons/dynamic-icon.tsx +22 -3
  89. package/src/index.ts +6 -2
  90. package/src/social-media/capterra-neutral.tsx +41 -0
  91. package/src/social-media/capterra-original.tsx +41 -0
  92. package/src/social-media/dynamic-imports.ts +10 -0
  93. package/src/social-media/g2-neutral.tsx +33 -0
  94. package/src/social-media/g2-original.tsx +33 -0
  95. package/src/social-media/index.ts +13 -1
  96. package/src/social-media/trustpilot-neutral.tsx +32 -0
  97. package/src/social-media/trustpilot-original.tsx +32 -0
@@ -0,0 +1,70 @@
1
+ import * as React from "react";
2
+
3
+ import { DynamicIcon } from "../icons/dynamic-icon.js";
4
+ import { flagIconNames, type FlagIconName } from "./dynamic-imports.js";
5
+ import { Globe } from "../icons/lucide-exports.js";
6
+
7
+ export interface DynamicFlagIconProps
8
+ extends React.ComponentProps<"span"> {
9
+ /** ISO 3166-1 alpha-3 country code (e.g. "USA", "GBR") */
10
+ country: string;
11
+ /**
12
+ * Icon size in pixels (width and height)
13
+ * @default 20
14
+ */
15
+ size?: number;
16
+ }
17
+
18
+ const flagIconNameSet = new Set<string>(flagIconNames);
19
+
20
+ const DynamicFlagIcon = React.forwardRef<HTMLSpanElement, DynamicFlagIconProps>(
21
+ ({ country, size = 20, className, style, ...props }, ref) => {
22
+ const isKnown = flagIconNameSet.has(country);
23
+
24
+ return (
25
+ <span
26
+ ref={ref}
27
+ aria-hidden="true"
28
+ className={className}
29
+ data-slot="flag-icon"
30
+ style={{
31
+ display: "inline-flex",
32
+ alignItems: "center",
33
+ justifyContent: "center",
34
+ flexShrink: 0,
35
+ width: size,
36
+ height: size,
37
+ ...style,
38
+ }}
39
+ {...props}
40
+ >
41
+ {isKnown ? (
42
+ <DynamicIcon
43
+ name={country as FlagIconName}
44
+ size={size}
45
+ />
46
+ ) : (
47
+ <span
48
+ data-slot="flag-icon-fallback"
49
+ style={{
50
+ display: "inline-flex",
51
+ alignItems: "center",
52
+ justifyContent: "center",
53
+ width: size,
54
+ height: size,
55
+ borderRadius: "9999px",
56
+ backgroundColor: "var(--color-muted, #f3f4f6)",
57
+ color: "var(--color-muted-foreground, #6b7280)",
58
+ }}
59
+ >
60
+ <Globe size={Math.round(size * 0.65)} />
61
+ </span>
62
+ )}
63
+ </span>
64
+ );
65
+ }
66
+ );
67
+
68
+ DynamicFlagIcon.displayName = "DynamicFlagIcon";
69
+
70
+ export { DynamicFlagIcon };
package/src/flag/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Flag icons
3
- * Auto-generated on 2026-03-31T08:26:35.092Z
3
+ * Auto-generated on 2026-04-16T08:30:32.846Z
4
4
  * Do not edit manually
5
5
  *
6
6
  * All icons are React SVG components with TypeScript support
package/src/flag/kna.tsx CHANGED
@@ -27,7 +27,7 @@ export const KNA = ({ size = 16, ...props }: KNAProps) => (
27
27
  <g clipPath="url(#clip0_26781_1047)">
28
28
  <circle cx="12" cy="12" fill="#3A7DCE" r="12"/>
29
29
  <g clipPath="url(#clip1_26781_1047)">
30
- <mask height="24" id="mask0_26781_1047" maskUnits="userSpaceOnUse" style={{maskType: "luminance"}} width="33" x="-4" y="0">
30
+ <mask height="24" id="mask0_26781_1047" maskUnits="userSpaceOnUse" style={{ maskType: "luminance" }} width="33" x="-4" y="0">
31
31
  <path d="M-4 0H28.0016V24H-4V0Z" fill="white"/>
32
32
  </mask>
33
33
  <g mask="url(#mask0_26781_1047)">
@@ -37,7 +37,7 @@ export interface DynamicIconProps extends React.ComponentProps<"svg"> {
37
37
  absoluteStrokeWidth?: boolean;
38
38
  /**
39
39
  * Fallback content displayed while the icon is loading.
40
- * @default null
40
+ * Defaults to an invisible placeholder that matches the icon's dimensions to prevent layout shift.
41
41
  */
42
42
  fallback?: React.ReactNode;
43
43
  }
@@ -85,6 +85,10 @@ for (const [name, loader] of Object.entries(iconImports)) {
85
85
  * <DynamicIcon name="camera" size={24} fallback={<Skeleton />} />
86
86
  *
87
87
  * @example
88
+ * // Opt out of default placeholder
89
+ * <DynamicIcon name="camera" size={24} fallback={null} />
90
+ *
91
+ * @example
88
92
  * // Database-driven
89
93
  * <DynamicIcon name={country.iso} size={16} />
90
94
  */
@@ -95,7 +99,7 @@ export const DynamicIcon = React.forwardRef<SVGSVGElement, DynamicIconProps>(
95
99
  size = 16,
96
100
  strokeWidth = 1.33,
97
101
  absoluteStrokeWidth = true,
98
- fallback = null,
102
+ fallback,
99
103
  ...props
100
104
  },
101
105
  ref
@@ -114,8 +118,23 @@ export const DynamicIcon = React.forwardRef<SVGSVGElement, DynamicIconProps>(
114
118
  ? { ref, size, strokeWidth, absoluteStrokeWidth, ...props }
115
119
  : { ref, size, ...props };
116
120
 
121
+ const placeholder =
122
+ fallback !== undefined ? (
123
+ fallback
124
+ ) : (
125
+ <span
126
+ aria-hidden="true"
127
+ style={{
128
+ display: "inline-block",
129
+ width: size,
130
+ height: size,
131
+ flexShrink: 0,
132
+ }}
133
+ />
134
+ );
135
+
117
136
  return (
118
- <React.Suspense fallback={fallback}>
137
+ <React.Suspense fallback={placeholder}>
119
138
  <Icon {...iconProps} />
120
139
  </React.Suspense>
121
140
  );
package/src/index.ts CHANGED
@@ -11,6 +11,10 @@ export * from "./icons/lucide-exports.js";
11
11
  export { createLucideIcon } from "lucide-react";
12
12
  export type { IconNode, LucideProps } from "lucide-react";
13
13
 
14
+ // Higher-level flag wrapper with unknown-country fallback and loading skeleton
15
+ export { DynamicFlagIcon } from "./flag/flag-icon.js";
16
+ export type { DynamicFlagIconProps } from "./flag/flag-icon.js";
17
+
14
18
  // Flag icons - Full list available via barrel exports
15
19
  // All icons are React SVG components with proper fill colors
16
20
  export * from "./flag/index.js";
@@ -25,7 +29,7 @@ export { ALB } from "./flag/alb.js";
25
29
  export { AND } from "./flag/and.js";
26
30
  export { ARE } from "./flag/are.js";
27
31
  export { ARG } from "./flag/arg.js";
28
- // ... and 251 more
32
+ // ... and 252 more
29
33
 
30
34
  // Social Media icons - Full list available via barrel exports
31
35
  // All icons are React SVG components with proper fill colors
@@ -41,7 +45,7 @@ export { ApplePodcastsNeutral } from "./social-media/apple-podcasts-neutral.js";
41
45
  export { ApplePodcastsOriginal } from "./social-media/apple-podcasts-original.js";
42
46
  export { ArtstationNeutral } from "./social-media/artstation-neutral.js";
43
47
  export { ArtstationOriginal } from "./social-media/artstation-original.js";
44
- // ... and 111 more
48
+ // ... and 117 more
45
49
 
46
50
  // Custom icons
47
51
  export * from "./custom/index.js";
@@ -0,0 +1,41 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export interface CapterraNeutralProps extends SVGProps<SVGSVGElement> {
4
+ /**
5
+ * Icon size (width and height)
6
+ * @default 16
7
+ */
8
+ size?: number | string;
9
+ }
10
+
11
+ /**
12
+ * CapterraNeutral icon from social-media category
13
+ *
14
+ * @example
15
+ * <CapterraNeutral size={16} />
16
+ * <CapterraNeutral size={32} className="text-primary" />
17
+ */
18
+ export const CapterraNeutral = ({ size = 16, ...props }: CapterraNeutralProps) => (
19
+ <svg
20
+ fill="none"
21
+ height={size}
22
+ viewBox="0 0 24 24"
23
+ width={size}
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ {...props}
26
+ >
27
+ <g transform="scale(0.48)">
28
+ <g clipPath="url(#clip0_capterra_neut)">
29
+ <path d="M0.45343 18.3837L21.1894 18.3879L33.7984 18.39V5.89844L0.45343 18.3837Z" fill="#111412"/>
30
+ <path d="M33.7983 5.8985V50L49.5466 0L33.7983 5.8985Z" fill="#111412"/>
31
+ <path d="M33.7983 18.3898L21.1894 18.3877L33.7985 49.9998L33.7983 18.3898Z" fill="#111412"/>
32
+ <path d="M0.45343 18.3838L24.4229 26.4991L21.1894 18.3879L0.45343 18.3838Z" fill="#111412"/>
33
+ </g>
34
+ </g>
35
+ <defs>
36
+ <clipPath id="clip0_capterra_neut">
37
+ <rect fill="white" height="50" width="50"/>
38
+ </clipPath>
39
+ </defs>
40
+ </svg>
41
+ );
@@ -0,0 +1,41 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export interface CapterraOriginalProps extends SVGProps<SVGSVGElement> {
4
+ /**
5
+ * Icon size (width and height)
6
+ * @default 16
7
+ */
8
+ size?: number | string;
9
+ }
10
+
11
+ /**
12
+ * CapterraOriginal icon from social-media category
13
+ *
14
+ * @example
15
+ * <CapterraOriginal size={16} />
16
+ * <CapterraOriginal size={32} className="text-primary" />
17
+ */
18
+ export const CapterraOriginal = ({ size = 16, ...props }: CapterraOriginalProps) => (
19
+ <svg
20
+ fill="none"
21
+ height={size}
22
+ viewBox="0 0 24 24"
23
+ width={size}
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ {...props}
26
+ >
27
+ <g transform="scale(0.48)">
28
+ <g clipPath="url(#clip0_capterra_orig)">
29
+ <path d="M0.45343 18.3837L21.1894 18.3879L33.7984 18.39V5.89844L0.45343 18.3837Z" fill="#FF9D28"/>
30
+ <path d="M33.7983 5.8985V50L49.5466 0L33.7983 5.8985Z" fill="#68C5ED"/>
31
+ <path d="M33.7983 18.3898L21.1894 18.3877L33.7985 49.9998L33.7983 18.3898Z" fill="#044D80"/>
32
+ <path d="M0.45343 18.3838L24.4229 26.4991L21.1894 18.3879L0.45343 18.3838Z" fill="#E54747"/>
33
+ </g>
34
+ </g>
35
+ <defs>
36
+ <clipPath id="clip0_capterra_orig">
37
+ <rect fill="white" height="50" width="50"/>
38
+ </clipPath>
39
+ </defs>
40
+ </svg>
41
+ );
@@ -32,6 +32,10 @@ export const socialMediaIconImports = {
32
32
  import("./behance-original.js").then((m) => ({ default: m.BehanceOriginal })),
33
33
  BoostyNeutral: () => import("./boosty-neutral.js").then((m) => ({ default: m.BoostyNeutral })),
34
34
  BoostyOriginal: () => import("./boosty-original.js").then((m) => ({ default: m.BoostyOriginal })),
35
+ CapterraNeutral: () =>
36
+ import("./capterra-neutral.js").then((m) => ({ default: m.CapterraNeutral })),
37
+ CapterraOriginal: () =>
38
+ import("./capterra-original.js").then((m) => ({ default: m.CapterraOriginal })),
35
39
  DevianartNeutral: () =>
36
40
  import("./devianart-neutral.js").then((m) => ({ default: m.DevianartNeutral })),
37
41
  DevianartOriginal: () =>
@@ -53,6 +57,8 @@ export const socialMediaIconImports = {
53
57
  import("./facebook-original.js").then((m) => ({ default: m.FacebookOriginal })),
54
58
  FigmaNeutral: () => import("./figma-neutral.js").then((m) => ({ default: m.FigmaNeutral })),
55
59
  FigmaOriginal: () => import("./figma-original.js").then((m) => ({ default: m.FigmaOriginal })),
60
+ G2Neutral: () => import("./g2-neutral.js").then((m) => ({ default: m.G2Neutral })),
61
+ G2Original: () => import("./g2-original.js").then((m) => ({ default: m.G2Original })),
56
62
  GithubNeutral: () => import("./github-neutral.js").then((m) => ({ default: m.GithubNeutral })),
57
63
  GithubOriginal: () => import("./github-original.js").then((m) => ({ default: m.GithubOriginal })),
58
64
  GmailNeutral: () => import("./gmail-neutral.js").then((m) => ({ default: m.GmailNeutral })),
@@ -154,6 +160,10 @@ export const socialMediaIconImports = {
154
160
  TiktokOriginal: () => import("./tiktok-original.js").then((m) => ({ default: m.TiktokOriginal })),
155
161
  TinderNeutral: () => import("./tinder-neutral.js").then((m) => ({ default: m.TinderNeutral })),
156
162
  TinderOriginal: () => import("./tinder-original.js").then((m) => ({ default: m.TinderOriginal })),
163
+ TrustpilotNeutral: () =>
164
+ import("./trustpilot-neutral.js").then((m) => ({ default: m.TrustpilotNeutral })),
165
+ TrustpilotOriginal: () =>
166
+ import("./trustpilot-original.js").then((m) => ({ default: m.TrustpilotOriginal })),
157
167
  TumblrNeutral: () => import("./tumblr-neutral.js").then((m) => ({ default: m.TumblrNeutral })),
158
168
  TumblrOriginal: () => import("./tumblr-original.js").then((m) => ({ default: m.TumblrOriginal })),
159
169
  TwitchNeutral: () => import("./twitch-neutral.js").then((m) => ({ default: m.TwitchNeutral })),
@@ -0,0 +1,33 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export interface G2NeutralProps extends SVGProps<SVGSVGElement> {
4
+ /**
5
+ * Icon size (width and height)
6
+ * @default 16
7
+ */
8
+ size?: number | string;
9
+ }
10
+
11
+ /**
12
+ * G2Neutral icon from social-media category
13
+ *
14
+ * @example
15
+ * <G2Neutral size={16} />
16
+ * <G2Neutral size={32} className="text-primary" />
17
+ */
18
+ export const G2Neutral = ({ size = 16, ...props }: G2NeutralProps) => (
19
+ <svg
20
+ fill="none"
21
+ height={size}
22
+ viewBox="0 0 24 24"
23
+ width={size}
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ {...props}
26
+ >
27
+ <g transform="scale(0.48)">
28
+ <path d="M35.2197 35.6198C37.1099 38.8112 38.979 41.9664 40.8467 45.1181C32.5762 51.2788 19.7088 52.0233 10.1833 44.9288C-0.77846 36.7581 -2.58012 22.8165 3.28864 12.7808C10.0386 1.23751 22.6699 -1.31535 30.8027 0.556566C30.5827 1.02147 25.7118 10.8535 25.7118 10.8535C25.7118 10.8535 25.3267 10.8781 25.1089 10.8822C22.705 10.9813 20.9146 11.5255 18.9956 12.4909C16.8902 13.5598 15.0859 15.1142 13.7404 17.0182C12.395 18.9223 11.5493 21.1179 11.2774 23.4133C10.9936 25.7412 11.3245 28.1011 12.2386 30.27C13.0116 32.1036 14.1049 33.7321 15.5707 35.107C17.8193 37.2182 20.4951 38.5254 23.5967 38.9582C26.5339 39.3684 29.3587 38.9623 32.0056 37.6681C32.9985 37.1833 33.8431 36.648 34.8304 35.9137C34.9562 35.8344 35.0679 35.7339 35.2197 35.6198Z" fill="#111412"/>
29
+ <path d="M35.2588 7.63031C34.7789 7.17087 34.3341 6.74699 33.8914 6.32038C33.6272 6.06605 33.3728 5.80146 33.1023 5.55329C33.0053 5.46372 32.8915 5.34135 32.8915 5.34135C32.8915 5.34135 32.9835 5.15128 33.0229 5.07334C33.5408 4.06218 34.3523 3.32312 35.315 2.73516C36.3795 2.08005 37.6198 1.74673 38.879 1.77732C40.4902 1.80809 41.9883 2.19847 43.2525 3.24997C44.1856 4.02595 44.6641 5.01045 44.7485 6.18569C44.889 8.16836 44.0458 9.68681 42.3713 10.7465C41.3875 11.37 40.3265 11.852 39.2627 12.4229C38.6759 12.7381 38.1742 13.015 37.6008 13.5852C37.0963 14.1574 37.0717 14.6968 37.0717 14.6968L44.6936 14.6872V17.9901H32.9287C32.9287 17.9901 32.9287 17.7645 32.9287 17.6708C32.8837 16.0478 33.0784 14.5204 33.8422 13.0464C34.5449 11.6941 35.6368 10.7041 36.9487 9.94183C37.9592 9.35455 39.023 8.85478 40.0356 8.27023C40.6603 7.90993 41.1016 7.38145 41.098 6.61504C41.098 5.95734 40.6062 5.3728 39.9035 5.19025C38.2466 4.75543 36.5602 5.44937 35.6832 6.92475C35.5553 7.14011 35.4246 7.3541 35.2588 7.63031Z" fill="#111412"/>
30
+ <path d="M50 32.11L43.5768 21.3174H30.8661L24.4015 32.2214H37.2056L43.5241 42.9627L50 32.11Z" fill="#111412"/>
31
+ </g>
32
+ </svg>
33
+ );
@@ -0,0 +1,33 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export interface G2OriginalProps extends SVGProps<SVGSVGElement> {
4
+ /**
5
+ * Icon size (width and height)
6
+ * @default 16
7
+ */
8
+ size?: number | string;
9
+ }
10
+
11
+ /**
12
+ * G2Original icon from social-media category
13
+ *
14
+ * @example
15
+ * <G2Original size={16} />
16
+ * <G2Original size={32} className="text-primary" />
17
+ */
18
+ export const G2Original = ({ size = 16, ...props }: G2OriginalProps) => (
19
+ <svg
20
+ fill="none"
21
+ height={size}
22
+ viewBox="0 0 24 24"
23
+ width={size}
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ {...props}
26
+ >
27
+ <g transform="scale(0.48)">
28
+ <path d="M35.2197 35.6198C37.1099 38.8112 38.979 41.9664 40.8467 45.1181C32.5762 51.2788 19.7088 52.0233 10.1833 44.9288C-0.77846 36.7581 -2.58012 22.8165 3.28864 12.7808C10.0386 1.23751 22.6699 -1.31535 30.8027 0.556566C30.5827 1.02147 25.7118 10.8535 25.7118 10.8535C25.7118 10.8535 25.3267 10.8781 25.1089 10.8822C22.705 10.9813 20.9146 11.5255 18.9956 12.4909C16.8902 13.5598 15.0859 15.1142 13.7404 17.0182C12.395 18.9223 11.5493 21.1179 11.2774 23.4133C10.9936 25.7412 11.3245 28.1011 12.2386 30.27C13.0116 32.1036 14.1049 33.7321 15.5707 35.107C17.8193 37.2182 20.4951 38.5254 23.5967 38.9582C26.5339 39.3684 29.3587 38.9623 32.0056 37.6681C32.9985 37.1833 33.8431 36.648 34.8304 35.9137C34.9562 35.8344 35.0679 35.7339 35.2197 35.6198Z" fill="#FF1E00"/>
29
+ <path d="M35.2588 7.63031C34.7789 7.17087 34.3341 6.74699 33.8914 6.32038C33.6272 6.06605 33.3728 5.80146 33.1023 5.55329C33.0053 5.46372 32.8915 5.34135 32.8915 5.34135C32.8915 5.34135 32.9835 5.15128 33.0229 5.07334C33.5408 4.06218 34.3523 3.32312 35.315 2.73516C36.3795 2.08005 37.6198 1.74673 38.879 1.77732C40.4902 1.80809 41.9883 2.19847 43.2525 3.24997C44.1856 4.02595 44.6641 5.01045 44.7485 6.18569C44.889 8.16836 44.0458 9.68681 42.3713 10.7465C41.3875 11.37 40.3265 11.852 39.2627 12.4229C38.6759 12.7381 38.1742 13.015 37.6008 13.5852C37.0963 14.1574 37.0717 14.6968 37.0717 14.6968L44.6936 14.6872V17.9901H32.9287C32.9287 17.9901 32.9287 17.7645 32.9287 17.6708C32.8837 16.0478 33.0784 14.5204 33.8422 13.0464C34.5449 11.6941 35.6368 10.7041 36.9487 9.94183C37.9592 9.35455 39.023 8.85478 40.0356 8.27023C40.6603 7.90993 41.1016 7.38145 41.098 6.61504C41.098 5.95734 40.6062 5.3728 39.9035 5.19025C38.2466 4.75543 36.5602 5.44937 35.6832 6.92475C35.5553 7.14011 35.4246 7.3541 35.2588 7.63031Z" fill="#FF1E00"/>
30
+ <path d="M50 32.11L43.5768 21.3174H30.8661L24.4015 32.2214H37.2056L43.5241 42.9627L50 32.11Z" fill="#FF1E00"/>
31
+ </g>
32
+ </svg>
33
+ );
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Social Media icons
3
- * Auto-generated on 2026-02-17T14:47:24.292Z
3
+ * Auto-generated on 2026-04-16T08:30:32.991Z
4
4
  * Do not edit manually
5
5
  *
6
6
  * All icons are React SVG components with TypeScript support
@@ -39,6 +39,10 @@ export { BoostyNeutral } from "./boosty-neutral.js";
39
39
  export type { BoostyNeutralProps } from "./boosty-neutral.js";
40
40
  export { BoostyOriginal } from "./boosty-original.js";
41
41
  export type { BoostyOriginalProps } from "./boosty-original.js";
42
+ export { CapterraNeutral } from "./capterra-neutral.js";
43
+ export type { CapterraNeutralProps } from "./capterra-neutral.js";
44
+ export { CapterraOriginal } from "./capterra-original.js";
45
+ export type { CapterraOriginalProps } from "./capterra-original.js";
42
46
  export { DevianartNeutral } from "./devianart-neutral.js";
43
47
  export type { DevianartNeutralProps } from "./devianart-neutral.js";
44
48
  export { DevianartOriginal } from "./devianart-original.js";
@@ -63,6 +67,10 @@ export { FigmaNeutral } from "./figma-neutral.js";
63
67
  export type { FigmaNeutralProps } from "./figma-neutral.js";
64
68
  export { FigmaOriginal } from "./figma-original.js";
65
69
  export type { FigmaOriginalProps } from "./figma-original.js";
70
+ export { G2Neutral } from "./g2-neutral.js";
71
+ export type { G2NeutralProps } from "./g2-neutral.js";
72
+ export { G2Original } from "./g2-original.js";
73
+ export type { G2OriginalProps } from "./g2-original.js";
66
74
  export { GithubNeutral } from "./github-neutral.js";
67
75
  export type { GithubNeutralProps } from "./github-neutral.js";
68
76
  export { GithubOriginal } from "./github-original.js";
@@ -197,6 +205,10 @@ export { TinderNeutral } from "./tinder-neutral.js";
197
205
  export type { TinderNeutralProps } from "./tinder-neutral.js";
198
206
  export { TinderOriginal } from "./tinder-original.js";
199
207
  export type { TinderOriginalProps } from "./tinder-original.js";
208
+ export { TrustpilotNeutral } from "./trustpilot-neutral.js";
209
+ export type { TrustpilotNeutralProps } from "./trustpilot-neutral.js";
210
+ export { TrustpilotOriginal } from "./trustpilot-original.js";
211
+ export type { TrustpilotOriginalProps } from "./trustpilot-original.js";
200
212
  export { TumblrNeutral } from "./tumblr-neutral.js";
201
213
  export type { TumblrNeutralProps } from "./tumblr-neutral.js";
202
214
  export { TumblrOriginal } from "./tumblr-original.js";
@@ -0,0 +1,32 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export interface TrustpilotNeutralProps extends SVGProps<SVGSVGElement> {
4
+ /**
5
+ * Icon size (width and height)
6
+ * @default 16
7
+ */
8
+ size?: number | string;
9
+ }
10
+
11
+ /**
12
+ * TrustpilotNeutral icon from social-media category
13
+ *
14
+ * @example
15
+ * <TrustpilotNeutral size={16} />
16
+ * <TrustpilotNeutral size={32} className="text-primary" />
17
+ */
18
+ export const TrustpilotNeutral = ({ size = 16, ...props }: TrustpilotNeutralProps) => (
19
+ <svg
20
+ fill="none"
21
+ height={size}
22
+ viewBox="0 0 24 24"
23
+ width={size}
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ {...props}
26
+ >
27
+ <g transform="scale(0.48)">
28
+ <path d="M50 19.1718H30.9067L25.0092 1L19.0933 19.1718L0 19.1533L15.4626 30.3955L9.54663 48.5488L25.0092 37.3251L40.4534 48.5488L34.5558 30.3955L50 19.1718Z" fill="#111412"/>
29
+ <path d="M35.8828 34.5053L34.5558 30.3955L25.0092 37.3251L35.8828 34.5053Z" fill="#111412"/>
30
+ </g>
31
+ </svg>
32
+ );
@@ -0,0 +1,32 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ export interface TrustpilotOriginalProps extends SVGProps<SVGSVGElement> {
4
+ /**
5
+ * Icon size (width and height)
6
+ * @default 16
7
+ */
8
+ size?: number | string;
9
+ }
10
+
11
+ /**
12
+ * TrustpilotOriginal icon from social-media category
13
+ *
14
+ * @example
15
+ * <TrustpilotOriginal size={16} />
16
+ * <TrustpilotOriginal size={32} className="text-primary" />
17
+ */
18
+ export const TrustpilotOriginal = ({ size = 16, ...props }: TrustpilotOriginalProps) => (
19
+ <svg
20
+ fill="none"
21
+ height={size}
22
+ viewBox="0 0 24 24"
23
+ width={size}
24
+ xmlns="http://www.w3.org/2000/svg"
25
+ {...props}
26
+ >
27
+ <g transform="scale(0.48)">
28
+ <path d="M50 19.1718H30.9067L25.0092 1L19.0933 19.1718L0 19.1533L15.4626 30.3955L9.54663 48.5488L25.0092 37.3251L40.4534 48.5488L34.5558 30.3955L50 19.1718Z" fill="#00B67A"/>
29
+ <path d="M35.8828 34.5053L34.5558 30.3955L25.0092 37.3251L35.8828 34.5053Z" fill="#005128"/>
30
+ </g>
31
+ </svg>
32
+ );