@aspect-ops/exon-ui 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 (35) hide show
  1. package/dist/components/CTASection/CTASection.svelte +298 -0
  2. package/dist/components/CTASection/CTASection.svelte.d.ts +15 -0
  3. package/dist/components/CTASection/index.d.ts +2 -0
  4. package/dist/components/CTASection/index.js +1 -0
  5. package/dist/components/GlobalHeader/GlobalHeader.svelte +692 -0
  6. package/dist/components/GlobalHeader/GlobalHeader.svelte.d.ts +3 -0
  7. package/dist/components/GlobalHeader/index.d.ts +2 -0
  8. package/dist/components/GlobalHeader/index.js +1 -0
  9. package/dist/components/Hero/Hero.svelte +306 -0
  10. package/dist/components/Hero/Hero.svelte.d.ts +18 -0
  11. package/dist/components/Hero/index.d.ts +2 -0
  12. package/dist/components/Hero/index.js +1 -0
  13. package/dist/components/LogoCloud/LogoCloud.svelte +333 -0
  14. package/dist/components/LogoCloud/LogoCloud.svelte.d.ts +20 -0
  15. package/dist/components/LogoCloud/index.d.ts +2 -0
  16. package/dist/components/LogoCloud/index.js +1 -0
  17. package/dist/components/ServiceCard/ServiceCard.svelte +359 -0
  18. package/dist/components/ServiceCard/ServiceCard.svelte.d.ts +16 -0
  19. package/dist/components/ServiceCard/index.d.ts +1 -0
  20. package/dist/components/ServiceCard/index.js +1 -0
  21. package/dist/components/SplitSection/SplitSection.svelte +194 -0
  22. package/dist/components/SplitSection/SplitSection.svelte.d.ts +15 -0
  23. package/dist/components/SplitSection/index.d.ts +1 -0
  24. package/dist/components/SplitSection/index.js +1 -0
  25. package/dist/components/TestimonialCard/TestimonialCard.svelte +290 -0
  26. package/dist/components/TestimonialCard/TestimonialCard.svelte.d.ts +14 -0
  27. package/dist/components/TestimonialCard/index.d.ts +1 -0
  28. package/dist/components/TestimonialCard/index.js +1 -0
  29. package/dist/components/Timeline/Timeline.svelte +444 -0
  30. package/dist/components/Timeline/Timeline.svelte.d.ts +19 -0
  31. package/dist/components/Timeline/index.d.ts +2 -0
  32. package/dist/components/Timeline/index.js +1 -0
  33. package/dist/index.d.ts +16 -0
  34. package/dist/index.js +9 -0
  35. package/package.json +1 -1
