@pixelated-tech/components 3.2.13 → 3.2.14

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 (43) hide show
  1. package/README.COMPONENTS.md +146 -48
  2. package/README.md +49 -30
  3. package/dist/components/callout/callout.scss +0 -3
  4. package/dist/components/cms/flickr.js +8 -2
  5. package/dist/components/cms/google.reviews.components.js +1 -1
  6. package/dist/components/menu/menu-expando.js +7 -1
  7. package/dist/components/nerdjoke/nerdjoke.js +13 -7
  8. package/dist/components/pagebuilder/form/form.css +5 -1
  9. package/dist/components/pagebuilder/form/formcomponents.js +1 -1
  10. package/dist/components/seo/manifest.js +40 -0
  11. package/dist/components/seo/schema-localbusiness.js +46 -2
  12. package/dist/components/seo/schema-website.js +31 -2
  13. package/dist/components/seo/sitemap.js +3 -3
  14. package/dist/data/routes.json +25 -0
  15. package/dist/data/routes2.json +25 -0
  16. package/dist/index.js +2 -2
  17. package/dist/index.server.js +0 -1
  18. package/dist/types/components/cms/flickr.d.ts.map +1 -1
  19. package/dist/types/components/cms/google.reviews.components.d.ts.map +1 -1
  20. package/dist/types/components/config/config.types.d.ts +30 -0
  21. package/dist/types/components/config/config.types.d.ts.map +1 -1
  22. package/dist/types/components/menu/menu-expando.d.ts.map +1 -1
  23. package/dist/types/components/nerdjoke/nerdjoke.d.ts.map +1 -1
  24. package/dist/types/components/seo/manifest.d.ts +19 -0
  25. package/dist/types/components/seo/manifest.d.ts.map +1 -0
  26. package/dist/types/components/seo/schema-localbusiness.d.ts +22 -23
  27. package/dist/types/components/seo/schema-localbusiness.d.ts.map +1 -1
  28. package/dist/types/components/seo/schema-website.d.ts +17 -18
  29. package/dist/types/components/seo/schema-website.d.ts.map +1 -1
  30. package/dist/types/components/seo/sitemap.d.ts.map +1 -1
  31. package/dist/types/index.d.ts +1 -1
  32. package/dist/types/index.server.d.ts +0 -1
  33. package/dist/types/stories/seo/seo.googleanalytics.stories.d.ts.map +1 -1
  34. package/dist/types/stories/seo/seo.schema.stories.d.ts +23 -0
  35. package/dist/types/stories/seo/seo.schema.stories.d.ts.map +1 -0
  36. package/dist/types/tests/manifest.test.d.ts +2 -0
  37. package/dist/types/tests/manifest.test.d.ts.map +1 -0
  38. package/package.json +2 -2
  39. package/dist/components/utilities/api.js +0 -36
  40. package/dist/types/components/utilities/api.d.ts +0 -16
  41. package/dist/types/components/utilities/api.d.ts.map +0 -1
  42. package/dist/types/tests/api.test.d.ts +0 -2
  43. package/dist/types/tests/api.test.d.ts.map +0 -1
