@zoyth/simple-site-framework 1.0.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 (166) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +572 -0
  3. package/bin/create-simple-site.js +390 -0
  4. package/bin/simple-site.js +664 -0
  5. package/dist/client.js +135 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/client.mjs +107 -0
  8. package/dist/client.mjs.map +1 -0
  9. package/dist/components/index.d.mts +3936 -0
  10. package/dist/components/index.d.ts +3936 -0
  11. package/dist/components/index.js +38265 -0
  12. package/dist/components/index.js.map +1 -0
  13. package/dist/components/index.mjs +38173 -0
  14. package/dist/components/index.mjs.map +1 -0
  15. package/dist/config/index.d.mts +298 -0
  16. package/dist/config/index.d.ts +298 -0
  17. package/dist/config/index.js +19 -0
  18. package/dist/config/index.js.map +1 -0
  19. package/dist/config/index.mjs +1 -0
  20. package/dist/config/index.mjs.map +1 -0
  21. package/dist/index.d.mts +2184 -0
  22. package/dist/index.d.ts +2184 -0
  23. package/dist/index.js +1713 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/index.mjs +1605 -0
  26. package/dist/index.mjs.map +1 -0
  27. package/dist/lib/i18n/index.js +665 -0
  28. package/dist/lib/i18n/index.js.map +1 -0
  29. package/dist/lib/i18n/index.mjs +621 -0
  30. package/dist/lib/i18n/index.mjs.map +1 -0
  31. package/docs/DOCUMENTATION-STRUCTURE.md +1156 -0
  32. package/docs/EXPORTS.md +125 -0
  33. package/docs/PERFORMANCE.md +757 -0
  34. package/docs/POLICY-PAGES.md +867 -0
  35. package/docs/ROADMAP.md +334 -0
  36. package/docs/SEO.md +455 -0
  37. package/docs/SITEMAP.md +708 -0
  38. package/docs/STRUCTURED-DATA.md +671 -0
  39. package/docs/accessibility/common-patterns.md +529 -0
  40. package/docs/accessibility/keyboard-navigation.md +263 -0
  41. package/docs/accessibility/overview.md +122 -0
  42. package/docs/accessibility/screen-readers.md +311 -0
  43. package/docs/accessibility/wcag-compliance.md +159 -0
  44. package/docs/api/README.md +164 -0
  45. package/docs/api/components/Accessibility.md +356 -0
  46. package/docs/api/components/Button.md +240 -0
  47. package/docs/api/components/HeroSection.md +306 -0
  48. package/docs/architecture/decisions.md +449 -0
  49. package/docs/components/AnalyticsTracker.md +58 -0
  50. package/docs/components/AnimatedCounter.md +48 -0
  51. package/docs/components/AnimatedSection.md +56 -0
  52. package/docs/components/BlogCard.md +42 -0
  53. package/docs/components/Checkbox.md +56 -0
  54. package/docs/components/CodeBlock.md +52 -0
  55. package/docs/components/ComparisonTable.md +40 -0
  56. package/docs/components/ComponentDemo.md +38 -0
  57. package/docs/components/CountdownTimer.md +51 -0
  58. package/docs/components/ExitIntentModal.md +56 -0
  59. package/docs/components/FAQAccordion.md +66 -0
  60. package/docs/components/FeaturesGrid.md +55 -0
  61. package/docs/components/FileUpload.md +54 -0
  62. package/docs/components/I18nMetaTags.md +55 -0
  63. package/docs/components/Icon.md +53 -0
  64. package/docs/components/LazySection.md +46 -0
  65. package/docs/components/LiveProof.md +53 -0
  66. package/docs/components/LoadingSpinner.md +46 -0
  67. package/docs/components/MultiStepForm.md +48 -0
  68. package/docs/components/PolicyLayout.md +55 -0
  69. package/docs/components/PricingTable.md +49 -0
  70. package/docs/components/Radio.md +59 -0
  71. package/docs/components/SEOMetaTags.md +58 -0
  72. package/docs/components/ScriptInjector.md +50 -0
  73. package/docs/components/Select.md +72 -0
  74. package/docs/components/Skeleton.md +47 -0
  75. package/docs/components/StatsSection.md +48 -0
  76. package/docs/components/StickyBar.md +62 -0
  77. package/docs/components/StructuredData.md +99 -0
  78. package/docs/components/StyleGuide.md +46 -0
  79. package/docs/components/TableOfContents.md +47 -0
  80. package/docs/components/TestimonialCarousel.md +42 -0
  81. package/docs/components/Timeline.md +51 -0
  82. package/docs/components/Toast.md +59 -0
  83. package/docs/components/TrackedLink.md +62 -0
  84. package/docs/components/TrustBadges.md +44 -0
  85. package/docs/components/conversion/MobileCTA.md +363 -0
  86. package/docs/components/forms/ContactForm.md +75 -0
  87. package/docs/components/forms/FormField.md +74 -0
  88. package/docs/components/layout/Footer.md +601 -0
  89. package/docs/components/layout/Header.md +549 -0
  90. package/docs/components/layout/LanguageSelector.md +54 -0
  91. package/docs/components/layout/LanguageSwitcher.md +24 -0
  92. package/docs/components/overview.md +447 -0
  93. package/docs/components/sections/AboutSection.md +48 -0
  94. package/docs/components/sections/CTASection.md +596 -0
  95. package/docs/components/sections/CaseStudySection.md +47 -0
  96. package/docs/components/sections/ContactSection.md +599 -0
  97. package/docs/components/sections/FeatureSection.md +44 -0
  98. package/docs/components/sections/HeroSection.md +404 -0
  99. package/docs/components/sections/LogosSection.md +47 -0
  100. package/docs/components/sections/PersonalTaxesSection.md +23 -0
  101. package/docs/components/sections/RecruitingSection.md +23 -0
  102. package/docs/components/sections/SecurePortalSection.md +23 -0
  103. package/docs/components/sections/ServicePageLayout.md +52 -0
  104. package/docs/components/sections/ServicesSection.md +49 -0
  105. package/docs/components/sections/TestimonialSection.md +44 -0
  106. package/docs/components/sections/WhyChooseUsSection.md +54 -0
  107. package/docs/components/ui/Breadcrumb.md +70 -0
  108. package/docs/components/ui/Button.md +514 -0
  109. package/docs/components/ui/Card.md +501 -0
  110. package/docs/components/ui/Input.md +54 -0
  111. package/docs/components/ui/MobileLinks.md +43 -0
  112. package/docs/components/ui/Modal.md +60 -0
  113. package/docs/components/ui/Tabs.md +62 -0
  114. package/docs/components/ui/Textarea.md +52 -0
  115. package/docs/core-concepts/configuration-driven.md +552 -0
  116. package/docs/core-concepts/overview.md +351 -0
  117. package/docs/features/accessibility/README.md +73 -0
  118. package/docs/features/accessibility/aria-support.md +177 -0
  119. package/docs/features/accessibility/color-contrast.md +155 -0
  120. package/docs/features/accessibility/focus-management.md +187 -0
  121. package/docs/features/accessibility/testing.md +196 -0
  122. package/docs/features/analytics/README.md +51 -0
  123. package/docs/features/analytics/ab-testing.md +171 -0
  124. package/docs/features/analytics/conversion-tracking.md +207 -0
  125. package/docs/features/analytics/custom-events.md +219 -0
  126. package/docs/features/analytics/privacy.md +198 -0
  127. package/docs/features/analytics/setup.md +114 -0
  128. package/docs/features/analytics/tracking-events.md +224 -0
  129. package/docs/features/i18n/README.md +51 -0
  130. package/docs/features/i18n/best-practices.md +273 -0
  131. package/docs/features/i18n/configuration.md +84 -0
  132. package/docs/features/i18n/formatting.md +133 -0
  133. package/docs/features/i18n/locale-detection.md +122 -0
  134. package/docs/features/i18n/routing.md +99 -0
  135. package/docs/features/i18n/rtl-support.md +191 -0
  136. package/docs/features/i18n/translations.md +129 -0
  137. package/docs/features/internationalization.md +595 -0
  138. package/docs/features/performance/README.md +77 -0
  139. package/docs/features/performance/bundle-size.md +134 -0
  140. package/docs/features/performance/caching.md +131 -0
  141. package/docs/features/performance/code-splitting.md +121 -0
  142. package/docs/features/performance/image-optimization.md +110 -0
  143. package/docs/features/performance/lazy-loading.md +92 -0
  144. package/docs/features/performance/monitoring.md +148 -0
  145. package/docs/features/seo/README.md +51 -0
  146. package/docs/features/seo/best-practices.md +184 -0
  147. package/docs/features/seo/canonical-urls.md +182 -0
  148. package/docs/features/seo/meta-tags.md +126 -0
  149. package/docs/features/seo/open-graph.md +166 -0
  150. package/docs/features/seo/robots-txt.md +146 -0
  151. package/docs/features/seo/sitemaps.md +162 -0
  152. package/docs/features/seo/structured-data.md +166 -0
  153. package/docs/getting-started/installation.md +292 -0
  154. package/docs/getting-started/introduction.md +195 -0
  155. package/docs/getting-started/quick-start.md +460 -0
  156. package/docs/guides/analytics-setup.md +616 -0
  157. package/docs/i18n/CONFIGURATION.md +353 -0
  158. package/docs/i18n/EXAMPLES.md +402 -0
  159. package/docs/i18n/MIGRATION.md +260 -0
  160. package/docs/i18n/SEO.md +392 -0
  161. package/docs/i18n/STATIC-GENERATION-FIX.md +71 -0
  162. package/docs/migration/changelog.md +136 -0
  163. package/docs/migration/overview.md +233 -0
  164. package/docs/recipes/adding-animations.md +475 -0
  165. package/docs/recipes/forms-with-validation.md +393 -0
  166. package/package.json +152 -0
