@finsweet/webflow-apps-utils 1.0.3 → 1.0.4

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 (95) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/router/Router.mdx +958 -0
  4. package/dist/router/Router.stories.d.ts +6 -0
  5. package/dist/router/Router.stories.js +47 -0
  6. package/dist/router/examples/RouterExample.svelte +271 -0
  7. package/dist/router/examples/RouterExample.svelte.d.ts +18 -0
  8. package/dist/router/examples/index.d.ts +4 -0
  9. package/dist/router/examples/index.js +4 -0
  10. package/dist/router/examples/pages/AboutPage.svelte +568 -0
  11. package/dist/router/examples/pages/AboutPage.svelte.d.ts +13 -0
  12. package/dist/router/examples/pages/HomePage.svelte +200 -0
  13. package/dist/router/examples/pages/HomePage.svelte.d.ts +14 -0
  14. package/dist/router/examples/pages/NotFoundPage.svelte +307 -0
  15. package/dist/router/examples/pages/NotFoundPage.svelte.d.ts +17 -0
  16. package/dist/router/hooks.svelte.d.ts +2 -2
  17. package/dist/router/index.d.ts +3 -0
  18. package/dist/router/index.js +3 -0
  19. package/dist/router/{Link.svelte → providers/Link.svelte} +1 -1
  20. package/dist/router/{Route.svelte → providers/Route.svelte} +1 -1
  21. package/dist/router/{Route.svelte.d.ts → providers/Route.svelte.d.ts} +1 -1
  22. package/dist/router/{Router.svelte → providers/RouterProvider.svelte} +22 -5
  23. package/dist/router/{Router.svelte.d.ts → providers/RouterProvider.svelte.d.ts} +8 -4
  24. package/dist/router/providers/index.d.ts +3 -0
  25. package/dist/router/providers/index.js +3 -0
  26. package/dist/router/{index.svelte.d.ts → router.svelte.d.ts} +1 -3
  27. package/dist/router/{index.svelte.js → router.svelte.js} +1 -4
  28. package/dist/stores/docs/Form.mdx +542 -0
  29. package/dist/stores/forms.d.ts +41 -4
  30. package/dist/stores/forms.js +86 -32
  31. package/dist/types/customCode.d.ts +1 -1
  32. package/dist/types/window.d.ts +1 -0
  33. package/dist/ui/components/copy-text/CopyText.stories.d.ts +70 -0
  34. package/dist/ui/components/copy-text/CopyText.stories.js +241 -0
  35. package/dist/ui/components/copy-text/CopyText.svelte +249 -0
  36. package/dist/ui/components/copy-text/CopyText.svelte.d.ts +4 -0
  37. package/dist/ui/components/copy-text/index.d.ts +2 -0
  38. package/dist/ui/components/copy-text/index.js +1 -0
  39. package/dist/ui/components/copy-text/types.d.ts +52 -0
  40. package/dist/ui/components/copy-text/types.js +1 -0
  41. package/dist/ui/components/index.d.ts +1 -0
  42. package/dist/ui/components/index.js +1 -0
  43. package/dist/ui/components/input/Input.stories.d.ts +9 -0
  44. package/dist/ui/components/input/Input.stories.js +78 -0
  45. package/dist/ui/components/input/Input.svelte +39 -3
  46. package/dist/ui/components/input/types.d.ts +6 -0
  47. package/dist/ui/components/layout/Layout.svelte +7 -59
  48. package/dist/ui/components/layout/Layout.svelte.d.ts +2 -2
  49. package/dist/ui/components/layout/examples/ExampleLayout.svelte +22 -17
  50. package/dist/ui/components/layout/index.d.ts +1 -1
  51. package/dist/ui/components/layout/test-helpers/TestLayoutWithFooter.svelte +20 -0
  52. package/dist/ui/components/layout/test-helpers/TestLayoutWithFooter.svelte.d.ts +7 -0
  53. package/dist/ui/components/layout/types.d.ts +1 -10
  54. package/dist/ui/components/notification/Notification.stories.svelte +12 -1
  55. package/dist/ui/components/notification/Notification.svelte +10 -5
  56. package/dist/ui/components/notification/Notification.svelte.d.ts +1 -1
  57. package/dist/ui/components/notification/types.d.ts +1 -1
  58. package/dist/ui/components/section/Section.svelte +4 -2
  59. package/dist/ui/components/section/types.d.ts +8 -0
  60. package/dist/ui/components/text/Text.stories.svelte +67 -1
  61. package/dist/ui/components/text/Text.svelte +209 -8
  62. package/dist/ui/components/text/types.d.ts +4 -0
  63. package/dist/utils/animations/factory.d.ts +7 -0
  64. package/dist/utils/animations/factory.js +101 -0
  65. package/dist/utils/animations/index.d.ts +7 -0
  66. package/dist/utils/animations/index.js +62 -0
  67. package/dist/utils/animations/types.d.ts +39 -0
  68. package/dist/utils/animations/types.js +1 -0
  69. package/dist/utils/custom-code/configs.d.ts +22 -0
  70. package/dist/utils/custom-code/configs.js +40 -0
  71. package/dist/utils/custom-code/index.d.ts +1 -0
  72. package/dist/utils/custom-code/index.js +1 -0
  73. package/dist/utils/helpers/capitalizeFirstLetter.d.ts +4 -0
  74. package/dist/utils/helpers/capitalizeFirstLetter.js +9 -0
  75. package/dist/utils/helpers/getTimeNow.d.ts +4 -0
  76. package/dist/utils/helpers/getTimeNow.js +8 -0
  77. package/dist/utils/helpers/index.d.ts +4 -0
  78. package/dist/utils/helpers/index.js +4 -0
  79. package/dist/utils/helpers/minifyCode.d.ts +10 -0
  80. package/dist/utils/helpers/minifyCode.js +73 -0
  81. package/dist/utils/helpers/objectsToModuleExports.d.ts +1 -1
  82. package/dist/utils/helpers/objectsToModuleExports.js +1 -0
  83. package/dist/utils/helpers/toHumanReadableList.d.ts +4 -0
  84. package/dist/utils/helpers/toHumanReadableList.js +11 -0
  85. package/dist/utils/index.d.ts +1 -0
  86. package/dist/utils/index.js +1 -0
  87. package/dist/utils/webflow-canvas/getAllChildren.d.ts +16 -0
  88. package/dist/utils/webflow-canvas/getAllChildren.js +65 -0
  89. package/dist/utils/webflow-canvas/getElementClassList.d.ts +9 -0
  90. package/dist/utils/webflow-canvas/getElementClassList.js +19 -0
  91. package/dist/utils/webflow-canvas/index.d.ts +2 -0
  92. package/dist/utils/webflow-canvas/index.js +2 -0
  93. package/package.json +6 -1
  94. package/dist/router/README.md +0 -397
  95. /package/dist/router/{Link.svelte.d.ts → providers/Link.svelte.d.ts} +0 -0
