@pixelated-tech/components 3.2.8 → 3.2.9

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 (44) hide show
  1. package/{README.COMPONENTS.md → README.COMPONENTS.MD} +30 -16
  2. package/README.md +19 -13
  3. package/dist/components/cms/flickr.js +11 -2
  4. package/dist/components/cms/google.reviews.components.js +16 -5
  5. package/dist/components/cms/google.reviews.css +92 -0
  6. package/dist/components/cms/google.reviews.functions.js +1 -5
  7. package/dist/components/cms/gravatar.components.js +4 -16
  8. package/dist/components/cms/gravatar.css +110 -0
  9. package/dist/components/cms/hubspot.components.js +13 -8
  10. package/dist/components/cms/wordpress.components.js +11 -3
  11. package/dist/components/cms/wordpress.functions.js +6 -2
  12. package/dist/components/config/config.example.js +11 -3
  13. package/dist/components/seo/googleanalytics.js +12 -3
  14. package/dist/types/components/cms/flickr.d.ts +5 -2
  15. package/dist/types/components/cms/flickr.d.ts.map +1 -1
  16. package/dist/types/components/cms/google.reviews.components.d.ts +4 -1
  17. package/dist/types/components/cms/google.reviews.components.d.ts.map +1 -1
  18. package/dist/types/components/cms/google.reviews.functions.d.ts +1 -0
  19. package/dist/types/components/cms/google.reviews.functions.d.ts.map +1 -1
  20. package/dist/types/components/cms/gravatar.components.d.ts +1 -0
  21. package/dist/types/components/cms/gravatar.components.d.ts.map +1 -1
  22. package/dist/types/components/cms/hubspot.components.d.ts +3 -3
  23. package/dist/types/components/cms/hubspot.components.d.ts.map +1 -1
  24. package/dist/types/components/cms/wordpress.components.d.ts +2 -1
  25. package/dist/types/components/cms/wordpress.components.d.ts.map +1 -1
  26. package/dist/types/components/cms/wordpress.functions.d.ts +4 -0
  27. package/dist/types/components/cms/wordpress.functions.d.ts.map +1 -1
  28. package/dist/types/components/config/config.example.d.ts.map +1 -1
  29. package/dist/types/components/config/config.types.d.ts +7 -1
  30. package/dist/types/components/config/config.types.d.ts.map +1 -1
  31. package/dist/types/components/general/semantic.d.ts +1 -1
  32. package/dist/types/components/seo/googleanalytics.d.ts +2 -2
  33. package/dist/types/components/seo/googleanalytics.d.ts.map +1 -1
  34. package/dist/types/stories/cms/google.reviews.stories.d.ts +11 -0
  35. package/dist/types/stories/cms/google.reviews.stories.d.ts.map +1 -1
  36. package/dist/types/stories/cms/wordpress.stories.d.ts +4 -0
  37. package/dist/types/stories/cms/wordpress.stories.d.ts.map +1 -1
  38. package/dist/types/stories/seo/seo.googleanalytics.stories.d.ts +9 -2
  39. package/dist/types/stories/seo/seo.googleanalytics.stories.d.ts.map +1 -1
  40. package/dist/types/tests/google.reviews.test.d.ts +2 -0
  41. package/dist/types/tests/google.reviews.test.d.ts.map +1 -0
  42. package/package.json +11 -11
  43. package/dist/types/tests/google-reviews.test.d.ts +0 -2
  44. package/dist/types/tests/google-reviews.test.d.ts.map +0 -1
@@ -332,7 +332,7 @@ import { BlogPostList } from '@pixelated-tech/components';
332
332
 
333
333
  | Prop | Type | Default | Description |
334
334
  |------|------|---------|-------------|
335
- | `site` | `string` | - | WordPress site URL or API endpoint |
335
+ | `site` | `string` | - | WordPress site identifier (e.g., 'your-blog.wordpress.com') |
336
336
  | `count` | `number` | - | Number of posts to fetch (undefined = all) |
337
337
  | `posts` | `BlogPostType[]` | - | Pre-fetched posts array |
338
338
 
@@ -460,12 +460,13 @@ import { Gravatar } from '@pixelated-tech/components';
460
460
 
461
461
  ### HubSpot
462
462
 
463
- CRM integration for HubSpot forms and tracking.
463
+ CRM integration for HubSpot forms and tracking. Uses config provider for default values.
464
464
 
465
465
  ```tsx
466
- import { HubSpot } from '@pixelated-tech/components';
466
+ import { HubSpotForm } from '@pixelated-tech/components';
467
467
 
468
- <HubSpot
468
+ <HubSpotForm
469
+ region="na1"
469
470
  portalId="1234567"
470
471
  formId="abcd-1234-5678-efgh"
471
472
  />
@@ -474,9 +475,11 @@ import { HubSpot } from '@pixelated-tech/components';
474
475
  #### Props
475
476
  | Prop | Type | Default | Description |
476
477
  |------|------|---------|-------------|
477
- | `portalId` | `string` | - | HubSpot portal ID |
478
- | `formId` | `string` | - | HubSpot form ID |
479
- | `onFormSubmit` | `function` | - | Form submission callback |
478
+ | `region` | `string` | `config.hubspot.region` or `'na1'` | HubSpot region (na1, eu1, ap1, etc.) |
479
+ | `portalId` | `string` | `config.hubspot.portalId` | HubSpot portal ID |
480
+ | `formId` | `string` | `config.hubspot.formId` | HubSpot form ID |
481
+ | `target` | `string` | `'#hubspot-form-container'` | Form target element selector |
482
+ | `containerId` | `string` | `'hubspot-form-container'` | Container element ID |
480
483
 
481
484
  ### Instagram
482
485
 
@@ -993,22 +996,32 @@ import { NotFound } from '@pixelated-tech/components';
993
996
 
994
997
  ### GoogleAnalytics
995
998
 
996
- Google Analytics tracking component.
999
+ Google Analytics tracking component. Can use config provider or direct props.
997
1000
 
998
1001
  ```tsx
999
1002
  import { GoogleAnalytics } from '@pixelated-tech/components';
1000
1003
 
1001
- <GoogleAnalytics
1002
- trackingId="GA_MEASUREMENT_ID"
1003
- debug={false}
1004
- />
1004
+ // Using config provider (recommended)
1005
+ <GoogleAnalytics />
1006
+
1007
+ // Using direct props (overrides config)
1008
+ <GoogleAnalytics id="G-XXXXXXXXXX" />
1005
1009
  ```
1006
1010
 
1007
1011
  #### Props
1008
1012
  | Prop | Type | Default | Description |
1009
1013
  |------|------|---------|-------------|
1010
- | `trackingId` | `string` | - | Google Analytics tracking ID |
1011
- | `debug` | `boolean` | `false` | Enable debug mode |
1014
+ | `id` | `string` | - | Google Analytics tracking ID (optional if set in config) |
1015
+
1016
+ #### Configuration
1017
+ ```tsx
1018
+ const pixelatedConfig = {
1019
+ googleAnalytics: {
1020
+ id: 'G-XXXXXXXXXX', // Google Analytics measurement ID
1021
+ adId: 'AW-XXXXXXXXX', // Optional: Google Ads conversion tracking
1022
+ }
1023
+ };
1024
+ ```
1012
1025
 
1013
1026
  ### GoogleMap
1014
1027
 
@@ -1356,8 +1369,8 @@ const cloudinaryConfig = {
1356
1369
 
1357
1370
  ```tsx
1358
1371
  const wordpressConfig = {
1359
- site: 'your-blog.wordpress.com', // WordPress site URL
1360
- apiVersion: '1.1' // API version (optional)
1372
+ baseURL: 'https://public-api.wordpress.com/rest/v1/sites/', // REST API base URL
1373
+ site: 'your-blog.wordpress.com' // WordPress site identifier
1361
1374
  };
