@tampadevs/react 0.1.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 (123) hide show
  1. package/dist/components/Avatar.d.ts +16 -0
  2. package/dist/components/Avatar.d.ts.map +1 -0
  3. package/dist/components/AvatarGroup.d.ts +14 -0
  4. package/dist/components/AvatarGroup.d.ts.map +1 -0
  5. package/dist/components/Button.d.ts +13 -0
  6. package/dist/components/Button.d.ts.map +1 -0
  7. package/dist/components/Button.test.d.ts +2 -0
  8. package/dist/components/Button.test.d.ts.map +1 -0
  9. package/dist/components/Calendar.d.ts +27 -0
  10. package/dist/components/Calendar.d.ts.map +1 -0
  11. package/dist/components/Carousel.d.ts +11 -0
  12. package/dist/components/Carousel.d.ts.map +1 -0
  13. package/dist/components/CtaSection.d.ts +13 -0
  14. package/dist/components/CtaSection.d.ts.map +1 -0
  15. package/dist/components/EventCard.d.ts +19 -0
  16. package/dist/components/EventCard.d.ts.map +1 -0
  17. package/dist/components/Footer.d.ts +25 -0
  18. package/dist/components/Footer.d.ts.map +1 -0
  19. package/dist/components/Header.d.ts +17 -0
  20. package/dist/components/Header.d.ts.map +1 -0
  21. package/dist/components/Icon.d.ts +8 -0
  22. package/dist/components/Icon.d.ts.map +1 -0
  23. package/dist/components/Image.d.ts +17 -0
  24. package/dist/components/Image.d.ts.map +1 -0
  25. package/dist/components/ImageCarousel.d.ts +18 -0
  26. package/dist/components/ImageCarousel.d.ts.map +1 -0
  27. package/dist/components/ImageText.d.ts +16 -0
  28. package/dist/components/ImageText.d.ts.map +1 -0
  29. package/dist/components/Logo.d.ts +15 -0
  30. package/dist/components/Logo.d.ts.map +1 -0
  31. package/dist/components/Logo3d.d.ts +28 -0
  32. package/dist/components/Logo3d.d.ts.map +1 -0
  33. package/dist/components/LogoMarquee.d.ts +18 -0
  34. package/dist/components/LogoMarquee.d.ts.map +1 -0
  35. package/dist/components/NewsletterSignup.d.ts +11 -0
  36. package/dist/components/NewsletterSignup.d.ts.map +1 -0
  37. package/dist/components/OpenCollective.d.ts +16 -0
  38. package/dist/components/OpenCollective.d.ts.map +1 -0
  39. package/dist/components/PersonCard.d.ts +20 -0
  40. package/dist/components/PersonCard.d.ts.map +1 -0
  41. package/dist/components/PersonTable.d.ts +28 -0
  42. package/dist/components/PersonTable.d.ts.map +1 -0
  43. package/dist/components/PromoSection.d.ts +20 -0
  44. package/dist/components/PromoSection.d.ts.map +1 -0
  45. package/dist/components/SponsorCard.d.ts +10 -0
  46. package/dist/components/SponsorCard.d.ts.map +1 -0
  47. package/dist/components/SponsorGrid.d.ts +21 -0
  48. package/dist/components/SponsorGrid.d.ts.map +1 -0
  49. package/dist/components/Table.d.ts +30 -0
  50. package/dist/components/Table.d.ts.map +1 -0
  51. package/dist/components/VideoEmbed.d.ts +14 -0
  52. package/dist/components/VideoEmbed.d.ts.map +1 -0
  53. package/dist/components/VideoHero.d.ts +16 -0
  54. package/dist/components/VideoHero.d.ts.map +1 -0
  55. package/dist/index.d.ts +53 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +55 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/index10.js +185 -0
  60. package/dist/index10.js.map +1 -0
  61. package/dist/index11.js +268 -0
  62. package/dist/index11.js.map +1 -0
  63. package/dist/index12.js +133 -0
  64. package/dist/index12.js.map +1 -0
  65. package/dist/index13.js +112 -0
  66. package/dist/index13.js.map +1 -0
  67. package/dist/index14.js +286 -0
  68. package/dist/index14.js.map +1 -0
  69. package/dist/index15.js +325 -0
  70. package/dist/index15.js.map +1 -0
  71. package/dist/index16.js +204 -0
  72. package/dist/index16.js.map +1 -0
  73. package/dist/index17.js +269 -0
  74. package/dist/index17.js.map +1 -0
  75. package/dist/index18.js +147 -0
  76. package/dist/index18.js.map +1 -0
  77. package/dist/index19.js +697 -0
  78. package/dist/index19.js.map +1 -0
  79. package/dist/index2.js +181 -0
  80. package/dist/index2.js.map +1 -0
  81. package/dist/index20.js +492 -0
  82. package/dist/index20.js.map +1 -0
  83. package/dist/index21.js +277 -0
  84. package/dist/index21.js.map +1 -0
  85. package/dist/index22.js +331 -0
  86. package/dist/index22.js.map +1 -0
  87. package/dist/index23.js +98 -0
  88. package/dist/index23.js.map +1 -0
  89. package/dist/index24.js +406 -0
  90. package/dist/index24.js.map +1 -0
  91. package/dist/index25.js +464 -0
  92. package/dist/index25.js.map +1 -0
  93. package/dist/index26.js +280 -0
  94. package/dist/index26.js.map +1 -0
  95. package/dist/index27.js +234 -0
  96. package/dist/index27.js.map +1 -0
  97. package/dist/index28.js +18 -0
  98. package/dist/index28.js.map +1 -0
  99. package/dist/index29.js +10779 -0
  100. package/dist/index29.js.map +1 -0
  101. package/dist/index3.js +39 -0
  102. package/dist/index3.js.map +1 -0
  103. package/dist/index30.js +358 -0
  104. package/dist/index30.js.map +1 -0
  105. package/dist/index31.js +199 -0
  106. package/dist/index31.js.map +1 -0
  107. package/dist/index32.js +22762 -0
  108. package/dist/index32.js.map +1 -0
  109. package/dist/index4.js +142 -0
  110. package/dist/index4.js.map +1 -0
  111. package/dist/index5.js +128 -0
  112. package/dist/index5.js.map +1 -0
  113. package/dist/index6.js +109 -0
  114. package/dist/index6.js.map +1 -0
  115. package/dist/index7.js +254 -0
  116. package/dist/index7.js.map +1 -0
  117. package/dist/index8.js +237 -0
  118. package/dist/index8.js.map +1 -0
  119. package/dist/index9.js +142 -0
  120. package/dist/index9.js.map +1 -0
  121. package/dist/test/setup.d.ts +2 -0
  122. package/dist/test/setup.d.ts.map +1 -0
  123. package/package.json +58 -0