@@ -0,0 +1,290 @@
1
+ <script lang="ts">
2
+ import { Rating } from '../Rating/index.js';
3
+
4
+ interface Props {
5
+ quote: string;
6
+ author: string;
7
+ position?: string;
8
+ company?: string;
9
+ rating?: number;
10
+ avatar?: string;
11
+ variant?: 'default' | 'minimal' | 'featured' | 'compact';
12
+ showQuoteMarks?: boolean;
13
+ class?: string;
14
+ }
15
+
16
+ let {
17
+ quote,
18
+ author,
19
+ position,
20
+ company,
21
+ rating,
22
+ avatar,
23
+ variant = 'default',
24
+ showQuoteMarks = false,
25
+ class: className = ''
26
+ }: Props = $props();
27
+
28
+ // Generate initials from author name
29
+ const initials = $derived(author.charAt(0).toUpperCase());
30
+
31
+ // Construct author title (position + company)
32
+ const authorTitle = $derived(() => {
33
+ if (position && company) return `${position} at ${company}`;
34
+ if (position) return position;
35
+ if (company) return company;
36
+ return '';
37
+ });
38
+ </script>
39
+
40
+ <article class="testimonial testimonial--{variant} {className}">
41
+ {#if variant === 'featured' && showQuoteMarks}
42
+ <div class="testimonial-quote-mark" aria-hidden="true">&ldquo;</div>
43
+ {/if}
44
+
45
+ {#if rating !== undefined}
46
+ <div class="testimonial-rating">
47
+ <Rating value={rating} readonly size="sm" />
48
+ </div>
49
+ {/if}
50
+
51
+ <blockquote class="testimonial-quote">
52
+ {quote}
53
+ </blockquote>
54
+
55
+ <div class="testimonial-author">
56
+ {#if avatar || variant !== 'minimal'}
57
+ <div class="testimonial-author-content">
58
+ {#if avatar || variant === 'default' || variant === 'featured' || variant === 'compact'}
59
+ <div class="testimonial-avatar">
60
+ {#if avatar}
61
+ <img src={avatar} alt={author} />
62
+ {:else}
63
+ <span class="testimonial-avatar-initials" aria-hidden="true">{initials}</span>
64
+ {/if}
65
+ </div>
66
+ {/if}
67
+ <div class="testimonial-author-info">
68
+ <cite class="testimonial-author-name">{author}</cite>
69
+ {#if authorTitle()}
70
+ <div class="testimonial-author-title">{authorTitle()}</div>
71
+ {/if}
72
+ </div>
73
+ </div>
74
+ {:else}
75
+ <cite class="testimonial-author-name">{author}</cite>
76
+ {/if}
77
+ </div>
78
+ </article>
79
+
80
+ <style>
81
+ .testimonial {
82
+ display: flex;
83
+ flex-direction: column;
84
+ background: var(--testimonial-bg, var(--color-bg-card, #ffffff));
85
+ border-radius: var(--radius-lg, 0.5rem);
86
+ padding: var(--space-lg, 1.5rem);
87
+ font-family: inherit;
88
+ position: relative;
89
+ transition: transform var(--transition-normal, 200ms ease);
90
+ }
91
+
92
+ /* Default variant - gradient background */
93
+ .testimonial--default {
94
+ background: linear-gradient(
95
+ 135deg,
96
+ var(--testimonial-gradient-from, var(--color-bg-card, #ffffff)),
97
+ var(--testimonial-gradient-to, var(--color-bg-muted, #f9fafb))
98
+ );
99
+ box-shadow: var(
100
+ --shadow-md,
101
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1),
102
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06)
103
+ );
104
+ }
105
+
106
+ .testimonial--default:hover {
107
+ transform: translateY(-4px);
108
+ box-shadow: var(
109
+ --shadow-lg,
110
+ 0 10px 15px -3px rgba(0, 0, 0, 0.1),
111
+ 0 4px 6px -2px rgba(0, 0, 0, 0.05)
112
+ );
113
+ }
114
+
115
+ /* Minimal variant - simple styling */
116
+ .testimonial--minimal {
117
+ padding: var(--space-md, 1rem);
118
+ border-left: 3px solid var(--testimonial-border-color, var(--color-primary, #3b82f6));
119
+ background: transparent;
120
+ }
121
+
122
+ /* Featured variant - larger, emphasized */
123
+ .testimonial--featured {
124
+ padding: var(--space-xl, 2rem);
125
+ background: linear-gradient(
126
+ 135deg,
127
+ var(--testimonial-gradient-from, var(--color-primary-light, #dbeafe)),
128
+ var(--testimonial-gradient-to, var(--color-bg-card, #ffffff))
129
+ );
130
+ box-shadow: var(
131
+ --shadow-xl,
132
+ 0 20px 25px -5px rgba(0, 0, 0, 0.1),
133
+ 0 10px 10px -5px rgba(0, 0, 0, 0.04)
134
+ );
135
+ }
136
+
137
+ .testimonial--featured:hover {
138
+ transform: translateY(-6px);
139
+ box-shadow: var(--shadow-2xl, 0 25px 50px -12px rgba(0, 0, 0, 0.25));
140
+ }
141
+
142
+ /* Compact variant - horizontal layout */
143
+ .testimonial--compact {
144
+ padding: var(--space-md, 1rem);
145
+ gap: var(--space-md, 1rem);
146
+ }
147
+
148
+ .testimonial--compact .testimonial-quote {
149
+ font-size: var(--text-sm, 0.875rem);
150
+ }
151
+
152
+ /* Quote mark decoration for featured variant */
153
+ .testimonial-quote-mark {
154
+ position: absolute;
155
+ top: 0.5rem;
156
+ left: 0.5rem;
157
+ font-size: 4rem;
158
+ line-height: 1;
159
+ color: var(--testimonial-border-color, var(--color-primary, #3b82f6));
160
+ opacity: 0.1;
161
+ font-family: Georgia, serif;
162
+ pointer-events: none;
163
+ user-select: none;
164
+ }
165
+
166
+ /* Rating section */
167
+ .testimonial-rating {
168
+ margin-bottom: var(--space-sm, 0.75rem);
169
+ }
170
+
171
+ /* Quote */
172
+ .testimonial-quote {
173
+ flex: 1;
174
+ margin: 0 0 var(--space-lg, 1.5rem) 0;
175
+ font-size: var(--text-base, 1rem);
176
+ line-height: var(--leading-relaxed, 1.625);
177
+ color: var(--testimonial-quote-color, var(--color-text, #1f2937));
178
+ font-style: italic;
179
+ }
180
+
181
+ .testimonial--featured .testimonial-quote {
182
+ font-size: var(--text-lg, 1.125rem);
183
+ line-height: var(--leading-relaxed, 1.625);
184
+ }
185
+
186
+ .testimonial--minimal .testimonial-quote {
187
+ margin-bottom: var(--space-md, 1rem);
188
+ }
189
+
190
+ /* Author section */
191
+ .testimonial-author {
192
+ padding-top: var(--space-md, 1rem);
193
+ border-top: 1px solid var(--testimonial-border-color, var(--color-border, #e5e7eb));
194
+ }
195
+
196
+ .testimonial--minimal .testimonial-author {
197
+ padding-top: var(--space-sm, 0.75rem);
198
+ border-top: none;
199
+ }
200
+
201
+ .testimonial-author-content {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: var(--space-md, 1rem);
205
+ }
206
+
207
+ /* Avatar */
208
+ .testimonial-avatar {
209
+ flex-shrink: 0;
210
+ width: 3rem;
211
+ height: 3rem;
212
+ border-radius: var(--radius-full, 9999px);
213
+ overflow: hidden;
214
+ background: var(--color-bg-muted, #f3f4f6);
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ }
219
+
220
+ .testimonial--compact .testimonial-avatar {
221
+ width: 2.5rem;
222
+ height: 2.5rem;
223
+ }
224
+
225
+ .testimonial-avatar img {
226
+ width: 100%;
227
+ height: 100%;
228
+ object-fit: cover;
229
+ }
230
+
231
+ .testimonial-avatar-initials {
232
+ font-size: var(--text-lg, 1.125rem);
233
+ font-weight: var(--font-semibold, 600);
234
+ color: var(--color-primary, #3b82f6);
235
+ user-select: none;
236
+ }
237
+
238
+ /* Author info */
239
+ .testimonial-author-info {
240
+ min-width: 0;
241
+ flex: 1;
242
+ }
243
+
244
+ .testimonial-author-name {
245
+ display: block;
246
+ font-size: var(--text-base, 1rem);
247
+ font-weight: var(--font-semibold, 600);
248
+ font-style: normal;
249
+ color: var(--testimonial-author-color, var(--color-text, #1f2937));
250
+ line-height: var(--leading-tight, 1.25);
251
+ margin-bottom: var(--space-xs, 0.25rem);
252
+ }
253
+
254
+ .testimonial--minimal .testimonial-author-name {
255
+ font-size: var(--text-sm, 0.875rem);
256
+ }
257
+
258
+ .testimonial-author-title {
259
+ font-size: var(--text-sm, 0.875rem);
260
+ color: var(--color-text-secondary, #6b7280);
261
+ line-height: var(--leading-tight, 1.25);
262
+ }
263
+
264
+ .testimonial--compact .testimonial-author-title {
265
+ font-size: var(--text-xs, 0.75rem);
266
+ }
267
+
268
+ /* Mobile-first responsive adjustments */
269
+ @media (max-width: 640px) {
270
+ .testimonial--featured {
271
+ padding: var(--space-lg, 1.5rem);
272
+ }
273
+
274
+ .testimonial--featured .testimonial-quote {
275
+ font-size: var(--text-base, 1rem);
276
+ }
277
+ }
278
+
279
+ /* Dark mode support */
280
+ @media (prefers-color-scheme: dark) {
281
+ .testimonial--default,
282
+ .testimonial--featured {
283
+ background: linear-gradient(
284
+ 135deg,
285
+ var(--testimonial-gradient-from, var(--color-bg-card, #1f2937)),
286
+ var(--testimonial-gradient-to, var(--color-bg-muted, #111827))
287
+ );
288
+ }
289
+ }
290
+ </style>
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ quote: string;
3
+ author: string;
4
+ position?: string;
5
+ company?: string;
6
+ rating?: number;
7
+ avatar?: string;
8
+ variant?: 'default' | 'minimal' | 'featured' | 'compact';
9
+ showQuoteMarks?: boolean;
10
+ class?: string;
11
+ }
12
+ declare const TestimonialCard: import("svelte").Component<Props, {}, "">;
13
+ type TestimonialCard = ReturnType<typeof TestimonialCard>;
14
+ export default TestimonialCard;
@@ -0,0 +1 @@
1
+ export { default as TestimonialCard } from './TestimonialCard.svelte';
@@ -0,0 +1 @@
1
+ export { default as TestimonialCard } from './TestimonialCard.svelte';