1362
1375
  ```
1363
1376
 
@@ -1379,6 +1392,7 @@ const config = {
1379
1392
  username: 'your-calendly-username'
1380
1393
  },
1381
1394
  hubspot: {
1395
+ region: 'na1',
1382
1396
  portalId: 'your-portal-id',
1383
1397
  formId: 'your-form-id'
1384
1398
  },
package/README.md CHANGED
@@ -173,17 +173,18 @@ npm run storybook
173
173
 
174
174
  ### Overview
175
175
 
176
- **Current Status**: ✅ 2,054 tests passing across 57 test files (all tests passing)
176
+ **Current Status**: ✅ 2,037 tests passing across 59 test files (all tests passing)
177
177
 
178
178
  | Metric | Value |
179
179
  |--------|-------|
180
- | Test Files | 57 |
181
- | Total Tests | 2,054 |
182
- | Components Tested | 50/50 (100%) |
183
- | Coverage (Statements) | 66.39% |
184
- | Coverage (Lines) | 69.95% |
185
- | Coverage (Functions) | 74.65% |
186
- | Coverage (Branches) | 56.36% |
180
+ | Test Files | 58 |
181
+ | Total Tests | 2,038 |
182
+ | Components Tested | 52/52 (100%) |
183
+ | Utility Modules Tested | 2/2 (100%) |
184
+ | Coverage (Statements) | 66.81% |
185
+ | Coverage (Lines) | 70.31% |
186
+ | Coverage (Functions) | 74.59% |
187
+ | Coverage (Branches) | 57.62% |
187
188
  | Test Framework | Vitest 4.x |
188
189
  | Testing Library | @testing-library/react + jsdom |
189
190
 
@@ -202,6 +203,7 @@ npm run test:run # Single run (for CI)
202
203
 
203
204
  #### Component Coverage (Sorted by Statement Coverage)
204
205
  - **sitemap.ts**: 100% statements
206
+ - **google.reviews.functions.ts**: 100% statements
205
207
  - **googlesearch.tsx**: 100% statements
206
208
  - **formvalidations.tsx**: 100% statements (↑ 92.69 points)
207
209
  - **tiles.tsx**: 100% statements
@@ -210,6 +212,7 @@ npm run test:run # Single run (for CI)
210
212
  - **timeline.tsx**: 100% statements
211
213
  - **config.server.tsx**: 100% statements
212
214
  - **modal.tsx**: 100% statements
215
+ - **google.reviews.components.tsx**: 100% statements
213
216
  - **recipe.tsx**: 98.8% statements
214
217
  - **sidepanel.tsx**: 97.5% statements
215
218
  - **resume.tsx**: 94.38% statements
@@ -231,10 +234,10 @@ npm run test:run # Single run (for CI)
231
234
  ### Test Configuration
232
235
 
233
236
  **Coverage Targets** (Updated - Focus on Statement Coverage):
234
- - **Statements**: 66.39% ✅ ACHIEVED (Target: 70%)
235
- - **Lines**: 69.95% ✅ ACHIEVED
236
- - **Functions**: 74.65% ✅ ACHIEVED
237
- - **Branches**: 56.36% (Focus area for future)
237
+ - **Statements**: 66.81% ✅ ACHIEVED (Target: 70%)
238
+ - **Lines**: 70.31% ✅ ACHIEVED
239
+ - **Functions**: 74.59% ✅ ACHIEVED
240
+ - **Branches**: 57.62% (Focus area for future)
238
241
 
239
242
  **Coverage Thresholds in vitest.config.ts**:
240
243
  - Lines: 70% threshold
@@ -260,7 +263,7 @@ npm run test:run # Single run (for CI)
260
263
 
261
264
  ### New Components
262
265
  - [ ] **ON HOLD** LinkedIn Recommendations Integration (Not possible with current LinkedIn API)
263
- - [ ] eBay Feedback Integration
266
+ - [ ] **ON HOLD** eBay Feedback Integration - requires user OAuth login
264
267
  - [ ] **ON HOLD** Yelp Recommendations integration (Cost Prohibitive)
265
268
  - [ ] Instagram Image Integration for Carousels
266
269
  - [ ] Shopify Integration
@@ -285,6 +288,9 @@ npm run test:run # Single run (for CI)
285
288
  - [ ] **Form Components**: Fix validation state reset when input props change.
286
289
  - [ ] **Carousel Component**: Fix active card state reset when `props.cards` changes.
287
290
  - [ ] **NerdJoke Component**: Add props to useEffect dependencies if endpoint becomes configurable.
291
+ - [ ] **GoogleReviews Component**: Add carousel/grid display modes.
292
+ - [ ] **GoogleReviews Component**: Add API key to config provider instead of hardcoding.
293
+ - [ ] **Instagram Component**: Add accessToken and userId to config provider for centralized API credentials.
288
294
 
289
295
 
290
296
 
@@ -43,11 +43,20 @@ function getFlickrSize(size) {
43
43
  }
44
44
  }
45
45
  GetFlickrData.PropTypes = {
46
- flickr: PropTypes.object.isRequired,
46
+ flickr: PropTypes.object,
47
+ config: PropTypes.object,
47
48
  };
48
49
  export function GetFlickrData(props) {
49
50
  const debug = false;
50
- const flickr = mergeDeep(defaultFlickr.flickr, props.flickr);
51
+ // Use provided flickr config, or fall back to config provider, or use defaults
52
+ let flickrConfig = { ...defaultFlickr.flickr };
53
+ if (props.config) {
54
+ flickrConfig = mergeDeep(flickrConfig, props.config);
55
+ }
56
+ if (props.flickr) {
57
+ flickrConfig = mergeDeep(flickrConfig, props.flickr);
58
+ }
59
+ const flickr = flickrConfig;
51
60
  const myURL = generateURL(flickr.baseURL, flickr.urlProps);
52
61
  const fetchFlickrData = async () => {
53
62
  try {
@@ -3,11 +3,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useEffect } from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import { getGoogleReviewsByPlaceId } from './google.reviews.functions';
6
+ import './google.reviews.css';
7
+ const GOOGLE_MAPS_API_KEY = 'AIzaSyBtknq7LHzN0xb0lIN3K0CXXf0swVp6ReA';
6
8
  GoogleReviewsCard.propTypes = {
7
- placeID: PropTypes.string.isRequired,
9
+ placeId: PropTypes.string.isRequired,
8
10
  language: PropTypes.string,
9
11
  maxReviews: PropTypes.number,
10
12
  proxyBase: PropTypes.string,
13
+ apiKey: PropTypes.string,
11
14
  };
12
15
  export function GoogleReviewsCard(props) {
13
16
  const [place, setPlace] = useState();
@@ -22,22 +25,30 @@ export function GoogleReviewsCard(props) {
22
25
  language: props.language,
23
26
  maxReviews: props.maxReviews,
24
27
  proxyBase: props.proxyBase,
28
+ apiKey: props.apiKey || GOOGLE_MAPS_API_KEY,
25
29
  });
26
30
  setPlace(result.place);
27
31
  setReviews(result.reviews);
28
32
  setLoading(false);
29
33
  }
30
34
  catch (e) {
31
- setError(e?.message || 'Failed to fetch reviews');
35
+ const errorMessage = e?.message || 'Failed to fetch reviews';
36
+ // Check for common CORS/network issues
37
+ if (errorMessage.includes('Failed to fetch') || errorMessage.includes('CORS')) {
38
+ setError('Unable to load reviews. This may be due to CORS restrictions in the browser. Try using a proxy server or server-side rendering.');
39
+ }
40
+ else {
41
+ setError(errorMessage);
42
+ }
32
43
  setLoading(false);
33
44
  }
34
45
  })();
35
46
  }, [props.placeId, props.language, props.maxReviews, props.proxyBase]);
36
47
  if (loading) {
37
- return (_jsx("div", { style: { padding: 16 }, children: _jsx("p", { children: "Loading reviews..." }) }));
48
+ return (_jsx("div", { className: "google-reviews-card", children: _jsx("p", { className: "loading", children: "Loading reviews..." }) }));
38
49
  }
39
50
  if (error) {
40
- return (_jsx("div", { style: { padding: 16 }, children: _jsxs("p", { style: { color: 'tomato' }, children: ["Error: ", error] }) }));
51
+ return (_jsx("div", { className: "google-reviews-card", children: _jsxs("p", { className: "error", children: ["Error: ", error] }) }));
41
52
  }
42
- return (_jsxs("div", { style: { padding: 16 }, children: [_jsx("h3", { children: place?.name || 'Reviews' }), place?.formatted_address && (_jsx("p", { style: { fontSize: '0.9em', color: '#666', marginBottom: 16 }, children: place.formatted_address })), reviews.length === 0 ? (_jsx("p", { children: "No reviews found." })) : (_jsx("ul", { style: { listStyle: 'none', padding: 0 }, children: reviews.map((r, i) => (_jsxs("li", { style: { marginBottom: 16, borderBottom: '1px solid #eee', paddingBottom: 12 }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', marginBottom: 8 }, children: [r.profile_photo_url && (_jsx("img", { src: r.profile_photo_url, alt: r.author_name, style: { width: 40, height: 40, borderRadius: '50%', marginRight: 12 } })), _jsxs("div", { children: [_jsx("strong", { children: r.author_name }), _jsxs("div", { style: { fontSize: '0.9em', color: '#666' }, children: ['★'.repeat(r.rating), '☆'.repeat(5 - r.rating), " ", r.rating, "/5", r.relative_time_description && _jsxs("span", { children: [" \u00B7 ", r.relative_time_description] })] })] })] }), r.text && _jsx("div", { style: { marginTop: 8, lineHeight: 1.5 }, children: r.text })] }, i))) })), place && (_jsx("a", { href: `https://search.google.com/local/writereview?placeid=${place.place_id}`, target: "_blank", rel: "noopener noreferrer", style: { display: 'inline-block', marginTop: 16, color: '#1a73e8', textDecoration: 'none' }, children: "Write a review on Google \u2192" }))] }));
53
+ return (_jsxs("div", { className: "google-reviews-card", children: [_jsx("h3", { children: place?.name || 'Reviews' }), place?.formatted_address && (_jsx("p", { className: "address", children: place.formatted_address })), reviews.length === 0 ? (_jsx("p", { className: "no-reviews", children: "No reviews found." })) : (_jsx("ul", { children: reviews.map((r, i) => (_jsxs("li", { children: [_jsxs("div", { className: "review-header", children: [r.profile_photo_url && (_jsx("img", { src: r.profile_photo_url, alt: r.author_name, className: "profile-photo" })), _jsxs("div", { children: [_jsx("div", { className: "author-name", children: r.author_name }), _jsxs("div", { className: "rating", children: ['★'.repeat(r.rating), '☆'.repeat(5 - r.rating), " ", r.rating, "/5", r.relative_time_description && _jsxs("span", { children: [" \u00B7 ", r.relative_time_description] })] })] })] }), r.text && _jsx("div", { className: "review-text", children: r.text })] }, i))) })), place && (_jsx("a", { href: `https://search.google.com/local/writereview?placeid=${place.place_id}`, target: "_blank", rel: "noopener noreferrer", className: "write-review", children: "Write a review on Google \u2192" }))] }));
43
54
  }
