astro-component-kit 0.2.2 → 0.3.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 (57) hide show
  1. package/README.md +4 -4
  2. package/package.json +11 -9
  3. package/src/components/index.ts +12 -9
  4. package/src/components/lib/AnimatedGalaxy.astro +4 -2
  5. package/src/components/lib/Galaxy3D.astro +237 -185
  6. package/src/components/lib/LogoWithGalaxy.astro +2 -2
  7. package/src/components/lib/buttons/index.ts +4 -1
  8. package/src/components/lib/cards/index.ts +3 -0
  9. package/src/components/lib/charts/DonutChart.astro +1 -1
  10. package/src/components/lib/charts/index.ts +3 -0
  11. package/src/components/lib/data/index.ts +3 -0
  12. package/src/components/lib/feedback/index.ts +3 -0
  13. package/src/components/lib/forms/index.ts +3 -0
  14. package/src/components/lib/index.ts +17 -6
  15. package/src/components/lib/layout/BentoGrid3.astro +79 -9
  16. package/src/components/lib/layout/CenterFixedBox.astro +52 -2
  17. package/src/components/lib/layout/CenteredContainer.astro +44 -5
  18. package/src/components/lib/layout/ClusterHorizontal.astro +36 -2
  19. package/src/components/lib/layout/FeatureHero.astro +119 -50
  20. package/src/components/lib/layout/FooterCenteredMinimal.astro +57 -9
  21. package/src/components/lib/layout/FullBleedSection.astro +44 -2
  22. package/src/components/lib/layout/GalleryGrid4.astro +35 -3
  23. package/src/components/lib/layout/GlassCardGrid.astro +24 -2
  24. package/src/components/lib/layout/GlassSectionHeader.astro +72 -11
  25. package/src/components/lib/layout/LandingSectionSplit.astro +83 -8
  26. package/src/components/lib/layout/MasonryGrid.astro +42 -3
  27. package/src/components/lib/layout/MinimalFooterGrid.astro +83 -11
  28. package/src/components/lib/layout/ScrollSnapSection.astro +37 -3
  29. package/src/components/lib/layout/SectionDividerText.astro +44 -4
  30. package/src/components/lib/layout/SidebarLayoutWrapper.astro +62 -7
  31. package/src/components/lib/layout/SplitScreenLayout.astro +62 -6
  32. package/src/components/lib/layout/StepLayoutVertical.astro +83 -10
  33. package/src/components/lib/layout/StickySidebarWrapper.astro +69 -6
  34. package/src/components/lib/layout/VerticalStack.astro +35 -5
  35. package/src/components/lib/layout/index.ts +17 -14
  36. package/src/components/lib/navigation/index.ts +3 -0
  37. package/src/components/lib/overlays/index.ts +3 -0
  38. package/src/components/lib/sections/ContactGlassForm.astro +361 -0
  39. package/src/components/lib/sections/CtaAppDownload.astro +258 -0
  40. package/src/components/lib/sections/CtaGlowBanner.astro +267 -0
  41. package/src/components/lib/sections/FaqAccordionSection.astro +349 -0
  42. package/src/components/lib/sections/FeatureBentoGrid.astro +449 -0
  43. package/src/components/lib/sections/FeatureTimelineFlow.astro +254 -0
  44. package/src/components/lib/sections/PricingComparisonMatrix.astro +468 -0
  45. package/src/components/lib/sections/PricingTierCards.astro +256 -0
  46. package/src/components/lib/sections/StatsMetricShowcase.astro +332 -0
  47. package/src/components/lib/sections/TeamGridSection.astro +333 -0
  48. package/src/components/lib/sections/TestimonialWallGlass.astro +406 -0
  49. package/src/components/lib/sections/index.ts +22 -0
  50. package/src/components/lib/typography/index.ts +3 -0
  51. package/src/components/lib/AnimatedInput.astro +0 -82
  52. package/src/components/lib/Badge.astro +0 -52
  53. package/src/components/lib/GlassButton.astro +0 -87
  54. package/src/components/lib/GlassCard.astro +0 -72
  55. package/src/components/lib/GlassNavbar.astro +0 -67
  56. package/src/components/lib/GlowButton.astro +0 -60
  57. /package/src/components/lib/buttons/{3dPushButton.astro → ThreeDPushButton.astro} +0 -0
