@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
package/dist/index7.js ADDED
@@ -0,0 +1,254 @@
1
+ import { jsxs as d, Fragment as b, jsx as r } from "react/jsx-runtime";
2
+ import { useState as u } from "react";
3
+ import { clsx as l } from "./index28.js";
4
+ import { Logo as f } from "./index6.js";
5
+ function N({
6
+ links: i = [],
7
+ actions: n = [],
8
+ homeHref: s = "/",
9
+ sticky: h = !0,
10
+ logo: m,
11
+ className: c
12
+ }) {
13
+ const [a, t] = u(!1), _ = () => {
14
+ t(!a);
15
+ }, o = (e, p = !1) => {
16
+ const g = p ? () => t(!1) : void 0;
17
+ return /* @__PURE__ */ d(
18
+ "a",
19
+ {
20
+ className: "td-header__link",
21
+ href: e.href,
22
+ target: e.external ? "_blank" : void 0,
23
+ rel: e.external ? "noopener noreferrer" : void 0,
24
+ onClick: g,
25
+ children: [
26
+ e.icon,
27
+ e.label
28
+ ]
29
+ },
30
+ e.href + e.label
31
+ );
32
+ };
33
+ return /* @__PURE__ */ d(b, { children: [
34
+ /* @__PURE__ */ r("header", { className: l("td-header", h && "td-header--sticky", c), children: /* @__PURE__ */ d("nav", { className: "td-header__nav", children: [
35
+ /* @__PURE__ */ d("div", { className: "td-header__inner", children: [
36
+ /* @__PURE__ */ d("div", { className: "td-header__left", children: [
37
+ /* @__PURE__ */ r("a", { className: "td-header__brand", href: s, children: m || /* @__PURE__ */ r(f, { variant: "full", size: "sm", textColor: "#1C2438" }) }),
38
+ /* @__PURE__ */ r("div", { className: "td-header__desktop-links", children: i.map((e) => o(e)) })
39
+ ] }),
40
+ /* @__PURE__ */ d("div", { className: "td-header__right", children: [
41
+ /* @__PURE__ */ r("div", { className: "td-header__actions", children: n.map((e) => o(e)) }),
42
+ /* @__PURE__ */ r(
43
+ "button",
44
+ {
45
+ className: "td-header__hamburger",
46
+ onClick: _,
47
+ "aria-label": "Toggle menu",
48
+ "aria-expanded": a,
49
+ children: a ? /* @__PURE__ */ r("svg", { fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) : /* @__PURE__ */ r("svg", { fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h16M4 18h16" }) })
50
+ }
51
+ )
52
+ ] })
53
+ ] }),
54
+ /* @__PURE__ */ r("div", { className: l("td-header__mobile-menu", a && "td-header__mobile-menu--open"), children: /* @__PURE__ */ d("div", { className: "td-header__mobile-inner", children: [
55
+ i.map((e) => o(e, !0)),
56
+ n.map((e) => o(e, !0))
57
+ ] }) })
58
+ ] }) }),
59
+ /* @__PURE__ */ r(k, {})
60
+ ] });
61
+ }
62
+ function k() {
63
+ return /* @__PURE__ */ r("style", { children: `
64
+ .td-header {
65
+ background: rgba(255, 255, 255, 0.7);
66
+ backdrop-filter: blur(24px);
67
+ -webkit-backdrop-filter: blur(24px);
68
+ border-bottom: 1px solid rgba(229, 231, 235, 0.5);
69
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05);
70
+ }
71
+
72
+ .td-header--sticky {
73
+ position: sticky;
74
+ top: 0;
75
+ z-index: 50;
76
+ }
77
+
78
+ @media (prefers-color-scheme: dark) {
79
+ .td-header {
80
+ background: rgba(3, 7, 18, 0.7);
81
+ border-bottom-color: rgba(31, 41, 55, 0.5);
82
+ }
83
+ }
84
+
85
+ .td-header__nav {
86
+ max-width: 80rem;
87
+ margin: 0 auto;
88
+ padding: 0 1rem;
89
+ }
90
+
91
+ @media (min-width: 640px) {
92
+ .td-header__nav {
93
+ padding: 0 1.5rem;
94
+ }
95
+ }
96
+
97
+ @media (min-width: 1024px) {
98
+ .td-header__nav {
99
+ padding: 0 2rem;
100
+ }
101
+ }
102
+
103
+ .td-header__inner {
104
+ display: flex;
105
+ justify-content: space-between;
106
+ height: 4rem;
107
+ }
108
+
109
+ .td-header__left {
110
+ display: flex;
111
+ align-items: center;
112
+ gap: 2rem;
113
+ }
114
+
115
+ .td-header__brand {
116
+ display: flex;
117
+ align-items: center;
118
+ text-decoration: none;
119
+ }
120
+
121
+ .td-header__desktop-links {
122
+ display: none;
123
+ align-items: center;
124
+ gap: 0.25rem;
125
+ }
126
+
127
+ @media (min-width: 768px) {
128
+ .td-header__desktop-links {
129
+ display: flex;
130
+ }
131
+ }
132
+
133
+ .td-header__link {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 0.5rem;
137
+ padding: 0.5rem 0.75rem;
138
+ border-radius: 0.5rem;
139
+ font-size: 0.875rem;
140
+ font-weight: 500;
141
+ color: #4B5563;
142
+ text-decoration: none;
143
+ transition: background-color 0.15s ease, color 0.15s ease;
144
+ }
145
+
146
+ @media (prefers-color-scheme: dark) {
147
+ .td-header__link {
148
+ color: #9CA3AF;
149
+ }
150
+ }
151
+
152
+ .td-header__link:hover {
153
+ background-color: rgba(243, 244, 246, 1);
154
+ }
155
+
156
+ @media (prefers-color-scheme: dark) {
157
+ .td-header__link:hover {
158
+ background-color: rgba(31, 41, 55, 1);
159
+ }
160
+ }
161
+
162
+ .td-header__link svg {
163
+ width: 1.25rem;
164
+ height: 1.25rem;
165
+ }
166
+
167
+ .td-header__right {
168
+ display: flex;
169
+ align-items: center;
170
+ gap: 1rem;
171
+ }
172
+
173
+ .td-header__actions {
174
+ display: none;
175
+ align-items: center;
176
+ gap: 0.25rem;
177
+ }
178
+
179
+ @media (min-width: 768px) {
180
+ .td-header__actions {
181
+ display: flex;
182
+ }
183
+ }
184
+
185
+ .td-header__hamburger {
186
+ display: flex;
187
+ padding: 0.5rem;
188
+ border-radius: 0.5rem;
189
+ color: #4B5563;
190
+ background: none;
191
+ border: none;
192
+ cursor: pointer;
193
+ }
194
+
195
+ @media (prefers-color-scheme: dark) {
196
+ .td-header__hamburger {
197
+ color: #9CA3AF;
198
+ }
199
+ }
200
+
201
+ .td-header__hamburger:hover {
202
+ background-color: rgba(243, 244, 246, 1);
203
+ }
204
+
205
+ @media (prefers-color-scheme: dark) {
206
+ .td-header__hamburger:hover {
207
+ background-color: rgba(31, 41, 55, 1);
208
+ }
209
+ }
210
+
211
+ @media (min-width: 768px) {
212
+ .td-header__hamburger {
213
+ display: none;
214
+ }
215
+ }
216
+
217
+ .td-header__hamburger svg {
218
+ width: 1.5rem;
219
+ height: 1.5rem;
220
+ }
221
+
222
+ .td-header__mobile-menu {
223
+ display: none;
224
+ padding: 1rem 0;
225
+ border-top: 1px solid rgba(229, 231, 235, 1);
226
+ }
227
+
228
+ @media (prefers-color-scheme: dark) {
229
+ .td-header__mobile-menu {
230
+ border-top-color: rgba(31, 41, 55, 1);
231
+ }
232
+ }
233
+
234
+ .td-header__mobile-menu--open {
235
+ display: block;
236
+ }
237
+
238
+ @media (min-width: 768px) {
239
+ .td-header__mobile-menu {
240
+ display: none !important;
241
+ }
242
+ }
243
+
244
+ .td-header__mobile-inner {
245
+ display: flex;
246
+ flex-direction: column;
247
+ gap: 0.25rem;
248
+ }
249
+ ` });
250
+ }
251
+ export {
252
+ N as Header
253
+ };
254
+ //# sourceMappingURL=index7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index7.js","sources":["../src/components/Header.tsx"],"sourcesContent":["'use client';\n\nimport { useState, ReactNode } from 'react';\nimport { clsx } from 'clsx';\nimport { Logo } from './Logo';\n\nexport interface NavLink {\n label: string;\n href: string;\n external?: boolean;\n icon?: ReactNode;\n}\n\nexport interface HeaderProps {\n links?: NavLink[];\n actions?: NavLink[];\n homeHref?: string;\n sticky?: boolean;\n logo?: ReactNode;\n className?: string;\n}\n\nexport function Header({\n links = [],\n actions = [],\n homeHref = '/',\n sticky = true,\n logo,\n className,\n}: HeaderProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n\n const toggleMobileMenu = () => {\n setMobileMenuOpen(!mobileMenuOpen);\n };\n\n const renderLink = (link: NavLink, closeMobile = false) => {\n const handleClick = closeMobile ? () => setMobileMenuOpen(false) : undefined;\n\n return (\n <a\n key={link.href + link.label}\n className=\"td-header__link\"\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n onClick={handleClick}\n >\n {link.icon}\n {link.label}\n </a>\n );\n };\n\n return (\n <>\n <header className={clsx('td-header', sticky && 'td-header--sticky', className)}>\n <nav className=\"td-header__nav\">\n <div className=\"td-header__inner\">\n <div className=\"td-header__left\">\n <a className=\"td-header__brand\" href={homeHref}>\n {logo || <Logo variant=\"full\" size=\"sm\" textColor=\"#1C2438\" />}\n </a>\n\n <div className=\"td-header__desktop-links\">\n {links.map(link => renderLink(link))}\n </div>\n </div>\n\n <div className=\"td-header__right\">\n <div className=\"td-header__actions\">\n {actions.map(link => renderLink(link))}\n </div>\n\n <button\n className=\"td-header__hamburger\"\n onClick={toggleMobileMenu}\n aria-label=\"Toggle menu\"\n aria-expanded={mobileMenuOpen}\n >\n {mobileMenuOpen ? (\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n\n <div className={clsx('td-header__mobile-menu', mobileMenuOpen && 'td-header__mobile-menu--open')}>\n <div className=\"td-header__mobile-inner\">\n {links.map(link => renderLink(link, true))}\n {actions.map(link => renderLink(link, true))}\n </div>\n </div>\n </nav>\n </header>\n <HeaderStyles />\n </>\n );\n}\n\nfunction HeaderStyles() {\n return (\n <style>{`\n .td-header {\n background: rgba(255, 255, 255, 0.7);\n backdrop-filter: blur(24px);\n -webkit-backdrop-filter: blur(24px);\n border-bottom: 1px solid rgba(229, 231, 235, 0.5);\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.05);\n }\n\n .td-header--sticky {\n position: sticky;\n top: 0;\n z-index: 50;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-header {\n background: rgba(3, 7, 18, 0.7);\n border-bottom-color: rgba(31, 41, 55, 0.5);\n }\n }\n\n .td-header__nav {\n max-width: 80rem;\n margin: 0 auto;\n padding: 0 1rem;\n }\n\n @media (min-width: 640px) {\n .td-header__nav {\n padding: 0 1.5rem;\n }\n }\n\n @media (min-width: 1024px) {\n .td-header__nav {\n padding: 0 2rem;\n }\n }\n\n .td-header__inner {\n display: flex;\n justify-content: space-between;\n height: 4rem;\n }\n\n .td-header__left {\n display: flex;\n align-items: center;\n gap: 2rem;\n }\n\n .td-header__brand {\n display: flex;\n align-items: center;\n text-decoration: none;\n }\n\n .td-header__desktop-links {\n display: none;\n align-items: center;\n gap: 0.25rem;\n }\n\n @media (min-width: 768px) {\n .td-header__desktop-links {\n display: flex;\n }\n }\n\n .td-header__link {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 0.75rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: #4B5563;\n text-decoration: none;\n transition: background-color 0.15s ease, color 0.15s ease;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-header__link {\n color: #9CA3AF;\n }\n }\n\n .td-header__link:hover {\n background-color: rgba(243, 244, 246, 1);\n }\n\n @media (prefers-color-scheme: dark) {\n .td-header__link:hover {\n background-color: rgba(31, 41, 55, 1);\n }\n }\n\n .td-header__link svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n\n .td-header__right {\n display: flex;\n align-items: center;\n gap: 1rem;\n }\n\n .td-header__actions {\n display: none;\n align-items: center;\n gap: 0.25rem;\n }\n\n @media (min-width: 768px) {\n .td-header__actions {\n display: flex;\n }\n }\n\n .td-header__hamburger {\n display: flex;\n padding: 0.5rem;\n border-radius: 0.5rem;\n color: #4B5563;\n background: none;\n border: none;\n cursor: pointer;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-header__hamburger {\n color: #9CA3AF;\n }\n }\n\n .td-header__hamburger:hover {\n background-color: rgba(243, 244, 246, 1);\n }\n\n @media (prefers-color-scheme: dark) {\n .td-header__hamburger:hover {\n background-color: rgba(31, 41, 55, 1);\n }\n }\n\n @media (min-width: 768px) {\n .td-header__hamburger {\n display: none;\n }\n }\n\n .td-header__hamburger svg {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n .td-header__mobile-menu {\n display: none;\n padding: 1rem 0;\n border-top: 1px solid rgba(229, 231, 235, 1);\n }\n\n @media (prefers-color-scheme: dark) {\n .td-header__mobile-menu {\n border-top-color: rgba(31, 41, 55, 1);\n }\n }\n\n .td-header__mobile-menu--open {\n display: block;\n }\n\n @media (min-width: 768px) {\n .td-header__mobile-menu {\n display: none !important;\n }\n }\n\n .td-header__mobile-inner {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n `}</style>\n );\n}\n"],"names":["Header","links","actions","homeHref","sticky","logo","className","mobileMenuOpen","setMobileMenuOpen","useState","toggleMobileMenu","renderLink","link","closeMobile","handleClick","jsxs","Fragment","jsx","clsx","Logo","HeaderStyles"],"mappings":"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"}
package/dist/index8.js ADDED
@@ -0,0 +1,237 @@
1
+ import { jsxs as o, Fragment as p, jsx as e } from "react/jsx-runtime";
2
+ import { clsx as _ } from "./index28.js";
3
+ import { Logo as h } from "./index6.js";
4
+ import { Icon as g } from "./index3.js";
5
+ function w({
6
+ description: d,
7
+ linkGroups: l = [],
8
+ socials: n = [],
9
+ copyright: a,
10
+ logo: c,
11
+ className: s
12
+ }) {
13
+ const m = a || `© ${(/* @__PURE__ */ new Date()).getFullYear()} Tampa Devs. All rights reserved.`;
14
+ return /* @__PURE__ */ o(p, { children: [
15
+ /* @__PURE__ */ e("footer", { className: _("td-footer", s), children: /* @__PURE__ */ o("div", { className: "td-footer__container", children: [
16
+ /* @__PURE__ */ o("div", { className: "td-footer__grid", children: [
17
+ /* @__PURE__ */ o("div", { className: "td-footer__brand-section", children: [
18
+ /* @__PURE__ */ e("div", { className: "td-footer__brand", children: c || /* @__PURE__ */ e(h, { variant: "full", size: "sm", textColor: "#1C2438" }) }),
19
+ d && /* @__PURE__ */ e("p", { className: "td-footer__description", children: d })
20
+ ] }),
21
+ l.map((r, i) => /* @__PURE__ */ o("div", { className: "td-footer__link-group", children: [
22
+ /* @__PURE__ */ e("h3", { children: r.title }),
23
+ /* @__PURE__ */ e("ul", { children: r.links.map((t, f) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
24
+ "a",
25
+ {
26
+ href: t.href,
27
+ target: t.external ? "_blank" : void 0,
28
+ rel: t.external ? "noopener noreferrer" : void 0,
29
+ children: t.label
30
+ }
31
+ ) }, f)) })
32
+ ] }, i))
33
+ ] }),
34
+ /* @__PURE__ */ o("div", { className: "td-footer__bottom", children: [
35
+ /* @__PURE__ */ e("p", { className: "td-footer__copyright", children: m }),
36
+ n.length > 0 && /* @__PURE__ */ e("div", { className: "td-footer__socials", children: n.map((r, i) => /* @__PURE__ */ o(
37
+ "a",
38
+ {
39
+ className: "td-footer__social-link",
40
+ href: r.href,
41
+ target: "_blank",
42
+ rel: "noopener noreferrer",
43
+ children: [
44
+ /* @__PURE__ */ e("span", { className: "sr-only", children: r.name }),
45
+ /* @__PURE__ */ e(g, { name: r.icon, size: "sm" })
46
+ ]
47
+ },
48
+ i
49
+ )) })
50
+ ] })
51
+ ] }) }),
52
+ /* @__PURE__ */ e(x, {})
53
+ ] });
54
+ }
55
+ function x() {
56
+ return /* @__PURE__ */ e("style", { children: `
57
+ .td-footer {
58
+ background-color: #F9FAFB;
59
+ border-top: 1px solid #E5E7EB;
60
+ }
61
+
62
+ @media (prefers-color-scheme: dark) {
63
+ .td-footer {
64
+ background-color: #111827;
65
+ border-top-color: #1F2937;
66
+ }
67
+ }
68
+
69
+ .td-footer__container {
70
+ max-width: 80rem;
71
+ margin: 0 auto;
72
+ padding: 3rem 1rem;
73
+ }
74
+
75
+ @media (min-width: 640px) {
76
+ .td-footer__container {
77
+ padding: 3rem 1.5rem;
78
+ }
79
+ }
80
+
81
+ @media (min-width: 1024px) {
82
+ .td-footer__container {
83
+ padding: 3rem 2rem;
84
+ }
85
+ }
86
+
87
+ .td-footer__grid {
88
+ display: grid;
89
+ grid-template-columns: 1fr;
90
+ gap: 2rem;
91
+ }
92
+
93
+ @media (min-width: 768px) {
94
+ .td-footer__grid {
95
+ grid-template-columns: 2fr 1fr 1fr;
96
+ }
97
+ }
98
+
99
+ .td-footer__brand-section {
100
+ grid-column: span 1;
101
+ }
102
+
103
+ .td-footer__brand {
104
+ display: inline-block;
105
+ }
106
+
107
+ .td-footer__description {
108
+ margin-top: 0.5rem;
109
+ font-size: 0.875rem;
110
+ color: #4B5563;
111
+ max-width: 28rem;
112
+ line-height: 1.5;
113
+ }
114
+
115
+ @media (prefers-color-scheme: dark) {
116
+ .td-footer__description {
117
+ color: #9CA3AF;
118
+ }
119
+ }
120
+
121
+ .td-footer__link-group h3 {
122
+ font-size: 0.875rem;
123
+ font-weight: 600;
124
+ color: #111827;
125
+ text-transform: uppercase;
126
+ letter-spacing: 0.05em;
127
+ margin: 0 0 1rem 0;
128
+ }
129
+
130
+ @media (prefers-color-scheme: dark) {
131
+ .td-footer__link-group h3 {
132
+ color: white;
133
+ }
134
+ }
135
+
136
+ .td-footer__link-group ul {
137
+ list-style: none;
138
+ padding: 0;
139
+ margin: 0;
140
+ display: flex;
141
+ flex-direction: column;
142
+ gap: 0.5rem;
143
+ }
144
+
145
+ .td-footer__link-group a {
146
+ font-size: 0.875rem;
147
+ color: #4B5563;
148
+ text-decoration: none;
149
+ transition: color 0.15s ease;
150
+ }
151
+
152
+ @media (prefers-color-scheme: dark) {
153
+ .td-footer__link-group a {
154
+ color: #9CA3AF;
155
+ }
156
+ }
157
+
158
+ .td-footer__link-group a:hover {
159
+ color: #1C2438;
160
+ }
161
+
162
+ @media (prefers-color-scheme: dark) {
163
+ .td-footer__link-group a:hover {
164
+ color: white;
165
+ }
166
+ }
167
+
168
+ .td-footer__bottom {
169
+ margin-top: 2rem;
170
+ padding-top: 2rem;
171
+ border-top: 1px solid #E5E7EB;
172
+ display: flex;
173
+ flex-direction: column;
174
+ gap: 1rem;
175
+ align-items: center;
176
+ }
177
+
178
+ @media (min-width: 640px) {
179
+ .td-footer__bottom {
180
+ flex-direction: row;
181
+ justify-content: space-between;
182
+ }
183
+ }
184
+
185
+ @media (prefers-color-scheme: dark) {
186
+ .td-footer__bottom {
187
+ border-top-color: #1F2937;
188
+ }
189
+ }
190
+
191
+ .td-footer__copyright {
192
+ font-size: 0.875rem;
193
+ color: #6B7280;
194
+ margin: 0;
195
+ }
196
+
197
+ .td-footer__socials {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 1rem;
201
+ }
202
+
203
+ .td-footer__social-link {
204
+ color: #9CA3AF;
205
+ transition: color 0.15s ease;
206
+ display: flex;
207
+ align-items: center;
208
+ justify-content: center;
209
+ }
210
+
211
+ .td-footer__social-link:hover {
212
+ color: #4B5563;
213
+ }
214
+
215
+ @media (prefers-color-scheme: dark) {
216
+ .td-footer__social-link:hover {
217
+ color: #D1D5DB;
218
+ }
219
+ }
220
+
221
+ .sr-only {
222
+ position: absolute;
223
+ width: 1px;
224
+ height: 1px;
225
+ padding: 0;
226
+ margin: -1px;
227
+ overflow: hidden;
228
+ clip: rect(0, 0, 0, 0);
229
+ white-space: nowrap;
230
+ border: 0;
231
+ }
232
+ ` });
233
+ }
234
+ export {
235
+ w as Footer
236
+ };
237
+ //# sourceMappingURL=index8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index8.js","sources":["../src/components/Footer.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { clsx } from 'clsx';\nimport { Logo } from './Logo';\nimport { Icon } from './Icon';\n\nexport interface FooterLink {\n label: string;\n href: string;\n external?: boolean;\n}\n\nexport interface FooterLinkGroup {\n title: string;\n links: FooterLink[];\n}\n\nexport interface FooterSocialLink {\n name: string;\n href: string;\n icon: 'github' | 'twitter' | 'linkedin' | 'globe' | 'mail';\n}\n\nexport interface FooterProps {\n description?: string;\n linkGroups?: FooterLinkGroup[];\n socials?: FooterSocialLink[];\n copyright?: string;\n logo?: ReactNode;\n className?: string;\n}\n\nexport function Footer({\n description,\n linkGroups = [],\n socials = [],\n copyright,\n logo,\n className,\n}: FooterProps) {\n const copyrightText = copyright || `© ${new Date().getFullYear()} Tampa Devs. All rights reserved.`;\n\n return (\n <>\n <footer className={clsx('td-footer', className)}>\n <div className=\"td-footer__container\">\n <div className=\"td-footer__grid\">\n <div className=\"td-footer__brand-section\">\n <div className=\"td-footer__brand\">\n {logo || <Logo variant=\"full\" size=\"sm\" textColor=\"#1C2438\" />}\n </div>\n {description && <p className=\"td-footer__description\">{description}</p>}\n </div>\n\n {linkGroups.map((group, i) => (\n <div key={i} className=\"td-footer__link-group\">\n <h3>{group.title}</h3>\n <ul>\n {group.links.map((link, j) => (\n <li key={j}>\n <a\n href={link.href}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n <div className=\"td-footer__bottom\">\n <p className=\"td-footer__copyright\">{copyrightText}</p>\n\n {socials.length > 0 && (\n <div className=\"td-footer__socials\">\n {socials.map((social, i) => (\n <a\n key={i}\n className=\"td-footer__social-link\"\n href={social.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span className=\"sr-only\">{social.name}</span>\n <Icon name={social.icon} size=\"sm\" />\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n </footer>\n <FooterStyles />\n </>\n );\n}\n\nfunction FooterStyles() {\n return (\n <style>{`\n .td-footer {\n background-color: #F9FAFB;\n border-top: 1px solid #E5E7EB;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer {\n background-color: #111827;\n border-top-color: #1F2937;\n }\n }\n\n .td-footer__container {\n max-width: 80rem;\n margin: 0 auto;\n padding: 3rem 1rem;\n }\n\n @media (min-width: 640px) {\n .td-footer__container {\n padding: 3rem 1.5rem;\n }\n }\n\n @media (min-width: 1024px) {\n .td-footer__container {\n padding: 3rem 2rem;\n }\n }\n\n .td-footer__grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 2rem;\n }\n\n @media (min-width: 768px) {\n .td-footer__grid {\n grid-template-columns: 2fr 1fr 1fr;\n }\n }\n\n .td-footer__brand-section {\n grid-column: span 1;\n }\n\n .td-footer__brand {\n display: inline-block;\n }\n\n .td-footer__description {\n margin-top: 0.5rem;\n font-size: 0.875rem;\n color: #4B5563;\n max-width: 28rem;\n line-height: 1.5;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer__description {\n color: #9CA3AF;\n }\n }\n\n .td-footer__link-group h3 {\n font-size: 0.875rem;\n font-weight: 600;\n color: #111827;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n margin: 0 0 1rem 0;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer__link-group h3 {\n color: white;\n }\n }\n\n .td-footer__link-group ul {\n list-style: none;\n padding: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .td-footer__link-group a {\n font-size: 0.875rem;\n color: #4B5563;\n text-decoration: none;\n transition: color 0.15s ease;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer__link-group a {\n color: #9CA3AF;\n }\n }\n\n .td-footer__link-group a:hover {\n color: #1C2438;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer__link-group a:hover {\n color: white;\n }\n }\n\n .td-footer__bottom {\n margin-top: 2rem;\n padding-top: 2rem;\n border-top: 1px solid #E5E7EB;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n align-items: center;\n }\n\n @media (min-width: 640px) {\n .td-footer__bottom {\n flex-direction: row;\n justify-content: space-between;\n }\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer__bottom {\n border-top-color: #1F2937;\n }\n }\n\n .td-footer__copyright {\n font-size: 0.875rem;\n color: #6B7280;\n margin: 0;\n }\n\n .td-footer__socials {\n display: flex;\n align-items: center;\n gap: 1rem;\n }\n\n .td-footer__social-link {\n color: #9CA3AF;\n transition: color 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .td-footer__social-link:hover {\n color: #4B5563;\n }\n\n @media (prefers-color-scheme: dark) {\n .td-footer__social-link:hover {\n color: #D1D5DB;\n }\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `}</style>\n );\n}\n"],"names":["Footer","description","linkGroups","socials","copyright","logo","className","copyrightText","jsxs","Fragment","jsx","clsx","Logo","group","link","j","social","Icon","FooterStyles"],"mappings":"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"}
package/dist/index9.js ADDED
@@ -0,0 +1,142 @@
1
+ import { jsxs as o, Fragment as _, jsx as r } from "react/jsx-runtime";
2
+ import { useRef as p } from "react";
3
+ import { clsx as h } from "./index28.js";
4
+ function g({
5
+ title: t,
6
+ scrollAmount: a = 400,
7
+ hideControls: l = !1,
8
+ gap: s = "1.5rem",
9
+ children: c,
10
+ className: i
11
+ }) {
12
+ const e = p(null), n = (d) => {
13
+ if (e.current) {
14
+ const u = d === "left" ? -a : a;
15
+ e.current.scrollBy({
16
+ left: u,
17
+ behavior: "smooth"
18
+ });
19
+ }
20
+ };
21
+ return /* @__PURE__ */ o(_, { children: [
22
+ /* @__PURE__ */ o("div", { className: h("td-carousel", i), children: [
23
+ t && /* @__PURE__ */ r("h2", { className: "td-carousel__title", children: t }),
24
+ /* @__PURE__ */ o("div", { className: "td-carousel__wrapper", children: [
25
+ !l && /* @__PURE__ */ r(
26
+ "button",
27
+ {
28
+ className: "td-carousel__nav td-carousel__nav--left",
29
+ onClick: () => n("left"),
30
+ "aria-label": "Scroll left",
31
+ children: /* @__PURE__ */ r("svg", { fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
32
+ }
33
+ ),
34
+ /* @__PURE__ */ r(
35
+ "div",
36
+ {
37
+ ref: e,
38
+ className: "td-carousel__track",
39
+ style: { gap: s },
40
+ children: c
41
+ }
42
+ ),
43
+ !l && /* @__PURE__ */ r(
44
+ "button",
45
+ {
46
+ className: "td-carousel__nav td-carousel__nav--right",
47
+ onClick: () => n("right"),
48
+ "aria-label": "Scroll right",
49
+ children: /* @__PURE__ */ r("svg", { fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
50
+ }
51
+ )
52
+ ] })
53
+ ] }),
54
+ /* @__PURE__ */ r(m, {})
55
+ ] });
56
+ }
57
+ function m() {
58
+ return /* @__PURE__ */ r("style", { children: `
59
+ .td-carousel {
60
+ position: relative;
61
+ }
62
+
63
+ .td-carousel__title {
64
+ font-size: 1.5rem;
65
+ font-weight: 700;
66
+ color: #111827;
67
+ margin-bottom: 1.5rem;
68
+ }
69
+
70
+ .td-carousel__wrapper {
71
+ position: relative;
72
+ }
73
+
74
+ .td-carousel__wrapper:hover .td-carousel__nav {
75
+ opacity: 1;
76
+ }
77
+
78
+ .td-carousel__track {
79
+ display: flex;
80
+ overflow-x: auto;
81
+ padding-bottom: 1rem;
82
+ scroll-snap-type: x mandatory;
83
+ scrollbar-width: none;
84
+ -ms-overflow-style: none;
85
+ }
86
+
87
+ .td-carousel__track::-webkit-scrollbar {
88
+ display: none;
89
+ }
90
+
91
+ .td-carousel__track > * {
92
+ flex-shrink: 0;
93
+ scroll-snap-align: start;
94
+ }
95
+
96
+ .td-carousel__nav {
97
+ position: absolute;
98
+ top: 50%;
99
+ transform: translateY(-50%);
100
+ z-index: 10;
101
+ background: white;
102
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
103
+ border-radius: 9999px;
104
+ padding: 0.5rem;
105
+ opacity: 0;
106
+ transition: opacity 0.15s ease;
107
+ border: none;
108
+ cursor: pointer;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ }
113
+
114
+ .td-carousel__nav:hover {
115
+ background: #F3F4F6;
116
+ }
117
+
118
+ .td-carousel__nav--left {
119
+ left: -1rem;
120
+ }
121
+
122
+ .td-carousel__nav--right {
123
+ right: -1rem;
124
+ }
125
+
126
+ .td-carousel__nav svg {
127
+ width: 1.5rem;
128
+ height: 1.5rem;
129
+ color: #6B7280;
130
+ }
131
+
132
+ @media (hover: none) {
133
+ .td-carousel__nav {
134
+ opacity: 1;
135
+ }
136
+ }
137
+ ` });
138
+ }
139
+ export {
140
+ g as Carousel
141
+ };
142
+ //# sourceMappingURL=index9.js.map