@@ -0,0 +1,92 @@
1
+ .google-reviews-card {
2
+ padding: 16px;
3
+ }
4
+
5
+ .google-reviews-card h3 {
6
+ margin: 0 0 8px 0;
7
+ }
8
+
9
+ .google-reviews-card .address {
10
+ font-size: 0.9em;
11
+ color: #666;
12
+ margin-bottom: 16px;
13
+ }
14
+
15
+ .google-reviews-card .loading,
16
+ .google-reviews-card .error,
17
+ .google-reviews-card .no-reviews {
18
+ padding: 16px;
19
+ }
20
+
21
+ .google-reviews-card .error {
22
+ color: tomato;
23
+ }
24
+
25
+ .google-reviews-card ul {
26
+ list-style: none;
27
+ padding: 0;
28
+ }
29
+
30
+ .google-reviews-card li {
31
+ margin-bottom: 16px;
32
+ border-bottom: 1px solid #eee;
33
+ padding-bottom: 12px;
34
+ }
35
+
36
+ .google-reviews-card .review-header {
37
+ display: flex;
38
+ align-items: center;
39
+ margin-bottom: 8px;
40
+ }
41
+
42
+ .google-reviews-card .profile-photo-container {
43
+ width: 40px;
44
+ height: 40px;
45
+ margin-right: 12px;
46
+ flex-shrink: 0;
47
+ position: relative;
48
+ }
49
+
50
+ .google-reviews-card .profile-photo {
51
+ width: 100%;
52
+ height: 100%;
53
+ border-radius: 50%;
54
+ object-fit: cover;
55
+ }
56
+
57
+ .google-reviews-card .profile-placeholder {
58
+ width: 100%;
59
+ height: 100%;
60
+ border-radius: 50%;
61
+ background-color: #e0e0e0;
62
+ color: #666;
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ font-weight: bold;
67
+ font-size: 16px;
68
+ position: absolute;
69
+ top: 0;
70
+ left: 0;
71
+ }
72
+
73
+ .google-reviews-card .author-name {
74
+ font-weight: bold;
75
+ }
76
+
77
+ .google-reviews-card .rating {
78
+ font-size: 0.9em;
79
+ color: #666;
80
+ }
81
+
82
+ .google-reviews-card .review-text {
83
+ margin-top: 8px;
84
+ line-height: 1.5;
85
+ }
86
+
87
+ .google-reviews-card .write-review {
88
+ display: inline-block;
89
+ margin-top: 16px;
90
+ color: #1a73e8;
91
+ text-decoration: none;
92
+ }
@@ -2,11 +2,7 @@
2
2
  // Requires: GOOGLE_MAPS_API_KEY or hard-coded key
3
3
  // Flow: Place Details (reviews)
