@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,492 @@
1
+ import { jsxs as l, Fragment as y, jsx as e } from "react/jsx-runtime";
2
+ import { clsx as u } from "./index28.js";
3
+ function F(d) {
4
+ const t = /* @__PURE__ */ new Date();
5
+ return d.getDate() === t.getDate() && d.getMonth() === t.getMonth() && d.getFullYear() === t.getFullYear();
6
+ }
7
+ function N(d) {
8
+ return new Date(d).toLocaleTimeString("en-US", {
9
+ hour: "numeric",
10
+ minute: "2-digit",
11
+ hour12: !0
12
+ });
13
+ }
14
+ function A(d, t, m) {
15
+ const s = [], _ = /* @__PURE__ */ new Date();
16
+ _.setHours(0, 0, 0, 0);
17
+ const r = /* @__PURE__ */ new Map();
18
+ for (const n of d) {
19
+ const o = new Date(n.dateTime).toDateString();
20
+ r.has(o) || r.set(o, []), r.get(o).push(n);
21
+ }
22
+ for (let n = 0; n < t; n++) {
23
+ const c = new Date(_);
24
+ c.setDate(c.getDate() + n);
25
+ const o = c.toDateString(), i = r.get(o) || [];
26
+ i.sort((b, p) => new Date(b.dateTime).getTime() - new Date(p.dateTime).getTime()), (!m || i.length > 0) && s.push({ date: c, events: i });
27
+ }
28
+ return s;
29
+ }
30
+ function C({
31
+ events: d = [],
32
+ days: t = 30,
33
+ hideEmpty: m = !1,
34
+ emptyMessage: s = "No events",
35
+ title: _,
36
+ onEventClick: r,
37
+ className: n,
38
+ variant: c = "dark",
39
+ fullHeight: o = !1
40
+ }) {
41
+ const i = A(d, t, m), b = c === "light" ? "td-calendar--light" : "td-calendar--dark", p = o ? "td-calendar--full-height" : "", w = (a) => {
42
+ const g = /* @__PURE__ */ l(y, { children: [
43
+ /* @__PURE__ */ e("span", { className: "td-calendar__event-time", children: N(a.dateTime) }),
44
+ /* @__PURE__ */ l("div", { className: "td-calendar__event-content", children: [
45
+ /* @__PURE__ */ e("div", { className: "td-calendar__event-title", children: a.title }),
46
+ /* @__PURE__ */ l("div", { className: "td-calendar__event-meta", children: [
47
+ a.groupName && /* @__PURE__ */ e("span", { className: "td-calendar__event-group", children: a.groupName }),
48
+ a.groupName && (a.location || a.isOnline) && /* @__PURE__ */ e("span", { children: "·" }),
49
+ a.isOnline ? /* @__PURE__ */ l("span", { className: "td-calendar__online-badge", children: [
50
+ /* @__PURE__ */ e("span", { className: "td-calendar__online-dot" }),
51
+ "Online"
52
+ ] }) : a.location ? /* @__PURE__ */ e("span", { className: "td-calendar__event-location", children: a.location }) : null
53
+ ] })
54
+ ] })
55
+ ] }), h = () => r == null ? void 0 : r(a);
56
+ return a.eventUrl ? /* @__PURE__ */ e(
57
+ "a",
58
+ {
59
+ className: "td-calendar__event-item",
60
+ href: a.eventUrl,
61
+ onClick: h,
62
+ children: g
63
+ },
64
+ a.id
65
+ ) : /* @__PURE__ */ e("div", { className: "td-calendar__event-item", onClick: h, children: g }, a.id);
66
+ }, k = (a, g) => {
67
+ const h = a.date.toLocaleDateString("en-US", { weekday: "short" }), f = a.date.getDate(), v = a.date.toLocaleDateString("en-US", { month: "short" }), x = F(a.date);
68
+ return /* @__PURE__ */ l("div", { className: u("td-calendar__day-row", x && "td-calendar__day-row--today"), children: [
69
+ /* @__PURE__ */ l("div", { className: "td-calendar__day-header", children: [
70
+ /* @__PURE__ */ e("div", { className: "td-calendar__day-weekday", children: h }),
71
+ /* @__PURE__ */ e("div", { className: "td-calendar__day-date", children: f }),
72
+ /* @__PURE__ */ e("div", { className: "td-calendar__day-month", children: v })
73
+ ] }),
74
+ /* @__PURE__ */ e("div", { className: "td-calendar__day-events", children: a.events.length > 0 ? a.events.map(w) : /* @__PURE__ */ e("div", { className: "td-calendar__no-events", children: s }) })
75
+ ] }, g);
76
+ };
77
+ return /* @__PURE__ */ l(y, { children: [
78
+ /* @__PURE__ */ l("div", { className: u("td-calendar", b, p, n), children: [
79
+ _ && /* @__PURE__ */ e("div", { className: "td-calendar__header", children: /* @__PURE__ */ e("h2", { className: "td-calendar__title", children: _ }) }),
80
+ /* @__PURE__ */ e("div", { className: "td-calendar__body", children: i.length > 0 ? i.map(k) : /* @__PURE__ */ e("div", { className: "td-calendar__empty-state", children: "No upcoming events" }) })
81
+ ] }),
82
+ /* @__PURE__ */ e(D, {})
83
+ ] });
84
+ }
85
+ function D() {
86
+ return /* @__PURE__ */ e("style", { children: `
87
+ /* Base styles */
88
+ .td-calendar {
89
+ border-radius: 0.875rem;
90
+ overflow: hidden;
91
+ }
92
+
93
+ .td-calendar__header {
94
+ padding: 1.5rem;
95
+ }
96
+
97
+ .td-calendar__title {
98
+ font-size: 1.25rem;
99
+ font-weight: 700;
100
+ margin: 0;
101
+ }
102
+
103
+ .td-calendar__body {
104
+ max-height: 600px;
105
+ overflow-y: auto;
106
+ scrollbar-width: thin;
107
+ }
108
+
109
+ .td-calendar--full-height .td-calendar__body {
110
+ max-height: none;
111
+ overflow-y: visible;
112
+ }
113
+
114
+ .td-calendar__day-row {
115
+ display: flex;
116
+ overflow: hidden;
117
+ }
118
+
119
+ .td-calendar__day-row:last-child {
120
+ border-bottom: none;
121
+ }
122
+
123
+ .td-calendar__day-header {
124
+ flex-shrink: 0;
125
+ width: 80px;
126
+ padding: 1rem;
127
+ text-align: center;
128
+ position: sticky;
129
+ top: 0;
130
+ align-self: flex-start;
131
+ backdrop-filter: blur(8px);
132
+ -webkit-backdrop-filter: blur(8px);
133
+ z-index: 1;
134
+ }
135
+
136
+ .td-calendar__day-weekday {
137
+ font-size: 0.75rem;
138
+ font-weight: 600;
139
+ text-transform: uppercase;
140
+ letter-spacing: 0.05em;
141
+ }
142
+
143
+ .td-calendar__day-row--today .td-calendar__day-weekday {
144
+ color: #E85A4F;
145
+ }
146
+
147
+ .td-calendar__day-date {
148
+ font-size: 1.5rem;
149
+ font-weight: 700;
150
+ line-height: 1.2;
151
+ }
152
+
153
+ .td-calendar__day-month {
154
+ font-size: 0.75rem;
155
+ }
156
+
157
+ .td-calendar__day-events {
158
+ flex: 1;
159
+ min-width: 0;
160
+ padding: 0.75rem 1rem;
161
+ display: flex;
162
+ flex-direction: column;
163
+ gap: 0.5rem;
164
+ }
165
+
166
+ .td-calendar__event-item {
167
+ display: flex;
168
+ align-items: flex-start;
169
+ gap: 0.75rem;
170
+ padding: 0.75rem;
171
+ border-radius: 0.5rem;
172
+ transition: all 0.15s ease;
173
+ cursor: pointer;
174
+ text-decoration: none;
175
+ color: inherit;
176
+ }
177
+
178
+ .td-calendar__event-time {
179
+ flex-shrink: 0;
180
+ font-size: 0.875rem;
181
+ font-weight: 500;
182
+ color: #E85A4F;
183
+ min-width: 70px;
184
+ }
185
+
186
+ .td-calendar__event-content {
187
+ flex: 1;
188
+ min-width: 0;
189
+ }
190
+
191
+ .td-calendar__event-title {
192
+ font-weight: 600;
193
+ overflow-wrap: break-word;
194
+ word-break: break-word;
195
+ }
196
+
197
+ .td-calendar__event-meta {
198
+ display: flex;
199
+ align-items: center;
200
+ flex-wrap: wrap;
201
+ gap: 0.5rem;
202
+ margin-top: 0.25rem;
203
+ font-size: 0.75rem;
204
+ }
205
+
206
+ .td-calendar__online-badge {
207
+ display: inline-flex;
208
+ align-items: center;
209
+ gap: 0.25rem;
210
+ color: #22C55E;
211
+ }
212
+
213
+ .td-calendar__online-dot {
214
+ width: 6px;
215
+ height: 6px;
216
+ background: currentColor;
217
+ border-radius: 50%;
218
+ }
219
+
220
+ .td-calendar__no-events {
221
+ padding: 1rem;
222
+ font-size: 0.875rem;
223
+ font-style: italic;
224
+ }
225
+
226
+ .td-calendar__empty-state {
227
+ padding: 3rem;
228
+ text-align: center;
229
+ }
230
+
231
+ /* ============================================
232
+ DARK VARIANT (glass-dark style)
233
+ ============================================ */
234
+ .td-calendar--dark {
235
+ background: rgba(28, 36, 56, 0.8);
236
+ backdrop-filter: blur(12px);
237
+ -webkit-backdrop-filter: blur(12px);
238
+ border: 1px solid rgba(255, 255, 255, 0.05);
239
+ box-shadow:
240
+ inset 0 1px 1px 0 rgba(255, 255, 255, 0.05),
241
+ 0 8px 24px -4px rgba(0, 0, 0, 0.15);
242
+ }
243
+
244
+ .td-calendar--dark .td-calendar__header {
245
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
246
+ }
247
+
248
+ .td-calendar--dark .td-calendar__title {
249
+ color: white;
250
+ }
251
+
252
+ .td-calendar--dark .td-calendar__body {
253
+ scrollbar-color: rgba(255, 255, 255, 0.2) transparent;
254
+ }
255
+
256
+ .td-calendar--dark .td-calendar__day-row {
257
+ border-bottom: 1px solid rgba(255, 255, 255, 0.03);
258
+ }
259
+
260
+ .td-calendar--dark .td-calendar__day-row--today {
261
+ background: rgba(59, 130, 246, 0.1);
262
+ }
263
+
264
+ .td-calendar--dark .td-calendar__day-header {
265
+ border-right: 1px solid rgba(255, 255, 255, 0.05);
266
+ background: rgba(28, 36, 56, 0.95);
267
+ }
268
+
269
+ .td-calendar--dark .td-calendar__day-row--today .td-calendar__day-header {
270
+ background: rgba(59, 130, 246, 0.15);
271
+ }
272
+
273
+ .td-calendar--dark .td-calendar__day-weekday {
274
+ color: rgba(209, 213, 219, 0.9);
275
+ }
276
+
277
+ .td-calendar--dark .td-calendar__day-date {
278
+ color: white;
279
+ }
280
+
281
+ .td-calendar--dark .td-calendar__day-month {
282
+ color: rgba(209, 213, 219, 0.7);
283
+ }
284
+
285
+ .td-calendar--dark .td-calendar__event-item {
286
+ background: rgba(255, 255, 255, 0.06);
287
+ }
288
+
289
+ .td-calendar--dark .td-calendar__event-item:hover {
290
+ background: rgba(255, 255, 255, 0.1);
291
+ }
292
+
293
+ .td-calendar--dark .td-calendar__event-title {
294
+ color: white;
295
+ }
296
+
297
+ .td-calendar--dark .td-calendar__event-meta {
298
+ color: rgba(209, 213, 219, 0.85);
299
+ }
300
+
301
+ .td-calendar--dark .td-calendar__event-group {
302
+ color: rgba(209, 213, 219, 0.7);
303
+ }
304
+
305
+ .td-calendar--dark .td-calendar__no-events {
306
+ color: rgba(209, 213, 219, 0.6);
307
+ }
308
+
309
+ .td-calendar--dark .td-calendar__empty-state {
310
+ color: rgba(209, 213, 219, 0.7);
311
+ }
312
+
313
+ /* ============================================
314
+ LIGHT VARIANT
315
+ ============================================ */
316
+ .td-calendar--light {
317
+ background: white;
318
+ border: 1px solid #E5E7EB;
319
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
320
+ }
321
+
322
+ .td-calendar--light .td-calendar__header {
323
+ border-bottom: 1px solid #E5E7EB;
324
+ }
325
+
326
+ .td-calendar--light .td-calendar__title {
327
+ color: #111827;
328
+ }
329
+
330
+ .td-calendar--light .td-calendar__body {
331
+ scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
332
+ }
333
+
334
+ .td-calendar--light .td-calendar__day-row {
335
+ border-bottom: 1px solid #F3F4F6;
336
+ }
337
+
338
+ .td-calendar--light .td-calendar__day-row--today {
339
+ background: rgba(59, 130, 246, 0.05);
340
+ }
341
+
342
+ .td-calendar--light .td-calendar__day-header {
343
+ border-right: 1px solid #F3F4F6;
344
+ background: #F9FAFB;
345
+ }
346
+
347
+ .td-calendar--light .td-calendar__day-row--today .td-calendar__day-header {
348
+ background: rgba(59, 130, 246, 0.1);
349
+ }
350
+
351
+ .td-calendar--light .td-calendar__day-weekday {
352
+ color: #6B7280;
353
+ }
354
+
355
+ .td-calendar--light .td-calendar__day-date {
356
+ color: #111827;
357
+ }
358
+
359
+ .td-calendar--light .td-calendar__day-month {
360
+ color: #9CA3AF;
361
+ }
362
+
363
+ .td-calendar--light .td-calendar__event-item {
364
+ background: #F9FAFB;
365
+ }
366
+
367
+ .td-calendar--light .td-calendar__event-item:hover {
368
+ background: #F3F4F6;
369
+ }
370
+
371
+ .td-calendar--light .td-calendar__event-title {
372
+ color: #111827;
373
+ }
374
+
375
+ .td-calendar--light .td-calendar__event-meta {
376
+ color: #6B7280;
377
+ }
378
+
379
+ .td-calendar--light .td-calendar__event-group {
380
+ color: #9CA3AF;
381
+ }
382
+
383
+ .td-calendar--light .td-calendar__no-events {
384
+ color: #9CA3AF;
385
+ }
386
+
387
+ .td-calendar--light .td-calendar__empty-state {
388
+ color: #6B7280;
389
+ }
390
+
391
+ /* Light variant dark mode */
392
+ @media (prefers-color-scheme: dark) {
393
+ .td-calendar--light {
394
+ background: #111827;
395
+ border-color: #374151;
396
+ }
397
+
398
+ .td-calendar--light .td-calendar__header {
399
+ border-bottom-color: #374151;
400
+ }
401
+
402
+ .td-calendar--light .td-calendar__title {
403
+ color: #F9FAFB;
404
+ }
405
+
406
+ .td-calendar--light .td-calendar__day-row {
407
+ border-bottom-color: #1F2937;
408
+ }
409
+
410
+ .td-calendar--light .td-calendar__day-row--today {
411
+ background: rgba(59, 130, 246, 0.15);
412
+ }
413
+
414
+ .td-calendar--light .td-calendar__day-header {
415
+ border-right-color: #1F2937;
416
+ background: #1F2937;
417
+ }
418
+
419
+ .td-calendar--light .td-calendar__day-row--today .td-calendar__day-header {
420
+ background: rgba(59, 130, 246, 0.2);
421
+ }
422
+
423
+ .td-calendar--light .td-calendar__day-weekday {
424
+ color: #9CA3AF;
425
+ }
426
+
427
+ .td-calendar--light .td-calendar__day-date {
428
+ color: #F9FAFB;
429
+ }
430
+
431
+ .td-calendar--light .td-calendar__day-month {
432
+ color: #6B7280;
433
+ }
434
+
435
+ .td-calendar--light .td-calendar__event-item {
436
+ background: #1F2937;
437
+ }
438
+
439
+ .td-calendar--light .td-calendar__event-item:hover {
440
+ background: #374151;
441
+ }
442
+
443
+ .td-calendar--light .td-calendar__event-title {
444
+ color: #F9FAFB;
445
+ }
446
+
447
+ .td-calendar--light .td-calendar__event-meta {
448
+ color: #9CA3AF;
449
+ }
450
+
451
+ .td-calendar--light .td-calendar__event-group {
452
+ color: #6B7280;
453
+ }
454
+
455
+ .td-calendar--light .td-calendar__no-events {
456
+ color: #6B7280;
457
+ }
458
+
459
+ .td-calendar--light .td-calendar__empty-state {
460
+ color: #9CA3AF;
461
+ }
462
+ }
463
+
464
+ /* ============================================
465
+ RESPONSIVE
466
+ ============================================ */
467
+ @media (max-width: 640px) {
468
+ .td-calendar__day-header {
469
+ width: 60px;
470
+ padding: 0.75rem 0.5rem;
471
+ }
472
+
473
+ .td-calendar__day-date {
474
+ font-size: 1.25rem;
475
+ }
476
+
477
+ .td-calendar__event-time {
478
+ min-width: 50px;
479
+ font-size: 0.75rem;
480
+ }
481
+
482
+ .td-calendar__event-item {
483
+ flex-direction: column;
484
+ gap: 0.25rem;
485
+ }
486
+ }
487
+ ` });
488
+ }
489
+ export {
490
+ C as Calendar
491
+ };
492
+ //# sourceMappingURL=index20.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index20.js","sources":["../src/components/Calendar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nexport interface CalendarEvent {\n id: string;\n title: string;\n dateTime: string;\n endTime?: string;\n location?: string;\n groupName?: string;\n groupUrl?: string;\n eventUrl?: string;\n isOnline?: boolean;\n}\n\nexport type CalendarVariant = 'light' | 'dark';\n\nexport interface CalendarProps {\n events?: CalendarEvent[];\n days?: number;\n hideEmpty?: boolean;\n emptyMessage?: string;\n title?: string;\n onEventClick?: (event: CalendarEvent) => void;\n className?: string;\n /** Visual variant - 'light' for light backgrounds, 'dark' for glass-dark style */\n variant?: CalendarVariant;\n /** Remove max-height constraint, letting the page scroll instead of the calendar body */\n fullHeight?: boolean;\n}\n\ninterface CalendarDay {\n date: Date;\n events: CalendarEvent[];\n}\n\nfunction isToday(date: Date): boolean {\n const today = new Date();\n return (\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n );\n}\n\nfunction formatTime(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n });\n}\n\nfunction groupEventsByDate(events: CalendarEvent[], days: number, hideEmpty: boolean): CalendarDay[] {\n const result: CalendarDay[] = [];\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const eventsByDate = new Map<string, CalendarEvent[]>();\n for (const event of events) {\n const eventDate = new Date(event.dateTime);\n const dateKey = eventDate.toDateString();\n if (!eventsByDate.has(dateKey)) {\n eventsByDate.set(dateKey, []);\n }\n eventsByDate.get(dateKey)!.push(event);\n }\n\n for (let i = 0; i < days; i++) {\n const date = new Date(today);\n date.setDate(date.getDate() + i);\n const dateKey = date.toDateString();\n const dayEvents = eventsByDate.get(dateKey) || [];\n\n dayEvents.sort((a, b) => new Date(a.dateTime).getTime() - new Date(b.dateTime).getTime());\n\n if (!hideEmpty || dayEvents.length > 0) {\n result.push({ date, events: dayEvents });\n }\n }\n\n return result;\n}\n\nexport function Calendar({\n events = [],\n days = 30,\n hideEmpty = false,\n emptyMessage = 'No events',\n title,\n onEventClick,\n className,\n variant = 'dark',\n fullHeight = false,\n}: CalendarProps) {\n const calendarDays = groupEventsByDate(events, days, hideEmpty);\n const variantClass = variant === 'light' ? 'td-calendar--light' : 'td-calendar--dark';\n const heightClass = fullHeight ? 'td-calendar--full-height' : '';\n\n const renderEvent = (event: CalendarEvent) => {\n const content = (\n <>\n <span className=\"td-calendar__event-time\">{formatTime(event.dateTime)}</span>\n <div className=\"td-calendar__event-content\">\n <div className=\"td-calendar__event-title\">{event.title}</div>\n <div className=\"td-calendar__event-meta\">\n {event.groupName && <span className=\"td-calendar__event-group\">{event.groupName}</span>}\n {event.groupName && (event.location || event.isOnline) && <span>·</span>}\n {event.isOnline ? (\n <span className=\"td-calendar__online-badge\">\n <span className=\"td-calendar__online-dot\" />\n Online\n </span>\n ) : event.location ? (\n <span className=\"td-calendar__event-location\">{event.location}</span>\n ) : null}\n </div>\n </div>\n </>\n );\n\n const handleClick = () => onEventClick?.(event);\n\n if (event.eventUrl) {\n return (\n <a\n key={event.id}\n className=\"td-calendar__event-item\"\n href={event.eventUrl}\n onClick={handleClick}\n >\n {content}\n </a>\n );\n }\n\n return (\n <div key={event.id} className=\"td-calendar__event-item\" onClick={handleClick}>\n {content}\n </div>\n );\n };\n\n const renderDay = (day: CalendarDay, index: number) => {\n const weekday = day.date.toLocaleDateString('en-US', { weekday: 'short' });\n const dateNum = day.date.getDate();\n const month = day.date.toLocaleDateString('en-US', { month: 'short' });\n const dayIsToday = isToday(day.date);\n\n return (\n <div key={index} className={clsx('td-calendar__day-row', dayIsToday && 'td-calendar__day-row--today')}>\n <div className=\"td-calendar__day-header\">\n <div className=\"td-calendar__day-weekday\">{weekday}</div>\n <div className=\"td-calendar__day-date\">{dateNum}</div>\n <div className=\"td-calendar__day-month\">{month}</div>\n </div>\n <div className=\"td-calendar__day-events\">\n {day.events.length > 0 ? (\n day.events.map(renderEvent)\n ) : (\n <div className=\"td-calendar__no-events\">{emptyMessage}</div>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <>\n <div className={clsx('td-calendar', variantClass, heightClass, className)}>\n {title && (\n <div className=\"td-calendar__header\">\n <h2 className=\"td-calendar__title\">{title}</h2>\n </div>\n )}\n\n <div className=\"td-calendar__body\">\n {calendarDays.length > 0 ? (\n calendarDays.map(renderDay)\n ) : (\n <div className=\"td-calendar__empty-state\">No upcoming events</div>\n )}\n </div>\n </div>\n <CalendarStyles />\n </>\n );\n}\n\nfunction CalendarStyles() {\n return (\n <style>{`\n /* Base styles */\n .td-calendar {\n border-radius: 0.875rem;\n overflow: hidden;\n }\n\n .td-calendar__header {\n padding: 1.5rem;\n }\n\n .td-calendar__title {\n font-size: 1.25rem;\n font-weight: 700;\n margin: 0;\n }\n\n .td-calendar__body {\n max-height: 600px;\n overflow-y: auto;\n scrollbar-width: thin;\n }\n\n .td-calendar--full-height .td-calendar__body {\n max-height: none;\n overflow-y: visible;\n }\n\n .td-calendar__day-row {\n display: flex;\n overflow: hidden;\n }\n\n .td-calendar__day-row:last-child {\n border-bottom: none;\n }\n\n .td-calendar__day-header {\n flex-shrink: 0;\n width: 80px;\n padding: 1rem;\n text-align: center;\n position: sticky;\n top: 0;\n align-self: flex-start;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n z-index: 1;\n }\n\n .td-calendar__day-weekday {\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n\n .td-calendar__day-row--today .td-calendar__day-weekday {\n color: #E85A4F;\n }\n\n .td-calendar__day-date {\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1.2;\n }\n\n .td-calendar__day-month {\n font-size: 0.75rem;\n }\n\n .td-calendar__day-events {\n flex: 1;\n min-width: 0;\n padding: 0.75rem 1rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n }\n\n .td-calendar__event-item {\n display: flex;\n align-items: flex-start;\n gap: 0.75rem;\n padding: 0.75rem;\n border-radius: 0.5rem;\n transition: all 0.15s ease;\n cursor: pointer;\n text-decoration: none;\n color: inherit;\n }\n\n .td-calendar__event-time {\n flex-shrink: 0;\n font-size: 0.875rem;\n font-weight: 500;\n color: #E85A4F;\n min-width: 70px;\n }\n\n .td-calendar__event-content {\n flex: 1;\n min-width: 0;\n }\n\n .td-calendar__event-title {\n font-weight: 600;\n overflow-wrap: break-word;\n word-break: break-word;\n }\n\n .td-calendar__event-meta {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.5rem;\n margin-top: 0.25rem;\n font-size: 0.75rem;\n }\n\n .td-calendar__online-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n color: #22C55E;\n }\n\n .td-calendar__online-dot {\n width: 6px;\n height: 6px;\n background: currentColor;\n border-radius: 50%;\n }\n\n .td-calendar__no-events {\n padding: 1rem;\n font-size: 0.875rem;\n font-style: italic;\n }\n\n .td-calendar__empty-state {\n padding: 3rem;\n text-align: center;\n }\n\n /* ============================================\n DARK VARIANT (glass-dark style)\n ============================================ */\n .td-calendar--dark {\n background: rgba(28, 36, 56, 0.8);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n border: 1px solid rgba(255, 255, 255, 0.05);\n box-shadow:\n inset 0 1px 1px 0 rgba(255, 255, 255, 0.05),\n 0 8px 24px -4px rgba(0, 0, 0, 0.15);\n }\n\n .td-calendar--dark .td-calendar__header {\n border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n }\n\n .td-calendar--dark .td-calendar__title {\n color: white;\n }\n\n .td-calendar--dark .td-calendar__body {\n scrollbar-color: rgba(255, 255, 255, 0.2) transparent;\n }\n\n .td-calendar--dark .td-calendar__day-row {\n border-bottom: 1px solid rgba(255, 255, 255, 0.03);\n }\n\n .td-calendar--dark .td-calendar__day-row--today {\n background: rgba(59, 130, 246, 0.1);\n }\n\n .td-calendar--dark .td-calendar__day-header {\n border-right: 1px solid rgba(255, 255, 255, 0.05);\n background: rgba(28, 36, 56, 0.95);\n }\n\n .td-calendar--dark .td-calendar__day-row--today .td-calendar__day-header {\n background: rgba(59, 130, 246, 0.15);\n }\n\n .td-calendar--dark .td-calendar__day-weekday {\n color: rgba(209, 213, 219, 0.9);\n }\n\n .td-calendar--dark .td-calendar__day-date {\n color: white;\n }\n\n .td-calendar--dark .td-calendar__day-month {\n color: rgba(209, 213, 219, 0.7);\n }\n\n .td-calendar--dark .td-calendar__event-item {\n background: rgba(255, 255, 255, 0.06);\n }\n\n .td-calendar--dark .td-calendar__event-item:hover {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .td-calendar--dark .td-calendar__event-title {\n color: white;\n }\n\n .td-calendar--dark .td-calendar__event-meta {\n color: rgba(209, 213, 219, 0.85);\n }\n\n .td-calendar--dark .td-calendar__event-group {\n color: rgba(209, 213, 219, 0.7);\n }\n\n .td-calendar--dark .td-calendar__no-events {\n color: rgba(209, 213, 219, 0.6);\n }\n\n .td-calendar--dark .td-calendar__empty-state {\n color: rgba(209, 213, 219, 0.7);\n }\n\n /* ============================================\n LIGHT VARIANT\n ============================================ */\n .td-calendar--light {\n background: white;\n border: 1px solid #E5E7EB;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);\n }\n\n .td-calendar--light .td-calendar__header {\n border-bottom: 1px solid #E5E7EB;\n }\n\n .td-calendar--light .td-calendar__title {\n color: #111827;\n }\n\n .td-calendar--light .td-calendar__body {\n scrollbar-color: rgba(0, 0, 0, 0.2) transparent;\n }\n\n .td-calendar--light .td-calendar__day-row {\n border-bottom: 1px solid #F3F4F6;\n }\n\n .td-calendar--light .td-calendar__day-row--today {\n background: rgba(59, 130, 246, 0.05);\n }\n\n .td-calendar--light .td-calendar__day-header {\n border-right: 1px solid #F3F4F6;\n background: #F9FAFB;\n }\n\n .td-calendar--light .td-calendar__day-row--today .td-calendar__day-header {\n background: rgba(59, 130, 246, 0.1);\n }\n\n .td-calendar--light .td-calendar__day-weekday {\n color: #6B7280;\n }\n\n .td-calendar--light .td-calendar__day-date {\n color: #111827;\n }\n\n .td-calendar--light .td-calendar__day-month {\n color: #9CA3AF;\n }\n\n .td-calendar--light .td-calendar__event-item {\n background: #F9FAFB;\n }\n\n .td-calendar--light .td-calendar__event-item:hover {\n background: #F3F4F6;\n }\n\n .td-calendar--light .td-calendar__event-title {\n color: #111827;\n }\n\n .td-calendar--light .td-calendar__event-meta {\n color: #6B7280;\n }\n\n .td-calendar--light .td-calendar__event-group {\n color: #9CA3AF;\n }\n\n .td-calendar--light .td-calendar__no-events {\n color: #9CA3AF;\n }\n\n .td-calendar--light .td-calendar__empty-state {\n color: #6B7280;\n }\n\n /* Light variant dark mode */\n @media (prefers-color-scheme: dark) {\n .td-calendar--light {\n background: #111827;\n border-color: #374151;\n }\n\n .td-calendar--light .td-calendar__header {\n border-bottom-color: #374151;\n }\n\n .td-calendar--light .td-calendar__title {\n color: #F9FAFB;\n }\n\n .td-calendar--light .td-calendar__day-row {\n border-bottom-color: #1F2937;\n }\n\n .td-calendar--light .td-calendar__day-row--today {\n background: rgba(59, 130, 246, 0.15);\n }\n\n .td-calendar--light .td-calendar__day-header {\n border-right-color: #1F2937;\n background: #1F2937;\n }\n\n .td-calendar--light .td-calendar__day-row--today .td-calendar__day-header {\n background: rgba(59, 130, 246, 0.2);\n }\n\n .td-calendar--light .td-calendar__day-weekday {\n color: #9CA3AF;\n }\n\n .td-calendar--light .td-calendar__day-date {\n color: #F9FAFB;\n }\n\n .td-calendar--light .td-calendar__day-month {\n color: #6B7280;\n }\n\n .td-calendar--light .td-calendar__event-item {\n background: #1F2937;\n }\n\n .td-calendar--light .td-calendar__event-item:hover {\n background: #374151;\n }\n\n .td-calendar--light .td-calendar__event-title {\n color: #F9FAFB;\n }\n\n .td-calendar--light .td-calendar__event-meta {\n color: #9CA3AF;\n }\n\n .td-calendar--light .td-calendar__event-group {\n color: #6B7280;\n }\n\n .td-calendar--light .td-calendar__no-events {\n color: #6B7280;\n }\n\n .td-calendar--light .td-calendar__empty-state {\n color: #9CA3AF;\n }\n }\n\n /* ============================================\n RESPONSIVE\n ============================================ */\n @media (max-width: 640px) {\n .td-calendar__day-header {\n width: 60px;\n padding: 0.75rem 0.5rem;\n }\n\n .td-calendar__day-date {\n font-size: 1.25rem;\n }\n\n .td-calendar__event-time {\n min-width: 50px;\n font-size: 0.75rem;\n }\n\n .td-calendar__event-item {\n flex-direction: column;\n gap: 0.25rem;\n }\n }\n `}</style>\n );\n}\n"],"names":["isToday","date","today","formatTime","dateString","groupEventsByDate","events","days","hideEmpty","result","eventsByDate","event","dateKey","i","dayEvents","a","b","Calendar","emptyMessage","title","onEventClick","className","variant","fullHeight","calendarDays","variantClass","heightClass","renderEvent","content","jsxs","Fragment","jsx","handleClick","renderDay","day","index","weekday","dateNum","month","dayIsToday","clsx","CalendarStyles"],"mappings":"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AAA;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;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;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;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;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,OAiZN;AAEN;"}