@@ -0,0 +1,298 @@
1
+ interface ThemeConfig {
2
+ brand: {
3
+ name: string;
4
+ colors: {
5
+ primary: string;
6
+ primaryHover: string;
7
+ primaryLight: string;
8
+ primaryDark: string;
9
+ primaryGradientStart: string;
10
+ primaryGradientEnd: string;
11
+ heroGradientStart: string;
12
+ heroGradientEnd: string;
13
+ footerGradientStart: string;
14
+ footerGradientEnd: string;
15
+ };
16
+ fonts: {
17
+ heading: {
18
+ family: string;
19
+ weights: number[];
20
+ fallback: string;
21
+ };
22
+ body: {
23
+ family: string;
24
+ weights: number[];
25
+ fallback: string;
26
+ };
27
+ };
28
+ };
29
+ design: {
30
+ borderRadius: 'sharp' | 'rounded' | 'pill';
31
+ shadows: 'flat' | 'subtle' | 'prominent';
32
+ spacing: 'compact' | 'comfortable' | 'spacious';
33
+ };
34
+ animations?: {
35
+ speed?: 'slow' | 'normal' | 'fast';
36
+ reduceMotion?: boolean;
37
+ };
38
+ colors: {
39
+ slate: {
40
+ 50: string;
41
+ 100: string;
42
+ 200: string;
43
+ 300: string;
44
+ 400: string;
45
+ 500: string;
46
+ 600: string;
47
+ 700: string;
48
+ 800: string;
49
+ 900: string;
50
+ };
51
+ };
52
+ }
53
+
54
+ interface LocalizedString$1 {
55
+ [locale: string]: string;
56
+ }
57
+ interface SiteMetadata {
58
+ siteName: string;
59
+ siteUrl: string;
60
+ defaultLocale: string;
61
+ supportedLocales: string[];
62
+ contactEmail: string;
63
+ contactPhone: string;
64
+ address: {
65
+ street: string;
66
+ city: string;
67
+ province: string;
68
+ postalCode: string;
69
+ country: string;
70
+ };
71
+ }
72
+ interface HeroContent {
73
+ headline: LocalizedString$1;
74
+ subheadline: LocalizedString$1;
75
+ variant?: 'dark' | 'light' | 'split';
76
+ backgroundImage?: string;
77
+ backgroundVideo?: string;
78
+ overlayGradient?: {
79
+ from: string;
80
+ to: string;
81
+ };
82
+ cta: {
83
+ primary: {
84
+ text: LocalizedString$1;
85
+ href: string;
86
+ };
87
+ secondary?: {
88
+ text: LocalizedString$1;
89
+ href: string;
90
+ };
91
+ };
92
+ trustLine?: LocalizedString$1;
93
+ }
94
+ interface RecognitionContent {
95
+ paragraphs: Array<LocalizedString$1>;
96
+ }
97
+ interface AboutContent {
98
+ heading: LocalizedString$1;
99
+ dividerLine?: boolean;
100
+ paragraphs: Array<LocalizedString$1>;
101
+ image?: {
102
+ src: string;
103
+ alt: LocalizedString$1;
104
+ placeholder?: string;
105
+ };
106
+ }
107
+ interface ServiceItem {
108
+ id: string;
109
+ name: LocalizedString$1;
110
+ description: LocalizedString$1;
111
+ href: string;
112
+ icon?: string;
113
+ }
114
+ interface ServicesContent {
115
+ heading: LocalizedString$1;
116
+ description: LocalizedString$1;
117
+ dividerLine?: boolean;
118
+ items: ServiceItem[];
119
+ image?: {
120
+ src: string;
121
+ alt: LocalizedString$1;
122
+ placeholder?: string;
123
+ };
124
+ cta?: {
125
+ text: LocalizedString$1;
126
+ subtext: LocalizedString$1;
127
+ button: {
128
+ text: LocalizedString$1;
129
+ href: string;
130
+ };
131
+ };
132
+ }
133
+ interface WhyChooseUsContent {
134
+ heading: LocalizedString$1;
135
+ dividerLine?: boolean;
136
+ paragraphs: Array<LocalizedString$1>;
137
+ image?: {
138
+ src: string;
139
+ alt: LocalizedString$1;
140
+ placeholder?: string;
141
+ };
142
+ }
143
+ interface ContactContent {
144
+ heading: LocalizedString$1;
145
+ description?: LocalizedString$1;
146
+ form: {
147
+ namePlaceholder: LocalizedString$1;
148
+ emailPlaceholder: LocalizedString$1;
149
+ phonePlaceholder: LocalizedString$1;
150
+ messagePlaceholder: LocalizedString$1;
151
+ submitButton: LocalizedString$1;
152
+ successMessage: LocalizedString$1;
153
+ errorMessage: LocalizedString$1;
154
+ };
155
+ info: {
156
+ addressLabel: LocalizedString$1;
157
+ phoneLabel: LocalizedString$1;
158
+ emailLabel: LocalizedString$1;
159
+ hoursLabel: LocalizedString$1;
160
+ hours: LocalizedString$1;
161
+ };
162
+ }
163
+ interface TeamMember {
164
+ name: string;
165
+ title: LocalizedString$1;
166
+ bio: LocalizedString$1;
167
+ education: LocalizedString$1;
168
+ linkedin?: string;
169
+ image?: string;
170
+ }
171
+ interface TeamContent {
172
+ heading: LocalizedString$1;
173
+ members: TeamMember[];
174
+ history: {
175
+ heading: LocalizedString$1;
176
+ paragraphs: Array<LocalizedString$1>;
177
+ };
178
+ }
179
+ interface ServicePageContent {
180
+ title: LocalizedString$1;
181
+ description: LocalizedString$1;
182
+ lead: LocalizedString$1;
183
+ sections: Array<{
184
+ heading: LocalizedString$1;
185
+ subsections: Array<{
186
+ title: LocalizedString$1;
187
+ content: LocalizedString$1;
188
+ }>;
189
+ }>;
190
+ benefits?: {
191
+ heading: LocalizedString$1;
192
+ items: Array<{
193
+ title: LocalizedString$1;
194
+ description: LocalizedString$1;
195
+ }>;
196
+ };
197
+ }
198
+ interface SiteContent {
199
+ metadata: SiteMetadata;
200
+ hero: HeroContent;
201
+ recognition?: RecognitionContent;
202
+ about: AboutContent;
203
+ whyChooseUs: WhyChooseUsContent;
204
+ services: ServicesContent;
205
+ contact?: ContactContent;
206
+ team?: TeamContent;
207
+ servicePages?: {
208
+ [serviceId: string]: ServicePageContent;
209
+ };
210
+ }
211
+
212
+ interface LocalizedString {
213
+ [locale: string]: string;
214
+ }
215
+ interface NavLink {
216
+ id: string;
217
+ label: LocalizedString;
218
+ href: string | LocalizedString;
219
+ external?: boolean;
220
+ icon?: string;
221
+ }
222
+ interface NavDropdownItem extends NavLink {
223
+ description?: LocalizedString;
224
+ }
225
+ interface NavDropdown {
226
+ id: string;
227
+ label: LocalizedString;
228
+ type: 'dropdown';
229
+ children: NavDropdownItem[];
230
+ cta?: {
231
+ label: LocalizedString;
232
+ href: string;
233
+ external?: boolean;
234
+ };
235
+ }
236
+ type NavItem = NavLink | NavDropdown;
237
+ interface LogoConfig {
238
+ text?: LocalizedString;
239
+ image?: string;
240
+ imageAlt?: LocalizedString;
241
+ href: string;
242
+ width?: number;
243
+ height?: number;
244
+ displayHeight?: number;
245
+ }
246
+ interface HeaderConfig {
247
+ logo: LogoConfig;
248
+ mainNav: NavItem[];
249
+ utilityNav: NavLink[];
250
+ dropdownStyle?: 'mega' | 'simple';
251
+ }
252
+ interface FooterSection {
253
+ heading?: LocalizedString;
254
+ links: NavLink[];
255
+ }
256
+ interface SocialLink {
257
+ platform: string;
258
+ url: string;
259
+ icon: string;
260
+ label: LocalizedString;
261
+ }
262
+ interface PoweredByConfig {
263
+ text: LocalizedString;
264
+ logo?: {
265
+ src: string;
266
+ alt: string;
267
+ width: number;
268
+ height: number;
269
+ };
270
+ href?: string;
271
+ }
272
+ interface FooterConfig {
273
+ sections?: FooterSection[];
274
+ copyright: LocalizedString;
275
+ tagline?: LocalizedString;
276
+ social?: SocialLink[];
277
+ poweredBy?: PoweredByConfig;
278
+ backgroundColor?: string;
279
+ }
280
+ interface NavigationConfig {
281
+ header: HeaderConfig;
282
+ footer: FooterConfig;
283
+ }
284
+
285
+ interface ScriptsConfig {
286
+ /**
287
+ * Scripts to inject in the <head> section
288
+ * Use for: Analytics, fonts, meta tags, etc.
289
+ */
290
+ head?: string[];
291
+ /**
292
+ * Scripts to inject before closing </body> tag
293
+ * Use for: Chat widgets, tracking pixels, etc.
294
+ */
295
+ bodyEnd?: string[];
296
+ }
297
+
298
+ export type { AboutContent, FooterConfig, FooterSection, HeaderConfig, HeroContent, LocalizedString$1 as LocalizedString, LogoConfig, NavDropdown, NavDropdownItem, NavItem, NavLink, NavigationConfig, ScriptsConfig, ServiceItem, ServicesContent, SiteContent, SiteMetadata, ThemeConfig, WhyChooseUsContent };
@@ -0,0 +1,298 @@
1
+ interface ThemeConfig {
2
+ brand: {
3
+ name: string;
4
+ colors: {
5
+ primary: string;
6
+ primaryHover: string;
7
+ primaryLight: string;
8
+ primaryDark: string;
9
+ primaryGradientStart: string;
10
+ primaryGradientEnd: string;
11
+ heroGradientStart: string;
12
+ heroGradientEnd: string;
13
+ footerGradientStart: string;
14
+ footerGradientEnd: string;
15
+ };
16
+ fonts: {
17
+ heading: {
18
+ family: string;
19
+ weights: number[];
20
+ fallback: string;
21
+ };
22
+ body: {
23
+ family: string;
24
+ weights: number[];
25
+ fallback: string;
26
+ };
27
+ };
28
+ };
29
+ design: {
30
+ borderRadius: 'sharp' | 'rounded' | 'pill';
31
+ shadows: 'flat' | 'subtle' | 'prominent';
32
+ spacing: 'compact' | 'comfortable' | 'spacious';
33
+ };
34
+ animations?: {
35
+ speed?: 'slow' | 'normal' | 'fast';
36
+ reduceMotion?: boolean;
37
+ };
38
+ colors: {
39
+ slate: {
40
+ 50: string;
41
+ 100: string;
42
+ 200: string;
43
+ 300: string;
44
+ 400: string;
45
+ 500: string;
46
+ 600: string;
47
+ 700: string;
48
+ 800: string;
49
+ 900: string;
50
+ };
51
+ };
52
+ }
53
+
54
+ interface LocalizedString$1 {
55
+ [locale: string]: string;
56
+ }
57
+ interface SiteMetadata {
58
+ siteName: string;
59
+ siteUrl: string;
60
+ defaultLocale: string;
61
+ supportedLocales: string[];
62
+ contactEmail: string;
63
+ contactPhone: string;
64
+ address: {
65
+ street: string;
66
+ city: string;
67
+ province: string;
68
+ postalCode: string;
69
+ country: string;
70
+ };
71
+ }
72
+ interface HeroContent {
73
+ headline: LocalizedString$1;
74
+ subheadline: LocalizedString$1;
75
+ variant?: 'dark' | 'light' | 'split';
76
+ backgroundImage?: string;
77
+ backgroundVideo?: string;
78
+ overlayGradient?: {
79
+ from: string;
80
+ to: string;
81
+ };
82
+ cta: {
83
+ primary: {
84
+ text: LocalizedString$1;
85
+ href: string;
86
+ };
87
+ secondary?: {
88
+ text: LocalizedString$1;
89
+ href: string;
90
+ };
91
+ };
92
+ trustLine?: LocalizedString$1;
93
+ }
94
+ interface RecognitionContent {
95
+ paragraphs: Array<LocalizedString$1>;
96
+ }
97
+ interface AboutContent {
98
+ heading: LocalizedString$1;
99
+ dividerLine?: boolean;
100
+ paragraphs: Array<LocalizedString$1>;
101
+ image?: {
102
+ src: string;
103
+ alt: LocalizedString$1;
104
+ placeholder?: string;
105
+ };
106
+ }
107
+ interface ServiceItem {
108
+ id: string;
109
+ name: LocalizedString$1;
110
+ description: LocalizedString$1;
111
+ href: string;
112
+ icon?: string;
113
+ }
114
+ interface ServicesContent {
115
+ heading: LocalizedString$1;
116
+ description: LocalizedString$1;
117
+ dividerLine?: boolean;
118
+ items: ServiceItem[];
119
+ image?: {
120
+ src: string;
121
+ alt: LocalizedString$1;
122
+ placeholder?: string;
123
+ };
124
+ cta?: {
125
+ text: LocalizedString$1;
126
+ subtext: LocalizedString$1;
127
+ button: {
128
+ text: LocalizedString$1;
129
+ href: string;
130
+ };
131
+ };
132
+ }
133
+ interface WhyChooseUsContent {
134
+ heading: LocalizedString$1;
135
+ dividerLine?: boolean;
136
+ paragraphs: Array<LocalizedString$1>;
137
+ image?: {
138
+ src: string;
139
+ alt: LocalizedString$1;
140
+ placeholder?: string;
141
+ };
142
+ }
143
+ interface ContactContent {
144
+ heading: LocalizedString$1;
145
+ description?: LocalizedString$1;
146
+ form: {
147
+ namePlaceholder: LocalizedString$1;
148
+ emailPlaceholder: LocalizedString$1;
149
+ phonePlaceholder: LocalizedString$1;
150
+ messagePlaceholder: LocalizedString$1;
151
+ submitButton: LocalizedString$1;
152
+ successMessage: LocalizedString$1;
153
+ errorMessage: LocalizedString$1;
154
+ };
155
+ info: {
156
+ addressLabel: LocalizedString$1;
157
+ phoneLabel: LocalizedString$1;
158
+ emailLabel: LocalizedString$1;
159
+ hoursLabel: LocalizedString$1;
160
+ hours: LocalizedString$1;
161
+ };
162
+ }
163
+ interface TeamMember {
164
+ name: string;
165
+ title: LocalizedString$1;
166
+ bio: LocalizedString$1;
167
+ education: LocalizedString$1;
168
+ linkedin?: string;
169
+ image?: string;
170
+ }
171
+ interface TeamContent {
172
+ heading: LocalizedString$1;
173
+ members: TeamMember[];
174
+ history: {
175
+ heading: LocalizedString$1;
176
+ paragraphs: Array<LocalizedString$1>;
177
+ };
178
+ }
179
+ interface ServicePageContent {
180
+ title: LocalizedString$1;
181
+ description: LocalizedString$1;
182
+ lead: LocalizedString$1;
183
+ sections: Array<{
184
+ heading: LocalizedString$1;
185
+ subsections: Array<{
186
+ title: LocalizedString$1;
187
+ content: LocalizedString$1;
188
+ }>;
189
+ }>;
190
+ benefits?: {
191
+ heading: LocalizedString$1;
192
+ items: Array<{
193
+ title: LocalizedString$1;
194
+ description: LocalizedString$1;
195
+ }>;
196
+ };
197
+ }
198
+ interface SiteContent {
199
+ metadata: SiteMetadata;
200
+ hero: HeroContent;
201
+ recognition?: RecognitionContent;
202
+ about: AboutContent;
203
+ whyChooseUs: WhyChooseUsContent;
204
+ services: ServicesContent;
205
+ contact?: ContactContent;
206
+ team?: TeamContent;
207
+ servicePages?: {
208
+ [serviceId: string]: ServicePageContent;
209
+ };
210
+ }
211
+
212
+ interface LocalizedString {
213
+ [locale: string]: string;
214
+ }
215
+ interface NavLink {
216
+ id: string;
217
+ label: LocalizedString;
218
+ href: string | LocalizedString;
219
+ external?: boolean;
220
+ icon?: string;
221
+ }
222
+ interface NavDropdownItem extends NavLink {
223
+ description?: LocalizedString;
224
+ }
225
+ interface NavDropdown {
226
+ id: string;
227
+ label: LocalizedString;
228
+ type: 'dropdown';
229
+ children: NavDropdownItem[];
230
+ cta?: {
231
+ label: LocalizedString;
232
+ href: string;
233
+ external?: boolean;
234
+ };
235
+ }
236
+ type NavItem = NavLink | NavDropdown;
237
+ interface LogoConfig {
238
+ text?: LocalizedString;
239
+ image?: string;
240
+ imageAlt?: LocalizedString;
241
+ href: string;
242
+ width?: number;
243
+ height?: number;
244
+ displayHeight?: number;
245
+ }
246
+ interface HeaderConfig {
247
+ logo: LogoConfig;
248
+ mainNav: NavItem[];
249
+ utilityNav: NavLink[];
250
+ dropdownStyle?: 'mega' | 'simple';
251
+ }
252
+ interface FooterSection {
253
+ heading?: LocalizedString;
254
+ links: NavLink[];
255
+ }
256
+ interface SocialLink {
257
+ platform: string;
258
+ url: string;
259
+ icon: string;
260
+ label: LocalizedString;
261
+ }
262
+ interface PoweredByConfig {
263
+ text: LocalizedString;
264
+ logo?: {
265
+ src: string;
266
+ alt: string;
267
+ width: number;
268
+ height: number;
269
+ };
270
+ href?: string;
271
+ }
272
+ interface FooterConfig {
273
+ sections?: FooterSection[];
274
+ copyright: LocalizedString;
275
+ tagline?: LocalizedString;
276
+ social?: SocialLink[];
277
+ poweredBy?: PoweredByConfig;
278
+ backgroundColor?: string;
279
+ }
280
+ interface NavigationConfig {
281
+ header: HeaderConfig;
282
+ footer: FooterConfig;
283
+ }
284
+
285
+ interface ScriptsConfig {
286
+ /**
287
+ * Scripts to inject in the <head> section
288
+ * Use for: Analytics, fonts, meta tags, etc.
289
+ */
290
+ head?: string[];
291
+ /**
292
+ * Scripts to inject before closing </body> tag
293
+ * Use for: Chat widgets, tracking pixels, etc.
294
+ */
295
+ bodyEnd?: string[];
296
+ }
297
+
298
+ export type { AboutContent, FooterConfig, FooterSection, HeaderConfig, HeroContent, LocalizedString$1 as LocalizedString, LogoConfig, NavDropdown, NavDropdownItem, NavItem, NavLink, NavigationConfig, ScriptsConfig, ServiceItem, ServicesContent, SiteContent, SiteMetadata, ThemeConfig, WhyChooseUsContent };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/config/index.ts
17
+ var config_exports = {};
18
+ module.exports = __toCommonJS(config_exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/index.ts"],"sourcesContent":["// ABOUTME: Configuration schemas export\n// ABOUTME: Central export point for all configuration TypeScript types\n\nexport type { ThemeConfig } from './theme.schema';\n\nexport type {\n LocalizedString,\n SiteMetadata,\n ServiceItem,\n HeroContent,\n AboutContent,\n WhyChooseUsContent,\n ServicesContent,\n SiteContent,\n} from './content.schema';\n\nexport type {\n NavLink,\n NavDropdownItem,\n NavDropdown,\n NavItem,\n LogoConfig,\n HeaderConfig,\n FooterConfig,\n FooterSection,\n NavigationConfig,\n} from './navigation.schema';\n\nexport type { ScriptsConfig } from './scripts.schema';\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}