4
4
  export async function getGoogleReviewsByPlaceId(params) {
5
- const apiKey = 'AIzaSyBtknq7LHzN0xb0lIN3K0CXXf0swVp6ReA';
6
- if (!apiKey) {
7
- throw new Error('GOOGLE_MAPS_API_KEY is required');
8
- }
9
- const { placeId, language, maxReviews, proxyBase } = params;
5
+ const { placeId, language, maxReviews, proxyBase, apiKey } = params;
10
6
  const detailsBase = 'https://maps.googleapis.com/maps/api/place/details/json';
11
7
  const fields = encodeURIComponent('reviews,name,place_id,formatted_address');
12
8
  const detailsUrl = `${detailsBase}?place_id=${encodeURIComponent(placeId)}&fields=${fields}${language ? `&language=${encodeURIComponent(language)}` : ''}&key=${apiKey}`;
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
4
4
  // import { type GravatarProfile } from './gravatar.functions';
5
5
  import { SmartImage } from './cloudinary.image';
6
6
  import { usePixelatedConfig } from '../config/config.client';
7
+ import './gravatar.css';
7
8
  /* export type GravatarCardProps = {
8
9
  // Gravatar profile data (fetched server-side)
9
10
  profile?: GravatarProfile | null;
@@ -104,20 +105,7 @@ export function GravatarCard(props) {
104
105
  const isHorizontal = layout === 'horizontal';
105
106
  const photoOnRight = direction === 'right';
106
107
  const config = usePixelatedConfig();
107
- const avatarElement = (_jsx("div", { style: { flexShrink: 0 }, children: _jsx(SmartImage, { src: avatarUrl, alt: displayName, title: displayName, width: avatarSize ?? 120, height: avatarSize ?? 120, style: {
108
- borderRadius: '50%',
109
- objectFit: 'cover',
110
- display: 'block',
111
- }, cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }) }));
112
- const contentElement = (_jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [_jsxs("div", { style: { marginBottom: 8 }, children: [_jsx("h3", { style: { margin: 0, fontSize: compact ? '1.1em' : '1.4em' }, children: profileLink ? (_jsx("a", { href: profileLink, target: "_blank", rel: "noopener noreferrer", style: { textDecoration: 'none', color: 'inherit' }, children: displayName })) : (displayName) }), pronouns && _jsxs("span", { style: { fontSize: '0.9em', color: '#666', marginLeft: 8 }, children: ["(", pronouns, ")"] })] }), (jobTitle || company) && (_jsxs("div", { style: { fontSize: '0.95em', color: '#555', marginBottom: 8 }, children: [jobTitle && _jsx("strong", { children: jobTitle }), jobTitle && company && _jsx("span", { children: " at " }), company && _jsx("span", { children: company })] })), location && (_jsxs("div", { style: { fontSize: '0.9em', color: '#777', marginBottom: 8 }, children: ["\uD83D\uDCCD ", location] })), aboutMe && !compact && (_jsx("p", { style: { margin: '12px 0', fontSize: '0.95em', lineHeight: 1.5, color: '#333' }, children: aboutMe })), (githubUrl || linkedinUrl || twitterUrl || instagramUrl || websiteUrl) && (_jsxs("div", { style: { display: 'flex', gap: 12, marginTop: 12, flexWrap: 'wrap' }, children: [githubUrl && (_jsx("a", { href: githubUrl, target: "_blank", rel: "noopener noreferrer", style: { color: '#333', textDecoration: 'none', fontSize: '1.2em' }, children: "GitHub" })), linkedinUrl && (_jsx("a", { href: linkedinUrl, target: "_blank", rel: "noopener noreferrer", style: { color: '#0077b5', textDecoration: 'none', fontSize: '1.2em' }, children: "LinkedIn" })), twitterUrl && (_jsx("a", { href: twitterUrl, target: "_blank", rel: "noopener noreferrer", style: { color: '#1da1f2', textDecoration: 'none', fontSize: '1.2em' }, children: "X" })), instagramUrl && (_jsx("a", { href: instagramUrl, target: "_blank", rel: "noopener noreferrer", style: { color: '#e4405f', textDecoration: 'none', fontSize: '1.2em' }, children: "Instagram" })), websiteUrl && (_jsx("a", { href: websiteUrl, target: "_blank", rel: "noopener noreferrer", style: { color: '#666', textDecoration: 'none', fontSize: '1.2em' }, children: "Website" }))] }))] }));
113
- return (_jsx("div", { style: {
114
- display: 'flex',
115
- flexDirection: isHorizontal ? 'row' : 'column',
116
- alignItems: isHorizontal ? 'flex-start' : 'center',
117
- gap: 16,
118
- padding: 16,
119
- border: '1px solid #e0e0e0',
120
- borderRadius: 8,
121
- maxWidth: isHorizontal ? 600 : 400,
122
- }, children: isHorizontal && photoOnRight ? (_jsxs(_Fragment, { children: [contentElement, avatarElement] })) : (_jsxs(_Fragment, { children: [avatarElement, contentElement] })) }));
108
+ const avatarElement = (_jsx("div", { className: "gravatar-avatar-container", children: _jsx(SmartImage, { src: avatarUrl, alt: displayName, title: displayName, width: avatarSize ?? 120, height: avatarSize ?? 120, quality: 100, className: "gravatar-avatar", cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }) }));
109
+ const contentElement = (_jsxs("div", { className: "gravatar-content", children: [_jsxs("div", { className: "gravatar-header", children: [_jsx("h3", { className: "gravatar-name", children: profileLink ? (_jsx("a", { href: profileLink, target: "_blank", rel: "noopener noreferrer", className: "gravatar-name-link", children: displayName })) : (displayName) }), pronouns && _jsxs("span", { className: "gravatar-pronouns", children: ["(", pronouns, ")"] })] }), (jobTitle || company) && (_jsxs("div", { className: "gravatar-job-company", children: [jobTitle && _jsx("strong", { children: jobTitle }), jobTitle && company && _jsx("span", { children: " at " }), company && _jsx("span", { children: company })] })), location && (_jsxs("div", { className: "gravatar-location", children: ["\uD83D\uDCCD ", location] })), aboutMe && !compact && (_jsx("p", { className: "gravatar-about", children: aboutMe })), (githubUrl || linkedinUrl || twitterUrl || instagramUrl || websiteUrl) && (_jsxs("div", { className: "gravatar-social-links", children: [githubUrl && (_jsx("a", { href: githubUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link", children: "GitHub" })), linkedinUrl && (_jsx("a", { href: linkedinUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-linkedin", children: "LinkedIn" })), twitterUrl && (_jsx("a", { href: twitterUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-twitter", children: "X" })), instagramUrl && (_jsx("a", { href: instagramUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-instagram", children: "Instagram" })), websiteUrl && (_jsx("a", { href: websiteUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-website", children: "Website" }))] }))] }));
110
+ return (_jsx("div", { className: `gravatar-card ${isHorizontal ? 'gravatar-card-horizontal' : ''} ${compact ? 'gravatar-card-compact' : ''}`, children: isHorizontal && photoOnRight ? (_jsxs(_Fragment, { children: [contentElement, avatarElement] })) : (_jsxs(_Fragment, { children: [avatarElement, contentElement] })) }));
123
111
  }
@@ -0,0 +1,110 @@
1
+ /* Gravatar Component Styles */
2
+
3
+ .gravatar-card {
4
+ display: flex;
5
+ flex-direction: column;
6
+ align-items: center;
7
+ gap: 16px;
8
+ padding: 16px;
9
+ border: 2px solid #e0e0e0;
10
+ border-radius: 8px;
11
+ /* max-width: 400px; */
12
+ }
13
+
14
+ .gravatar-card-horizontal {
15
+ flex-direction: row;
16
+ align-items: flex-start;
17
+ /* max-width: 600px; */
18
+ }
19
+
20
+ .gravatar-avatar-container {
21
+ flex-shrink: 0;
22
+ }
23
+
24
+ .gravatar-avatar {
25
+ border-radius: 50%;
26
+ object-fit: cover;
27
+ display: block;
28
+ }
29
+
30
+ .gravatar-content {
31
+ flex: 1;
32
+ min-width: 0;
33
+ }
34
+
35
+ .gravatar-header {
36
+ margin-bottom: 8px;
37
+ }
38
+
39
+ .gravatar-name {
40
+ margin: 0;
41
+ font-size: 1.4em;
42
+ }
43
+
44
+ .gravatar-name-link {
45
+ text-decoration: none;
46
+ color: inherit;
47
+ }
48
+
49
+ .gravatar-pronouns {
50
+ font-size: 0.9em;
51
+ color: #666;
52
+ margin-left: 8px;
53
+ }
54
+
55
+ .gravatar-job-company {
56
+ font-size: 0.95em;
57
+ color: #555;
58
+ margin-bottom: 8px;
59
+ }
60
+
61
+ .gravatar-location {
62
+ font-size: 0.9em;
63
+ color: #777;
64
+ margin-bottom: 8px;
65
+ }
66
+
67
+ .gravatar-about {
68
+ margin: 12px 0;
69
+ font-size: 0.95em;
70
+ line-height: 1.5;
71
+ color: #333;
72
+ }
73
+
74
+ .gravatar-social-links {
75
+ display: flex;
76
+ gap: 12px;
77
+ margin-top: 12px;
78
+ flex-wrap: wrap;
79
+ }
80
+
81
+ .gravatar-social-link {
82
+ color: #333;
83
+ text-decoration: none;
84
+ font-size: 1.2em;
85
+ }
86
+
87
+ .gravatar-social-link-linkedin {
88
+ color: #0077b5;
89
+ }
90
+
91
+ .gravatar-social-link-twitter {
92
+ color: #1da1f2;
93
+ }
94
+
95
+ .gravatar-social-link-instagram {
96
+ color: #e4405f;
97
+ }
98
+
99
+ .gravatar-social-link-website {
100
+ color: #666;
101
+ }
102
+
103
+ /* Compact variant */
104
+ .gravatar-card-compact .gravatar-name {
105
+ font-size: 1.1em;
106
+ }
107
+
108
+ .gravatar-card-compact .gravatar-about {
109
+ display: none;
110
+ }
@@ -2,6 +2,7 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useEffect } from 'react';
4
4
  import PropTypes from 'prop-types';