@@ -0,0 +1,568 @@
1
+ <script lang="ts">
2
+ import type { Router } from '../../router.svelte';
3
+
4
+ interface Props {
5
+ params: Record<string, string>;
6
+ location: {
7
+ pathname: string;
8
+ search: string;
9
+ params: Record<string, string>;
10
+ };
11
+ router: Router;
12
+ }
13
+
14
+ let { params, location, router }: Props = $props();
15
+
16
+ // Extract section from params
17
+ let section = $derived(params.section || null);
18
+
19
+ // Section content mapping
20
+ const sectionContent = {
21
+ team: {
22
+ title: 'Our Team',
23
+ content: 'Meet the talented individuals who make our company great.',
24
+ items: [
25
+ {
26
+ name: 'Alice Johnson',
27
+ role: 'CEO & Founder',
28
+ bio: 'Visionary leader with 15+ years experience.'
29
+ },
30
+ { name: 'Bob Smith', role: 'CTO', bio: 'Technical architect passionate about innovation.' },
31
+ {
32
+ name: 'Carol Davis',
33
+ role: 'Lead Designer',
34
+ bio: 'Creative mind behind our beautiful interfaces.'
35
+ }
36
+ ]
37
+ },
38
+ history: {
39
+ title: 'Our History',
40
+ content: 'Learn about our journey from startup to industry leader.',
41
+ items: [
42
+ {
43
+ year: '2018',
44
+ event: 'Company founded',
45
+ description: 'Started with a small team and big dreams.'
46
+ },
47
+ {
48
+ year: '2020',
49
+ event: 'First major product launch',
50
+ description: 'Released our flagship product to market.'
51
+ },
52
+ {
53
+ year: '2023',
54
+ event: 'International expansion',
55
+ description: 'Opened offices in 5 new countries.'
56
+ }
57
+ ]
58
+ },
59
+ mission: {
60
+ title: 'Our Mission',
61
+ content: 'We strive to create technology that empowers people and transforms businesses.',
62
+ items: [
63
+ { value: 'Innovation', description: "Always pushing boundaries of what's possible." },
64
+ { value: 'Quality', description: 'Delivering excellence in everything we do.' },
65
+ { value: 'Integrity', description: 'Building trust through transparent practices.' }
66
+ ]
67
+ }
68
+ };
69
+
70
+ let currentSection = $derived(
71
+ (section && sectionContent[section as keyof typeof sectionContent]) || null
72
+ );
73
+ </script>
74
+
75
+ <div class="about-page">
76
+ {#if section && currentSection}
77
+ <!-- Section-specific content -->
78
+ <div class="section-header">
79
+ <button class="back-button" onclick={() => router.navigate('/about')}>
80
+ ← Back to About
81
+ </button>
82
+ <h1>{currentSection.title}</h1>
83
+ <p class="section-description">{currentSection.content}</p>
84
+ </div>
85
+
86
+ <div class="section-content">
87
+ {#if section === 'team' && currentSection}
88
+ <div class="team-grid">
89
+ {#each currentSection.items as member, index (index)}
90
+ <div class="team-card">
91
+ <div class="avatar">
92
+ {#if 'name' in member}
93
+ {member.name
94
+ .split(' ')
95
+ .map((n: string) => n[0])
96
+ .join('')}
97
+ {/if}
98
+ </div>
99
+ <h3>
100
+ {#if 'name' in member}
101
+ {member.name}
102
+ {/if}
103
+ </h3>
104
+ <p class="role">
105
+ {#if 'role' in member}
106
+ {member.role}
107
+ {/if}
108
+ </p>
109
+ <p class="bio">
110
+ {#if 'bio' in member}
111
+ {member.bio}
112
+ {/if}
113
+ </p>
114
+ </div>
115
+ {/each}
116
+ </div>
117
+ {:else if section === 'history' && currentSection}
118
+ <div class="timeline">
119
+ {#each currentSection.items as item, index (index)}
120
+ <div class="timeline-item">
121
+ <div class="timeline-year">
122
+ {#if 'year' in item}
123
+ {item.year}
124
+ {/if}
125
+ </div>
126
+ <div class="timeline-content">
127
+ <h3>
128
+ {#if 'event' in item}
129
+ {item.event}
130
+ {/if}
131
+ </h3>
132
+ <p>
133
+ {#if 'description' in item}
134
+ {item.description}
135
+ {/if}
136
+ </p>
137
+ </div>
138
+ </div>
139
+ {/each}
140
+ </div>
141
+ {:else if section === 'mission' && currentSection}
142
+ <div class="values-grid">
143
+ {#each currentSection.items as value, index (index)}
144
+ <div class="value-card">
145
+ <h3>
146
+ {#if 'value' in value}
147
+ {value.value}
148
+ {/if}
149
+ </h3>
150
+ <p>
151
+ {#if 'description' in value}
152
+ {value.description}
153
+ {/if}
154
+ </p>
155
+ </div>
156
+ {/each}
157
+ </div>
158
+ {/if}
159
+ </div>
160
+
161
+ <!-- Navigation to other sections -->
162
+ <div class="section-navigation">
163
+ <h3>Explore More</h3>
164
+ <div class="nav-buttons">
165
+ {#each Object.keys(sectionContent) as key (key)}
166
+ {#if key !== section}
167
+ <button class="nav-btn" onclick={() => router.navigate(`/about/${key}`)}>
168
+ {sectionContent[key as keyof typeof sectionContent].title}
169
+ </button>
170
+ {/if}
171
+ {/each}
172
+ </div>
173
+ </div>
174
+ {:else}
175
+ <!-- Main about page -->
176
+ <div class="main-about">
177
+ <header class="about-header">
178
+ <h1>About Our Company</h1>
179
+ <p class="lead">
180
+ We're a technology company dedicated to building innovative solutions that make a
181
+ difference in people's lives.
182
+ </p>
183
+ </header>
184
+
185
+ <div class="about-sections">
186
+ <h2>Learn More About Us</h2>
187
+ <div class="sections-grid">
188
+ <button class="section-card" onclick={() => router.navigate('/about/team')}>
189
+ <div class="section-icon">👥</div>
190
+ <h3>Our Team</h3>
191
+ <p>Meet the passionate people behind our success.</p>
192
+ <span class="section-link">Learn more →</span>
193
+ </button>
194
+
195
+ <button class="section-card" onclick={() => router.navigate('/about/history')}>
196
+ <div class="section-icon">📈</div>
197
+ <h3>Our History</h3>
198
+ <p>Discover our journey from startup to industry leader.</p>
199
+ <span class="section-link">Learn more →</span>
200
+ </button>
201
+
202
+ <button class="section-card" onclick={() => router.navigate('/about/mission')}>
203
+ <div class="section-icon">🎯</div>
204
+ <h3>Our Mission</h3>
205
+ <p>Understand the values and principles that guide us.</p>
206
+ <span class="section-link">Learn more →</span>
207
+ </button>
208
+ </div>
209
+ </div>
210
+
211
+ <div class="stats-section">
212
+ <h2>By the Numbers</h2>
213
+ <div class="stats-grid">
214
+ <div class="stat-item">
215
+ <div class="stat-number">50+</div>
216
+ <div class="stat-label">Team Members</div>
217
+ </div>
218
+ <div class="stat-item">
219
+ <div class="stat-number">1000+</div>
220
+ <div class="stat-label">Happy Customers</div>
221
+ </div>
222
+ <div class="stat-item">
223
+ <div class="stat-number">5</div>
224
+ <div class="stat-label">Countries</div>
225
+ </div>
226
+ <div class="stat-item">
227
+ <div class="stat-number">99.9%</div>
228
+ <div class="stat-label">Uptime</div>
229
+ </div>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ {/if}
234
+
235
+ <!-- Debug information -->
236
+ <div class="debug-section">
237
+ <h3>Route Debug Information</h3>
238
+ <div class="debug-info">
239
+ <p><strong>Current Path:</strong> {location?.pathname}</p>
240
+ <p><strong>Section Parameter:</strong> {section || 'None'}</p>
241
+ <p><strong>All Parameters:</strong> {JSON.stringify(params)}</p>
242
+ <p><strong>Search Query:</strong> {location?.search || 'None'}</p>
243
+ </div>
244
+ </div>
245
+ </div>
246
+
247
+ <style>
248
+ .about-page {
249
+ max-width: 100%;
250
+ }
251
+
252
+ /* Main About Page Styles */
253
+ .about-header {
254
+ text-align: center;
255
+ margin-bottom: 3rem;
256
+ }
257
+
258
+ .about-header h1 {
259
+ font-size: 2.5rem;
260
+ color: #2c3e50;
261
+ margin: 0 0 1rem 0;
262
+ font-weight: 600;
263
+ }
264
+
265
+ .lead {
266
+ font-size: 1.25rem;
267
+ color: #6c757d;
268
+ margin: 0;
269
+ line-height: 1.6;
270
+ max-width: 600px;
271
+ margin: 0 auto;
272
+ }
273
+
274
+ .about-sections h2 {
275
+ text-align: center;
276
+ color: #2c3e50;
277
+ margin-bottom: 2rem;
278
+ font-size: 2rem;
279
+ }
280
+
281
+ .sections-grid {
282
+ display: grid;
283
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
284
+ gap: 1.5rem;
285
+ margin-bottom: 3rem;
286
+ }
287
+
288
+ .section-card {
289
+ padding: 2rem;
290
+ border: 1px solid #e1e5e9;
291
+ border-radius: 12px;
292
+ background: white;
293
+ text-align: center;
294
+ cursor: pointer;
295
+ transition: all 0.3s ease;
296
+ width: 100%;
297
+ font-family: inherit;
298
+ font-size: inherit;
299
+ }
300
+
301
+ .section-card:hover {
302
+ transform: translateY(-4px);
303
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
304
+ border-color: #007bff;
305
+ }
306
+
307
+ .section-icon {
308
+ font-size: 3rem;
309
+ margin-bottom: 1rem;
310
+ }
311
+
312
+ .section-card h3 {
313
+ font-size: 1.5rem;
314
+ color: #2c3e50;
315
+ margin: 0 0 1rem 0;
316
+ }
317
+
318
+ .section-card p {
319
+ color: #6c757d;
320
+ margin: 0 0 1rem 0;
321
+ line-height: 1.5;
322
+ }
323
+
324
+ .section-link {
325
+ color: #007bff;
326
+ font-weight: 500;
327
+ font-size: 0.9rem;
328
+ }
329
+
330
+ /* Section-specific styles */
331
+ .section-header {
332
+ margin-bottom: 3rem;
333
+ }
334
+
335
+ .back-button {
336
+ background: none;
337
+ border: 1px solid #ddd;
338
+ padding: 0.5rem 1rem;
339
+ border-radius: 6px;
340
+ cursor: pointer;
341
+ color: #6c757d;
342
+ margin-bottom: 1rem;
343
+ transition: all 0.2s ease;
344
+ }
345
+
346
+ .back-button:hover {
347
+ background: #f8f9fa;
348
+ border-color: #adb5bd;
349
+ }
350
+
351
+ .section-header h1 {
352
+ font-size: 2.5rem;
353
+ color: #2c3e50;
354
+ margin: 0 0 1rem 0;
355
+ }
356
+
357
+ .section-description {
358
+ font-size: 1.25rem;
359
+ color: #6c757d;
360
+ margin: 0;
361
+ line-height: 1.6;
362
+ }
363
+
364
+ /* Team styles */
365
+ .team-grid {
366
+ display: grid;
367
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
368
+ gap: 1.5rem;
369
+ margin-bottom: 3rem;
370
+ }
371
+
372
+ .team-card {
373
+ padding: 2rem;
374
+ border: 1px solid #e1e5e9;
375
+ border-radius: 12px;
376
+ background: white;
377
+ text-align: center;
378
+ }
379
+
380
+ .avatar {
381
+ width: 80px;
382
+ height: 80px;
383
+ border-radius: 50%;
384
+ background: #007bff;
385
+ color: white;
386
+ display: flex;
387
+ align-items: center;
388
+ justify-content: center;
389
+ font-size: 1.5rem;
390
+ font-weight: 600;
391
+ margin: 0 auto 1rem auto;
392
+ }
393
+
394
+ .team-card h3 {
395
+ font-size: 1.25rem;
396
+ color: #2c3e50;
397
+ margin: 0 0 0.5rem 0;
398
+ }
399
+
400
+ .role {
401
+ color: #007bff;
402
+ font-weight: 500;
403
+ margin: 0 0 1rem 0;
404
+ }
405
+
406
+ .bio {
407
+ color: #6c757d;
408
+ margin: 0;
409
+ line-height: 1.5;
410
+ font-size: 0.9rem;
411
+ }
412
+
413
+ /* Timeline styles */
414
+ .timeline {
415
+ margin-bottom: 3rem;
416
+ }
417
+
418
+ .timeline-item {
419
+ display: flex;
420
+ gap: 2rem;
421
+ margin-bottom: 2rem;
422
+ padding: 1.5rem;
423
+ border: 1px solid #e1e5e9;
424
+ border-radius: 8px;
425
+ background: white;
426
+ }
427
+
428
+ .timeline-year {
429
+ font-size: 1.5rem;
430
+ font-weight: 600;
431
+ color: #007bff;
432
+ min-width: 80px;
433
+ }
434
+
435
+ .timeline-content h3 {
436
+ font-size: 1.25rem;
437
+ color: #2c3e50;
438
+ margin: 0 0 0.5rem 0;
439
+ }
440
+
441
+ .timeline-content p {
442
+ color: #6c757d;
443
+ margin: 0;
444
+ line-height: 1.5;
445
+ }
446
+
447
+ /* Values styles */
448
+ .values-grid {
449
+ display: grid;
450
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
451
+ gap: 1.5rem;
452
+ margin-bottom: 3rem;
453
+ }
454
+
455
+ .value-card {
456
+ padding: 2rem;
457
+ border: 1px solid #e1e5e9;
458
+ border-radius: 8px;
459
+ background: #f8f9fa;
460
+ text-align: center;
461
+ }
462
+
463
+ .value-card h3 {
464
+ font-size: 1.25rem;
465
+ color: #2c3e50;
466
+ margin: 0 0 1rem 0;
467
+ }
468
+
469
+ .value-card p {
470
+ color: #6c757d;
471
+ margin: 0;
472
+ line-height: 1.5;
473
+ }
474
+
475
+ /* Stats section */
476
+ .stats-section {
477
+ text-align: center;
478
+ margin-bottom: 3rem;
479
+ }
480
+
481
+ .stats-section h2 {
482
+ color: #2c3e50;
483
+ margin-bottom: 2rem;
484
+ font-size: 2rem;
485
+ }
486
+
487
+ .stats-grid {
488
+ display: grid;
489
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
490
+ gap: 2rem;
491
+ }
492
+
493
+ .stat-item {
494
+ text-align: center;
495
+ }
496
+
497
+ .stat-number {
498
+ font-size: 3rem;
499
+ font-weight: 700;
500
+ color: #007bff;
501
+ margin-bottom: 0.5rem;
502
+ }
503
+
504
+ .stat-label {
505
+ color: #6c757d;
506
+ font-size: 1rem;
507
+ text-transform: uppercase;
508
+ letter-spacing: 0.5px;
509
+ }
510
+
511
+ /* Section navigation */
512
+ .section-navigation {
513
+ margin-bottom: 3rem;
514
+ }
515
+
516
+ .section-navigation h3 {
517
+ color: #2c3e50;
518
+ margin-bottom: 1rem;
519
+ }
520
+
521
+ .nav-buttons {
522
+ display: flex;
523
+ gap: 1rem;
524
+ flex-wrap: wrap;
525
+ }
526
+
527
+ .nav-btn {
528
+ padding: 0.75rem 1.5rem;
529
+ border: 1px solid #007bff;
530
+ border-radius: 6px;
531
+ background: white;
532
+ color: #007bff;
533
+ cursor: pointer;
534
+ transition: all 0.2s ease;
535
+ font-size: 0.9rem;
536
+ }
537
+
538
+ .nav-btn:hover {
539
+ background: #007bff;
540
+ color: white;
541
+ }
542
+
543
+ /* Debug section */
544
+ .debug-section {
545
+ background: #f8f9fa;
546
+ border: 1px solid #e1e5e9;
547
+ border-radius: 8px;
548
+ padding: 1.5rem;
549
+ margin-top: 2rem;
550
+ }
551
+
552
+ .debug-section h3 {
553
+ margin: 0 0 1rem 0;
554
+ color: #2c3e50;
555
+ font-size: 1.125rem;
556
+ }
557
+
558
+ .debug-info p {
559
+ margin: 0.5rem 0;
560
+ font-family: 'SFMono-Regular', Consolas, monospace;
561
+ font-size: 0.875rem;
562
+ color: #495057;
563
+ }
564
+
565
+ .debug-info strong {
566
+ color: #2c3e50;
567
+ }
568
+ </style>
@@ -0,0 +1,13 @@
1
+ import type { Router } from '../../router.svelte';
2
+ interface Props {
3
+ params: Record<string, string>;
4
+ location: {
5
+ pathname: string;
6
+ search: string;
7
+ params: Record<string, string>;
8
+ };
9
+ router: Router;
10
+ }
11
+ declare const AboutPage: import("svelte").Component<Props, {}, "">;
12
+ type AboutPage = ReturnType<typeof AboutPage>;
13
+ export default AboutPage;