@@ -0,0 +1,468 @@
1
+ ---
2
+ /**
3
+ * PricingComparisonMatrix — Full-page interactive pricing matrix with billing toggle and feature comparison.
4
+ *
5
+ * @param {string} badge - Eyebrow badge text.
6
+ * @param {string} title - Section main heading.
7
+ * @param {string} subtitle - Supporting description text.
8
+ */
9
+ interface Props {
10
+ badge?: string;
11
+ title?: string;
12
+ subtitle?: string;
13
+ className?: string;
14
+ }
15
+
16
+ const {
17
+ badge = "Flexible Plans",
18
+ title = "Transparent Pricing for High-Growth Teams",
19
+ subtitle = "Choose the right plan to scale your digital products. No hidden fees, cancel anytime.",
20
+ className = ""
21
+ } = Astro.props;
22
+ ---
23
+
24
+ <section class={`pricing-section ${className}`} aria-labelledby="pricing-title">
25
+ <div class="pricing-bg" aria-hidden="true">
26
+ <div class="pricing-glow"></div>
27
+ </div>
28
+
29
+ <div class="container">
30
+ <!-- Header -->
31
+ <div class="section-header">
32
+ {badge && <span class="section-badge">{badge}</span>}
33
+ <h2 id="pricing-title" class="section-title">{title}</h2>
34
+ <p class="section-subtitle">{subtitle}</p>
35
+
36
+ <!-- Interactive Billing Toggle -->
37
+ <div class="billing-toggle-wrap">
38
+ <span class="toggle-label" id="label-monthly">Monthly</span>
39
+ <button
40
+ type="button"
41
+ class="billing-toggle"
42
+ id="billingToggleBtn"
43
+ role="switch"
44
+ aria-checked="false"
45
+ aria-label="Toggle annual billing"
46
+ >
47
+ <span class="toggle-slider"></span>
48
+ </button>
49
+ <span class="toggle-label" id="label-annual">
50
+ Annual <span class="discount-pill">Save 20%</span>
51
+ </span>
52
+ </div>
53
+ </div>
54
+
55
+ <!-- Pricing Cards Grid -->
56
+ <div class="pricing-cards">
57
+ <!-- 1. Starter Tier -->
58
+ <div class="plan-card">
59
+ <div class="plan-card__header">
60
+ <span class="plan-name">Starter</span>
61
+ <p class="plan-desc">For indie developers and personal experiments.</p>
62
+ <div class="plan-price">
63
+ <span class="price-currency">$</span>
64
+ <span class="price-val" data-monthly="19" data-annual="15">19</span>
65
+ <span class="price-period">/mo</span>
66
+ </div>
67
+ <a href="#get-started" class="plan-btn plan-btn--ghost">Get Started</a>
68
+ </div>
69
+ <div class="plan-divider"></div>
70
+ <ul class="plan-features" aria-label="Starter Plan Features">
71
+ <li><span class="check-icon">✓</span> Up to 3 Astro Projects</li>
72
+ <li><span class="check-icon">✓</span> All 200+ UI Components</li>
73
+ <li><span class="check-icon">✓</span> Community Discord Support</li>
74
+ <li class="feature-disabled"><span class="cross-icon">✕</span> Private Component Registry</li>
75
+ <li class="feature-disabled"><span class="cross-icon">✕</span> Dedicated Priority Support</li>
76
+ </ul>
77
+ </div>
78
+
79
+ <!-- 2. Pro Tier (Featured / Most Popular) -->
80
+ <div class="plan-card plan-card--popular">
81
+ <div class="popular-ribbon">Most Popular</div>
82
+ <div class="plan-card__header">
83
+ <span class="plan-name plan-name--popular">Professional</span>
84
+ <p class="plan-desc">For fast-moving teams and production web applications.</p>
85
+ <div class="plan-price">
86
+ <span class="price-currency">$</span>
87
+ <span class="price-val" data-monthly="49" data-annual="39">49</span>
88
+ <span class="price-period">/mo</span>
89
+ </div>
90
+ <a href="#get-pro" class="plan-btn plan-btn--primary">Start 14-Day Free Trial</a>
91
+ </div>
92
+ <div class="plan-divider"></div>
93
+ <ul class="plan-features" aria-label="Professional Plan Features">
94
+ <li><span class="check-icon">✓</span> Unlimited Astro Projects</li>
95
+ <li><span class="check-icon">✓</span> All 200+ UI & 3D Components</li>
96
+ <li><span class="check-icon">✓</span> Figma UI Kit & Design Tokens</li>
97
+ <li><span class="check-icon">✓</span> Private NPM Team Access</li>
98
+ <li><span class="check-icon">✓</span> Priority Email & Chat Support</li>
99
+ </ul>
100
+ </div>
101
+
102
+ <!-- 3. Enterprise Tier -->
103
+ <div class="plan-card">
104
+ <div class="plan-card__header">
105
+ <span class="plan-name">Enterprise</span>
106
+ <p class="plan-desc">For organizations requiring custom SLAs and bespoke design systems.</p>
107
+ <div class="plan-price">
108
+ <span class="price-currency">$</span>
109
+ <span class="price-val" data-monthly="149" data-annual="119">149</span>
110
+ <span class="price-period">/mo</span>
111
+ </div>
112
+ <a href="#contact-sales" class="plan-btn plan-btn--ghost">Contact Sales</a>
113
+ </div>
114
+ <div class="plan-divider"></div>
115
+ <ul class="plan-features" aria-label="Enterprise Plan Features">
116
+ <li><span class="check-icon">✓</span> Everything in Pro Plan</li>
117
+ <li><span class="check-icon">✓</span> Custom Component Engineering</li>
118
+ <li><span class="check-icon">✓</span> 99.99% Guaranteed SLA</li>
119
+ <li><span class="check-icon">✓</span> Dedicated Security Audit Support</li>
120
+ <li><span class="check-icon">✓</span> Dedicated Account Manager</li>
121
+ </ul>
122
+ </div>
123
+ </div>
124
+
125
+ <!-- Money-back guarantee footer note -->
126
+ <div class="pricing-footer">
127
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="guarantee-icon"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10"/><path d="m9 12 2 2 4-4"/></svg>
128
+ <span>30-Day unconditional money-back guarantee. No questions asked.</span>
129
+ </div>
130
+ </div>
131
+ </section>
132
+
133
+ <script>
134
+ const toggleBtn = document.getElementById('billingToggleBtn');
135
+ const priceVals = document.querySelectorAll('.price-val');
136
+
137
+ if (toggleBtn) {
138
+ toggleBtn.addEventListener('click', () => {
139
+ const isAnnual = toggleBtn.getAttribute('aria-checked') === 'true';
140
+ const newState = !isAnnual;
141
+ toggleBtn.setAttribute('aria-checked', String(newState));
142
+
143
+ priceVals.forEach((el) => {
144
+ const val = newState ? el.getAttribute('data-annual') : el.getAttribute('data-monthly');
145
+ if (val) el.textContent = val;
146
+ });
147
+ });
148
+ }
149
+ </script>
150
+
151
+ <style>
152
+ .pricing-section {
153
+ position: relative;
154
+ padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
155
+ background: var(--c-bg-primary, #030712);
156
+ overflow: hidden;
157
+ }
158
+
159
+ .pricing-bg {
160
+ position: absolute;
161
+ inset: 0;
162
+ pointer-events: none;
163
+ z-index: 0;
164
+ }
165
+
166
+ .pricing-glow {
167
+ position: absolute;
168
+ top: 20%;
169
+ left: 50%;
170
+ transform: translateX(-50%);
171
+ width: 600px;
172
+ height: 500px;
173
+ background: radial-gradient(circle, rgba(184, 134, 11, 0.12), transparent 70%);
174
+ filter: blur(100px);
175
+ }
176
+
177
+ .container {
178
+ position: relative;
179
+ z-index: 1;
180
+ max-width: 1200px;
181
+ margin: 0 auto;
182
+ }
183
+
184
+ .section-header {
185
+ text-align: center;
186
+ max-width: 760px;
187
+ margin: 0 auto var(--sp-12, 3rem);
188
+ }
189
+
190
+ .section-badge {
191
+ display: inline-flex;
192
+ padding: 0.35rem 0.9rem;
193
+ border-radius: 9999px;
194
+ font-size: 0.78rem;
195
+ font-weight: 700;
196
+ letter-spacing: 0.06em;
197
+ text-transform: uppercase;
198
+ background: rgba(184, 134, 11, 0.12);
199
+ color: #eab308;
200
+ border: 1px solid rgba(234, 179, 8, 0.25);
201
+ margin-bottom: var(--sp-4, 1rem);
202
+ }
203
+
204
+ .section-title {
205
+ font-size: clamp(2rem, 4vw, 3rem);
206
+ font-weight: 900;
207
+ color: #fff;
208
+ line-height: 1.15;
209
+ letter-spacing: -0.02em;
210
+ margin: 0 0 var(--sp-4, 1rem);
211
+ }
212
+
213
+ .section-subtitle {
214
+ font-size: 1.1rem;
215
+ color: #94a3b8;
216
+ line-height: 1.6;
217
+ margin: 0 0 2rem;
218
+ }
219
+
220
+ /* Billing Toggle */
221
+ .billing-toggle-wrap {
222
+ display: inline-flex;
223
+ align-items: center;
224
+ gap: 0.75rem;
225
+ padding: 0.4rem 0.8rem;
226
+ background: rgba(15, 23, 42, 0.8);
227
+ border: 1px solid rgba(255, 255, 255, 0.1);
228
+ border-radius: 9999px;
229
+ }
230
+
231
+ .toggle-label {
232
+ font-size: 0.88rem;
233
+ font-weight: 600;
234
+ color: #cbd5e1;
235
+ }
236
+
237
+ .discount-pill {
238
+ padding: 0.15rem 0.5rem;
239
+ background: rgba(16, 185, 129, 0.15);
240
+ color: #34d399;
241
+ border: 1px solid rgba(16, 185, 129, 0.3);
242
+ border-radius: 9999px;
243
+ font-size: 0.72rem;
244
+ font-weight: 700;
245
+ }
246
+
247
+ .billing-toggle {
248
+ width: 44px;
249
+ height: 24px;
250
+ border-radius: 9999px;
251
+ background: rgba(255, 255, 255, 0.15);
252
+ border: none;
253
+ position: relative;
254
+ cursor: pointer;
255
+ padding: 2px;
256
+ transition: background 0.3s ease;
257
+ }
258
+
259
+ .toggle-slider {
260
+ display: block;
261
+ width: 20px;
262
+ height: 20px;
263
+ border-radius: 50%;
264
+ background: #fff;
265
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
266
+ }
267
+
268
+ .billing-toggle[aria-checked="true"] {
269
+ background: #eab308;
270
+ }
271
+
272
+ .billing-toggle[aria-checked="true"] .toggle-slider {
273
+ transform: translateX(20px);
274
+ }
275
+
276
+ /* Pricing Cards */
277
+ .pricing-cards {
278
+ display: grid;
279
+ grid-template-columns: repeat(3, 1fr);
280
+ gap: 1.5rem;
281
+ align-items: stretch;
282
+ }
283
+
284
+ .plan-card {
285
+ position: relative;
286
+ background: rgba(15, 23, 42, 0.6);
287
+ backdrop-filter: blur(20px);
288
+ -webkit-backdrop-filter: blur(20px);
289
+ border: 1px solid rgba(255, 255, 255, 0.08);
290
+ border-radius: var(--r-xl, 20px);
291
+ padding: 2.25rem 2rem;
292
+ display: flex;
293
+ flex-direction: column;
294
+ justify-content: space-between;
295
+ transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
296
+ }
297
+
298
+ .plan-card:hover {
299
+ transform: translateY(-4px);
300
+ border-color: rgba(255, 255, 255, 0.18);
301
+ }
302
+
303
+ .plan-card--popular {
304
+ background: rgba(20, 25, 45, 0.85);
305
+ border-color: rgba(234, 179, 8, 0.4);
306
+ box-shadow: 0 0 30px -10px rgba(234, 179, 8, 0.25);
307
+ transform: scale(1.03);
308
+ }
309
+
310
+ .plan-card--popular:hover {
311
+ transform: scale(1.03) translateY(-4px);
312
+ }
313
+
314
+ .popular-ribbon {
315
+ position: absolute;
316
+ top: -12px;
317
+ left: 50%;
318
+ transform: translateX(-50%);
319
+ padding: 0.25rem 0.85rem;
320
+ background: linear-gradient(135deg, #eab308, #ca8a04);
321
+ color: #000;
322
+ font-weight: 800;
323
+ font-size: 0.72rem;
324
+ text-transform: uppercase;
325
+ letter-spacing: 0.05em;
326
+ border-radius: 9999px;
327
+ box-shadow: 0 4px 12px rgba(234, 179, 8, 0.4);
328
+ }
329
+
330
+ .plan-name {
331
+ font-size: 1.25rem;
332
+ font-weight: 800;
333
+ color: #fff;
334
+ }
335
+
336
+ .plan-name--popular {
337
+ color: #facc15;
338
+ }
339
+
340
+ .plan-desc {
341
+ font-size: 0.88rem;
342
+ color: #94a3b8;
343
+ line-height: 1.5;
344
+ margin: 0.4rem 0 1.5rem;
345
+ min-height: 40px;
346
+ }
347
+
348
+ .plan-price {
349
+ display: flex;
350
+ align-items: baseline;
351
+ gap: 0.2rem;
352
+ margin-bottom: 1.5rem;
353
+ }
354
+
355
+ .price-currency {
356
+ font-size: 1.5rem;
357
+ font-weight: 700;
358
+ color: #94a3b8;
359
+ }
360
+
361
+ .price-val {
362
+ font-size: 3rem;
363
+ font-weight: 900;
364
+ color: #fff;
365
+ line-height: 1;
366
+ }
367
+
368
+ .price-period {
369
+ font-size: 0.9rem;
370
+ color: #64748b;
371
+ }
372
+
373
+ .plan-btn {
374
+ display: block;
375
+ text-align: center;
376
+ padding: 0.85rem 1.5rem;
377
+ border-radius: var(--r-md, 10px);
378
+ font-size: 0.95rem;
379
+ font-weight: 700;
380
+ text-decoration: none;
381
+ transition: all 0.25s ease;
382
+ }
383
+
384
+ .plan-btn--primary {
385
+ background: linear-gradient(135deg, #eab308, #d97706);
386
+ color: #000;
387
+ box-shadow: 0 4px 15px rgba(234, 179, 8, 0.3);
388
+ }
389
+
390
+ .plan-btn--primary:hover {
391
+ filter: brightness(1.1);
392
+ box-shadow: 0 6px 20px rgba(234, 179, 8, 0.45);
393
+ }
394
+
395
+ .plan-btn--ghost {
396
+ background: rgba(255, 255, 255, 0.05);
397
+ color: #fff;
398
+ border: 1px solid rgba(255, 255, 255, 0.12);
399
+ }
400
+
401
+ .plan-btn--ghost:hover {
402
+ background: rgba(255, 255, 255, 0.1);
403
+ border-color: rgba(255, 255, 255, 0.25);
404
+ }
405
+
406
+ .plan-divider {
407
+ height: 1px;
408
+ background: rgba(255, 255, 255, 0.08);
409
+ margin: 1.5rem 0;
410
+ }
411
+
412
+ .plan-features {
413
+ list-style: none;
414
+ padding: 0;
415
+ margin: 0;
416
+ display: flex;
417
+ flex-direction: column;
418
+ gap: 0.85rem;
419
+ }
420
+
421
+ .plan-features li {
422
+ display: flex;
423
+ align-items: center;
424
+ gap: 0.65rem;
425
+ font-size: 0.88rem;
426
+ color: #cbd5e1;
427
+ }
428
+
429
+ .check-icon {
430
+ color: #10b981;
431
+ font-weight: 900;
432
+ }
433
+
434
+ .cross-icon {
435
+ color: #64748b;
436
+ font-weight: 700;
437
+ }
438
+
439
+ .feature-disabled {
440
+ color: #64748b;
441
+ }
442
+
443
+ .pricing-footer {
444
+ display: flex;
445
+ align-items: center;
446
+ justify-content: center;
447
+ gap: 0.6rem;
448
+ margin-top: 3rem;
449
+ color: #94a3b8;
450
+ font-size: 0.9rem;
451
+ }
452
+
453
+ .guarantee-icon {
454
+ color: #10b981;
455
+ }
456
+
457
+ @media (max-width: 960px) {
458
+ .pricing-cards {
459
+ grid-template-columns: 1fr;
460
+ }
461
+ .plan-card--popular {
462
+ transform: none;
463
+ }
464
+ .plan-card--popular:hover {
465
+ transform: translateY(-4px);
466
+ }
467
+ }
468
+ </style>