5
+ import { usePixelatedConfig } from '../config/config.client';
5
6
  export function initializeHubSpotScript(region, portalId) {
6
7
  if (typeof document === 'undefined')
7
8
  return;
@@ -16,22 +17,26 @@ export function initializeHubSpotScript(region, portalId) {
16
17
  document.head.appendChild(script);
17
18
  }
18
19
  HubSpotForm.propTypes = {
19
- region: PropTypes.string.isRequired,
20
- portalId: PropTypes.string.isRequired,
21
- formId: PropTypes.string.isRequired,
20
+ region: PropTypes.string,
21
+ portalId: PropTypes.string,
22
+ formId: PropTypes.string,
22
23
  target: PropTypes.string,
23
24
  containerId: PropTypes.string,
24
25
  };
25
26
  export function HubSpotForm({ region, portalId, formId, target, containerId = 'hubspot-form-container' }) {
27
+ const config = usePixelatedConfig();
28
+ const finalRegion = region || config.hubspot?.region || 'na1';
29
+ const finalPortalId = portalId || config.hubspot?.portalId || '';
30
+ const finalFormId = formId || config.hubspot?.formId || '';
26
31
  const formTarget = target || `#${containerId}`;
27
32
  useEffect(() => {
28
33
  const createHubspotForm = () => {
29
34
  const win = window;
30
35
  if (win.hbspt && win.hbspt.forms) {
31
36
  win.hbspt.forms.create({
32
- region,
33
- portalId,
34
- formId,
37
+ region: finalRegion,
38
+ portalId: finalPortalId,
39
+ formId: finalFormId,
35
40
  target: formTarget
36
41
  });
37
42
  }
@@ -40,8 +45,8 @@ export function HubSpotForm({ region, portalId, formId, target, containerId = 'h
40
45
  }
41
46
  };
42
47
  createHubspotForm();
43
- }, [region, portalId, formId, formTarget]);
44
- return _jsx("div", { className: "hs-form-frame", "data-region": region, "data-form-id": formId, "data-portal-id": portalId });
48
+ }, [finalRegion, finalPortalId, finalFormId, formTarget]);
49
+ return _jsx("div", { className: "hs-form-frame", "data-region": finalRegion, "data-form-id": finalFormId, "data-portal-id": finalPortalId });
45
50
  }
46
51
  HubspotTrackingCode.propTypes = {
47
52
  hubID: PropTypes.string.isRequired,
@@ -13,7 +13,10 @@ function decodeString(str) {
13
13
  return textarea.value;
14
14
  }
15
15
  export function BlogPostList(props) {
16
- const { site, count, posts: cachedPosts } = props;
16
+ const { site: propSite, baseURL: propBaseURL, count, posts: cachedPosts } = props;
17
+ const config = usePixelatedConfig();
18
+ const site = propSite ?? config?.wordpress?.site;
19
+ const baseURL = propBaseURL ?? config?.wordpress?.baseURL;
17
20
  const [posts, setPosts] = useState(cachedPosts ?? []);
18
21
  useEffect(() => {
19
22
  // If posts are provided, use them directly without fetching
@@ -22,15 +25,20 @@ export function BlogPostList(props) {
22
25
  setPosts(sorted);
23
26
  return;
24
27
  }
28
+ // If no site is configured, don't fetch
29
+ if (!site) {
30
+ console.warn('WordPress site not configured. Provide site prop or wordpress.site in config.');
31
+ return;
32
+ }
25
33
  // Otherwise, fetch from WordPress
26
34
  ToggleLoading({ show: true });
27
35
  (async () => {
28
- const data = (await getWordPressItems({ site, count })) ?? [];
36
+ const data = (await getWordPressItems({ site, count, baseURL })) ?? [];
29
37
  const sorted = data.sort((a, b) => ((a.date ?? '') < (b.date ?? '')) ? 1 : -1);
30
38
  setPosts(sorted);
31
39
  ToggleLoading({ show: false });
32
40
  })();
33
- }, [site, count, cachedPosts]);
41
+ }, [site, baseURL, count, cachedPosts]);
34
42
  return (_jsxs(_Fragment, { children: [_jsx(Loading, {}), posts.map((post) => (_jsx(PageGridItem, { children: _jsx(BlogPostSummary, { ID: post.ID, title: post.title, date: post.date, excerpt: post.excerpt, URL: post.URL, categories: post.categories, featured_image: post.featured_image }) }, post.ID)))] }));
35
43
  }
