exotic-car-logos 0.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 (154) hide show
  1. package/LEGAL.md +27 -0
  2. package/LICENSE +26 -0
  3. package/README.md +106 -0
  4. package/dist/allLogos.d.ts +40 -0
  5. package/dist/index.d.ts +42 -0
  6. package/dist/index.esm.js +736 -0
  7. package/dist/index.js +819 -0
  8. package/dist/logos/Abarth.d.ts +5 -0
  9. package/dist/logos/Abarth.js +21 -0
  10. package/dist/logos/AlfaRomeo.d.ts +5 -0
  11. package/dist/logos/AlfaRomeo.js +21 -0
  12. package/dist/logos/Alpine.d.ts +5 -0
  13. package/dist/logos/Alpine.js +21 -0
  14. package/dist/logos/Apollo.d.ts +5 -0
  15. package/dist/logos/Apollo.js +24 -0
  16. package/dist/logos/Arash.d.ts +5 -0
  17. package/dist/logos/Arash.js +21 -0
  18. package/dist/logos/AstonMartin.d.ts +5 -0
  19. package/dist/logos/AstonMartin.js +21 -0
  20. package/dist/logos/Audi.d.ts +5 -0
  21. package/dist/logos/Audi.js +21 -0
  22. package/dist/logos/BMW.d.ts +5 -0
  23. package/dist/logos/BMW.js +21 -0
  24. package/dist/logos/Bentley.d.ts +5 -0
  25. package/dist/logos/Bentley.js +21 -0
  26. package/dist/logos/Brabus.d.ts +5 -0
  27. package/dist/logos/Brabus.js +21 -0
  28. package/dist/logos/Bugatti.d.ts +5 -0
  29. package/dist/logos/Bugatti.js +21 -0
  30. package/dist/logos/Chevrolet.d.ts +5 -0
  31. package/dist/logos/Chevrolet.js +21 -0
  32. package/dist/logos/Czinger.d.ts +5 -0
  33. package/dist/logos/Czinger.js +24 -0
  34. package/dist/logos/Dallara.d.ts +5 -0
  35. package/dist/logos/Dallara.js +24 -0
  36. package/dist/logos/DeTomaso.d.ts +5 -0
  37. package/dist/logos/DeTomaso.js +21 -0
  38. package/dist/logos/Dodge.d.ts +5 -0
  39. package/dist/logos/Dodge.js +21 -0
  40. package/dist/logos/Ferrari.d.ts +5 -0
  41. package/dist/logos/Ferrari.js +21 -0
  42. package/dist/logos/Ford.d.ts +5 -0
  43. package/dist/logos/Ford.js +21 -0
  44. package/dist/logos/Glickenhaus.d.ts +5 -0
  45. package/dist/logos/Glickenhaus.js +24 -0
  46. package/dist/logos/Gumpert.d.ts +5 -0
  47. package/dist/logos/Gumpert.js +21 -0
  48. package/dist/logos/Hennessey.d.ts +5 -0
  49. package/dist/logos/Hennessey.js +21 -0
  50. package/dist/logos/Icona.d.ts +5 -0
  51. package/dist/logos/Icona.js +24 -0
  52. package/dist/logos/Italdesign.d.ts +5 -0
  53. package/dist/logos/Italdesign.js +24 -0
  54. package/dist/logos/Jaguar.d.ts +5 -0
  55. package/dist/logos/Jaguar.js +21 -0
  56. package/dist/logos/Koenigsegg.d.ts +5 -0
  57. package/dist/logos/Koenigsegg.js +21 -0
  58. package/dist/logos/Lamborghini.d.ts +5 -0
  59. package/dist/logos/Lamborghini.js +21 -0
  60. package/dist/logos/Lister.d.ts +5 -0
  61. package/dist/logos/Lister.js +24 -0
  62. package/dist/logos/Lotus.d.ts +5 -0
  63. package/dist/logos/Lotus.js +21 -0
  64. package/dist/logos/Lykan.d.ts +5 -0
  65. package/dist/logos/Lykan.js +24 -0
  66. package/dist/logos/Maserati.d.ts +5 -0
  67. package/dist/logos/Maserati.js +21 -0
  68. package/dist/logos/Maybach.d.ts +5 -0
  69. package/dist/logos/Maybach.js +21 -0
  70. package/dist/logos/McLaren.d.ts +5 -0
  71. package/dist/logos/McLaren.js +21 -0
  72. package/dist/logos/MercedesAMG.d.ts +5 -0
  73. package/dist/logos/MercedesAMG.js +21 -0
  74. package/dist/logos/Mosler.d.ts +5 -0
  75. package/dist/logos/Mosler.js +21 -0
  76. package/dist/logos/Noble.d.ts +5 -0
  77. package/dist/logos/Noble.js +24 -0
  78. package/dist/logos/Pagani.d.ts +5 -0
  79. package/dist/logos/Pagani.js +21 -0
  80. package/dist/logos/Pininfarina.d.ts +5 -0
  81. package/dist/logos/Pininfarina.js +21 -0
  82. package/dist/logos/Polestar.d.ts +5 -0
  83. package/dist/logos/Polestar.js +21 -0
  84. package/dist/logos/Porsche.d.ts +5 -0
  85. package/dist/logos/Porsche.js +21 -0
  86. package/dist/logos/RUF.d.ts +5 -0
  87. package/dist/logos/RUF.js +24 -0
  88. package/dist/logos/Radical.d.ts +5 -0
  89. package/dist/logos/Radical.js +21 -0
  90. package/dist/logos/Rimac.d.ts +5 -0
  91. package/dist/logos/Rimac.js +21 -0
  92. package/dist/logos/RollsRoyce.d.ts +5 -0
  93. package/dist/logos/RollsRoyce.js +21 -0
  94. package/dist/logos/SSC.d.ts +5 -0
  95. package/dist/logos/SSC.js +21 -0
  96. package/dist/logos/Saleen.d.ts +5 -0
  97. package/dist/logos/Saleen.js +21 -0
  98. package/dist/logos/Shelby.d.ts +5 -0
  99. package/dist/logos/Shelby.js +21 -0
  100. package/dist/logos/Spyker.d.ts +5 -0
  101. package/dist/logos/Spyker.js +21 -0
  102. package/dist/logos/TVR.d.ts +5 -0
  103. package/dist/logos/TVR.js +21 -0
  104. package/dist/logos/WMotors.d.ts +5 -0
  105. package/dist/logos/WMotors.js +21 -0
  106. package/dist/logos/Zenvo.d.ts +5 -0
  107. package/dist/logos/Zenvo.js +21 -0
  108. package/dist/types-DV3vCP6D.js +45 -0
  109. package/dist/types-DfZOvtAx.js +54 -0
  110. package/dist/types.d.ts +70 -0
  111. package/package.json +87 -0
  112. package/src/allLogos.ts +43 -0
  113. package/src/index.ts +47 -0
  114. package/src/logos/Abarth.tsx +40 -0
  115. package/src/logos/AlfaRomeo.tsx +40 -0
  116. package/src/logos/Alpine.tsx +40 -0
  117. package/src/logos/Arash.tsx +40 -0
  118. package/src/logos/AstonMartin.tsx +40 -0
  119. package/src/logos/Audi.tsx +40 -0
  120. package/src/logos/BMW.tsx +40 -0
  121. package/src/logos/Bentley.tsx +40 -0
  122. package/src/logos/Brabus.tsx +40 -0
  123. package/src/logos/Bugatti.tsx +40 -0
  124. package/src/logos/Chevrolet.tsx +40 -0
  125. package/src/logos/DeTomaso.tsx +40 -0
  126. package/src/logos/Dodge.tsx +40 -0
  127. package/src/logos/Ferrari.tsx +40 -0
  128. package/src/logos/Ford.tsx +40 -0
  129. package/src/logos/Gumpert.tsx +40 -0
  130. package/src/logos/Hennessey.tsx +40 -0
  131. package/src/logos/Jaguar.tsx +40 -0
  132. package/src/logos/Koenigsegg.tsx +40 -0
  133. package/src/logos/Lamborghini.tsx +40 -0
  134. package/src/logos/Lotus.tsx +40 -0
  135. package/src/logos/Maserati.tsx +40 -0
  136. package/src/logos/Maybach.tsx +40 -0
  137. package/src/logos/McLaren.tsx +40 -0
  138. package/src/logos/MercedesAMG.tsx +40 -0
  139. package/src/logos/Mosler.tsx +40 -0
  140. package/src/logos/Pagani.tsx +40 -0
  141. package/src/logos/Pininfarina.tsx +40 -0
  142. package/src/logos/Polestar.tsx +40 -0
  143. package/src/logos/Porsche.tsx +40 -0
  144. package/src/logos/Radical.tsx +40 -0
  145. package/src/logos/Rimac.tsx +40 -0
  146. package/src/logos/RollsRoyce.tsx +40 -0
  147. package/src/logos/SSC.tsx +40 -0
  148. package/src/logos/Saleen.tsx +40 -0
  149. package/src/logos/Shelby.tsx +40 -0
  150. package/src/logos/Spyker.tsx +40 -0
  151. package/src/logos/TVR.tsx +40 -0
  152. package/src/logos/WMotors.tsx +40 -0
  153. package/src/logos/Zenvo.tsx +40 -0
  154. package/src/types.ts +96 -0
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { CarLogoProps, CarLogoMeta } from "../types";
3
+ import { SIZE_MAP } from "../types";
4
+
5
+ export const meta: CarLogoMeta = {
6
+ title: "Saleen",
7
+ slug: "saleen",
8
+ pngUrl: "https://www.carlogos.org/logo/Saleen-logo.png",
9
+ source: "https://www.carlogos.org/car-brands/saleen-logo.html",
10
+ country: "USA",
11
+ region: "American",
12
+ founded: 1983,
13
+ hex: "1A1A1A",
14
+ };
15
+
16
+ export const Saleen: React.FC<CarLogoProps> = ({
17
+ size = "md",
18
+ width,
19
+ height,
20
+ alt = "Saleen",
21
+ loading = "lazy",
22
+ style,
23
+ ...props
24
+ }) => {
25
+ const renderPx = width ?? height ?? SIZE_MAP[size];
26
+
27
+ return (
28
+ <img
29
+ src="https://www.carlogos.org/logo/Saleen-logo.png"
30
+ alt={alt}
31
+ width={renderPx}
32
+ height={renderPx}
33
+ loading={loading}
34
+ style={{ objectFit: "contain", ...style }}
35
+ {...props}
36
+ />
37
+ );
38
+ };
39
+
40
+ export default Saleen;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { CarLogoProps, CarLogoMeta } from "../types";
3
+ import { SIZE_MAP } from "../types";
4
+
5
+ export const meta: CarLogoMeta = {
6
+ title: "Shelby",
7
+ slug: "shelby",
8
+ pngUrl: "https://www.carlogos.org/logo/Shelby-logo.png",
9
+ source: "https://www.carlogos.org/car-brands/shelby-logo.html",
10
+ country: "USA",
11
+ region: "American",
12
+ founded: 1962,
13
+ hex: "8B0000",
14
+ };
15
+
16
+ export const Shelby: React.FC<CarLogoProps> = ({
17
+ size = "md",
18
+ width,
19
+ height,
20
+ alt = "Shelby",
21
+ loading = "lazy",
22
+ style,
23
+ ...props
24
+ }) => {
25
+ const renderPx = width ?? height ?? SIZE_MAP[size];
26
+
27
+ return (
28
+ <img
29
+ src="https://www.carlogos.org/logo/Shelby-logo.png"
30
+ alt={alt}
31
+ width={renderPx}
32
+ height={renderPx}
33
+ loading={loading}
34
+ style={{ objectFit: "contain", ...style }}
35
+ {...props}
36
+ />
37
+ );
38
+ };
39
+
40
+ export default Shelby;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { CarLogoProps, CarLogoMeta } from "../types";
3
+ import { SIZE_MAP } from "../types";
4
+
5
+ export const meta: CarLogoMeta = {
6
+ title: "Spyker",
7
+ slug: "spyker",
8
+ pngUrl: "https://www.carlogos.org/logo/Spyker-logo.png",
9
+ source: "https://www.carlogos.org/car-brands/spyker-logo.html",
10
+ country: "Netherlands",
11
+ region: "Other",
12
+ founded: 1999,
13
+ hex: "003087",
14
+ };
15
+
16
+ export const Spyker: React.FC<CarLogoProps> = ({
17
+ size = "md",
18
+ width,
19
+ height,
20
+ alt = "Spyker",
21
+ loading = "lazy",
22
+ style,
23
+ ...props
24
+ }) => {
25
+ const renderPx = width ?? height ?? SIZE_MAP[size];
26
+
27
+ return (
28
+ <img
29
+ src="https://www.carlogos.org/logo/Spyker-logo.png"
30
+ alt={alt}
31
+ width={renderPx}
32
+ height={renderPx}
33
+ loading={loading}
34
+ style={{ objectFit: "contain", ...style }}
35
+ {...props}
36
+ />
37
+ );
38
+ };
39
+
40
+ export default Spyker;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { CarLogoProps, CarLogoMeta } from "../types";
3
+ import { SIZE_MAP } from "../types";
4
+
5
+ export const meta: CarLogoMeta = {
6
+ title: "TVR",
7
+ slug: "tvr",
8
+ pngUrl: "https://www.carlogos.org/logo/TVR-logo.png",
9
+ source: "https://www.carlogos.org/car-brands/tvr-logo.html",
10
+ country: "UK",
11
+ region: "British",
12
+ founded: 1947,
13
+ hex: "8B0000",
14
+ };
15
+
16
+ export const TVR: React.FC<CarLogoProps> = ({
17
+ size = "md",
18
+ width,
19
+ height,
20
+ alt = "TVR",
21
+ loading = "lazy",
22
+ style,
23
+ ...props
24
+ }) => {
25
+ const renderPx = width ?? height ?? SIZE_MAP[size];
26
+
27
+ return (
28
+ <img
29
+ src="https://www.carlogos.org/logo/TVR-logo.png"
30
+ alt={alt}
31
+ width={renderPx}
32
+ height={renderPx}
33
+ loading={loading}
34
+ style={{ objectFit: "contain", ...style }}
35
+ {...props}
36
+ />
37
+ );
38
+ };
39
+
40
+ export default TVR;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { CarLogoProps, CarLogoMeta } from "../types";
3
+ import { SIZE_MAP } from "../types";
4
+
5
+ export const meta: CarLogoMeta = {
6
+ title: "W Motors",
7
+ slug: "w-motors",
8
+ pngUrl: "https://www.carlogos.org/logo/W-Motors-logo.png",
9
+ source: "https://www.carlogos.org/car-brands/w-motors-logo.html",
10
+ country: "UAE",
11
+ region: "Other",
12
+ founded: 2012,
13
+ hex: "1A1A1A",
14
+ };
15
+
16
+ export const WMotors: React.FC<CarLogoProps> = ({
17
+ size = "md",
18
+ width,
19
+ height,
20
+ alt = "W Motors",
21
+ loading = "lazy",
22
+ style,
23
+ ...props
24
+ }) => {
25
+ const renderPx = width ?? height ?? SIZE_MAP[size];
26
+
27
+ return (
28
+ <img
29
+ src="https://www.carlogos.org/logo/W-Motors-logo.png"
30
+ alt={alt}
31
+ width={renderPx}
32
+ height={renderPx}
33
+ loading={loading}
34
+ style={{ objectFit: "contain", ...style }}
35
+ {...props}
36
+ />
37
+ );
38
+ };
39
+
40
+ export default WMotors;
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ import type { CarLogoProps, CarLogoMeta } from "../types";
3
+ import { SIZE_MAP } from "../types";
4
+
5
+ export const meta: CarLogoMeta = {
6
+ title: "Zenvo",
7
+ slug: "zenvo",
8
+ pngUrl: "https://www.carlogos.org/logo/Zenvo-logo.png",
9
+ source: "https://www.carlogos.org/car-brands/zenvo-logo.html",
10
+ country: "Denmark",
11
+ region: "Other",
12
+ founded: 2004,
13
+ hex: "1A1A1A",
14
+ };
15
+
16
+ export const Zenvo: React.FC<CarLogoProps> = ({
17
+ size = "md",
18
+ width,
19
+ height,
20
+ alt = "Zenvo",
21
+ loading = "lazy",
22
+ style,
23
+ ...props
24
+ }) => {
25
+ const renderPx = width ?? height ?? SIZE_MAP[size];
26
+
27
+ return (
28
+ <img
29
+ src="https://www.carlogos.org/logo/Zenvo-logo.png"
30
+ alt={alt}
31
+ width={renderPx}
32
+ height={renderPx}
33
+ loading={loading}
34
+ style={{ objectFit: "contain", ...style }}
35
+ {...props}
36
+ />
37
+ );
38
+ };
39
+
40
+ export default Zenvo;
package/src/types.ts ADDED
@@ -0,0 +1,96 @@
1
+ import { ImgHTMLAttributes } from "react";
2
+
3
+ /** Available logo size presets */
4
+ export type LogoSize = "sm" | "md" | "lg";
5
+
6
+ /**
7
+ * Pixel dimensions for each size tier.
8
+ * Maps directly to carlogos.org's available PNG widths.
9
+ */
10
+ export const SIZE_MAP: Record<LogoSize, number> = {
11
+ sm: 80, // Thumbnails, nav icons, table cells
12
+ md: 160, // Cards, lists, sidebars (default)
13
+ lg: 320, // Hero sections, detail views
14
+ };
15
+
16
+ /**
17
+ * Width in pixels used when fetching from carlogos.org.
18
+ * Always fetch the 640px variant — smaller variants are not reliably available.
19
+ */
20
+ export const CDN_WIDTH_MAP: Record<LogoSize, number> = {
21
+ sm: 640,
22
+ md: 640,
23
+ lg: 640,
24
+ };
25
+
26
+ /**
27
+ * Props accepted by every car logo component.
28
+ * Extends standard <img> HTML attributes (minus src/width/height which are controlled).
29
+ */
30
+ export interface CarLogoProps
31
+ extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "width" | "height"> {
32
+ /**
33
+ * Size preset. Controls both the rendered dimension and the PNG resolution fetched.
34
+ * - `'sm'` -> renders at 80px, fetches 160px PNG (2x retina)
35
+ * - `'md'` -> renders at 160px, fetches 320px PNG (2x retina) -- DEFAULT
36
+ * - `'lg'` -> renders at 320px, fetches 640px PNG (2x retina)
37
+ */
38
+ size?: LogoSize;
39
+
40
+ /**
41
+ * Custom pixel width. Overrides `size` if provided.
42
+ * The highest available PNG resolution (640px) will be fetched.
43
+ */
44
+ width?: number;
45
+
46
+ /**
47
+ * Custom pixel height. Overrides `size` if provided.
48
+ * The highest available PNG resolution (640px) will be fetched.
49
+ */
50
+ height?: number;
51
+
52
+ /**
53
+ * Accessible alt text for screen readers.
54
+ * Defaults to the brand's display name (e.g., "Ferrari").
55
+ */
56
+ alt?: string;
57
+
58
+ /**
59
+ * Native browser image loading strategy.
60
+ * Defaults to 'lazy' for performance.
61
+ */
62
+ loading?: "lazy" | "eager";
63
+ }
64
+
65
+ /**
66
+ * Metadata object exported alongside each logo component.
67
+ * Useful for building dynamic UIs, lists, and filters.
68
+ */
69
+ export interface CarLogoMeta {
70
+ /** Brand display name, e.g. "Rolls-Royce" */
71
+ title: string;
72
+
73
+ /** URL-safe slug used in carlogos.org URLs, e.g. "rolls-royce" */
74
+ slug: string;
75
+
76
+ /** Full 640px PNG URL from carlogos.org */
77
+ pngUrl: string;
78
+
79
+ /** Source page URL on carlogos.org */
80
+ source: string;
81
+
82
+ /** Country of origin, e.g. "Italy" */
83
+ country: string;
84
+
85
+ /** Regional grouping: "Italian" | "German" | "British" | "French" | "American" | "Swedish" | "Other" */
86
+ region: string;
87
+
88
+ /** Year the brand was founded */
89
+ founded: number;
90
+
91
+ /** Primary brand hex color (without #), e.g. "CD212A" */
92
+ hex: string;
93
+
94
+ /** Link to the brand's official guidelines page (if known) */
95
+ guidelines?: string;
96
+ }