@@ -44,6 +44,7 @@ This guide provides detailed API documentation and usage examples for all Pixela
44
44
  - [GoogleMap](#googlemap)
45
45
  - [GoogleSearch](#googlesearch)
46
46
  - [JSON-LD Schemas](#json-ld-schemas)
47
+ - [Manifest](#manifest)
47
48
  - [MetadataComponents](#metadatacomponents)
48
49
 
49
50
  ### Shopping Cart
@@ -881,11 +882,16 @@ import { SaveLoadSection } from '@pixelated-tech/components';
881
882
 
882
883
  Structured data components for SEO.
883
884
 
885
+ **Configuration**: The LocalBusiness and Website schema components can use `siteInfo` data from the routes JSON file as fallback values when props are not explicitly provided. This allows for centralized site-wide configuration of business/website information.
886
+
884
887
  #### LocalBusiness
885
888
 
889
+ Generates LocalBusiness JSON-LD structured data. When props are not provided, falls back to `siteInfo` configuration from routes JSON.
890
+
886
891
  ```tsx
887
892
  import { LocalBusinessSchema } from '@pixelated-tech/components';
888
893
 
894
+ // With explicit props
889
895
  <LocalBusinessSchema
890
896
  name="My Business"
891
897
  address={{
@@ -896,6 +902,19 @@ import { LocalBusinessSchema } from '@pixelated-tech/components';
896
902
  }}
897
903
  telephone="(555) 123-4567"
898
904
  />
905
+
906
+ // Or with siteinfo object (recommended)
907
+ <LocalBusinessSchema
908
+ siteInfo={siteInfoData}
909
+ streetAddress="123 Main St"
910
+ addressLocality="City"
911
+ addressRegion="State"
912
+ postalCode="12345"
913
+ />
914
+
915
+ // Or with minimal props (uses siteInfo fallbacks)
916
+ <LocalBusinessSchema />
917
+ ```
899
918
  ```
900
919
 
901
920
  #### Recipe
@@ -941,9 +960,12 @@ import { ServicesSchema } from '@pixelated-tech/components';
941
960
 
942
961
  #### Website
943
962
 
963
+ Generates Website JSON-LD structured data. When props are not provided, falls back to `siteInfo` configuration from routes JSON.
964
+
944
965
  ```tsx
945
966
  import { WebsiteSchema } from '@pixelated-tech/components';
946
967
 
968
+ // With explicit props
947
969
  <WebsiteSchema
948
970
  name="My Website"
949
971
  url="https://example.com"
@@ -953,6 +975,22 @@ import { WebsiteSchema } from '@pixelated-tech/components';
953
975
  logo: "https://example.com/logo.png"
954
976
  }}
955
977
  />
978
+
979
+ // Or with siteinfo object (recommended)
980
+ <WebsiteSchema
981
+ siteInfo={siteInfoData}
982
+ potentialAction={{
983
+ '@type': 'SearchAction',
984
+ target: {
985
+ '@type': 'EntryPoint',
986
+ urlTemplate: 'https://example.com/search?q={search_term}'
987
+ }
988
+ }}
989
+ />
990
+
991
+ // Or with minimal props (uses siteInfo fallbacks)
992
+ <WebsiteSchema />
993
+ ```
956
994
  ```
957
995
 
958
996
  #### BlogPosting
@@ -1057,6 +1095,52 @@ import { GoogleSearch } from '@pixelated-tech/components';
1057
1095
  | `apiKey` | `string` | - | Google API key |
1058
1096
  | `placeholder` | `string` | `'Search...'` | Search input placeholder |
1059
1097
 
1098
+ ### Manifest
1099
+
1100
+ Generates a complete PWA manifest from siteinfo configuration. This component centralizes PWA manifest generation and ensures consistency across sites.
1101
+
1102
+ ```tsx
1103
+ import { Manifest } from '@pixelated-tech/components';
1104
+
1105
+ // Basic usage with siteinfo
1106
+ export default function manifest() {
1107
+ return Manifest({ siteInfo: myRoutes.siteInfo });
1108
+ }
1109
+
1110
+ // With custom properties for site-specific overrides
1111
+ export default function manifest() {
1112
+ return Manifest({
1113
+ siteInfo: myRoutes.siteInfo,
1114
+ customProperties: {
1115
+ orientation: 'portrait',
1116
+ categories: ['business', 'productivity'],
1117
+ lang: 'en-US'
1118
+ }
1119
+ });
1120
+ }
1121
+ ```
1122
+
1123
+ #### Props
1124
+ | Prop | Type | Default | Description |
1125
+ |------|------|---------|-------------|
1126
+ | `siteInfo` | `SiteInfo` | - | Site configuration object from routes.json |
1127
+ | `customProperties` | `Partial<MetadataRoute.Manifest>` | `{}` | Optional custom manifest properties to override defaults |
1128
+
1129
+ #### Generated Properties
1130
+
1131
+ The component automatically generates these manifest properties from `siteInfo`:
1132
+
1133
+ - `name` & `short_name`: From `siteInfo.name`
1134
+ - `description`: From `siteInfo.description`
1135
+ - `theme_color`: From `siteInfo.theme_color`
1136
+ - `background_color`: From `siteInfo.background_color`
1137
+ - `display`: From `siteInfo.display`
1138
+ - `homepage_url`: From `siteInfo.url`
1139
+ - `developer`: Object with `name` and `url` from siteInfo
1140
+ - `icons`: Array with favicon configuration
1141
+ - `author`: From `siteInfo.author` (non-standard property)
1142
+ - `default_locale`: From `siteInfo.default_locale`
1143
+
1060
1144
  ### MetadataComponents
1061
1145
 
1062
1146
  Dynamic meta tag injection for SEO.
@@ -1312,7 +1396,19 @@ import { NerdJoke } from '@pixelated-tech/components';
1312
1396
 
1313
1397
  ### PixelatedClientConfigProvider Setup
1314
1398
 
1315
- For components that use external services, wrap your app with the configuration provider:
1399
+ The PixelatedClientConfigProvider enables components to access centralized configuration data. Configuration can be loaded from environment variables or a `routes.json` file in your project.
1400
+
1401
+ **Config Consumers:**
1402
+ - **LocalBusinessSchema & WebsiteSchema**: Use `siteInfo` for fallback business/website data
1403
+ - **CloudinaryImage & SmartImage**: Use `cloudinary` for image optimization settings
1404
+ - **WordPress**: Use `wordpress` for API connections
1405
+ - **ContentfulItems**: Use `contentful` for CMS integration
1406
+ - **eBay**: Use `ebay` for store integration
1407
+ - **Flickr**: Use `flickr` for photo gallery integration
1408
+ - **GoogleAnalytics**: Use `googleAnalytics` for tracking
1409
+ - **HubSpot**: Use `hubspot` for CRM integration
1410
+ - **PayPal**: Use `paypal` for payment processing
1411
+ - **Proxy**: Use `proxy` for API proxy settings
1316
1412
 
1317
1413
  ```tsx
1318
1414
  // app/layout.tsx (Next.js 13+ App Router)
@@ -1327,15 +1423,63 @@ export default function RootLayout({
1327
1423
  <html lang="en">
1328
1424
  <body>
1329
1425
  <PixelatedClientConfigProvider config={{
1426
+ // Site-wide business/website information (used by schema components)
1427
+ siteInfo: {
1428
+ name: 'Your Business Name',
1429
+ description: 'Your business description',
1430
+ url: 'https://yourwebsite.com',
1431
+ email: 'contact@yourwebsite.com',
1432
+ telephone: '(555) 123-4567',
1433
+ address: {
1434
+ streetAddress: '123 Main St',
1435
+ addressLocality: 'City',
1436
+ addressRegion: 'State',
1437
+ postalCode: '12345',
1438
+ addressCountry: 'United States'
1439
+ },
1440
+ openingHours: 'Mo-Fr 09:00-18:00'
1441
+ },
1442
+ // Image optimization
1330
1443
  cloudinary: {
1331
1444
  product_env: 'production',
1332
1445
  baseUrl: 'https://res.cloudinary.com/your-account',
1333
1446
  transforms: 'f_auto,q_auto,w_auto'
1334
1447
  },
1448
+ // CMS integrations
1335
1449
  wordpress: {
1336
1450
  site: 'your-blog.wordpress.com'
1337
1451
  },
1338
- // Add other service configurations as needed
1452
+ contentful: {
1453
+ spaceId: 'your-space-id',
1454
+ accessToken: 'your-access-token',
1455
+ environment: 'master'
1456
+ },
1457
+ // E-commerce
1458
+ ebay: {
1459
+ appId: 'your-app-id',
1460
+ globalId: 'EBAY-US'
1461
+ },
1462
+ paypal: {
1463
+ sandboxPayPalApiKey: 'your-sandbox-key',
1464
+ payPalApiKey: 'your-production-key'
1465
+ },
1466
+ // Analytics & CRM
1467
+ googleAnalytics: {
1468
+ id: 'GA-XXXXXXXXX'
1469
+ },
1470
+ hubspot: {
1471
+ portalId: 'your-portal-id',
1472
+ formId: 'your-form-id'
1473
+ },
1474
+ // Media services
1475
+ flickr: {
1476
+ api_key: 'your-flickr-api-key',
1477
+ user_id: 'your-user-id'
1478
+ },
1479
+ // API proxy
1480
+ proxy: {
1481
+ proxyURL: 'https://proxy.pixelated.tech/prod/proxy?url='
1482
+ }
1339
1483
  }}>
1340
1484
  {children}
1341
1485
  </PixelatedClientConfigProvider>
@@ -1345,52 +1489,6 @@ export default function RootLayout({
1345
1489
  }
1346
1490
  ```
1347
1491
 
1348
- ### Cloudinary Configuration
1349
-
1350
- ```tsx
1351
- const cloudinaryConfig = {
1352
- product_env: 'production', // Environment identifier
1353
- baseUrl: 'https://res.cloudinary.com/your-account', // Your Cloudinary URL
1354
- transforms: 'f_auto,q_auto,w_auto' // Default transformations
1355
- };
1356
- ```
1357
-
1358
- ### WordPress Configuration
1359
-
1360
- ```tsx
1361
- const wordpressConfig = {
1362
- site: 'your-blog.wordpress.com', // WordPress site URL
1363
- apiVersion: '1.1' // API version (optional)
1364
- };
1365
- ```
1366
-
1367
- ### Contentful Configuration
1368
-
1369
- ```tsx
1370
- const contentfulConfig = {
1371
- spaceId: 'your-space-id', // Contentful space ID
1372
- accessToken: 'your-access-token', // Contentful access token
1373
- environment: 'master' // Contentful environment
1374
- };
1375
- ```
1376
-
1377
- ### Other Service Configurations
1378
-
1379
- ```tsx
1380
- const config = {
1381
- calendly: {
1382
- username: 'your-calendly-username'
1383
- },
1384
- hubspot: {
1385
- portalId: 'your-portal-id',
1386
- formId: 'your-form-id'
1387
- },
1388
- instagram: {
1389
- accessToken: 'your-access-token'
1390
- }
1391
- };
1392
- ```
1393
-
1394
1492
  ---
1395
1493
 
1396
1494
  ## TypeScript Support
package/README.md CHANGED
@@ -182,6 +182,8 @@ npm run storybook
182
182
  - [ ] Buffer Integration (or Sendible, Sprout Social, Hootsuite)
183
183
  - [ ] Zapier Integration
184
184
  - [ ] Hero Banner: headline, subtext, CTA, background image/video, overlay.
185
+ - [ ] Accessibility Enhancer: wrapper component that automatically improves accessibility across Pixelated sites by adding ARIA labels, roles, and states to existing components. Includes color contrast checking, keyboard navigation helpers, and alt-text suggestions for images.
186
+ - [ ] SEO Dashboard with AI Integration: component that analyzes site content, suggests optimizations, integrates with AI for meta descriptions and keyword research.
185
187
 
186
188
  ### CI / CD Improvements
187
189
  - [ ] Add CI workflow to run tests and lints on pull requests.
@@ -202,8 +204,15 @@ npm run storybook
202
204
  - [ ] **GoogleReviews Component**: Add API key to config provider instead of hardcoding.
203
205
  - [ ] **Instagram Component**: Add accessToken and userId to config provider for centralized API credentials.
204
206
 
205
-
206
-
207
+ ### SSR Fixes
208
+ - [ ] **cloudinary.image.tsx** (`SmartImage`): Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
209
+ - [ ] **wordpress.components.tsx** (`BlogPostList`, etc.): Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
210
+ - [ ] **pagebuilder/form/formcomponents.tsx**: Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
211
+ - [ ] **cms/hubspot.components.tsx**: Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
212
+ - [ ] **cms/gravatar.components.tsx**: Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
213
+ - [ ] **structured/recipe.tsx**: Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
214
+ - [ ] **structured/timeline.tsx**: Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
215
+ - [ ] **structured/markdown.tsx**: Add `"use client"` or refactor to avoid `usePixelatedConfig` in server contexts
207
216
 
208
217
  See the [open issues](https://github.com/brianwhaley/pixelated-components/issues) for a full list of proposed features (and known issues).
209
218
 
@@ -261,16 +270,16 @@ Project Link: [https://github.com/brianwhaley/pixelated-components](https://gith
261
270
 
262
271
  ### Overview
263
272
 
264
- **Current Status**: ✅ 2,184 tests passing across 59 test files
273
+ **Current Status**: ✅ 2,210 tests passing across 65 test files
265
274
 
266
275
  | Metric | Value |
267
276
  |--------|-------|
268
- | Test Files | 59 |
269
- | Total Tests | 2,184 |
270
- | Coverage (Statements) | 79.27% |
271
- | Coverage (Lines) | 82.74% |
272
- | Coverage (Functions) | 84.74% |
273
- | Coverage (Branches) | 67.19% |
277
+ | Test Files | 65 |
278
+ | Total Tests | 2,210 |
279
+ | Coverage (Statements) | 77.92% |
280
+ | Coverage (Lines) | 81.09% |
281
+ | Coverage (Functions) | 81.27% |
282
+ | Coverage (Branches) | 67.31% |
274
283
  | Test Framework | Vitest 4.x |
275
284
  | Testing Library | @testing-library/react + jsdom |
276
285
 
@@ -288,42 +297,52 @@ npm run test:run # Single run (for CI)
288
297
  **Component Coverage Summary**
289
298
 
290
299
  #### Component Coverage (Sorted by Statement Coverage)
291
- - **google.reviews.functions.ts**: 100% statements
300
+ - **config.server.tsx**: 100% statements
301
+ - **modal.tsx**: 100% statements
302
+ - **accordion.tsx**: 100% statements
303
+ - **tiles.tsx**: 100% statements
292
304
  - **googlesearch.tsx**: 100% statements
293
305
  - **formvalidations.tsx**: 100% statements
294
- - **tiles.tsx**: 100% statements
295
- - **markdown.tsx**: 100% statements
296
306
  - **buzzwordbingo.tsx**: 100% statements
297
307
  - **timeline.tsx**: 100% statements
298
- - **config.server.tsx**: 100% statements
299
- - **modal.tsx**: 100% statements
300
- - **recipe.tsx**: 98.8% statements
308
+ - **markdown.tsx**: 100% statements
309
+ - **ComponentPropertiesForm.tsx**: 100% statements
310
+ - **ComponentSelector.tsx**: 100% statements
311
+ - **ComponentTree.tsx**: 100% statements
312
+ - **schema-localbusiness.tsx**: 100% statements
313
+ - **schema-recipe.tsx**: 100% statements
314
+ - **schema-services.tsx**: 100% statements
315
+ - **schema-website.tsx**: 100% statements
316
+ - **google.reviews.functions.ts**: 100% statements
301
317
  - **sidepanel.tsx**: 97.5% statements
318
+ - **config.ts**: 96.55% statements
302
319
  - **google.reviews.components.tsx**: 95.83% statements
320
+ - **schema-blogposting.tsx**: 95.23% statements
321
+ - **recipe.tsx**: 94.59% statements
303
322
  - **resume.tsx**: 94.38% statements
304
323
  - **contentful.delivery.ts**: 92.5% statements
305
324
  - **css.tsx**: 91.42% statements
306
325
  - **functions.ts**: 90.9% statements
307
326
  - **config.client.tsx**: 90% statements
308
- - **api.ts**: 87.5% statements
309
- - **loading.tsx**: 85.71% statements
310
- - **table.tsx**: 84.48% statements
327
+ - **menu-expando.tsx**: 90.12% statements
311
328
  - **cloudinary.ts**: 83.33% statements
329
+ - **form.tsx**: 83.2% statements
312
330
  - **shoppingcart.functions.ts**: 81.69% statements
313
- - **callout.tsx**: 80.00% statements
314
- - **sitemap.ts**: 76.38% statements
315
- - **carousel.tsx**: 71.70% statements
316
- - **nerdjoke.tsx**: 70.58% statements
331
+ - **callout.tsx**: 80% statements
332
+ - **microinteractions.tsx**: 80% statements
333
+ - **sitemap.ts**: 76.05% statements
334
+ - **manifest.tsx**: 75% statements
335
+ - **carousel.tsx**: 71.69% statements
336
+ - **nerdjoke.tsx**: 69.44% statements
317
337
  - **menu-accordion.tsx**: 68.13% statements
318
- - **semantic.tsx**: 60.81% statements
319
- - **config.ts**: 55.17% statements
338
+ - **semantic.tsx**: 63.51% statements
339
+ - **flickr.ts**: 51.42% statements
340
+ - **PageEngine.tsx**: 48% statements
341
+ - **SaveLoadSection.tsx**: 84.84% statements
342
+ - **table.tsx**: 84.48% statements
343
+ - **loading.tsx**: 85.71% statements
320
344
  - **socialcard.tsx**: 29.5% statements
321
- - **ComponentPropertiesForm.tsx**: 0% statements (no tests)
322
- - **ComponentSelector.tsx**: 0% statements (no tests)
323
- - **ComponentTree.tsx**: 0% statements (no tests)
324
- - **PageBuilderUI.tsx**: 0% statements (no tests)
325
- - **PageEngine.tsx**: 0% statements (no tests)
326
- - **SaveLoadSection.tsx**: 0% statements (no tests)
345
+ - **PageBuilderUI.tsx**: 26.66% statements
327
346
 
328
347
  ### Testing Next Steps
329
348
 
@@ -149,9 +149,6 @@
149
149
  }
150
150
 
151
151
 
152
- /* .callout .callout-button a {
153
- display: inline-block;
154
- } */
155
152
 
156
153
  /* ========================================
157
154
  ============= BOXED CALLOUT =============
@@ -1,5 +1,4 @@
1
1
  import PropTypes from 'prop-types';
2
- import { generateURL } from '../utilities/api';
3
2
  import { mergeDeep } from '../utilities/functions';
4
3
  const defaultFlickr = {
5
4
  flickr: {
@@ -57,7 +56,14 @@ export function GetFlickrData(props) {
57
56
  flickrConfig = mergeDeep(flickrConfig, props.flickr);
58
57
  }
59
58
  const flickr = flickrConfig;
60
- const myURL = generateURL(flickr.baseURL, flickr.urlProps);
59
+ // Build URL with query parameters
60
+ let myURL = flickr.baseURL;
61
+ let queryParams = '';
62
+ Object.keys(flickr.urlProps).forEach((prop) => {
63
+ const value = flickr.urlProps[prop];
64
+ queryParams += (queryParams.length === 0) ? prop + '=' + value : '&' + prop + '=' + value;
65
+ });
66
+ myURL += queryParams;
61
67
  const fetchFlickrData = async () => {
62
68
  try {
63
69
  const response = await fetch(myURL);
@@ -50,5 +50,5 @@ export function GoogleReviewsCard(props) {
50
50
  if (error) {
51
51
  return (_jsx("div", { className: "google-reviews-card", children: _jsxs("p", { className: "error", children: ["Error: ", error] }) }));
52
52
  }
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" }))] }));
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("div", { className: "profile-photo-container", children: _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" }))] }));
54
54
  }
@@ -136,6 +136,12 @@ export function MenuExpandoButton() {
136
136
  if (details)
137
137
  details.open = !details.open;
138
138
  }
139
- return (_jsx("div", { className: "menuExpandoButton", id: "menuExpandoButton", onClick: handleMenuExpandoButtonClick, children: _jsx("img", { src: "/images/icons/mobile-menu2.png", title: "Mobile Menu", alt: "Mobile Menu" }) }));
139
+ function handleKeyDown(event) {
140
+ if (event.key === 'Enter' || event.key === ' ') {
141
+ event.preventDefault();
142
+ handleMenuExpandoButtonClick(event);
143
+ }
144
+ }
145
+ return (_jsx("div", { className: "menuExpandoButton", id: "menuExpandoButton", onClick: handleMenuExpandoButtonClick, onKeyDown: handleKeyDown, tabIndex: 0, role: "button", "aria-label": "Toggle mobile menu", children: _jsx("img", { src: "/images/icons/mobile-menu2.png", title: "Mobile Menu", alt: "Mobile Menu" }) }));
140
146
  }
141
147
  MenuExpandoButton.propTypes = {};
@@ -2,7 +2,6 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useRef, useState } from "react";
4
4
  import PropTypes from "prop-types";
5
- import { getXHRData, generateURL } from "../utilities/api";
6
5
  import "../../css/pixelated.grid.scss";
7
6
  import "./nerdjoke.css";
8
7
  const debug = false;
@@ -36,7 +35,7 @@ export function NerdJoke( /* props: NerdJokeType */) {
36
35
  elapsedPath.style.width = myWidth;
37
36
  }
38
37
  }, [formatTimeLeft]);
39
- const loadJoke = useCallback(() => {
38
+ const loadJoke = useCallback(async () => {
40
39
  if (debug)
41
40
  console.log("Loading Joke");
42
41
  timePassedRef.current = 0;
@@ -52,11 +51,18 @@ export function NerdJoke( /* props: NerdJokeType */) {
52
51
  }, TIME_LIMIT * 1000);
53
52
  const myURL = "https://vvqyc1xpw6.execute-api.us-east-2.amazonaws.com/prod/nerdjokes?";
54
53
  const myURLProps = { command: "%2Fnerdjokes", text: "getjokejson" };
55
- const myMethod = "GET";
56
- getXHRData(generateURL(myURL, myURLProps), myMethod, (jokeData) => {
57
- const myJokeData = jokeData;
58
- setJoke(myJokeData);
59
- });
54
+ try {
55
+ const url = myURL + "command=" + myURLProps.command + "&text=" + myURLProps.text;
56
+ const response = await fetch(url);
57
+ if (!response.ok)
58
+ throw new Error(`HTTP error! status: ${response.status}`);
59
+ const jokeData = await response.json();
60
+ setJoke(jokeData);
61
+ }
62
+ catch (error) {
63
+ console.error('Failed to fetch joke:', error);
64
+ // Optionally set a fallback joke or handle error
65
+ }
60
66
  }, []);
61
67
  const startTimer = useCallback(() => {
62
68
  if (debug)
@@ -72,11 +72,15 @@ form span {
72
72
  border-radius: 20px;
73
73
  padding: 0 3px; */
74
74
  vertical-align: middle;
75
+ padding: 5px;
76
+ box-shadow: none;
77
+ background-color: transparent;
78
+ border: none;
75
79
  }
76
80
 
77
81
  .tooltipIcon img {
78
82
  width: 20px;
79
- margin: 5px 0 0 -10px;
83
+ /* margin: 5px 0 0 -10px; */
80
84
  background-color: #DDD;
81
85
  border-radius: 5px;
82
86
  }
@@ -83,7 +83,7 @@ function FormTooltip(props) {
83
83
  alt={props.id + " - " + props.text}
84
84
  src="/images/icons/tooltip-icon-2.png" /> */
85
85
  return (_jsx(_Fragment, { children: props.text && props.id
86
- ? _jsx(_Fragment, { children: _jsxs("div", { id: thisID, className: `tooltip ${props.className || ''}`, children: [_jsx("a", { href: "#", className: "tooltipIcon", onClick: toggleTooltip, children: tooltipImg }), _jsx("div", { className: "tooltipText", children: props.text })] }) })
86
+ ? _jsx(_Fragment, { children: _jsxs("div", { id: thisID, className: `tooltip ${props.className || ''}`, children: [_jsx("button", { type: "button", className: "tooltipIcon", onClick: toggleTooltip, "aria-label": "Toggle tooltip", children: tooltipImg }), _jsx("div", { className: "tooltipText", children: props.text })] }) })
87
87
  : "" }));
88
88
  }
89
89
  FormValidate.propTypes = {
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Generates a PWA manifest from siteinfo configuration
3
+ * @param options - Configuration options
4
+ * @returns Next.js manifest object
5
+ */
6
+ export function generateManifest(options) {
7
+ const { siteInfo, customProperties = {} } = options;
8
+ const baseManifest = {
9
+ // @ts-expect-error - 'author' is not in standard Manifest type but used by some PWA implementations
10
+ author: siteInfo.author,
11
+ background_color: siteInfo.background_color,
12
+ default_locale: siteInfo.default_locale,
13
+ description: siteInfo.description,
14
+ developer: {
15
+ name: siteInfo.author || "Developer",
16
+ url: siteInfo.url
17
+ },
18
+ display: siteInfo.display || "standalone",
19
+ homepage_url: siteInfo.url,
20
+ icons: [{
21
+ src: siteInfo.favicon || "/favicon.ico",
22
+ sizes: siteInfo.favicon_sizes || "64x64 32x32 24x24 16x16",
23
+ type: siteInfo.favicon_type || "image/x-icon"
24
+ }],
25
+ name: siteInfo.name,
26
+ short_name: siteInfo.name,
27
+ start_url: ".",
28
+ theme_color: siteInfo.theme_color,
29
+ };
30
+ // Merge with custom properties, allowing overrides
31
+ return { ...baseManifest, ...customProperties };
32
+ }
33
+ /**
34
+ * Default export for Next.js manifest route
35
+ * @param options - Configuration options
36
+ * @returns Next.js manifest object
37
+ */
38
+ export function Manifest(options) {
39
+ return generateManifest(options);
40
+ }
@@ -1,5 +1,50 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- export function LocalBusinessSchema({ name, streetAddress, addressLocality, addressRegion, postalCode, addressCountry = 'United States', telephone, url, logo, image, openingHours, description, email, priceRange, sameAs }) {
2
+ import PropTypes from "prop-types";
3
+ /**
4
+ * LocalBusiness Schema Component
5
+ * Generates JSON-LD structured data for SEO
6
+ * https://schema.org/LocalBusiness
7
+ *
8
+ * This component uses siteInfo passed as props to generate schema data.
9
+ * It does not use client-side hooks and can be rendered on the server.
10
+ */
11
+ LocalBusinessSchema.propTypes = {
12
+ name: PropTypes.string,
13
+ streetAddress: PropTypes.string,
14
+ addressLocality: PropTypes.string,
15
+ addressRegion: PropTypes.string,
16
+ postalCode: PropTypes.string,
17
+ addressCountry: PropTypes.string,
18
+ telephone: PropTypes.string,
19
+ url: PropTypes.string,
20
+ logo: PropTypes.string,
21
+ image: PropTypes.string,
22
+ openingHours: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
23
+ description: PropTypes.string,
24
+ email: PropTypes.string,
25
+ priceRange: PropTypes.string,
26
+ sameAs: PropTypes.arrayOf(PropTypes.string), // Social media profiles
27
+ siteInfo: PropTypes.object // Required siteinfo from parent component
28
+ };
29
+ export function LocalBusinessSchema(props) {
30
+ // const config = usePixelatedConfig();
31
+ const siteInfo = props.siteInfo;
32
+ // Use props if provided, otherwise fall back to siteInfo
33
+ const name = props.name || siteInfo?.name;
34
+ const streetAddress = props.streetAddress || siteInfo?.address?.streetAddress;
35
+ const addressLocality = props.addressLocality || siteInfo?.address?.addressLocality;
36
+ const addressRegion = props.addressRegion || siteInfo?.address?.addressRegion;
37
+ const postalCode = props.postalCode || siteInfo?.address?.postalCode;
38
+ const addressCountry = props.addressCountry || siteInfo?.address?.addressCountry || 'United States';
39
+ const telephone = props.telephone || siteInfo?.telephone;
40
+ const url = props.url || siteInfo?.url;
41
+ const logo = props.logo || siteInfo?.image;
42
+ const image = props.image || siteInfo?.image;
43
+ const openingHours = props.openingHours;
44
+ const description = props.description || siteInfo?.description;
45
+ const email = props.email || siteInfo?.email;
46
+ const priceRange = props.priceRange || siteInfo?.priceRange;
47
+ const sameAs = props.sameAs || siteInfo?.sameAs;
3
48
  const schemaData = {
4
49
  '@context': 'https://schema.org',
5
50
  '@type': 'LocalBusiness',
@@ -24,4 +69,3 @@ export function LocalBusinessSchema({ name, streetAddress, addressLocality, addr
24
69
  };
25
70
  return (_jsx("script", { type: "application/ld+json", dangerouslySetInnerHTML: { __html: JSON.stringify(schemaData) } }));
26
71
  }
27
- export default LocalBusinessSchema;
@@ -1,5 +1,35 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- export function WebsiteSchema({ name, url, description, potentialAction }) {
2
+ import PropTypes from "prop-types";
3
+ /**
4
+ * Website Schema Component
5
+ * Generates JSON-LD structured data for websites
6
+ * https://schema.org/WebSite
7
+ *
8
+ * This component uses siteInfo passed as props to generate schema data.
9
+ * It does not use client-side hooks and can be rendered on the server.
10
+ */
11
+ WebsiteSchema.propTypes = {
12
+ name: PropTypes.string,
13
+ url: PropTypes.string,
14
+ description: PropTypes.string,
15
+ potentialAction: PropTypes.shape({
16
+ '@type': PropTypes.string,
17
+ target: PropTypes.shape({
18
+ '@type': PropTypes.string,
19
+ urlTemplate: PropTypes.string
20
+ }),
21
+ query: PropTypes.string
22
+ }),
23
+ siteInfo: PropTypes.object // Required siteinfo from parent component
24
+ };
25
+ export function WebsiteSchema(props) {
26
+ // const config = usePixelatedConfig();
27
+ const siteInfo = props.siteInfo;
28
+ // Use props if provided, otherwise fall back to siteInfo
29
+ const name = props.name || siteInfo?.name;
30
+ const url = props.url || siteInfo?.url;
31
+ const description = props.description || siteInfo?.description;
32
+ const potentialAction = props.potentialAction;
3
33
  const schemaData = {
4
34
  '@context': 'https://schema.org',
5
35
  '@type': 'WebSite',
@@ -10,4 +40,3 @@ export function WebsiteSchema({ name, url, description, potentialAction }) {
10
40
  };
11
41
  return (_jsx("script", { type: "application/ld+json", dangerouslySetInnerHTML: { __html: JSON.stringify(schemaData) } }));
12
42
  }
13
- export default WebsiteSchema;
@@ -173,9 +173,9 @@ export async function createImageURLsFromJSON(origin, jsonPath = 'public/site-im
173
173
  images: newImages,
174
174
  });
175
175
  }
176
- catch (e) {
177
- if (typeof console !== 'undefined')
178
- console.warn('createImageURLsFromJSON failed', e);
176
+ catch /* (e) */ {
177
+ // During build time, fetch will fail - suppress the error to avoid build noise
178
+ // The function returns an empty array, which is acceptable
179
179
  }
180
180
  return sitemap;
181
181
  }
@@ -1,4 +1,29 @@
1
1
  {
2
+ "siteInfo": {
3
+ "name": "Pixelated Technologies",
4
+ "description": "Custom web development and digital design agency specializing in React, Next.js, and modern web technologies",
5
+ "url": "https://pixelated.tech",
6
+ "email": "info@pixelated.tech",
7
+ "image": "/images/pix/pix-bg-512.gif",
8
+ "image_height": "512",
9
+ "image_width": "512",
10
+ "favicon": "/favicon.ico",
11
+ "telephone": "+1-973-710-8008",
12
+ "address": {
13
+ "streetAddress": "10 Jade Circle",
14
+ "addressLocality": "Denville",
15
+ "addressRegion": "NJ",
16
+ "postalCode": "07834",
17
+ "addressCountry": "US"
18
+ },
19
+ "priceRange": "$$",
20
+ "sameAs": [
21
+ "https://www.linkedin.com/in/brianwhaley",
22
+ "https://github.com/brianwhaley",
23
+ "https://twitter.com/brianwhaley"
24
+ ],
25
+ "keywords": "pixelated, web development, react, next.js, custom websites, digital design, small business"
26
+ },
2
27
  "routes": [
3
28
  {
4
29
  "name": "Home",
@@ -1,4 +1,29 @@
1
1
  {
2
+ "siteInfo": {
3
+ "name": "Pixelated Technologies",
4
+ "description": "Custom web development and digital design agency specializing in React, Next.js, and modern web technologies",
5
+ "url": "https://pixelated.tech",
6
+ "email": "info@pixelated.tech",
7
+ "image": "/images/pix/pix-bg-512.gif",
8
+ "image_height": "512",
9
+ "image_width": "512",
10
+ "favicon": "/favicon.ico",
11
+ "telephone": "+1-973-710-8008",
12
+ "address": {
13
+ "streetAddress": "10 Jade Circle",
14
+ "addressLocality": "Denville",
15
+ "addressRegion": "NJ",
16
+ "postalCode": "07834",
17
+ "addressCountry": "US"
18
+ },
19
+ "priceRange": "$$",
20
+ "sameAs": [
21
+ "https://www.linkedin.com/in/brianwhaley",
22
+ "https://github.com/brianwhaley",
23
+ "https://twitter.com/brianwhaley"
24
+ ],
25
+ "keywords": "pixelated, web development, react, next.js, custom websites, digital design, small business"
26
+ },
2
27
  "routes": [
3
28
  {
4
29
  "name": "Home",
package/dist/index.js CHANGED
@@ -65,9 +65,10 @@ export * from './components/seo/schema-recipe';
65
65
  export * from './components/seo/schema-services';
66
66
  export * from './components/seo/schema-website';
67
67
  export * from './components/seo/schema-blogposting';
68
+ export * from './components/seo/manifest';
68
69
  export * from './components/seo/metadata'; // server-side
69
70
  export * from './components/seo/metadata.components';
70
- export * from './components/seo/sitemap'; // server-side
71
+ export * from './components/seo/sitemap'; // server-side
71
72
  export * from './components/shoppingcart/ebay.components';
72
73
  export * from './components/shoppingcart/ebay.functions'; // server-side
73
74
  export * from './components/shoppingcart/paypal';
@@ -79,5 +80,4 @@ export * from './components/structured/recipe';
79
80
  export * from './components/structured/resume';
80
81
  export * from './components/structured/socialcard';
81
82
  export * from './components/structured/timeline';
82
- export * from './components/utilities/api'; // server-side
83
83
  export * from './components/utilities/functions'; // server-side
@@ -27,7 +27,6 @@ export * from './components/seo/metadata';
27
27
  export * from './components/seo/sitemap';
28
28
  export * from './components/shoppingcart/ebay.functions';
29
29
  export * from './components/shoppingcart/shoppingcart.functions';
30
- export * from './components/utilities/api';
31
30
  export * from './components/utilities/functions';
32
31
  // Server-only wrapper exports
33
32
  // DO I REALLY NEED THIS?
@@ -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;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
+ {"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;AAEnD,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,gBA2D5E;yBA3De,aAAa;;;;;;AAmE7B,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 +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;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"}
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,2CAiGA;yBAvGe,iBAAiB"}
@@ -74,6 +74,35 @@ export interface WordpressConfig {
74
74
  baseURL: string;
75
75
  site: string;
76
76
  }
77
+ export interface SiteInfo {
78
+ name: string;
79
+ description: string;
80
+ url: string;
81
+ email?: string;
82
+ image?: string;
83
+ image_height?: string;
84
+ image_width?: string;
85
+ favicon?: string;
86
+ telephone?: string;
87
+ address?: {
88
+ streetAddress: string;
89
+ addressLocality: string;
90
+ addressRegion: string;
91
+ postalCode: string;
92
+ addressCountry: string;
93
+ };
94
+ openingHours?: string;
95
+ priceRange?: string;
96
+ sameAs?: string[];
97
+ keywords?: string;
98
+ author?: string;
99
+ theme_color?: string;
100
+ background_color?: string;
101
+ default_locale?: string;
102
+ display?: "standalone" | "fullscreen" | "minimal-ui" | "browser";
103
+ favicon_sizes?: string;
104
+ favicon_type?: string;
105
+ }
77
106
  export interface PixelatedConfig {
78
107
  cloudinary?: CloudinaryConfig;
79
108
  contentful?: ContentfulConfig;
@@ -85,6 +114,7 @@ export interface PixelatedConfig {
85
114
  hubspot?: HubspotConfig;
86
115
  paypal?: PaypalConfig;
87
116
  proxy?: ProxyConfig;
117
+ siteInfo?: SiteInfo;
88
118
  wordpress?: WordpressConfig;
89
119
  }
90
120
  //# 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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-expando.d.ts","sourceRoot":"","sources":["../../../../src/components/menu/menu-expando.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,oBAAoB,CAAC;AAE5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,2CAkJrC;yBAlJe,WAAW;;;;;AA+J3B,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,2CAIzC;yBAJe,eAAe;;;;;;AAW/B,wBAAgB,iBAAiB,4CAahC;yBAbe,iBAAiB"}
1
+ {"version":3,"file":"menu-expando.d.ts","sourceRoot":"","sources":["../../../../src/components/menu/menu-expando.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,oBAAoB,CAAC;AAE5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,2CAkJrC;yBAlJe,WAAW;;;;;AA+J3B,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,2CAIzC;yBAJe,eAAe;;;;;;AAW/B,wBAAgB,iBAAiB,4CA4BhC;yBA5Be,iBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"nerdjoke.d.ts","sourceRoot":"","sources":["../../../../src/components/nerdjoke/nerdjoke.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,+BAA+B,CAAC;AACvC,OAAO,gBAAgB,CAAC;AAOxB,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjE,wBAAgB,QAAQ,4CAiIvB;yBAjIe,QAAQ;;;AAyIxB,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,iBAAS,UAAU,CAAC,KAAK,EAAE,cAAc,2CASxC;kBATQ,UAAU"}
1
+ {"version":3,"file":"nerdjoke.d.ts","sourceRoot":"","sources":["../../../../src/components/nerdjoke/nerdjoke.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,+BAA+B,CAAC;AACvC,OAAO,gBAAgB,CAAC;AAOxB,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjE,wBAAgB,QAAQ,4CAsIvB;yBAtIe,QAAQ;;;AA8IxB,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,iBAAS,UAAU,CAAC,KAAK,EAAE,cAAc,2CASxC;kBATQ,UAAU"}
@@ -0,0 +1,19 @@
1
+ import type { MetadataRoute } from 'next';
2
+ import type { SiteInfo } from '../config/config.types';
3
+ export interface ManifestOptions {
4
+ siteInfo: SiteInfo;
5
+ customProperties?: Partial<MetadataRoute.Manifest>;
6
+ }
7
+ /**
8
+ * Generates a PWA manifest from siteinfo configuration
9
+ * @param options - Configuration options
10
+ * @returns Next.js manifest object
11
+ */
12
+ export declare function generateManifest(options: ManifestOptions): MetadataRoute.Manifest;
13
+ /**
14
+ * Default export for Next.js manifest route
15
+ * @param options - Configuration options
16
+ * @returns Next.js manifest object
17
+ */
18
+ export declare function Manifest(options: ManifestOptions): MetadataRoute.Manifest;
19
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/manifest.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;CACnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,QAAQ,CA4BjF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,QAAQ,CAEzE"}
@@ -1,25 +1,24 @@
1
- /**
2
- * LocalBusiness Schema Component
3
- * Generates JSON-LD structured data for SEO
4
- * https://schema.org/LocalBusiness
5
- */
6
- export interface LocalBusinessSchemaProps {
7
- name: string;
8
- streetAddress: string;
9
- addressLocality: string;
10
- addressRegion: string;
11
- postalCode: string;
12
- addressCountry?: string;
13
- telephone: string;
14
- url: string;
15
- logo?: string;
16
- image?: string;
17
- openingHours?: string | string[];
18
- description?: string;
19
- email?: string;
20
- priceRange?: string;
21
- sameAs?: string[];
1
+ import PropTypes, { InferProps } from "prop-types";
2
+ export type LocalBusinessSchemaType = InferProps<typeof LocalBusinessSchema.propTypes>;
3
+ export declare function LocalBusinessSchema(props: LocalBusinessSchemaType): import("react/jsx-runtime").JSX.Element;
4
+ export declare namespace LocalBusinessSchema {
5
+ var propTypes: {
6
+ name: PropTypes.Requireable<string>;
7
+ streetAddress: PropTypes.Requireable<string>;
8
+ addressLocality: PropTypes.Requireable<string>;
9
+ addressRegion: PropTypes.Requireable<string>;
10
+ postalCode: PropTypes.Requireable<string>;
11
+ addressCountry: PropTypes.Requireable<string>;
12
+ telephone: PropTypes.Requireable<string>;
13
+ url: PropTypes.Requireable<string>;
14
+ logo: PropTypes.Requireable<string>;
15
+ image: PropTypes.Requireable<string>;
16
+ openingHours: PropTypes.Requireable<NonNullable<string | (string | null | undefined)[] | null | undefined>>;
17
+ description: PropTypes.Requireable<string>;
18
+ email: PropTypes.Requireable<string>;
19
+ priceRange: PropTypes.Requireable<string>;
20
+ sameAs: PropTypes.Requireable<(string | null | undefined)[]>;
21
+ siteInfo: PropTypes.Requireable<object>;
22
+ };
22
23
  }
23
- export declare function LocalBusinessSchema({ name, streetAddress, addressLocality, addressRegion, postalCode, addressCountry, telephone, url, logo, image, openingHours, description, email, priceRange, sameAs }: LocalBusinessSchemaProps): import("react/jsx-runtime").JSX.Element;
24
- export default LocalBusinessSchema;
25
24
  //# sourceMappingURL=schema-localbusiness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-localbusiness.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/schema-localbusiness.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,mBAAmB,CAAE,EACpC,IAAI,EACJ,aAAa,EACb,eAAe,EACf,aAAa,EACb,UAAU,EACV,cAAgC,EAChC,SAAS,EACT,GAAG,EACH,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,WAAW,EACX,KAAK,EACL,UAAU,EACV,MAAM,EACN,EAAE,wBAAwB,2CA8B1B;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"schema-localbusiness.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/schema-localbusiness.tsx"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAgCnD,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAEvF,wBAAgB,mBAAmB,CAAE,KAAK,EAAE,uBAAuB,2CAiDlE;yBAjDe,mBAAmB"}
@@ -1,21 +1,20 @@
1
- /**
2
- * Website Schema Component
3
- * Generates JSON-LD structured data for websites
4
- * https://schema.org/WebSite
5
- */
6
- export interface WebsiteSchemaProps {
7
- name: string;
8
- url: string;
9
- description?: string;
10
- potentialAction?: {
11
- '@type': 'SearchAction';
12
- target: {
13
- '@type': 'EntryPoint';
14
- urlTemplate: string;
15
- };
16
- query?: string;
1
+ import PropTypes, { InferProps } from "prop-types";
2
+ export type WebsiteSchemaType = InferProps<typeof WebsiteSchema.propTypes>;
3
+ export declare function WebsiteSchema(props: WebsiteSchemaType): import("react/jsx-runtime").JSX.Element;
4
+ export declare namespace WebsiteSchema {
5
+ var propTypes: {
6
+ name: PropTypes.Requireable<string>;
7
+ url: PropTypes.Requireable<string>;
8
+ description: PropTypes.Requireable<string>;
9
+ potentialAction: PropTypes.Requireable<PropTypes.InferProps<{
10
+ '@type': PropTypes.Requireable<string>;
11
+ target: PropTypes.Requireable<PropTypes.InferProps<{
12
+ '@type': PropTypes.Requireable<string>;
13
+ urlTemplate: PropTypes.Requireable<string>;
14
+ }>>;
15
+ query: PropTypes.Requireable<string>;
16
+ }>>;
17
+ siteInfo: PropTypes.Requireable<object>;
17
18
  };
18
19
  }
19
- export declare function WebsiteSchema({ name, url, description, potentialAction }: WebsiteSchemaProps): import("react/jsx-runtime").JSX.Element;
20
- export default WebsiteSchema;
21
20
  //# sourceMappingURL=schema-website.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-website.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/schema-website.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE;QACjB,OAAO,EAAE,cAAc,CAAC;QACxB,MAAM,EAAE;YACP,OAAO,EAAE,YAAY,CAAC;YACtB,WAAW,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAED,wBAAgB,aAAa,CAAE,EAC9B,IAAI,EACJ,GAAG,EACH,WAAW,EACX,eAAe,EACf,EAAE,kBAAkB,2CAgBpB;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"schema-website.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/schema-website.tsx"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4BnD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAE3E,wBAAgB,aAAa,CAAE,KAAK,EAAE,iBAAiB,2CAwBtD;yBAxBe,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAQ1C,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAWzD,MAAM,MAAM,aAAa,GAAG;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAKF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,EAAE,cAAc,SAA0B,UAU7I;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,cAAc,SAA0B,mBAatF;AAID,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,SAGxC;AAID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,UAU3D;AAID;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,GAAE,aAAkB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAmEnH;AAKD,wBAAsB,cAAc,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,MAAM,EAAE,MAAM;;;;;;iBAiOooJ,CAAC;;;;KAlNrtJ;AAMD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAA4B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA+B3H;AAKD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAC;;;;;;iBAwK6nJ,CAAC;;;;KAzJrtJ;AAcD,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzF,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,wBAAwB;;;;;;iBA0I2oJ,CAAC;;;;KAnHrtJ;yBAvBqB,oBAAoB;;;;;;;;;;;AAoC1C,MAAM,MAAM,mCAAmC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,SAAS,CAAC,CAAC;AAC/G,wBAAsB,+BAA+B,CAAC,KAAK,EAAE,mCAAmC;;;;;;iBAqGqnJ,CAAC;;;;KArFrtJ;yBAhBqB,+BAA+B;;;;;;;;;;;AAgCrD,MAAM,MAAM,6BAA6B,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACnG,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA0B7G;yBA1BqB,yBAAyB;;;;;;;;;;;;AA6C/C,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;;;;iBAuB8pJ,CAAC;;;;KANrtJ"}
1
+ {"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/sitemap.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAQ1C,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAWzD,MAAM,MAAM,aAAa,GAAG;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;CACb,CAAC;AAKF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE;IAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,EAAE,cAAc,SAA0B,UAU7I;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,cAAc,SAA0B,mBAatF;AAID,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,SAGxC;AAID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,UAU3D;AAID;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,GAAE,aAAkB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAmEnH;AAKD,wBAAsB,cAAc,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,MAAM,EAAE,MAAM;;;;;;iBAkOukJ,CAAC;;;;KAnNxpJ;AAMD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAA4B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgC3H;AAKD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAC;;;;;;iBAwKgkJ,CAAC;;;;KAzJxpJ;AAcD,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzF,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,wBAAwB;;;;;;iBA0I8kJ,CAAC;;;;KAnHxpJ;yBAvBqB,oBAAoB;;;;;;;;;;;AAoC1C,MAAM,MAAM,mCAAmC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,SAAS,CAAC,CAAC;AAC/G,wBAAsB,+BAA+B,CAAC,KAAK,EAAE,mCAAmC;;;;;;iBAqGwjJ,CAAC;;;;KArFxpJ;yBAhBqB,+BAA+B;;;;;;;;;;;AAgCrD,MAAM,MAAM,6BAA6B,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC;AACnG,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,6BAA6B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA0B7G;yBA1BqB,yBAAyB;;;;;;;;;;;;AA6C/C,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;;;;iBAuBimJ,CAAC;;;;KANxpJ"}
@@ -63,6 +63,7 @@ export * from "./components/seo/schema-recipe";
63
63
  export * from "./components/seo/schema-services";
64
64
  export * from "./components/seo/schema-website";
65
65
  export * from "./components/seo/schema-blogposting";
66
+ export * from "./components/seo/manifest";
66
67
  export * from "./components/seo/metadata";
67
68
  export * from "./components/seo/metadata.components";
68
69
  export * from "./components/seo/sitemap";
@@ -77,6 +78,5 @@ export * from "./components/structured/recipe";
77
78
  export * from "./components/structured/resume";
78
79
  export * from "./components/structured/socialcard";
79
80
  export * from "./components/structured/timeline";
80
- export * from "./components/utilities/api";
81
81
  export * from "./components/utilities/functions";
82
82
  //# sourceMappingURL=index.d.ts.map
@@ -23,7 +23,6 @@ export * from "./components/seo/metadata";
23
23
  export * from "./components/seo/sitemap";
24
24
  export * from "./components/shoppingcart/ebay.functions";
25
25
  export * from "./components/shoppingcart/shoppingcart.functions";
26
- export * from "./components/utilities/api";
27
26
  export * from "./components/utilities/functions";
28
27
  export * from "./components/config/config.server";
29
28
  export * from "./components/seo/metadata.components";
@@ -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":";;;;;;;;;;;;;;;;;gCACgC,kCAAkC"}
@@ -0,0 +1,23 @@
1
+ declare namespace _default {
2
+ export let title: string;
3
+ export { LocalBusinessSchema as component };
4
+ export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[];
5
+ }
6
+ export default _default;
7
+ export namespace Schema_LocalBusiness_From_Config {
8
+ function render(): import("react/jsx-runtime").JSX.Element;
9
+ }
10
+ export namespace Schema_LocalBusiness_Custom_Props {
11
+ export function render_1(): import("react/jsx-runtime").JSX.Element;
12
+ export { render_1 as render };
13
+ }
14
+ export namespace Schema_Website_From_Config {
15
+ export function render_2(): import("react/jsx-runtime").JSX.Element;
16
+ export { render_2 as render };
17
+ }
18
+ export namespace Schema_Website_With_Search {
19
+ export function render_3(): import("react/jsx-runtime").JSX.Element;
20
+ export { render_3 as render };
21
+ }
22
+ import { LocalBusinessSchema } from '@/components/seo/schema-localbusiness';
23
+ //# sourceMappingURL=seo.schema.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo.schema.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/seo/seo.schema.stories.js"],"names":[],"mappings":";;;;;;;IAuBS,2DAMP;;;IAIO,oEASP;;;;IAIO,oEAMP;;;;IAIO,oEAeP;;;oCAtEkC,uCAAuC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manifest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.test.d.ts","sourceRoot":"","sources":["../../../src/tests/manifest.test.tsx"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelated-tech/components",
3
- "version": "3.2.13",
3
+ "version": "3.2.14",
4
4
  "private": false,
5
5
  "author": {
6
6
  "name": "Pixelated Technologies",
@@ -137,7 +137,7 @@
137
137
  "typescript": "^5.9.3",
138
138
  "url-loader": "^4.1.1",
139
139
  "vitest": "^4.0.16",
140
- "webpack": "^5.104.0",
140
+ "webpack": "^5.104.1",
141
141
  "webpack-cli": "^6.0.1",
142
142
  "webpack-dev-server": "^5.2.2",
143
143
  "webpack-node-externals": "^3.0.0"
@@ -1,36 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- export function getXHRData(apiURL, apiMethod, myCallback) {
3
- const xhr = new XMLHttpRequest();
4
- xhr.open(apiMethod, apiURL, true);
5
- // xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
6
- // xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
7
- // xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
8
- xhr.onreadystatechange = () => {
9
- // if (xhr.readyState === 4) {
10
- if (xhr.readyState === 4 && xhr.status === 200) {
11
- let response;
12
- response = JSON.parse(xhr.responseText);
13
- myCallback(response);
14
- }
15
- };
16
- xhr.send();
17
- }
18
- getXHRData.propTypes = {
19
- apiURL: PropTypes.string.isRequired,
20
- apiMethod: PropTypes.string.isRequired
21
- };
22
- export function generateURL(baseURL, props) {
23
- let url = baseURL;
24
- let allProps = '';
25
- for (const prop in props) {
26
- if (props) {
27
- allProps += (allProps.length === 0) ? prop + '=' + props[prop] : '&' + prop + '=' + props[prop];
28
- }
29
- }
30
- url += allProps;
31
- return url;
32
- }
33
- generateURL.propTypes = {
34
- baseURL: PropTypes.string.isRequired,
35
- props: PropTypes.object
36
- };
@@ -1,16 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- export declare function getXHRData(apiURL: string, apiMethod: string, myCallback: any): void;
3
- export declare namespace getXHRData {
4
- var propTypes: {
5
- apiURL: PropTypes.Validator<string>;
6
- apiMethod: PropTypes.Validator<string>;
7
- };
8
- }
9
- export declare function generateURL(baseURL: string, props: any): string;
10
- export declare namespace generateURL {
11
- var propTypes: {
12
- baseURL: PropTypes.Validator<string>;
13
- props: PropTypes.Requireable<object>;
14
- };
15
- }
16
- //# sourceMappingURL=api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/components/utilities/api.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,wBAAgB,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAgB7E;yBAhBe,UAAU;;;;;;AAuB1B,wBAAgB,WAAW,CAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,UAUvD;yBAVe,WAAW"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=api.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../../../src/tests/api.test.ts"],"names":[],"mappings":""}