36
44
  export function BlogPostSummary(props) {
@@ -7,15 +7,17 @@ const wpCategoriesPath = "/categories";
7
7
  getWordPressItems.propTypes = {
8
8
  site: PropTypes.string.isRequired,
9
9
  count: PropTypes.number,
10
+ baseURL: PropTypes.string,
10
11
  };
11
12
  export async function getWordPressItems(props) {
13
+ const { baseURL = wpApiURL } = props;
12
14
  const requested = props.count; // undefined means fetch all available
13
15
  const posts = [];
14
16
  let page = 1;
15
17
  while (true) {
16
18
  const remaining = requested ? Math.max(requested - posts.length, 0) : 100;
17
19
  const number = Math.min(remaining || 100, 100);
18
- const wpPostsURL = `${wpApiURL}${props.site}/posts?number=${number}&page=${page}`;
20
+ const wpPostsURL = `${baseURL}${props.site}/posts?number=${number}&page=${page}`;
19
21
  try {
20
22
  const response = await fetch(wpPostsURL);
21
23
  const data = await response.json();
@@ -82,9 +84,11 @@ export function getWordPressItemImages(item) {
82
84
  }
83
85
  getWordPressCategories.propTypes = {
84
86
  site: PropTypes.string.isRequired,
87
+ baseURL: PropTypes.string,
85
88
  };
86
89
  export async function getWordPressCategories(props) {
87
- const wpCategoriesURL = wpApiURL + props.site + wpCategoriesPath;
90
+ const { baseURL = wpApiURL } = props;
91
+ const wpCategoriesURL = baseURL + props.site + wpCategoriesPath;
88
92
  const categories = [];
89
93
  try {
90
94
  const response = await fetch(wpCategoriesURL);
@@ -15,9 +15,6 @@ const pixelatedConfig = {
15
15
  management_access_token: "muY9LfpCt4qoXosDsnRkkoH3DAVVuUFEuB0WRKRdBUM",
16
16
  preview_access_token: "muY9LfpCt4qoXosDsnRkkoH3DAVVuUFEuB0WRKRdBUM",
17
17
  },
18
- featureFlags: {
19
- enableNewGrid: true,
20
- },
21
18
  ebay: {
22
19
  proxyURL: 'https://proxy.provier.com/proxy?url=',
23
20
  appId: 'your-ebay-client-id',
@@ -33,6 +30,9 @@ const pixelatedConfig = {
33
30
  baseItemURL: 'https://api.ebay.com/buy/browse/v1/item',
34
31
  qsItemURL: '/v1|295959752403|0?fieldgroups=PRODUCT,ADDITIONAL_SELLER_DETAILS',
35
32
  },
33
+ featureFlags: {
34
+ enableNewGrid: true,
35
+ },
36
36
  flickr: {
37
37
  baseURL: 'https://api.flickr.com/services/rest/?',
38
38
  urlProps: {
@@ -56,6 +56,7 @@ const pixelatedConfig = {
56
56
  "id": "G-XXXXXXX"
57
57
  },
58
58
  hubspot: {
59
+ region: 'na1',
59
60
  portalId: 'your-hubspot-portal-id',
60
61
  formId: 'your-default-form-id',
61
62
  trackingCode: 'UA-XXXXXXXXX-X',
@@ -66,5 +67,12 @@ const pixelatedConfig = {
66
67
  payPalApiKey: "your-paypal-client-id",
67
68
  payPalSecret: "your-paypal-client-secret"
68
69
  },
70
+ proxy: {
71
+ proxyURL: 'https://proxy.pixelated.tech/prod/proxy?url='
72
+ },
73
+ wordpress: {
74
+ baseURL: 'https://public-api.wordpress.com/rest/v1/sites/',
75
+ site: 'your-blog.wordpress.com'
76
+ },
69
77
  };
70
78
  export default pixelatedConfig;
@@ -2,6 +2,7 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  // import { useEffect } from "react";
4
4
  import PropTypes from "prop-types";
5
+ import { usePixelatedConfig } from "../config/config.client";
5
6
  function isGA() {
6
7
  const hasGtag = typeof window.gtag === 'function';
7
8
  const hasDataLayer = typeof window.dataLayer !== 'undefined' && Array.isArray(window.dataLayer);
@@ -11,9 +12,16 @@ function isGA() {
11
12
  return (hasGtag || hasDataLayer || hasGAScript || hasGAScriptID || hasGAInitScriptID);
12
13
  }
13
14
  GoogleAnalytics.propTypes = {
14
- id: PropTypes.string.isRequired,
15
+ id: PropTypes.string,
15
16
  };
16
17
  export function GoogleAnalytics(props) {
18
+ const config = usePixelatedConfig();
19
+ const id = props.id || config?.googleAnalytics?.id;
20
+ const adId = config?.googleAnalytics?.adId;
21
+ if (!id) {
22
+ console.warn('Google Analytics ID not provided. Set id prop or googleAnalytics.id in config.');
23
+ return null;
24
+ }
17
25
  if (typeof window === 'undefined') {
18
26
  return;
19
27
  }
@@ -23,7 +31,7 @@ export function GoogleAnalytics(props) {
23
31
  if (isGA()) {
24
32
  return;
25
33
  }
26
- const gaSRC = "https://www.googletagmanager.com/gtag/js?id=" + props.id;
34
+ const gaSRC = "https://www.googletagmanager.com/gtag/js?id=" + id;
27
35
  // useEffect(() => {
28
36
  // INIT GA TAG TO PAGE
29
37
  const gaInit = document.createElement("script");
@@ -34,7 +42,8 @@ export function GoogleAnalytics(props) {
34
42
  window.dataLayer = window.dataLayer || [];
35
43
  window.gtag = function gtag(){ window.dataLayer.push(arguments); }
36
44
  window.gtag('js', new Date());
37
- window.gtag('config', '${props.id}');
45
+ window.gtag('config', '${id}');
46
+ ${adId ? `window.gtag('config', '${adId}');` : ''}
38
47
  `;
39
48
  document.head.appendChild(gaInit);
40
49
  // INSTALL GA SCRIPT
@@ -1,11 +1,14 @@
1
1
  import PropTypes, { InferProps } from 'prop-types';
2
2
  import type { CarouselCardType } from '../carousel/carousel';
3
+ import type { FlickrConfig } from '../config/config.types';
3
4
  export declare function GetFlickrData(props: {
4
- flickr: any;
5
+ flickr?: any;
6
+ config?: FlickrConfig;
5
7
  }): Promise<any>;
6
8
  export declare namespace GetFlickrData {
7
9
  var PropTypes: {
8
- flickr: PropTypes.Validator<object>;
10
+ flickr: PropTypes.Requireable<object>;
11
+ config: PropTypes.Requireable<object>;
9
12
  };
10
13
  }
11
14
  export type GenerateFlickrCardsType = InferProps<typeof GenerateFlickrCards.propTypes>;
@@ -1 +1 @@
1
- {"version":3,"file":"flickr.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/flickr.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAqE7D,wBAAgB,aAAa,CAAE,KAAK,EAAE;IAAE,MAAM,EAAE,GAAG,CAAA;CAAE,gBAuCpD;yBAvCe,aAAa;;;;;AA+C7B,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB;;;;;;;gBAejE;yBAfe,mBAAmB;;;;;;AA8BnC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3E,wBAAgB,aAAa,CAAE,KAAK,EAAE,iBAAiB,2CA0CtD;yBA1Ce,aAAa"}
1
+ {"version":3,"file":"flickr.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/flickr.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAsE3D,wBAAgB,aAAa,CAAE,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE,gBAmD5E;yBAnDe,aAAa;;;;;;AA2D7B,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB;;;;;;;gBAejE;yBAfe,mBAAmB;;;;;;AA8BnC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3E,wBAAgB,aAAa,CAAE,KAAK,EAAE,iBAAiB,2CA0CtD;yBA1Ce,aAAa"}
@@ -1,17 +1,20 @@
1
1
  import PropTypes, { InferProps } from 'prop-types';
2
+ import './google.reviews.css';
2
3
  export type GoogleReviewsCardType = InferProps<typeof GoogleReviewsCard.propTypes>;
3
4
  export declare function GoogleReviewsCard(props: {
4
5
  placeId: string;
5
6
  language?: string;
6
7
  maxReviews?: number;
7
8
  proxyBase?: string;
9
+ apiKey?: string;
8
10
  }): import("react/jsx-runtime").JSX.Element;
9
11
  export declare namespace GoogleReviewsCard {
10
12
  var propTypes: {
11
- placeID: PropTypes.Validator<string>;
13
+ placeId: PropTypes.Validator<string>;
12
14
  language: PropTypes.Requireable<string>;
13
15
  maxReviews: PropTypes.Requireable<number>;
14
16
  proxyBase: PropTypes.Requireable<string>;
17
+ apiKey: PropTypes.Requireable<string>;
15
18
  };
16
19
  }
17
20
  //# sourceMappingURL=google.reviews.components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.reviews.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/google.reviews.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAYnD,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,2CAwFA;yBA7Fe,iBAAiB"}
1
+ {"version":3,"file":"google.reviews.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/google.reviews.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,sBAAsB,CAAC;AAW9B,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,2CA+FA;yBArGe,iBAAiB"}
@@ -18,6 +18,7 @@ export declare function getGoogleReviewsByPlaceId(params: {
18
18
  language?: string;
19
19
  maxReviews?: number;
20
20
  proxyBase?: string;
21
+ apiKey: string;
21
22
  }): Promise<{
22
23
  place?: GooglePlaceSummary;
23
24
  reviews: GoogleReview[];
@@ -1 +1 @@
1
- {"version":3,"file":"google.reviews.functions.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/google.reviews.functions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CA2BnE"}
1
+ {"version":3,"file":"google.reviews.functions.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/google.reviews.functions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAuBnE"}
@@ -1,4 +1,5 @@
1
1
  import PropTypes, { InferProps } from 'prop-types';
2
+ import './gravatar.css';
2
3
  export type GravatarCardType = InferProps<typeof GravatarCard.propTypes>;
3
4
  export declare function GravatarCard(props: GravatarCardType): import("react/jsx-runtime").JSX.Element;
4
5
  export declare namespace GravatarCard {
@@ -1 +1 @@
1
- {"version":3,"file":"gravatar.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/gravatar.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA2FnD,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAgJnD;yBAhJe,YAAY"}
1
+ {"version":3,"file":"gravatar.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/gravatar.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInD,OAAO,gBAAgB,CAAC;AAwFxB,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAoInD;yBApIe,YAAY"}
@@ -4,9 +4,9 @@ type HubSpotFormType = InferProps<typeof HubSpotForm.propTypes>;
4
4
  export declare function HubSpotForm({ region, portalId, formId, target, containerId }: HubSpotFormType): import("react/jsx-runtime").JSX.Element;
5
5
  export declare namespace HubSpotForm {
6
6
  var propTypes: {
7
- region: PropTypes.Validator<string>;
8
- portalId: PropTypes.Validator<string>;
9
- formId: PropTypes.Validator<string>;
7
+ region: PropTypes.Requireable<string>;
8
+ portalId: PropTypes.Requireable<string>;
9
+ formId: PropTypes.Requireable<string>;
10
10
  target: PropTypes.Requireable<string>;
11
11
  containerId: PropTypes.Requireable<string>;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hubspot.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/hubspot.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKnD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAUvE;AASD,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,wBAAgB,WAAW,CAAC,EAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAsC,EACxE,EAAE,eAAe,2CAyBjB;yBA3Be,WAAW;;;;;;;;;AAmC3B,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,2CAQjE;yBARe,mBAAmB;;;;;AAmBnC,MAAM,MAAM,6BAA6B,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACnG,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,6BAA6B,gBAmBnF;yBAnBqB,yBAAyB"}
1
+ {"version":3,"file":"hubspot.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/hubspot.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMnD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAUvE;AASD,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AAChE,wBAAgB,WAAW,CAAC,EAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAsC,EACxE,EAAE,eAAe,2CA+BjB;yBAjCe,WAAW;;;;;;;;;AAyC3B,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,2CAQjE;yBARe,mBAAmB;;;;;AAmBnC,MAAM,MAAM,6BAA6B,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACnG,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,6BAA6B,gBAmBnF;yBAnBqB,yBAAyB"}
@@ -1,7 +1,8 @@
1
1
  import type { BlogPostType } from './wordpress.functions';
2
2
  import "./wordpress.css";
3
3
  export declare function BlogPostList(props: {
4
- site: string;
4
+ site?: string;
5
+ baseURL?: string;
5
6
  count?: number;
6
7
  posts?: BlogPostType[];
7
8
  }): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"wordpress.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/wordpress.components.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,iBAAiB,CAAC;AAWzB,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,2CAyC3F;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,2CA+ClD;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,kDA0BjE"}
1
+ {"version":3,"file":"wordpress.components.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/wordpress.components.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,iBAAiB,CAAC;AAWzB,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,2CAkD9G;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,2CA+ClD;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,kDA0BjE"}
@@ -19,11 +19,13 @@ export type getWordPressItemsType = InferProps<typeof getWordPressItems.propType
19
19
  export declare function getWordPressItems(props: {
20
20
  site: string;
21
21
  count?: number;
22
+ baseURL?: string;
22
23
  }): Promise<BlogPostType[] | undefined>;
23
24
  export declare namespace getWordPressItems {
24
25
  var propTypes: {
25
26
  site: PropTypes.Validator<string>;
26
27
  count: PropTypes.Requireable<number>;
28
+ baseURL: PropTypes.Requireable<string>;
27
29
  };
28
30
  }
29
31
  export type WordPressSitemapImage = {
@@ -50,10 +52,12 @@ export type BlogPostCategoryType = {
50
52
  export type getWordPressCategoriesType = InferProps<typeof getWordPressCategories.propTypes>;
51
53
  export declare function getWordPressCategories(props: {
52
54
  site: string;
55
+ baseURL?: string;
53
56
  }): Promise<any[] | undefined>;
54
57
  export declare namespace getWordPressCategories {
55
58
  var propTypes: {
56
59
  site: PropTypes.Validator<string>;
60
+ baseURL: PropTypes.Requireable<string>;
57
61
  };
58
62
  }
59
63
  //# sourceMappingURL=wordpress.functions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wordpress.functions.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/wordpress.functions.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAWnD,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;KACZ,CAAA;IACD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC,CAAC;AAKF,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,uCA0B9E;yBA1BqB,iBAAiB;;;;;;AAgCvC,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7F,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,qBAAqB,EAAE,CAuClF;yBAvCe,sBAAsB;;;;;AA8CtC,MAAM,MAAM,oBAAoB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7F,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,8BAcnE;yBAdqB,sBAAsB"}
1
+ {"version":3,"file":"wordpress.functions.d.ts","sourceRoot":"","sources":["../../../../src/components/cms/wordpress.functions.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAWnD,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;KACZ,CAAA;IACD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC,CAAC;AAMF,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,uCA2BhG;yBA3BqB,iBAAiB;;;;;;;AAiCvC,MAAM,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7F,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,qBAAqB,EAAE,CAuClF;yBAvCe,sBAAsB;;;;;AA8CtC,MAAM,MAAM,oBAAoB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAKF,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7F,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,8BAerF;yBAfqB,sBAAsB"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.example.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.example.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,QAAA,MAAM,eAAe,EAAE,eAkEtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"config.example.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.example.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,QAAA,MAAM,eAAe,EAAE,eA0EtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -55,6 +55,7 @@ export interface GoogleSearchConsoleConfig {
55
55
  id: string;
56
56
  }
57
57
  export interface HubspotConfig {
58
+ region?: string;
58
59
  portalId?: string;
59
60
  formId?: string;
60
61
  trackingCode?: string;
@@ -66,8 +67,12 @@ export interface PaypalConfig {
66
67
  payPalApiKey: string;
67
68
  payPalSecret: string;
68
69
  }
70
+ export interface ProxyConfig {
71
+ proxyURL: string;
72
+ }
69
73
  export interface WordpressConfig {
70
- endpoint: string;
74
+ baseURL: string;
75
+ site: string;
71
76
  }
72
77
  export interface PixelatedConfig {
73
78
  cloudinary?: CloudinaryConfig;
@@ -79,6 +84,7 @@ export interface PixelatedConfig {
79
84
  googleSearchConsole?: GoogleSearchConsoleConfig;
80
85
  hubspot?: HubspotConfig;
81
86
  paypal?: PaypalConfig;
87
+ proxy?: ProxyConfig;
82
88
  wordpress?: WordpressConfig;
83
89
  }
84
90
  //# sourceMappingURL=config.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.types.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,7 @@ export declare namespace PageSection {
36
36
  tablet: PropTypes.Requireable<number>;
37
37
  desktop: PropTypes.Requireable<number>;
38
38
  }>>;
39
- direction: PropTypes.Requireable<"row" | "column" | "column-reverse" | "row-reverse">;
39
+ direction: PropTypes.Requireable<"row" | "column" | "row-reverse" | "column-reverse">;
40
40
  wrap: PropTypes.Requireable<"nowrap" | "wrap" | "wrap-reverse">;
41
41
  justifyContent: PropTypes.Requireable<"center" | "end" | "start" | "space-between" | "space-around" | "space-evenly">;
42
42
  alignItems: PropTypes.Requireable<"center" | "baseline" | "end" | "start" | "stretch">;
@@ -6,10 +6,10 @@ declare global {
6
6
  }
7
7
  }
8
8
  export type GoogleAnalyticsType = InferProps<typeof GoogleAnalytics.propTypes>;
9
- export declare function GoogleAnalytics(props: GoogleAnalyticsType): import("react/jsx-runtime").JSX.Element | undefined;
9
+ export declare function GoogleAnalytics(props: GoogleAnalyticsType): import("react/jsx-runtime").JSX.Element | null | undefined;
10
10
  export declare namespace GoogleAnalytics {
11
11
  var propTypes: {
12
- id: PropTypes.Validator<string>;
12
+ id: PropTypes.Requireable<string>;
13
13
  };
14
14
  }
15
15
  export type GoogleAnalyticsEventType = InferProps<typeof GoogleAnalyticsEvent.propTypes>;
@@ -1 +1 @@
1
- {"version":3,"file":"googleanalytics.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/googleanalytics.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAYnD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAChC;CACD;AAiBD,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/E,wBAAgB,eAAe,CAAE,KAAK,EAAE,mBAAmB,uDA6B1D;yBA7Be,eAAe;;;;;AAqC/B,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzF,wBAAgB,oBAAoB,CAAE,KAAK,EAAE,wBAAwB,oBAYpE;yBAZe,oBAAoB"}
1
+ {"version":3,"file":"googleanalytics.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/googleanalytics.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAanD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAChC;CACD;AAiBD,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/E,wBAAgB,eAAe,CAAE,KAAK,EAAE,mBAAmB,8DAuC1D;yBAvCe,eAAe;;;;;AA+C/B,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzF,wBAAgB,oBAAoB,CAAE,KAAK,EAAE,wBAAwB,oBAYpE;yBAZe,oBAAoB"}
@@ -2,10 +2,21 @@ import { GoogleReviewsCard } from '@/components/cms/google.reviews.components';
2
2
  declare const _default: {
3
3
  title: string;
4
4
  component: typeof GoogleReviewsCard;
5
+ parameters: {
6
+ docs: {
7
+ description: {
8
+ component: string;
9
+ };
10
+ };
11
+ };
5
12
  };
6
13
  export default _default;
7
14
  export declare const ReviewsByPlaceId: {
8
15
  (): import("react/jsx-runtime").JSX.Element;
9
16
  storyName: string;
10
17
  };
18
+ export declare const ReviewsWithoutProxy: {
19
+ (): import("react/jsx-runtime").JSX.Element;
20
+ storyName: string;
21
+ };
11
22
  //# sourceMappingURL=google.reviews.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.reviews.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/cms/google.reviews.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;;;;;AAE/E,wBAGE;AAEF,eAAO,MAAM,gBAAgB;;;CAO5B,CAAC"}
1
+ {"version":3,"file":"google.reviews.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/cms/google.reviews.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;;;;;;;;;;;;AAE/E,wBAmCE;AAEF,eAAO,MAAM,gBAAgB;;;CAa5B,CAAC;AAGF,eAAO,MAAM,mBAAmB;;;CAa/B,CAAC"}
@@ -1,4 +1,8 @@
1
1
  export function WordpressBlogPostSummary(): import("react/jsx-runtime").JSX.Element;
2
+ export function WordpressBlogPostList(): import("react/jsx-runtime").JSX.Element;
3
+ export namespace WordpressBlogPostList {
4
+ let storyName: string;
5
+ }
2
6
  declare namespace _default {
3
7
  export let title: string;
4
8
  export { BlogPostSummary as component };
@@ -1 +1 @@
1
- {"version":3,"file":"wordpress.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/cms/wordpress.stories.js"],"names":[],"mappings":"AA0BA,oFAsCC;;;;;;;gCA/D+B,uCAAuC"}
1
+ {"version":3,"file":"wordpress.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/cms/wordpress.stories.js"],"names":[],"mappings":"AA8BA,oFAsCC;AAED,iFAEC;;;;;;;;;;gCAvE6C,uCAAuC"}
@@ -1,12 +1,19 @@
1
1
  declare namespace _default {
2
2
  export let title: string;
3
3
  export { GoogleAnalytics as component };
4
+ export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[];
4
5
  }
5
6
  export default _default;
6
- export namespace Google_Analytics {
7
- namespace args {
7
+ export namespace Google_Analytics_Config {
8
+ let args: {};
9
+ }
10
+ export namespace Google_Analytics_Props {
11
+ export namespace args_1 {
8
12
  let id: string;
9
13
  }
14
+ export { args_1 as args };
15
+ let decorators_1: ((Story: any) => import("react/jsx-runtime").JSX.Element)[];
16
+ export { decorators_1 as decorators };
10
17
  }
11
18
  import { GoogleAnalytics } from '@/components/seo/googleanalytics';
12
19
  //# sourceMappingURL=seo.googleanalytics.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"seo.googleanalytics.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/seo/seo.googleanalytics.stories.js"],"names":[],"mappings":";;;;;;;;;;gCAAgC,kCAAkC"}
1
+ {"version":3,"file":"seo.googleanalytics.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/seo/seo.googleanalytics.stories.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;gCAAgC,kCAAkC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=google.reviews.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google.reviews.test.d.ts","sourceRoot":"","sources":["../../../src/tests/google.reviews.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelated-tech/components",
3
- "version": "3.2.8",
3
+ "version": "3.2.9",
4
4
  "private": false,
5
5
  "author": {
6
6
  "name": "Pixelated Technologies",
@@ -91,19 +91,19 @@
91
91
  "@eslint/markdown": "^7.5.1",
92
92
  "@storybook/addon-webpack5-compiler-babel": "^4.0.0",
93
93
  "@storybook/preset-scss": "^1.0.3",
94
- "@storybook/react-webpack5": "^10.1.8",
94
+ "@storybook/react-webpack5": "^10.1.9",
95
95
  "@testing-library/dom": "^10.4.1",
96
- "@testing-library/react": "^16.3.0",
96
+ "@testing-library/react": "^16.3.1",
97
97
  "@testing-library/user-event": "^14.6.1",
98
98
  "@types/md5": "^2.3.6",
99
99
  "@types/node": "^25.0.2",
100
100
  "@types/prop-types": "^15.7.15",
101
101
  "@types/react": "^19.2.7",
102
102
  "@types/react-dom": "^19.2.3",
103
- "@typescript-eslint/eslint-plugin": "^8.49.0",
103
+ "@typescript-eslint/eslint-plugin": "^8.50.0",
104
104
  "@vitejs/plugin-react": "^5.1.2",
105
- "@vitest/coverage-v8": "^4.0.15",
106
- "@vitest/ui": "^4.0.15",
105
+ "@vitest/coverage-v8": "^4.0.16",
106
+ "@vitest/ui": "^4.0.16",
107
107
  "ajv": "^8.17.1",
108
108
  "ajv-keywords": "^5.1.0",
109
109
  "babel-loader": "^10.0.0",
@@ -117,7 +117,7 @@
117
117
  "eslint-plugin-n": "^17.23.1",
118
118
  "eslint-plugin-promise": "^7.2.1",
119
119
  "eslint-plugin-react": "^7.37.4",
120
- "eslint-plugin-storybook": "^10.1.8",
120
+ "eslint-plugin-storybook": "^10.1.9",
121
121
  "file-loader": "^6.2.0",
122
122
  "happy-dom": "^20.0.11",
123
123
  "jsdom": "^27.3.0",
@@ -129,15 +129,15 @@
129
129
  "react": "^19.2.3",
130
130
  "react-dom": "^19.2.3",
131
131
  "react-test-renderer": "^19.2.3",
132
- "sass": "^1.96.0",
132
+ "sass": "^1.97.0",
133
133
  "sass-loader": "^16.0.6",
134
- "storybook": "^10.1.8",
134
+ "storybook": "^10.1.9",
135
135
  "style-loader": "^4.0.0",
136
136
  "ts-loader": "^9.5.4",
137
137
  "typescript": "^5.9.3",
138
138
  "url-loader": "^4.1.1",
139
- "vitest": "^4.0.15",
140
- "webpack": "^5.103.0",
139
+ "vitest": "^4.0.16",
140
+ "webpack": "^5.104.0",
141
141
  "webpack-cli": "^6.0.1",
142
142
  "webpack-dev-server": "^5.2.2",
143
143
  "webpack-node-externals": "^3.0.0"
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=google-reviews.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-reviews.test.d.ts","sourceRoot":"","sources":["../../../src/tests/google-reviews.test.tsx"],"names":[],"mappings":""}