@@ -0,0 +1,269 @@
1
+ import { jsxs as n, Fragment as g, jsx as t } from "react/jsx-runtime";
2
+ import { useState as u } from "react";
3
+ import { clsx as N } from "./index28.js";
4
+ function j(i, e, d, r, a) {
5
+ if (i) return i;
6
+ if (e)
7
+ switch (d) {
8
+ case "youtube": {
9
+ const o = new URLSearchParams({
10
+ autoplay: r || a ? "1" : "0",
11
+ rel: "0",
12
+ modestbranding: "1"
13
+ });
14
+ return `https://www.youtube.com/embed/${e}?${o}`;
15
+ }
16
+ case "vimeo": {
17
+ const o = new URLSearchParams({
18
+ autoplay: r || a ? "1" : "0"
19
+ });
20
+ return `https://player.vimeo.com/video/${e}?${o}`;
21
+ }
22
+ default:
23
+ return "";
24
+ }
25
+ return "";
26
+ }
27
+ function $(i, e, d) {
28
+ return i || (e && d === "youtube" ? `https://img.youtube.com/vi/${e}/maxresdefault.jpg` : "");
29
+ }
30
+ function z(i) {
31
+ const [e, d] = i.split("/").map(Number);
32
+ return e && d ? `${d / e * 100}%` : "56.25%";
33
+ }
34
+ function S({
35
+ src: i = "",
36
+ videoId: e = "",
37
+ provider: d = "youtube",
38
+ title: r = "Video",
39
+ thumbnail: a = "",
40
+ aspectRatio: o = "16/9",
41
+ autoplay: h = !1,
42
+ lazyLoad: b = !0,
43
+ className: v
44
+ }) {
45
+ const [s, x] = u(!1), [_, m] = u(!1), f = j(i, e, d, h, s), p = $(a, e, d), w = b && !s && p, c = () => {
46
+ m(!0), x(!0);
47
+ }, y = () => {
48
+ m(!1);
49
+ }, k = (l) => {
50
+ (l.key === "Enter" || l.key === " ") && (l.preventDefault(), c());
51
+ };
52
+ return /* @__PURE__ */ n(g, { children: [
53
+ /* @__PURE__ */ t("div", { className: N("td-video-embed", v), children: /* @__PURE__ */ n(
54
+ "div",
55
+ {
56
+ className: "td-video-embed__aspect",
57
+ style: { paddingBottom: z(o) },
58
+ children: [
59
+ (s || !b) && /* @__PURE__ */ n(g, { children: [
60
+ /* @__PURE__ */ t(
61
+ "iframe",
62
+ {
63
+ className: "td-video-embed__iframe",
64
+ src: f,
65
+ title: r,
66
+ allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
67
+ allowFullScreen: !0,
68
+ onLoad: y
69
+ }
70
+ ),
71
+ _ && /* @__PURE__ */ t("div", { className: "td-video-embed__loading", children: /* @__PURE__ */ t("div", { className: "td-video-embed__spinner" }) })
72
+ ] }),
73
+ w && /* @__PURE__ */ n(
74
+ "div",
75
+ {
76
+ className: "td-video-embed__thumbnail",
77
+ onClick: c,
78
+ onKeyDown: k,
79
+ role: "button",
80
+ tabIndex: 0,
81
+ "aria-label": `Play video: ${r}`,
82
+ children: [
83
+ /* @__PURE__ */ t(
84
+ "img",
85
+ {
86
+ className: "td-video-embed__thumbnail-img",
87
+ src: p,
88
+ alt: "",
89
+ loading: "lazy"
90
+ }
91
+ ),
92
+ /* @__PURE__ */ t("div", { className: "td-video-embed__gradient" }),
93
+ /* @__PURE__ */ t("div", { className: "td-video-embed__play-btn", children: /* @__PURE__ */ t("svg", { fill: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ t("path", { d: "M8 5v14l11-7z" }) }) }),
94
+ r && /* @__PURE__ */ t("div", { className: "td-video-embed__title", children: r })
95
+ ]
96
+ }
97
+ )
98
+ ]
99
+ }
100
+ ) }),
101
+ /* @__PURE__ */ t(L, {})
102
+ ] });
103
+ }
104
+ function L() {
105
+ return /* @__PURE__ */ t("style", { children: `
106
+ .td-video-embed {
107
+ position: relative;
108
+ width: 100%;
109
+ background: #000;
110
+ border-radius: 0.875rem;
111
+ overflow: hidden;
112
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
113
+ }
114
+
115
+ .td-video-embed__aspect {
116
+ position: relative;
117
+ width: 100%;
118
+ }
119
+
120
+ .td-video-embed__iframe {
121
+ position: absolute;
122
+ top: 0;
123
+ left: 0;
124
+ width: 100%;
125
+ height: 100%;
126
+ border: none;
127
+ }
128
+
129
+ .td-video-embed__thumbnail {
130
+ position: absolute;
131
+ inset: 0;
132
+ display: flex;
133
+ align-items: center;
134
+ justify-content: center;
135
+ cursor: pointer;
136
+ background: #000;
137
+ }
138
+
139
+ .td-video-embed__thumbnail-img {
140
+ position: absolute;
141
+ inset: 0;
142
+ width: 100%;
143
+ height: 100%;
144
+ object-fit: cover;
145
+ transition: transform 0.2s ease;
146
+ }
147
+
148
+ .td-video-embed__thumbnail:hover .td-video-embed__thumbnail-img {
149
+ transform: scale(1.05);
150
+ }
151
+
152
+ .td-video-embed__gradient {
153
+ position: absolute;
154
+ inset: 0;
155
+ background: linear-gradient(
156
+ to bottom,
157
+ rgba(0, 0, 0, 0.1) 0%,
158
+ rgba(0, 0, 0, 0.3) 50%,
159
+ rgba(0, 0, 0, 0.5) 100%
160
+ );
161
+ }
162
+
163
+ .td-video-embed__play-btn {
164
+ position: relative;
165
+ z-index: 1;
166
+ width: 80px;
167
+ height: 80px;
168
+ display: flex;
169
+ align-items: center;
170
+ justify-content: center;
171
+ background: linear-gradient(
172
+ 135deg,
173
+ rgba(255, 255, 255, 0.2) 0%,
174
+ rgba(255, 255, 255, 0.08) 50%,
175
+ rgba(255, 255, 255, 0.05) 100%
176
+ );
177
+ backdrop-filter: blur(16px);
178
+ -webkit-backdrop-filter: blur(16px);
179
+ border-radius: 50%;
180
+ border: 1.5px solid rgba(255, 255, 255, 0.25);
181
+ transition: all 0.15s ease;
182
+ box-shadow:
183
+ 0 8px 32px rgba(0, 0, 0, 0.2),
184
+ 0 4px 12px rgba(0, 0, 0, 0.1),
185
+ inset 0 1px 2px rgba(255, 255, 255, 0.2),
186
+ inset 0 -2px 6px rgba(0, 0, 0, 0.1);
187
+ }
188
+
189
+ .td-video-embed__thumbnail:hover .td-video-embed__play-btn {
190
+ transform: scale(1.1);
191
+ border-color: rgba(255, 255, 255, 0.4);
192
+ background: linear-gradient(
193
+ 135deg,
194
+ rgba(255, 255, 255, 0.3) 0%,
195
+ rgba(255, 255, 255, 0.12) 50%,
196
+ rgba(255, 255, 255, 0.08) 100%
197
+ );
198
+ }
199
+
200
+ .td-video-embed__play-btn svg {
201
+ position: relative;
202
+ z-index: 1;
203
+ width: 32px;
204
+ height: 32px;
205
+ color: white;
206
+ margin-left: 4px;
207
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.4));
208
+ }
209
+
210
+ .td-video-embed__title {
211
+ position: absolute;
212
+ bottom: 0;
213
+ left: 0;
214
+ right: 0;
215
+ padding: 1.5rem;
216
+ color: white;
217
+ font-weight: 600;
218
+ font-size: 1.125rem;
219
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
220
+ z-index: 1;
221
+ }
222
+
223
+ .td-video-embed__loading {
224
+ position: absolute;
225
+ inset: 0;
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: center;
229
+ background: rgba(28, 36, 56, 0.9);
230
+ }
231
+
232
+ .td-video-embed__spinner {
233
+ width: 48px;
234
+ height: 48px;
235
+ border: 3px solid rgba(255, 255, 255, 0.1);
236
+ border-top-color: #E85A4F;
237
+ border-radius: 50%;
238
+ animation: td-video-embed-spin 1s linear infinite;
239
+ }
240
+
241
+ @keyframes td-video-embed-spin {
242
+ to {
243
+ transform: rotate(360deg);
244
+ }
245
+ }
246
+
247
+ @media (max-width: 640px) {
248
+ .td-video-embed__play-btn {
249
+ width: 60px;
250
+ height: 60px;
251
+ }
252
+
253
+ .td-video-embed__play-btn svg {
254
+ width: 24px;
255
+ height: 24px;
256
+ margin-left: 3px;
257
+ }
258
+
259
+ .td-video-embed__title {
260
+ font-size: 1rem;
261
+ padding: 1rem;
262
+ }
263
+ }
264
+ ` });
265
+ }
266
+ export {
267
+ S as VideoEmbed
268
+ };
269
+ //# sourceMappingURL=index17.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index17.js","sources":["../src/components/VideoEmbed.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { clsx } from 'clsx';\n\nexport type VideoProvider = 'youtube' | 'vimeo' | 'custom';\n\nexport interface VideoEmbedProps {\n src?: string;\n videoId?: string;\n provider?: VideoProvider;\n title?: string;\n thumbnail?: string;\n aspectRatio?: string;\n autoplay?: boolean;\n lazyLoad?: boolean;\n className?: string;\n}\n\nfunction getEmbedUrl(\n src: string,\n videoId: string,\n provider: VideoProvider,\n autoplay: boolean,\n isLoaded: boolean\n): string {\n if (src) return src;\n\n if (videoId) {\n switch (provider) {\n case 'youtube': {\n const params = new URLSearchParams({\n autoplay: autoplay || isLoaded ? '1' : '0',\n rel: '0',\n modestbranding: '1',\n });\n return `https://www.youtube.com/embed/${videoId}?${params}`;\n }\n case 'vimeo': {\n const params = new URLSearchParams({\n autoplay: autoplay || isLoaded ? '1' : '0',\n });\n return `https://player.vimeo.com/video/${videoId}?${params}`;\n }\n default:\n return '';\n }\n }\n\n return '';\n}\n\nfunction getThumbnailUrl(thumbnail: string, videoId: string, provider: VideoProvider): string {\n if (thumbnail) return thumbnail;\n if (videoId && provider === 'youtube') {\n return `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`;\n }\n return '';\n}\n\nfunction getAspectPadding(aspectRatio: string): string {\n const [width, height] = aspectRatio.split('/').map(Number);\n if (width && height) {\n return `${(height / width) * 100}%`;\n }\n return '56.25%';\n}\n\nexport function VideoEmbed({\n src = '',\n videoId = '',\n provider = 'youtube',\n title = 'Video',\n thumbnail = '',\n aspectRatio = '16/9',\n autoplay = false,\n lazyLoad = true,\n className,\n}: VideoEmbedProps) {\n const [isLoaded, setIsLoaded] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const embedUrl = getEmbedUrl(src, videoId, provider, autoplay, isLoaded);\n const thumbnailUrl = getThumbnailUrl(thumbnail, videoId, provider);\n const showThumbnail = lazyLoad && !isLoaded && thumbnailUrl;\n\n const handlePlayClick = () => {\n setIsLoading(true);\n setIsLoaded(true);\n };\n\n const handleIframeLoad = () => {\n setIsLoading(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handlePlayClick();\n }\n };\n\n return (\n <>\n <div className={clsx('td-video-embed', className)}>\n <div\n className=\"td-video-embed__aspect\"\n style={{ paddingBottom: getAspectPadding(aspectRatio) }}\n >\n {(isLoaded || !lazyLoad) && (\n <>\n <iframe\n className=\"td-video-embed__iframe\"\n src={embedUrl}\n title={title}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n allowFullScreen\n onLoad={handleIframeLoad}\n />\n {isLoading && (\n <div className=\"td-video-embed__loading\">\n <div className=\"td-video-embed__spinner\" />\n </div>\n )}\n </>\n )}\n\n {showThumbnail && (\n <div\n className=\"td-video-embed__thumbnail\"\n onClick={handlePlayClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={`Play video: ${title}`}\n >\n <img\n className=\"td-video-embed__thumbnail-img\"\n src={thumbnailUrl}\n alt=\"\"\n loading=\"lazy\"\n />\n <div className=\"td-video-embed__gradient\" />\n <div className=\"td-video-embed__play-btn\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </div>\n {title && <div className=\"td-video-embed__title\">{title}</div>}\n </div>\n )}\n </div>\n </div>\n <VideoEmbedStyles />\n </>\n );\n}\n\nfunction VideoEmbedStyles() {\n return (\n <style>{`\n .td-video-embed {\n position: relative;\n width: 100%;\n background: #000;\n border-radius: 0.875rem;\n overflow: hidden;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n }\n\n .td-video-embed__aspect {\n position: relative;\n width: 100%;\n }\n\n .td-video-embed__iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: none;\n }\n\n .td-video-embed__thumbnail {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n background: #000;\n }\n\n .td-video-embed__thumbnail-img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.2s ease;\n }\n\n .td-video-embed__thumbnail:hover .td-video-embed__thumbnail-img {\n transform: scale(1.05);\n }\n\n .td-video-embed__gradient {\n position: absolute;\n inset: 0;\n background: linear-gradient(\n to bottom,\n rgba(0, 0, 0, 0.1) 0%,\n rgba(0, 0, 0, 0.3) 50%,\n rgba(0, 0, 0, 0.5) 100%\n );\n }\n\n .td-video-embed__play-btn {\n position: relative;\n z-index: 1;\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(\n 135deg,\n rgba(255, 255, 255, 0.2) 0%,\n rgba(255, 255, 255, 0.08) 50%,\n rgba(255, 255, 255, 0.05) 100%\n );\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n border-radius: 50%;\n border: 1.5px solid rgba(255, 255, 255, 0.25);\n transition: all 0.15s ease;\n box-shadow:\n 0 8px 32px rgba(0, 0, 0, 0.2),\n 0 4px 12px rgba(0, 0, 0, 0.1),\n inset 0 1px 2px rgba(255, 255, 255, 0.2),\n inset 0 -2px 6px rgba(0, 0, 0, 0.1);\n }\n\n .td-video-embed__thumbnail:hover .td-video-embed__play-btn {\n transform: scale(1.1);\n border-color: rgba(255, 255, 255, 0.4);\n background: linear-gradient(\n 135deg,\n rgba(255, 255, 255, 0.3) 0%,\n rgba(255, 255, 255, 0.12) 50%,\n rgba(255, 255, 255, 0.08) 100%\n );\n }\n\n .td-video-embed__play-btn svg {\n position: relative;\n z-index: 1;\n width: 32px;\n height: 32px;\n color: white;\n margin-left: 4px;\n filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.4));\n }\n\n .td-video-embed__title {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1.5rem;\n color: white;\n font-weight: 600;\n font-size: 1.125rem;\n text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);\n z-index: 1;\n }\n\n .td-video-embed__loading {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(28, 36, 56, 0.9);\n }\n\n .td-video-embed__spinner {\n width: 48px;\n height: 48px;\n border: 3px solid rgba(255, 255, 255, 0.1);\n border-top-color: #E85A4F;\n border-radius: 50%;\n animation: td-video-embed-spin 1s linear infinite;\n }\n\n @keyframes td-video-embed-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @media (max-width: 640px) {\n .td-video-embed__play-btn {\n width: 60px;\n height: 60px;\n }\n\n .td-video-embed__play-btn svg {\n width: 24px;\n height: 24px;\n margin-left: 3px;\n }\n\n .td-video-embed__title {\n font-size: 1rem;\n padding: 1rem;\n }\n }\n `}</style>\n );\n}\n"],"names":["getEmbedUrl","src","videoId","provider","autoplay","isLoaded","params","getThumbnailUrl","thumbnail","getAspectPadding","aspectRatio","width","height","VideoEmbed","title","lazyLoad","className","setIsLoaded","useState","isLoading","setIsLoading","embedUrl","thumbnailUrl","showThumbnail","handlePlayClick","handleIframeLoad","handleKeyDown","e","jsxs","Fragment","jsx","clsx","VideoEmbedStyles"],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { jsxs as n, jsx as r } from "react/jsx-runtime";
2
+ import { clsx as _ } from "./index28.js";
3
+ function f({
4
+ logos: t,
5
+ title: o,
6
+ speed: m = 40,
7
+ direction: s = "left",
8
+ logoHeight: d = "50px",
9
+ gap: g = "3rem",
10
+ pauseOnHover: c = !0,
11
+ color: u = !1,
12
+ className: p
13
+ }) {
14
+ const l = (e, a) => {
15
+ const i = /* @__PURE__ */ r(
16
+ "img",
17
+ {
18
+ src: e.src,
19
+ alt: e.alt,
20
+ className: "td-logo-marquee__logo",
21
+ style: { height: d }
22
+ }
23
+ );
24
+ return e.href ? /* @__PURE__ */ r(
25
+ "a",
26
+ {
27
+ href: e.href,
28
+ target: "_blank",
29
+ rel: "noopener noreferrer",
30
+ className: "td-logo-marquee__item",
31
+ children: i
32
+ },
33
+ `${e.src}-${a}`
34
+ ) : /* @__PURE__ */ r("div", { className: "td-logo-marquee__item", children: i }, `${e.src}-${a}`);
35
+ };
36
+ return /* @__PURE__ */ n(
37
+ "div",
38
+ {
39
+ className: _(
40
+ "td-logo-marquee",
41
+ c && "td-logo-marquee--pause-on-hover",
42
+ u && "td-logo-marquee--color",
43
+ s === "right" && "td-logo-marquee--reverse",
44
+ p
45
+ ),
46
+ style: {
47
+ "--marquee-speed": `${m}s`,
48
+ "--marquee-gap": g
49
+ },
50
+ children: [
51
+ o && /* @__PURE__ */ r("h3", { className: "td-logo-marquee__title", children: o }),
52
+ /* @__PURE__ */ n("div", { className: "td-logo-marquee__wrapper", children: [
53
+ /* @__PURE__ */ r("div", { className: "td-logo-marquee__track", children: t.map(l) }),
54
+ /* @__PURE__ */ r("div", { className: "td-logo-marquee__track", "aria-hidden": "true", children: t.map((e, a) => l(e, a + t.length)) })
55
+ ] }),
56
+ /* @__PURE__ */ r("style", { children: `
57
+ .td-logo-marquee {
58
+ overflow: hidden;
59
+ }
60
+
61
+ .td-logo-marquee__title {
62
+ font-size: 0.875rem;
63
+ font-weight: 600;
64
+ text-transform: uppercase;
65
+ letter-spacing: 0.1em;
66
+ color: rgba(255, 255, 255, 0.6);
67
+ text-align: center;
68
+ margin: 0 0 1.5rem 0;
69
+ }
70
+
71
+ .td-logo-marquee__wrapper {
72
+ display: flex;
73
+ width: max-content;
74
+ animation: td-marquee var(--marquee-speed, 40s) linear infinite;
75
+ mask-image: linear-gradient(
76
+ to right,
77
+ transparent,
78
+ black 5%,
79
+ black 95%,
80
+ transparent
81
+ );
82
+ -webkit-mask-image: linear-gradient(
83
+ to right,
84
+ transparent,
85
+ black 5%,
86
+ black 95%,
87
+ transparent
88
+ );
89
+ }
90
+
91
+ .td-logo-marquee__track {
92
+ display: flex;
93
+ gap: var(--marquee-gap, 3rem);
94
+ padding-right: var(--marquee-gap, 3rem);
95
+ flex-shrink: 0;
96
+ }
97
+
98
+ .td-logo-marquee--reverse .td-logo-marquee__wrapper {
99
+ animation-direction: reverse;
100
+ }
101
+
102
+ .td-logo-marquee--pause-on-hover:hover .td-logo-marquee__wrapper {
103
+ animation-play-state: paused;
104
+ }
105
+
106
+ @keyframes td-marquee {
107
+ from {
108
+ transform: translateX(0);
109
+ }
110
+ to {
111
+ transform: translateX(-50%);
112
+ }
113
+ }
114
+
115
+ .td-logo-marquee__item {
116
+ flex-shrink: 0;
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: center;
120
+ }
121
+
122
+ .td-logo-marquee__logo {
123
+ width: auto;
124
+ object-fit: contain;
125
+ filter: grayscale(100%) brightness(2);
126
+ opacity: 0.7;
127
+ transition: all 0.2s ease;
128
+ }
129
+
130
+ .td-logo-marquee--color .td-logo-marquee__logo {
131
+ filter: none;
132
+ opacity: 1;
133
+ }
134
+
135
+ .td-logo-marquee__item:hover .td-logo-marquee__logo {
136
+ filter: grayscale(0%) brightness(1);
137
+ opacity: 1;
138
+ }
139
+ ` })
140
+ ]
141
+ }
142
+ );
143
+ }
144
+ export {
145
+ f as LogoMarquee
146
+ };
147
+ //# sourceMappingURL=index18.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index18.js","sources":["../src/components/LogoMarquee.tsx"],"sourcesContent":["'use client';\n\nimport { clsx } from 'clsx';\n\nexport interface MarqueeLogo {\n src: string;\n alt: string;\n href?: string;\n}\n\nexport interface LogoMarqueeProps {\n logos: MarqueeLogo[];\n title?: string;\n speed?: number;\n direction?: 'left' | 'right';\n logoHeight?: string;\n gap?: string;\n pauseOnHover?: boolean;\n color?: boolean;\n className?: string;\n}\n\nexport function LogoMarquee({\n logos,\n title,\n speed = 40,\n direction = 'left',\n logoHeight = '50px',\n gap = '3rem',\n pauseOnHover = true,\n color = false,\n className,\n}: LogoMarqueeProps) {\n const renderLogo = (logo: MarqueeLogo, index: number) => {\n const img = (\n <img\n src={logo.src}\n alt={logo.alt}\n className=\"td-logo-marquee__logo\"\n style={{ height: logoHeight }}\n />\n );\n\n if (logo.href) {\n return (\n <a\n key={`${logo.src}-${index}`}\n href={logo.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"td-logo-marquee__item\"\n >\n {img}\n </a>\n );\n }\n\n return (\n <div key={`${logo.src}-${index}`} className=\"td-logo-marquee__item\">\n {img}\n </div>\n );\n };\n\n return (\n <div\n className={clsx(\n 'td-logo-marquee',\n pauseOnHover && 'td-logo-marquee--pause-on-hover',\n color && 'td-logo-marquee--color',\n direction === 'right' && 'td-logo-marquee--reverse',\n className\n )}\n style={{\n '--marquee-speed': `${speed}s`,\n '--marquee-gap': gap,\n } as React.CSSProperties}\n >\n {title && <h3 className=\"td-logo-marquee__title\">{title}</h3>}\n <div className=\"td-logo-marquee__wrapper\">\n <div className=\"td-logo-marquee__track\">\n {logos.map(renderLogo)}\n </div>\n <div className=\"td-logo-marquee__track\" aria-hidden=\"true\">\n {logos.map((logo, i) => renderLogo(logo, i + logos.length))}\n </div>\n </div>\n\n <style>{`\n .td-logo-marquee {\n overflow: hidden;\n }\n\n .td-logo-marquee__title {\n font-size: 0.875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n color: rgba(255, 255, 255, 0.6);\n text-align: center;\n margin: 0 0 1.5rem 0;\n }\n\n .td-logo-marquee__wrapper {\n display: flex;\n width: max-content;\n animation: td-marquee var(--marquee-speed, 40s) linear infinite;\n mask-image: linear-gradient(\n to right,\n transparent,\n black 5%,\n black 95%,\n transparent\n );\n -webkit-mask-image: linear-gradient(\n to right,\n transparent,\n black 5%,\n black 95%,\n transparent\n );\n }\n\n .td-logo-marquee__track {\n display: flex;\n gap: var(--marquee-gap, 3rem);\n padding-right: var(--marquee-gap, 3rem);\n flex-shrink: 0;\n }\n\n .td-logo-marquee--reverse .td-logo-marquee__wrapper {\n animation-direction: reverse;\n }\n\n .td-logo-marquee--pause-on-hover:hover .td-logo-marquee__wrapper {\n animation-play-state: paused;\n }\n\n @keyframes td-marquee {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(-50%);\n }\n }\n\n .td-logo-marquee__item {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .td-logo-marquee__logo {\n width: auto;\n object-fit: contain;\n filter: grayscale(100%) brightness(2);\n opacity: 0.7;\n transition: all 0.2s ease;\n }\n\n .td-logo-marquee--color .td-logo-marquee__logo {\n filter: none;\n opacity: 1;\n }\n\n .td-logo-marquee__item:hover .td-logo-marquee__logo {\n filter: grayscale(0%) brightness(1);\n opacity: 1;\n }\n `}</style>\n </div>\n );\n}\n"],"names":["LogoMarquee","logos","title","speed","direction","logoHeight","gap","pauseOnHover","color","className","renderLogo","logo","index","img","jsx","jsxs","clsx","i"],"mappings":";;AAsBO,SAASA,EAAY;AAAA,EAC1B,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,KAAAC,IAAM;AAAA,EACN,cAAAC,IAAe;AAAA,EACf,OAAAC,IAAQ;AAAA,EACR,WAAAC;AACF,GAAqB;AACnB,QAAMC,IAAa,CAACC,GAAmBC,MAAkB;AACvD,UAAMC,IACJ,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKH,EAAK;AAAA,QACV,KAAKA,EAAK;AAAA,QACV,WAAU;AAAA,QACV,OAAO,EAAE,QAAQN,EAAA;AAAA,MAAW;AAAA,IAAA;AAIhC,WAAIM,EAAK,OAEL,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAMH,EAAK;AAAA,QACX,QAAO;AAAA,QACP,KAAI;AAAA,QACJ,WAAU;AAAA,QAET,UAAAE;AAAA,MAAA;AAAA,MANI,GAAGF,EAAK,GAAG,IAAIC,CAAK;AAAA,IAAA,IAY7B,gBAAAE,EAAC,OAAA,EAAiC,WAAU,yBACzC,UAAAD,KADO,GAAGF,EAAK,GAAG,IAAIC,CAAK,EAE9B;AAAA,EAEJ;AAEA,SACE,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAT,KAAgB;AAAA,QAChBC,KAAS;AAAA,QACTJ,MAAc,WAAW;AAAA,QACzBK;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,mBAAmB,GAAGN,CAAK;AAAA,QAC3B,iBAAiBG;AAAA,MAAA;AAAA,MAGlB,UAAA;AAAA,QAAAJ,KAAS,gBAAAY,EAAC,MAAA,EAAG,WAAU,0BAA0B,UAAAZ,GAAM;AAAA,QACxD,gBAAAa,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,UAAA,gBAAAD,EAAC,SAAI,WAAU,0BACZ,UAAAb,EAAM,IAAIS,CAAU,GACvB;AAAA,4BACC,OAAA,EAAI,WAAU,0BAAyB,eAAY,QACjD,UAAAT,EAAM,IAAI,CAACU,GAAMM,MAAMP,EAAWC,GAAMM,IAAIhB,EAAM,MAAM,CAAC,EAAA,CAC5D;AAAA,QAAA,GACF;AAAA,0BAEC,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAmFN;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGR;"}