@pixelated-tech/components 3.1.4 → 3.1.6
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.
- package/README.md +61 -40
- package/dist/components/seo/metadata.components.js +35 -0
- package/dist/components/seo/metadata.js +0 -48
- package/dist/components/seo/sitemap.js +192 -53
- package/dist/index.js +1 -0
- package/dist/index.server.js +2 -1
- package/dist/types/components/seo/metadata.components.d.ts +28 -0
- package/dist/types/components/seo/metadata.components.d.ts.map +1 -0
- package/dist/types/components/seo/metadata.d.ts +0 -14
- package/dist/types/components/seo/metadata.d.ts.map +1 -1
- package/dist/types/components/seo/sitemap.d.ts +107 -14
- package/dist/types/components/seo/sitemap.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.server.d.ts +1 -0
- package/package.json +136 -134
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<br />
|
|
13
13
|
<div align="center">
|
|
14
14
|
<a href="https://github.com/brianwhaley/pixelated-components">
|
|
15
|
-
<img src="images/
|
|
15
|
+
<img src="https://www.pixelated.tech/images/pix/pix-bg-512.jpg" alt="Logo" width="80" height="80">
|
|
16
16
|
</a>
|
|
17
17
|
|
|
18
18
|
<h3 align="center">Pixelated Components</h3>
|
|
@@ -45,7 +45,14 @@ This is a library of components I have found useful to build web sites quickly.
|
|
|
45
45
|
* [![Next][Next.js]][Next-url]
|
|
46
46
|
* [![React][React.js]][React-url]
|
|
47
47
|
* [![Storybook][Storybook.js]][Storybook-url]
|
|
48
|
+
* [![Calendly][Calendly.com]][Calendly-url]
|
|
48
49
|
* [![Contentful][Contentful.com]][Contentful-url]
|
|
50
|
+
* [![Cloudinary][Cloudinary.com]][Cloudinary-url]
|
|
51
|
+
* [![Flickr][Flickr.com]][Flickr-url]
|
|
52
|
+
* [![Gravatar][Gravatar.com]][Gravatar-url]
|
|
53
|
+
* [![Hubspot][Hubspot.com]][Hubspot-url]
|
|
54
|
+
* [![Instagram][Instagram.com]][Instagram-url]
|
|
55
|
+
* [![PayPal][PayPal.com]][PayPal-url]
|
|
49
56
|
* [![Wordpress][Wordpress.com]][Wordpress-url]
|
|
50
57
|
* [![Github][Github.com]][Github-url]
|
|
51
58
|
* [![npm][npm.org]][npm-url]
|
|
@@ -53,7 +60,6 @@ This is a library of components I have found useful to build web sites quickly.
|
|
|
53
60
|
|
|
54
61
|
|
|
55
62
|
|
|
56
|
-
|
|
57
63
|
<!-- GETTING STARTED -->
|
|
58
64
|
## Getting Started
|
|
59
65
|
|
|
@@ -65,7 +71,7 @@ To get a local copy up and running follow these simple example steps.
|
|
|
65
71
|
|
|
66
72
|
1. Install NPM packages
|
|
67
73
|
```sh
|
|
68
|
-
npm install @
|
|
74
|
+
npm install @pixelated-tech/components@latest
|
|
69
75
|
```
|
|
70
76
|
|
|
71
77
|
|
|
@@ -75,47 +81,44 @@ To get a local copy up and running follow these simple example steps.
|
|
|
75
81
|
## Usage
|
|
76
82
|
|
|
77
83
|
Components to help build websites quicker:
|
|
84
|
+
1. Centralized 404 Error Page
|
|
78
85
|
1. Buzzword Bingo Cards
|
|
79
|
-
1. Page Callouts
|
|
86
|
+
1. Page Callouts
|
|
80
87
|
1. Image Carousel - Page, Header, and Simple
|
|
88
|
+
1. Calendly Scheduling Integration
|
|
89
|
+
1. Cloudinary Remote Fetch Optimization Integration
|
|
90
|
+
1. SmartImage Component with Cloudianry and Next Imgegration
|
|
91
|
+
1. Centralized Configuration Management
|
|
81
92
|
1. Contentful CMS Integration
|
|
93
|
+
1. CSS Preload for Page Performance
|
|
82
94
|
1. eBay Store Listings
|
|
95
|
+
1. Flickr Image API Integration
|
|
83
96
|
1. Form Components and Form Builder
|
|
84
|
-
1. Google
|
|
85
|
-
1.
|
|
97
|
+
1. Google Analytics, Map, and Search Integration
|
|
98
|
+
1. Gravatar Card Integration
|
|
99
|
+
1. Page and Page Section Header Components
|
|
100
|
+
1. Hubspot Calendar and Form Integration
|
|
101
|
+
1. Instagram Image Fetch Integration
|
|
102
|
+
1. Loading and ToggleLoading Component
|
|
103
|
+
1. Markdown to HTML Engine
|
|
86
104
|
1. Menu Components - Simple and Accordion
|
|
87
105
|
1. Metadata Injection from Route JSON file
|
|
106
|
+
1. Centralized MicroInteractions
|
|
88
107
|
1. Modal Dialogs
|
|
89
108
|
1. NerdJokes Integration
|
|
109
|
+
1. PageBuilder and PageNegine with JSON, integration with Contentful
|
|
110
|
+
1. Page Section and Page Section Grid / Flex Item Layout Components
|
|
111
|
+
1. panel Component, also usable with Accordion Menu
|
|
90
112
|
1. Recipe XML MicroFormat Engine
|
|
91
113
|
1. Resume MicroFormat Engine
|
|
114
|
+
1. Shopping Cart functionality with eBay and PayPal Integration
|
|
92
115
|
1. Sitemap.XML dynamic generation from Route JSON file
|
|
93
116
|
1. Social Card Engine
|
|
94
117
|
1. Table Components
|
|
118
|
+
1. Image Tiles Component
|
|
119
|
+
1. Wordpress Blog Post Integration
|
|
95
120
|
1. Other Utilities
|
|
96
121
|
|
|
97
|
-
### Google Reviews (server-side)
|
|
98
|
-
- Requires: `GOOGLE_MAPS_API_KEY` (or use the built-in hard-coded key during testing).
|
|
99
|
-
- Import: `import { getGoogleReviewsByCompanyName } from 'pixelated-components';`
|
|
100
|
-
- Example:
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
const { place, reviews } = await getGoogleReviewsByCompanyName({
|
|
104
|
-
companyName: 'PixelVivid',
|
|
105
|
-
language: 'en',
|
|
106
|
-
near: { lat: 32.2163, lng: -80.7526 },
|
|
107
|
-
radiusMeters: 50000,
|
|
108
|
-
region: 'us',
|
|
109
|
-
type: 'point_of_interest',
|
|
110
|
-
maxReviews: 5,
|
|
111
|
-
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
- Tips:
|
|
115
|
-
- Prefer `near` + `radiusMeters` for better disambiguation.
|
|
116
|
-
- If results return 0, try adjusting `region` or `type`, or use the exact business name.
|
|
117
|
-
|
|
118
|
-
|
|
119
122
|
|
|
120
123
|
|
|
121
124
|
<!-- ROADMAP -->
|
|
@@ -124,10 +127,7 @@ const { place, reviews } = await getGoogleReviewsByCompanyName({
|
|
|
124
127
|
- [ ] LinkedIn Recommendations Integration
|
|
125
128
|
- [ ] eBay Feedback Integration
|
|
126
129
|
- [ ] Yelp Recommendations integration
|
|
127
|
-
- [ ] Calendly Integration
|
|
128
130
|
- [ ] Instagram Image Integration for Carousels
|
|
129
|
-
- [ ] Expanding menu based on
|
|
130
|
-
- [ ] eCommerce Features + Paypal ( or Stripe, Square)
|
|
131
131
|
- [ ] Shopify Integration
|
|
132
132
|
- [ ] Quickbooks Integration
|
|
133
133
|
- [ ] Buffer Integration (or Sendible, Sprout Social, Hootsuite)
|
|
@@ -209,23 +209,44 @@ Project Link: [https://github.com/brianwhaley/pixelated-components](https://gith
|
|
|
209
209
|
|
|
210
210
|
[product-screenshot]: images/screenshot.png
|
|
211
211
|
|
|
212
|
+
[Calendly.com]: https://img.shields.io/badge/Calendly-006bff
|
|
213
|
+
[Calendly-url]: https://cloudinary.com
|
|
214
|
+
|
|
215
|
+
[Cloudinary.com]: https://img.shields.io/badge/Cloudinary-3448C5?style=for-the-badge&logo=cloudinary&logoColor=white
|
|
216
|
+
[Cloudinary-url]: https://cloudinary.com
|
|
217
|
+
|
|
218
|
+
[Contentful.com]: https://img.shields.io/badge/Contentful-2478CC?logo=contentful&logoColor=fff
|
|
219
|
+
[Contentful-url]: https://contentful.com
|
|
220
|
+
|
|
221
|
+
[Flickr.com]: https://img.shields.io/static/v1?style=for-the-badge&message=Flickr&color=0063DC&logo=Flickr&logoColor=FFFFFF
|
|
222
|
+
[Flickr-url]: https://flickr.com
|
|
223
|
+
|
|
224
|
+
[GitHub.com]: https://img.shields.io/badge/GitHub-%23121011.svg?logo=github&logoColor=white
|
|
225
|
+
[Github-url]: https://www.github.com
|
|
226
|
+
|
|
227
|
+
[Gravatar.com]: https://img.shields.io/badge/Gravatar-1d4fc4
|
|
228
|
+
[Gravatar-url]: https://www.github.com
|
|
229
|
+
|
|
230
|
+
[Hubspot.com]: https://img.shields.io/badge/HubSpot-YES-brightgreen?style=plastic&logo=hubspot
|
|
231
|
+
[Hubspot-url]: https://www.github.com
|
|
232
|
+
|
|
233
|
+
[Instagram.com]: https://img.shields.io/badge/Instagram-E4405F?style=for-the-badge&logo=instagram&logoColor=white
|
|
234
|
+
[Instagram-url]: https://www.github.com
|
|
235
|
+
|
|
212
236
|
[Next.js]: https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white
|
|
213
237
|
[Next-url]: https://nextjs.org/
|
|
214
238
|
|
|
239
|
+
[npm.org]: https://img.shields.io/badge/npm-CB3837?logo=npm&logoColor=fff
|
|
240
|
+
[npm-url]: https://www.npmjs.org
|
|
241
|
+
|
|
242
|
+
[PayPal.js]: https://img.shields.io/badge/PayPal-Support_Us-003087?logo=paypal&logoColor=fff
|
|
243
|
+
[PayPal-url]: https://reactjs.org/
|
|
244
|
+
|
|
215
245
|
[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
|
|
216
246
|
[React-url]: https://reactjs.org/
|
|
217
247
|
|
|
218
248
|
[Storybook.js]: https://img.shields.io/badge/Storybook-FF4785?logo=storybook&logoColor=white
|
|
219
249
|
[Storybook-url]: https://storybook.js.org
|
|
220
250
|
|
|
221
|
-
[Contentful.com]: https://img.shields.io/badge/Contentful-2478CC?logo=contentful&logoColor=fff
|
|
222
|
-
[Contentful-url]: https://contentful.com
|
|
223
|
-
|
|
224
251
|
[WordPress.com]: https://img.shields.io/badge/WordPress-%2321759B.svg?logo=wordpress&logoColor=white
|
|
225
252
|
[Wordpress-url]: http://www.wordpress.com
|
|
226
|
-
|
|
227
|
-
[npm.org]: https://img.shields.io/badge/npm-CB3837?logo=npm&logoColor=fff
|
|
228
|
-
[npm-url]: https://www.npmjs.org
|
|
229
|
-
|
|
230
|
-
[GitHub.com]: https://img.shields.io/badge/GitHub-%23121011.svg?logo=github&logoColor=white
|
|
231
|
-
[Github-url]: https://www.github.com
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
// https://gist.github.com/whitingx/3840905
|
|
4
|
+
generateMetaTags.propTypes = {
|
|
5
|
+
title: PropTypes.string.isRequired,
|
|
6
|
+
description: PropTypes.string.isRequired,
|
|
7
|
+
keywords: PropTypes.string.isRequired,
|
|
8
|
+
site_name: PropTypes.string.isRequired,
|
|
9
|
+
email: PropTypes.string.isRequired,
|
|
10
|
+
origin: PropTypes.string.isRequired,
|
|
11
|
+
url: PropTypes.string.isRequired,
|
|
12
|
+
image: PropTypes.string.isRequired,
|
|
13
|
+
image_height: PropTypes.string.isRequired,
|
|
14
|
+
image_width: PropTypes.string.isRequired,
|
|
15
|
+
favicon: PropTypes.string.isRequired,
|
|
16
|
+
};
|
|
17
|
+
export function generateMetaTags(props) {
|
|
18
|
+
const { title, description, keywords, site_name, email, origin, url, image, image_height, image_width, favicon } = props;
|
|
19
|
+
return (_jsxs(_Fragment, { children: [_jsx("title", { children: title }), _jsx("meta", { charSet: "UTF-8" }), _jsx("meta", { httpEquiv: "content-type", content: "text/html; charset=UTF-8" }), _jsx("meta", { httpEquiv: 'Expires', content: '0' }), _jsx("meta", { httpEquiv: 'Pragma', content: 'no-cache' }), _jsx("meta", { httpEquiv: 'Cache-Control', content: 'no-cache' }), _jsx("meta", { name: "application-name", content: site_name }), _jsx("meta", { name: "author", content: site_name + ", " + email }), _jsx("meta", { name: 'copyright', content: site_name }), _jsx("meta", { name: "creator", content: site_name }), _jsx("meta", { name: "description", content: description }), _jsx("meta", { name: "keywords", content: keywords }), _jsx("meta", { name: 'language', content: 'EN' }), _jsx("meta", { name: 'owner', content: site_name }), _jsx("meta", { name: "publisher", content: site_name }), _jsx("meta", { name: 'rating', content: 'General' }), _jsx("meta", { name: 'reply-to', content: email }), _jsx("meta", { name: "robots", content: "index, follow" }), _jsx("meta", { name: 'url', content: url }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1.0, shrink-to-fit=no" }), _jsx("meta", { property: "og:description", content: description }), _jsx("meta", { property: 'og:email', content: email }), _jsx("meta", { property: "og:image", content: image }), _jsx("meta", { property: "og:image:height", content: image_height }), _jsx("meta", { property: "og:image:width", content: image_width }), _jsx("meta", { property: "og:locale", content: "en_US" }), _jsx("meta", { property: "og:site_name", content: site_name }), _jsx("meta", { property: "og:title", content: title }), _jsx("meta", { property: "og:type", content: "website" }), _jsx("meta", { property: "og:url", content: url }), _jsx("meta", { itemProp: "name", content: site_name }), _jsx("meta", { itemProp: "url", content: url }), _jsx("meta", { itemProp: "description", content: description }), _jsx("meta", { itemProp: "thumbnailUrl", content: image }), _jsx("meta", { property: "twitter:domain", content: new URL(origin).hostname }), _jsx("meta", { property: "twitter:url", content: url }), _jsx("meta", { name: "twitter:card", content: "summary_large_image" }), _jsx("meta", { name: "twitter:creator", content: site_name }), _jsx("meta", { name: "twitter:description", content: description }), _jsx("meta", { name: "twitter:image", content: image }), _jsx("meta", { name: "twitter:image:height", content: image_height }), _jsx("meta", { name: "twitter:image:width", content: image_width }), _jsx("meta", { name: "twitter:title", content: title }), _jsx("link", { rel: "author", href: origin }), _jsx("link", { rel: "canonical", href: url }), _jsx("link", { rel: "icon", type: "image/x-icon", href: favicon }), _jsx("link", { rel: "shortcut icon", type: "image/x-icon", href: favicon }), _jsx("link", { rel: "manifest", href: "/manifest.webmanifest" }), _jsx("link", { rel: "preconnect", href: "https://images.ctfassets.net/" }), _jsx("link", { rel: "preconnect", href: "https://res.cloudinary.com/" }), _jsx("link", { rel: "preconnect", href: "https://farm2.static.flickr.com" }), _jsx("link", { rel: "preconnect", href: "https://farm6.static.flickr.com" }), _jsx("link", { rel: "preconnect", href: "https://farm8.static.flickr.com" }), _jsx("link", { rel: "preconnect", href: "https://farm66.static.flickr.com" })] }));
|
|
20
|
+
}
|
|
21
|
+
setClientMetadata.propTypes = {
|
|
22
|
+
title: PropTypes.string.isRequired,
|
|
23
|
+
description: PropTypes.string.isRequired,
|
|
24
|
+
keywords: PropTypes.string.isRequired,
|
|
25
|
+
};
|
|
26
|
+
export function setClientMetadata(props) {
|
|
27
|
+
const { title, description, keywords } = props;
|
|
28
|
+
document.title = title;
|
|
29
|
+
(document.querySelector("meta[property='og:title']"))?.setAttribute('content', title);
|
|
30
|
+
(document.querySelector("meta[name='description']"))?.setAttribute('content', description);
|
|
31
|
+
(document.querySelector("meta[property='og:description']"))?.setAttribute('content', description);
|
|
32
|
+
(document.querySelector("meta[itemprop='description']"))?.setAttribute('content', description);
|
|
33
|
+
(document.querySelector("meta[name='keywords']"))?.setAttribute('content', keywords);
|
|
34
|
+
}
|
|
35
|
+
;
|
|
@@ -63,38 +63,6 @@ export function getAllRoutes(routes, key) {
|
|
|
63
63
|
traverse(routes);
|
|
64
64
|
return result;
|
|
65
65
|
}
|
|
66
|
-
import fs from 'fs';
|
|
67
|
-
import path from 'path';
|
|
68
|
-
export function getAllImages() {
|
|
69
|
-
// const imagePaths: ImageInfo[] = [];
|
|
70
|
-
const imagePaths = [];
|
|
71
|
-
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg', '.webp'];
|
|
72
|
-
const publicDir = './public';
|
|
73
|
-
function walk(currentDir) {
|
|
74
|
-
fs.readdirSync(currentDir).forEach(file => {
|
|
75
|
-
const filePath = path.join(currentDir, file);
|
|
76
|
-
const fileStat = fs.statSync(filePath);
|
|
77
|
-
if (fileStat.isDirectory()) {
|
|
78
|
-
walk(filePath); // Recursive call for subdirectories
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
if (fs.statSync(filePath).isFile() && (imageExtensions.some(ext => file.endsWith(ext)))) {
|
|
82
|
-
// Found an image!
|
|
83
|
-
// const imageURL = `/${filePath.replace('./public/', '')}`; // Construct URL
|
|
84
|
-
// Add to your image data list (e.g., { url: imageURL, alt: "description" })
|
|
85
|
-
const relativePath = path.relative(publicDir, filePath).replace(/\\/g, '/');
|
|
86
|
-
const fullPath = `/${relativePath}`;
|
|
87
|
-
// imagePaths.push({loc: fullPath});
|
|
88
|
-
imagePaths.push(fullPath);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
;
|
|
94
|
-
walk(publicDir);
|
|
95
|
-
// return JSON.stringify(imagePaths);
|
|
96
|
-
return imagePaths;
|
|
97
|
-
}
|
|
98
66
|
export const getMetadata = (routes, key = "name", value = "Home") => {
|
|
99
67
|
// const allRoutes = getAllRoutes(routes, "routes");
|
|
100
68
|
// const foundObject = allRoutes.find((obj: { [x: string]: string; }) => obj && Object.prototype.hasOwnProperty.call(obj, key) && obj[key as keyof typeof obj] === value);
|
|
@@ -116,22 +84,6 @@ export const getMetadata = (routes, key = "name", value = "Home") => {
|
|
|
116
84
|
return metadata;
|
|
117
85
|
}
|
|
118
86
|
};
|
|
119
|
-
export const setClientMetadata = ({ title, description, keywords }) => {
|
|
120
|
-
document.title = title;
|
|
121
|
-
(document.querySelector("meta[property='og:title']"))?.setAttribute('content', title);
|
|
122
|
-
(document.querySelector("meta[name='description']"))?.setAttribute('content', description);
|
|
123
|
-
(document.querySelector("meta[property='og:description']"))?.setAttribute('content', description);
|
|
124
|
-
(document.querySelector("meta[itemprop='description']"))?.setAttribute('content', description);
|
|
125
|
-
(document.querySelector("meta[name='keywords']"))?.setAttribute('content', keywords);
|
|
126
|
-
};
|
|
127
|
-
export const setServerMetadata = ({ key, value }) => {
|
|
128
|
-
const myMetaData = getMetadata({ key, value });
|
|
129
|
-
return {
|
|
130
|
-
title: myMetaData.title,
|
|
131
|
-
description: myMetaData.description,
|
|
132
|
-
keywords: myMetaData.keywords
|
|
133
|
-
};
|
|
134
|
-
};
|
|
135
87
|
export function getAccordionMenuData(myRoutes) {
|
|
136
88
|
const menuItems = myRoutes.map((thisRoute) => (thisRoute.routes
|
|
137
89
|
? { [thisRoute.name]: thisRoute.routes.map((subRoute) => ({ [subRoute.name]: subRoute.path })) }
|
|
@@ -1,9 +1,129 @@
|
|
|
1
1
|
import PropTypes from "prop-types";
|
|
2
|
-
import { getAllRoutes
|
|
2
|
+
import { getAllRoutes } from "./metadata";
|
|
3
3
|
import { getWordPressItems } from "../cms/wordpress.functions";
|
|
4
|
-
import { getContentfulFieldValues } from "../cms/contentful.delivery";
|
|
4
|
+
import { getContentfulFieldValues, getContentfulAssetURLs } from "../cms/contentful.delivery";
|
|
5
5
|
import { getEbayAppToken, getEbayItemsSearch } from "../shoppingcart/ebay.functions";
|
|
6
6
|
import { getFullPixelatedConfig } from '../config/config';
|
|
7
|
+
/**
|
|
8
|
+
* Helper to construct an origin string from a Next-like headers() object or plain values.
|
|
9
|
+
* Accepts an object with `get(key)` method, or `undefined` and falls back to localhost origin.
|
|
10
|
+
*/
|
|
11
|
+
export function getOriginFromHeaders(headersLike, fallbackOrigin = 'http://localhost:3000') {
|
|
12
|
+
try {
|
|
13
|
+
if (!headersLike)
|
|
14
|
+
return fallbackOrigin;
|
|
15
|
+
const proto = headersLike.get('x-forwarded-proto') || 'http';
|
|
16
|
+
const host = headersLike.get('host') || 'localhost:3000';
|
|
17
|
+
return `${proto}://${host}`;
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
console.log("Error getting origin from headers:", e);
|
|
21
|
+
return fallbackOrigin;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Next-specific async helper: getOriginFromNextHeaders
|
|
26
|
+
* - Convenience wrapper that dynamically imports `next/headers` and calls our `getOriginFromHeaders` function
|
|
27
|
+
* - Falls back to `fallbackOrigin` if `next/headers` not available or on error
|
|
28
|
+
*/
|
|
29
|
+
export async function getOriginFromNextHeaders(fallbackOrigin = 'http://localhost:3000') {
|
|
30
|
+
try {
|
|
31
|
+
// dynamic import ensures we don't require 'next/headers' in non-Next environments
|
|
32
|
+
const mod = await import('next/headers');
|
|
33
|
+
if (mod && typeof mod.headers === 'function') {
|
|
34
|
+
const hdrs = await mod.headers();
|
|
35
|
+
return getOriginFromHeaders(hdrs, fallbackOrigin);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
console.log("Error getting origin from Next headers:", e);
|
|
40
|
+
// Not in a Next environment or module not found; return fallback
|
|
41
|
+
}
|
|
42
|
+
return fallbackOrigin;
|
|
43
|
+
}
|
|
44
|
+
export function flattenRoutes(routes) {
|
|
45
|
+
// Convenience wrapper for the project-level getAllRoutes helper
|
|
46
|
+
return getAllRoutes(routes, 'routes');
|
|
47
|
+
}
|
|
48
|
+
export function jsonToSitemapEntries(entries) {
|
|
49
|
+
return entries.map((entry) => `<url>
|
|
50
|
+
<loc>${entry.url}</loc>
|
|
51
|
+
<lastmod>${entry.lastModified}</lastmod>
|
|
52
|
+
<changefreq>${entry.changeFrequency}</changefreq>
|
|
53
|
+
<priority>${entry.priority}</priority>
|
|
54
|
+
</url>`).join('');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* generateSitemap: compose the individual create* functions based on toggles in SitemapConfig.
|
|
58
|
+
* - Keep this minimal for the MVP: no retries/caching here. Add TODOs for later.
|
|
59
|
+
*/
|
|
60
|
+
export async function generateSitemap(cfg = {}, originInput) {
|
|
61
|
+
const origin = originInput ?? 'http://localhost:3000';
|
|
62
|
+
const sitemapEntries = [];
|
|
63
|
+
// Defaults: pages true, image json true, others false
|
|
64
|
+
const usePages = cfg.createPageURLs ?? true;
|
|
65
|
+
const useWP = cfg.createWordPressURLs ?? false;
|
|
66
|
+
const useImageJSON = cfg.createImageURLsFromJSON ?? true;
|
|
67
|
+
const useContentful = cfg.createContentfulURLs ?? false;
|
|
68
|
+
const useContentfulImages = cfg.createContentfulImageURLs ?? false;
|
|
69
|
+
const usePageBuilder = cfg.createPageBuilderURLs ?? false;
|
|
70
|
+
const useEbay = cfg.createEbayItemURLs ?? false;
|
|
71
|
+
// Pages
|
|
72
|
+
if (usePages) {
|
|
73
|
+
if (cfg.routes) {
|
|
74
|
+
const flat = flattenRoutes(cfg.routes);
|
|
75
|
+
sitemapEntries.push(...(await createPageURLs(flat, origin)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Image JSON
|
|
79
|
+
if (useImageJSON) {
|
|
80
|
+
sitemapEntries.push(...(await createImageURLsFromJSON(origin, cfg.imageJson?.path ?? 'public/site-images.json')));
|
|
81
|
+
}
|
|
82
|
+
// WordPress
|
|
83
|
+
if (useWP && cfg.wordpress?.site) {
|
|
84
|
+
sitemapEntries.push(...(await createWordPressURLs({ site: cfg.wordpress.site })));
|
|
85
|
+
}
|
|
86
|
+
// Contentful (pages)
|
|
87
|
+
if (useContentful && cfg.contentful) {
|
|
88
|
+
sitemapEntries.push(...(await createContentfulURLs({ apiProps: cfg.contentful, origin })));
|
|
89
|
+
}
|
|
90
|
+
// Contentful images
|
|
91
|
+
if (useContentfulImages && cfg.contentful) {
|
|
92
|
+
sitemapEntries.push(...(await createContentfulImageURLs({ apiProps: cfg.contentful, origin })));
|
|
93
|
+
}
|
|
94
|
+
// Page Builder (existing helper in package not always present)
|
|
95
|
+
if (usePageBuilder && cfg.contentful) {
|
|
96
|
+
// TODO: wire createContentfulPageBuilderURLs if needed; skipping for MVP
|
|
97
|
+
}
|
|
98
|
+
// Ebay items
|
|
99
|
+
if (useEbay) {
|
|
100
|
+
sitemapEntries.push(...(await createEbayItemURLs(origin)));
|
|
101
|
+
}
|
|
102
|
+
// Deduplicate by URL and properly merge images arrays if present
|
|
103
|
+
const map = new Map();
|
|
104
|
+
for (const entry of sitemapEntries.flat()) {
|
|
105
|
+
if (!entry || !entry.url)
|
|
106
|
+
continue;
|
|
107
|
+
const key = entry.url.toLowerCase();
|
|
108
|
+
const existing = map.get(key);
|
|
109
|
+
if (!existing) {
|
|
110
|
+
map.set(key, { ...entry });
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Merge images
|
|
114
|
+
if (entry.images && entry.images.length) {
|
|
115
|
+
existing.images = Array.from(new Set([...(existing.images || []), ...entry.images]));
|
|
116
|
+
}
|
|
117
|
+
// Keep the earliest lastModified? Use whichever is present (prefer existing)
|
|
118
|
+
existing.lastModified = existing.lastModified || entry.lastModified;
|
|
119
|
+
existing.priority = existing.priority || entry.priority;
|
|
120
|
+
existing.changeFrequency = existing.changeFrequency || entry.changeFrequency;
|
|
121
|
+
map.set(key, existing);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const entries = Array.from(map.values());
|
|
125
|
+
return entries;
|
|
126
|
+
}
|
|
7
127
|
export async function createPageURLs(myRoutes, origin) {
|
|
8
128
|
const sitemap = [];
|
|
9
129
|
// const origin = await getOrigin();
|
|
@@ -12,7 +132,7 @@ export async function createPageURLs(myRoutes, origin) {
|
|
|
12
132
|
if (route.path.substring(0, 4).toLowerCase() !== 'http') {
|
|
13
133
|
sitemap.push({
|
|
14
134
|
url: `${origin}${route.path}`,
|
|
15
|
-
lastModified:
|
|
135
|
+
lastModified: new Date(),
|
|
16
136
|
changeFrequency: "hourly",
|
|
17
137
|
priority: 1.0,
|
|
18
138
|
});
|
|
@@ -20,15 +140,34 @@ export async function createPageURLs(myRoutes, origin) {
|
|
|
20
140
|
}
|
|
21
141
|
return sitemap;
|
|
22
142
|
}
|
|
23
|
-
export async function
|
|
143
|
+
export async function createImageURLsFromJSON(origin, jsonPath = 'public/site-images.json') {
|
|
24
144
|
const sitemap = [];
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
145
|
+
try {
|
|
146
|
+
let urlPath = jsonPath;
|
|
147
|
+
if (urlPath.startsWith('public/'))
|
|
148
|
+
urlPath = urlPath.slice('public/'.length);
|
|
149
|
+
if (!urlPath.startsWith('/'))
|
|
150
|
+
urlPath = `/${urlPath}`;
|
|
151
|
+
const resp = await fetch(`${origin}${urlPath}`);
|
|
152
|
+
if (!resp.ok)
|
|
153
|
+
return sitemap;
|
|
154
|
+
const imgs = await resp.json();
|
|
155
|
+
if (!Array.isArray(imgs))
|
|
156
|
+
return sitemap;
|
|
157
|
+
// Use an array of URL strings so the sitemap serializer writes the URL text
|
|
158
|
+
const newImages = imgs.map(i => {
|
|
159
|
+
const rel = i.startsWith('/') ? i : `/${i}`;
|
|
160
|
+
return `${origin}${rel}`;
|
|
161
|
+
});
|
|
162
|
+
sitemap.push({
|
|
163
|
+
url: `${origin}/images`,
|
|
164
|
+
images: newImages,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch (e) {
|
|
168
|
+
if (typeof console !== 'undefined')
|
|
169
|
+
console.warn('createImageURLsFromJSON failed', e);
|
|
170
|
+
}
|
|
32
171
|
return sitemap;
|
|
33
172
|
}
|
|
34
173
|
export async function createWordPressURLs(props) {
|
|
@@ -37,7 +176,7 @@ export async function createWordPressURLs(props) {
|
|
|
37
176
|
for await (const post of blogPosts ?? []) {
|
|
38
177
|
sitemap.push({
|
|
39
178
|
url: post.URL,
|
|
40
|
-
lastModified: post.modified
|
|
179
|
+
lastModified: post.modified ? new Date(post.modified) : new Date(),
|
|
41
180
|
changeFrequency: "hourly",
|
|
42
181
|
priority: 1.0,
|
|
43
182
|
});
|
|
@@ -66,7 +205,7 @@ export async function createContentfulURLs(props) {
|
|
|
66
205
|
for (const title of contentfulTitles) {
|
|
67
206
|
sitemap.push({
|
|
68
207
|
url: `${props.origin}/projects/${encodeURIComponent(title)}`,
|
|
69
|
-
lastModified:
|
|
208
|
+
lastModified: new Date(),
|
|
70
209
|
changeFrequency: "hourly",
|
|
71
210
|
priority: 1.0,
|
|
72
211
|
});
|
|
@@ -92,13 +231,51 @@ export async function createContentfulPageBuilderURLs(props) {
|
|
|
92
231
|
for (const pageName of pageNames) {
|
|
93
232
|
sitemap.push({
|
|
94
233
|
url: `${props.origin}/${encodeURIComponent(pageName)}`,
|
|
95
|
-
lastModified:
|
|
234
|
+
lastModified: new Date(),
|
|
96
235
|
changeFrequency: "hourly",
|
|
97
236
|
priority: 1.0,
|
|
98
237
|
});
|
|
99
238
|
}
|
|
100
239
|
return sitemap;
|
|
101
240
|
}
|
|
241
|
+
createContentfulImageURLs.propTypes = {
|
|
242
|
+
apiProps: PropTypes.shape({
|
|
243
|
+
proxyURL: PropTypes.string,
|
|
244
|
+
base_url: PropTypes.string.isRequired,
|
|
245
|
+
space_id: PropTypes.string.isRequired,
|
|
246
|
+
environment: PropTypes.string.isRequired,
|
|
247
|
+
access_token: PropTypes.string.isRequired,
|
|
248
|
+
}).isRequired,
|
|
249
|
+
origin: PropTypes.string.isRequired,
|
|
250
|
+
};
|
|
251
|
+
export async function createContentfulImageURLs(props) {
|
|
252
|
+
const sitemap = [];
|
|
253
|
+
const providerContentfulApiProps = getFullPixelatedConfig()?.contentful;
|
|
254
|
+
const mergedApiProps = { ...providerContentfulApiProps, ...props.apiProps };
|
|
255
|
+
try {
|
|
256
|
+
const assets = await getContentfulAssetURLs({ apiProps: mergedApiProps });
|
|
257
|
+
if (!Array.isArray(assets) || assets.length === 0)
|
|
258
|
+
return sitemap;
|
|
259
|
+
const newImages = assets.map((a) => {
|
|
260
|
+
let i = a.image || '';
|
|
261
|
+
if (i.startsWith('//'))
|
|
262
|
+
i = `https:${i}`;
|
|
263
|
+
else if (i.startsWith('/'))
|
|
264
|
+
i = `${props.origin}${i}`;
|
|
265
|
+
return i;
|
|
266
|
+
}).filter(Boolean);
|
|
267
|
+
sitemap.push({
|
|
268
|
+
url: `${props.origin}/images`,
|
|
269
|
+
images: newImages,
|
|
270
|
+
lastModified: new Date(),
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
catch (e) {
|
|
274
|
+
if (typeof console !== 'undefined')
|
|
275
|
+
console.warn('createContentfulImageURLs failed', e);
|
|
276
|
+
}
|
|
277
|
+
return sitemap;
|
|
278
|
+
}
|
|
102
279
|
const defaultEbayProps = {
|
|
103
280
|
proxyURL: "https://proxy.pixelated.tech/prod/proxy?url=",
|
|
104
281
|
baseTokenURL: 'https://api.ebay.com/identity/v1/oauth2/token',
|
|
@@ -122,7 +299,7 @@ export async function createEbayItemURLs(origin) {
|
|
|
122
299
|
for (const item of items.itemSummaries) {
|
|
123
300
|
sitemap.push({
|
|
124
301
|
url: `${origin}/store/${item.legacyItemId}`,
|
|
125
|
-
lastModified: item.itemCreationDate,
|
|
302
|
+
lastModified: item.itemCreationDate ? new Date(item.itemCreationDate) : new Date(),
|
|
126
303
|
changeFrequency: "hourly",
|
|
127
304
|
priority: 1.0,
|
|
128
305
|
});
|
|
@@ -131,41 +308,3 @@ export async function createEbayItemURLs(origin) {
|
|
|
131
308
|
});
|
|
132
309
|
return sitemap;
|
|
133
310
|
}
|
|
134
|
-
export function jsonToSitemapEntries(entries) {
|
|
135
|
-
return entries.map((entry) => `<url>
|
|
136
|
-
<loc>${entry.url}</loc>
|
|
137
|
-
<lastmod>${entry.lastModified}</lastmod>
|
|
138
|
-
<changefreq>${entry.changeFrequency}</changefreq>
|
|
139
|
-
<priority>${entry.priority}</priority>
|
|
140
|
-
</url>`).join('');
|
|
141
|
-
}
|
|
142
|
-
export async function createImageURLsFromJSON(origin, jsonPath = 'public/site-images.json') {
|
|
143
|
-
const sitemap = [];
|
|
144
|
-
try {
|
|
145
|
-
let urlPath = jsonPath;
|
|
146
|
-
if (urlPath.startsWith('public/'))
|
|
147
|
-
urlPath = urlPath.slice('public/'.length);
|
|
148
|
-
if (!urlPath.startsWith('/'))
|
|
149
|
-
urlPath = `/${urlPath}`;
|
|
150
|
-
const resp = await fetch(`${origin}${urlPath}`);
|
|
151
|
-
if (!resp.ok)
|
|
152
|
-
return sitemap;
|
|
153
|
-
const imgs = await resp.json();
|
|
154
|
-
if (!Array.isArray(imgs))
|
|
155
|
-
return sitemap;
|
|
156
|
-
// Use an array of URL strings so the sitemap serializer writes the URL text
|
|
157
|
-
const newImages = imgs.map(i => {
|
|
158
|
-
const rel = i.startsWith('/') ? i : `/${i}`;
|
|
159
|
-
return `${origin}${rel}`;
|
|
160
|
-
});
|
|
161
|
-
sitemap.push({
|
|
162
|
-
url: `${origin}/images`,
|
|
163
|
-
images: newImages,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
catch (e) {
|
|
167
|
-
if (typeof console !== 'undefined')
|
|
168
|
-
console.warn('createImageURLsFromJSON failed', e);
|
|
169
|
-
}
|
|
170
|
-
return sitemap;
|
|
171
|
-
}
|
package/dist/index.js
CHANGED
|
@@ -63,6 +63,7 @@ export * from './components/seo/googleanalytics';
|
|
|
63
63
|
export * from './components/seo/googlemap';
|
|
64
64
|
export * from './components/seo/googlesearch';
|
|
65
65
|
export * from './components/seo/metadata'; // server-side
|
|
66
|
+
export * from './components/seo/metadata.components';
|
|
66
67
|
export * from './components/seo/sitemap'; // server-side
|
|
67
68
|
export * from './components/shoppingcart/ebay.components';
|
|
68
69
|
export * from './components/shoppingcart/ebay.functions'; // server-side
|
package/dist/index.server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Server-safe exports only - no client components, no CSS imports, no browser APIs
|
|
2
2
|
// Use this entry point for Next.js server components, API routes, and build-time code
|
|
3
3
|
// Note: Client components (with JSX, CSS imports, browser APIs) are NOT exported here.
|
|
4
|
-
// Import those from the main package entry point: @
|
|
4
|
+
// Import those from the main package entry point: @pixelated-tech/components
|
|
5
5
|
export * from './components/cms/cloudinary';
|
|
6
6
|
export * from './components/cms/contentful.delivery';
|
|
7
7
|
export * from './components/cms/contentful.management';
|
|
@@ -33,3 +33,4 @@ export * from './components/utilities/functions';
|
|
|
33
33
|
// Server-only wrapper exports
|
|
34
34
|
// DO I REALLY NEED THIS?
|
|
35
35
|
export * from './components/config/config.server';
|
|
36
|
+
export * from './components/seo/metadata.components';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import PropTypes, { InferProps } from "prop-types";
|
|
2
|
+
export type generateMetaTagsProps = InferProps<typeof generateMetaTags.propTypes>;
|
|
3
|
+
export declare function generateMetaTags(props: generateMetaTagsProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare namespace generateMetaTags {
|
|
5
|
+
var propTypes: {
|
|
6
|
+
title: PropTypes.Validator<string>;
|
|
7
|
+
description: PropTypes.Validator<string>;
|
|
8
|
+
keywords: PropTypes.Validator<string>;
|
|
9
|
+
site_name: PropTypes.Validator<string>;
|
|
10
|
+
email: PropTypes.Validator<string>;
|
|
11
|
+
origin: PropTypes.Validator<string>;
|
|
12
|
+
url: PropTypes.Validator<string>;
|
|
13
|
+
image: PropTypes.Validator<string>;
|
|
14
|
+
image_height: PropTypes.Validator<string>;
|
|
15
|
+
image_width: PropTypes.Validator<string>;
|
|
16
|
+
favicon: PropTypes.Validator<string>;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export type SetClientMetadataProps = InferProps<typeof setClientMetadata.propTypes>;
|
|
20
|
+
export declare function setClientMetadata(props: SetClientMetadataProps): void;
|
|
21
|
+
export declare namespace setClientMetadata {
|
|
22
|
+
var propTypes: {
|
|
23
|
+
title: PropTypes.Validator<string>;
|
|
24
|
+
description: PropTypes.Validator<string>;
|
|
25
|
+
keywords: PropTypes.Validator<string>;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=metadata.components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.components.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/metadata.components.tsx"],"names":[],"mappings":"AAEA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAkBnD,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAqE5D;yBArEe,gBAAgB;;;;;;;;;;;;;;;AA+EhC,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACpF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,QAQ9D;yBARe,iBAAiB"}
|
|
@@ -10,7 +10,6 @@ export type Route = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare function getRouteByKey(obj: any, key: string, value: any): any;
|
|
12
12
|
export declare function getAllRoutes(routes: Route, key: string): any[];
|
|
13
|
-
export declare function getAllImages(): string[];
|
|
14
13
|
export type Metadata = {
|
|
15
14
|
title?: string;
|
|
16
15
|
description?: string;
|
|
@@ -18,18 +17,5 @@ export type Metadata = {
|
|
|
18
17
|
[key: string]: any;
|
|
19
18
|
};
|
|
20
19
|
export declare const getMetadata: (routes: any, key?: string, value?: string) => Metadata;
|
|
21
|
-
export declare const setClientMetadata: ({ title, description, keywords }: {
|
|
22
|
-
title: string;
|
|
23
|
-
description: string;
|
|
24
|
-
keywords: string;
|
|
25
|
-
}) => void;
|
|
26
|
-
export declare const setServerMetadata: ({ key, value }: {
|
|
27
|
-
key: string;
|
|
28
|
-
value: string;
|
|
29
|
-
}) => {
|
|
30
|
-
title: string | undefined;
|
|
31
|
-
description: string | undefined;
|
|
32
|
-
keywords: string | undefined;
|
|
33
|
-
};
|
|
34
20
|
export declare function getAccordionMenuData(myRoutes: Route): any;
|
|
35
21
|
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/metadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/components/seo/metadata.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,SAAI,EAAE,eAAe,GAAE,MAAM,EAAO,YA0B7G;AAID,MAAM,MAAM,KAAK,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAA;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,CAgBpE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,SAkBtD;AAKD,MAAM,MAAM,QAAQ,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,GAAG,EAAE,MAAK,MAAe,EAAE,QAAO,MAAe,aAmBpF,CAAC;AAIF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,KAAK,OAsBnD"}
|
|
@@ -1,22 +1,83 @@
|
|
|
1
1
|
import PropTypes, { InferProps } from "prop-types";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import type { MetadataRoute } from 'next';
|
|
3
|
+
export type SitemapEntry = MetadataRoute.Sitemap[number];
|
|
4
|
+
export type SitemapConfig = {
|
|
5
|
+
createPageURLs?: boolean;
|
|
6
|
+
createWordPressURLs?: boolean;
|
|
7
|
+
createImageURLs?: boolean;
|
|
8
|
+
createImageURLsFromJSON?: boolean;
|
|
9
|
+
createContentfulURLs?: boolean;
|
|
10
|
+
createContentfulImageURLs?: boolean;
|
|
11
|
+
createPageBuilderURLs?: boolean;
|
|
12
|
+
createEbayItemURLs?: boolean;
|
|
13
|
+
wordpress?: {
|
|
14
|
+
site?: string;
|
|
15
|
+
};
|
|
16
|
+
imageJson?: {
|
|
17
|
+
path?: string;
|
|
18
|
+
};
|
|
19
|
+
contentful?: any;
|
|
20
|
+
routes?: any;
|
|
7
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Helper to construct an origin string from a Next-like headers() object or plain values.
|
|
24
|
+
* Accepts an object with `get(key)` method, or `undefined` and falls back to localhost origin.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getOriginFromHeaders(headersLike?: {
|
|
27
|
+
get: (k: string) => string | null;
|
|
28
|
+
} | undefined, fallbackOrigin?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Next-specific async helper: getOriginFromNextHeaders
|
|
31
|
+
* - Convenience wrapper that dynamically imports `next/headers` and calls our `getOriginFromHeaders` function
|
|
32
|
+
* - Falls back to `fallbackOrigin` if `next/headers` not available or on error
|
|
33
|
+
*/
|
|
34
|
+
export declare function getOriginFromNextHeaders(fallbackOrigin?: string): Promise<string>;
|
|
35
|
+
export declare function flattenRoutes(routes: any): any[];
|
|
36
|
+
export declare function jsonToSitemapEntries(entries: SitemapEntry[]): string;
|
|
37
|
+
/**
|
|
38
|
+
* generateSitemap: compose the individual create* functions based on toggles in SitemapConfig.
|
|
39
|
+
* - Keep this minimal for the MVP: no retries/caching here. Add TODOs for later.
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateSitemap(cfg?: SitemapConfig, originInput?: string): Promise<MetadataRoute.Sitemap>;
|
|
8
42
|
export declare function createPageURLs(myRoutes: {
|
|
9
43
|
path: string;
|
|
10
|
-
}[], origin: string): Promise<
|
|
11
|
-
export declare function createImageURLs(origin: string): Promise<{
|
|
44
|
+
}[], origin: string): Promise<{
|
|
12
45
|
url: string;
|
|
13
|
-
|
|
46
|
+
lastModified?: string | Date | undefined;
|
|
47
|
+
changeFrequency?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never" | undefined;
|
|
48
|
+
priority?: number | undefined;
|
|
49
|
+
alternates?: {
|
|
50
|
+
languages?: import("next/dist/lib/metadata/types/alternative-urls-types").Languages<string> | undefined;
|
|
51
|
+
} | undefined;
|
|
52
|
+
images?: string[] | undefined;
|
|
53
|
+
videos?: import("next/dist/lib/metadata/types/metadata-types").Videos[] | undefined;
|
|
14
54
|
}[]>;
|
|
55
|
+
export declare function createImageURLsFromJSON(origin: string, jsonPath?: string): Promise<SitemapEntry[]>;
|
|
15
56
|
export declare function createWordPressURLs(props: {
|
|
16
57
|
site: string;
|
|
17
|
-
}): Promise<
|
|
58
|
+
}): Promise<{
|
|
59
|
+
url: string;
|
|
60
|
+
lastModified?: string | Date | undefined;
|
|
61
|
+
changeFrequency?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never" | undefined;
|
|
62
|
+
priority?: number | undefined;
|
|
63
|
+
alternates?: {
|
|
64
|
+
languages?: import("next/dist/lib/metadata/types/alternative-urls-types").Languages<string> | undefined;
|
|
65
|
+
} | undefined;
|
|
66
|
+
images?: string[] | undefined;
|
|
67
|
+
videos?: import("next/dist/lib/metadata/types/metadata-types").Videos[] | undefined;
|
|
68
|
+
}[]>;
|
|
18
69
|
export type createContentfulURLsType = InferProps<typeof createContentfulURLs.propTypes>;
|
|
19
|
-
export declare function createContentfulURLs(props: createContentfulURLsType): Promise<
|
|
70
|
+
export declare function createContentfulURLs(props: createContentfulURLsType): Promise<{
|
|
71
|
+
url: string;
|
|
72
|
+
lastModified?: string | Date | undefined;
|
|
73
|
+
changeFrequency?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never" | undefined;
|
|
74
|
+
priority?: number | undefined;
|
|
75
|
+
alternates?: {
|
|
76
|
+
languages?: import("next/dist/lib/metadata/types/alternative-urls-types").Languages<string> | undefined;
|
|
77
|
+
} | undefined;
|
|
78
|
+
images?: string[] | undefined;
|
|
79
|
+
videos?: import("next/dist/lib/metadata/types/metadata-types").Videos[] | undefined;
|
|
80
|
+
}[]>;
|
|
20
81
|
export declare namespace createContentfulURLs {
|
|
21
82
|
var propTypes: {
|
|
22
83
|
apiProps: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
@@ -29,7 +90,17 @@ export declare namespace createContentfulURLs {
|
|
|
29
90
|
};
|
|
30
91
|
}
|
|
31
92
|
export type createContentfulPageBuilderURLsType = InferProps<typeof createContentfulPageBuilderURLs.propTypes>;
|
|
32
|
-
export declare function createContentfulPageBuilderURLs(props: createContentfulPageBuilderURLsType): Promise<
|
|
93
|
+
export declare function createContentfulPageBuilderURLs(props: createContentfulPageBuilderURLsType): Promise<{
|
|
94
|
+
url: string;
|
|
95
|
+
lastModified?: string | Date | undefined;
|
|
96
|
+
changeFrequency?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never" | undefined;
|
|
97
|
+
priority?: number | undefined;
|
|
98
|
+
alternates?: {
|
|
99
|
+
languages?: import("next/dist/lib/metadata/types/alternative-urls-types").Languages<string> | undefined;
|
|
100
|
+
} | undefined;
|
|
101
|
+
images?: string[] | undefined;
|
|
102
|
+
videos?: import("next/dist/lib/metadata/types/metadata-types").Videos[] | undefined;
|
|
103
|
+
}[]>;
|
|
33
104
|
export declare namespace createContentfulPageBuilderURLs {
|
|
34
105
|
var propTypes: {
|
|
35
106
|
apiProps: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
@@ -41,7 +112,29 @@ export declare namespace createContentfulPageBuilderURLs {
|
|
|
41
112
|
origin: PropTypes.Validator<string>;
|
|
42
113
|
};
|
|
43
114
|
}
|
|
44
|
-
export
|
|
45
|
-
export declare function
|
|
46
|
-
export declare
|
|
115
|
+
export type createContentfulImageURLsType = InferProps<typeof createContentfulImageURLs.propTypes>;
|
|
116
|
+
export declare function createContentfulImageURLs(props: createContentfulImageURLsType): Promise<SitemapEntry[]>;
|
|
117
|
+
export declare namespace createContentfulImageURLs {
|
|
118
|
+
var propTypes: {
|
|
119
|
+
apiProps: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
|
|
120
|
+
proxyURL: PropTypes.Requireable<string>;
|
|
121
|
+
base_url: PropTypes.Validator<string>;
|
|
122
|
+
space_id: PropTypes.Validator<string>;
|
|
123
|
+
environment: PropTypes.Validator<string>;
|
|
124
|
+
access_token: PropTypes.Validator<string>;
|
|
125
|
+
}>>>;
|
|
126
|
+
origin: PropTypes.Validator<string>;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export declare function createEbayItemURLs(origin: string): Promise<{
|
|
130
|
+
url: string;
|
|
131
|
+
lastModified?: string | Date | undefined;
|
|
132
|
+
changeFrequency?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never" | undefined;
|
|
133
|
+
priority?: number | undefined;
|
|
134
|
+
alternates?: {
|
|
135
|
+
languages?: import("next/dist/lib/metadata/types/alternative-urls-types").Languages<string> | undefined;
|
|
136
|
+
} | undefined;
|
|
137
|
+
images?: string[] | undefined;
|
|
138
|
+
videos?: import("next/dist/lib/metadata/types/metadata-types").Videos[] | undefined;
|
|
139
|
+
}[]>;
|
|
47
140
|
//# sourceMappingURL=sitemap.d.ts.map
|
|
@@ -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;
|
|
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,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,CAkEnH;AAKD,wBAAsB,cAAc,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,MAAM,EAAE,MAAM;;;;;;iBA+MmtL,CAAC;;;;KAhMpyL;AAMD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAA4B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAuB3H;AAKD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC;;;;;;iBA8JquL,CAAC;;;;KAlJpyL;AAaD,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzF,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,wBAAwB;;;;;;iBAoI0tL,CAAC;;;;KA/GpyL;yBArBqB,oBAAoB;;;;;;;;;;;AAkC1C,MAAM,MAAM,mCAAmC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,SAAS,CAAC,CAAC;AAC/G,wBAAsB,+BAA+B,CAAC,KAAK,EAAE,mCAAmC;;;;;;iBAiGosL,CAAC;;;;KAjFpyL;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,CAsB7G;yBAtBqB,yBAAyB;;;;;;;;;;;;AAyC/C,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM;;;;;;iBAuB6uL,CAAC;;;;KANpyL"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export * from "./components/seo/googleanalytics";
|
|
|
61
61
|
export * from "./components/seo/googlemap";
|
|
62
62
|
export * from "./components/seo/googlesearch";
|
|
63
63
|
export * from "./components/seo/metadata";
|
|
64
|
+
export * from "./components/seo/metadata.components";
|
|
64
65
|
export * from "./components/seo/sitemap";
|
|
65
66
|
export * from "./components/shoppingcart/ebay.components";
|
|
66
67
|
export * from "./components/shoppingcart/ebay.functions";
|
|
@@ -27,4 +27,5 @@ export * from "./components/shoppingcart/shoppingcart.functions";
|
|
|
27
27
|
export * from "./components/utilities/api";
|
|
28
28
|
export * from "./components/utilities/functions";
|
|
29
29
|
export * from "./components/config/config.server";
|
|
30
|
+
export * from "./components/seo/metadata.components";
|
|
30
31
|
//# sourceMappingURL=index.server.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,136 +1,138 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
2
|
+
"name": "@pixelated-tech/components",
|
|
3
|
+
"version": "3.1.6",
|
|
4
|
+
"private": false,
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Pixelated Technologies",
|
|
7
|
+
"url": "https://www.pixelated.tech/"
|
|
8
|
+
},
|
|
9
|
+
"description": "Pixelated UI Components",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"module": "./dist/index.js",
|
|
13
|
+
"types": "./dist/types/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"directories": {
|
|
18
|
+
"doc": "docs"
|
|
19
|
+
},
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/types/index.d.ts",
|
|
23
|
+
"import": "./dist/index.js",
|
|
24
|
+
"require": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./server": {
|
|
27
|
+
"types": "./dist/types/index.server.d.ts",
|
|
28
|
+
"import": "./dist/index.server.js",
|
|
29
|
+
"default": "./dist/index.server.js"
|
|
30
|
+
},
|
|
31
|
+
"./css/*": "./dist/css/*"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/brianwhaley/pixelated-components#readme",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/brianwhaley/pixelated-components/issues"
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/brianwhaley/pixelated-components.git"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"registry": "https://registry.npmjs.org",
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"browser": {
|
|
46
|
+
"fs": false,
|
|
47
|
+
"path": false
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "npm run validate-exports && npm run buildClean && npm run tsc && npm run rsync && npm run tscClean ",
|
|
51
|
+
"build-webpack": "webpack --config webpack.config.cjs && tsc --emitDeclarationOnly --outDir dist/types",
|
|
52
|
+
"buildClean": "rm -r dist ",
|
|
53
|
+
"tsc": "npx tsc --project tsconfig.json",
|
|
54
|
+
"tscClean": "rm -r dist/{images,stories,tests} ",
|
|
55
|
+
"rsync": "rsync -a --include='*.css' --include='*.scss' --include='*/' --exclude='*' src/ dist",
|
|
56
|
+
"validate-exports": "node scripts/validate-exports.cjs",
|
|
57
|
+
"build2brianwhaley": "npm run build && rm -rf ../brianwhaley/node_modules/@pixelated-tech/components/dist && cp -r dist ../brianwhaley/node_modules/@pixelated-tech/components/",
|
|
58
|
+
"build2informationfocus": "npm run build && rm -rf ../informationfocus/node_modules/@pixelated-tech/components/dist && cp -r dist ../informationfocus/node_modules/@pixelated-tech/components/",
|
|
59
|
+
"build2oaktreelandscaping": "npm run build && rm -rf ../oaktreelandscaping/node_modules/@pixelated-tech/components/dist && cp -r dist ../oaktreelandscaping/node_modules/@pixelated-tech/components/",
|
|
60
|
+
"build2palmettoepoxy": "npm run build && rm -rf ../palmetto-epoxy/node_modules/@pixelated-tech/components/dist && cp -r dist ../palmetto-epoxy/node_modules/@pixelated-tech/components/",
|
|
61
|
+
"build2pixelated": "npm run build && rm -rf ../pixelated/node_modules/@pixelated-tech/components/dist && cp -r dist ../pixelated/node_modules/@pixelated-tech/components/",
|
|
62
|
+
"build2pixelvivid": "npm run build && rm -rf ../pixelvivid/node_modules/@pixelated-tech/components/dist && cp -r dist ../pixelvivid/node_modules/@pixelated-tech/components/",
|
|
63
|
+
"build2template": "npm run build && rm -rf ../pixelated-template/node_modules/@pixelated-tech/components/dist && cp -r dist ../pixelated-template/node_modules/@pixelated-tech/components/",
|
|
64
|
+
"storybook": "rm -rf node_modules/.cache && storybook dev -p 6006",
|
|
65
|
+
"buildStorybook": "rm -rf node_modules/.cache && storybook build",
|
|
66
|
+
"test": "react-scripts test"
|
|
67
|
+
},
|
|
68
|
+
"scripts-old": {
|
|
69
|
+
"buildBabel": "npm run buildClean && NODE_ENV=production babel src --out-dir dist --copy-files",
|
|
70
|
+
"build-webpack": "rm -rf dist && npx tsc --project tsconfig.json && webpack --config webpack.config.js && npm run build-webpack-rsync",
|
|
71
|
+
"build-webpack-rsync": "rsync -a --include='*' --include='*/' src/css dist/css"
|
|
72
|
+
},
|
|
73
|
+
"dependencies": {
|
|
74
|
+
"date-fns": "^4.1.0",
|
|
75
|
+
"globals": "^16.5.0"
|
|
76
|
+
},
|
|
77
|
+
"devDependencies": {
|
|
78
|
+
"@babel/cli": "^7.28.3",
|
|
79
|
+
"@babel/core": "^7.28.5",
|
|
80
|
+
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
81
|
+
"@babel/plugin-proposal-object-rest-spread": "^7.20.7",
|
|
82
|
+
"@babel/preset-env": "^7.28.5",
|
|
83
|
+
"@babel/preset-react": "^7.28.5",
|
|
84
|
+
"@babel/preset-typescript": "^7.28.5",
|
|
85
|
+
"@eslint/json": "^0.14.0",
|
|
86
|
+
"@eslint/markdown": "^7.5.1",
|
|
87
|
+
"@storybook/addon-webpack5-compiler-babel": "^4.0.0",
|
|
88
|
+
"@storybook/preset-scss": "^1.0.3",
|
|
89
|
+
"@storybook/react-webpack5": "^10.1.4",
|
|
90
|
+
"@types/md5": "^2.3.6",
|
|
91
|
+
"@types/node": "^24.10.1",
|
|
92
|
+
"@types/prop-types": "^15.7.15",
|
|
93
|
+
"@types/react": "^19.2.7",
|
|
94
|
+
"@types/react-dom": "^19.2.3",
|
|
95
|
+
"@typescript-eslint/eslint-plugin": "^8.48.1",
|
|
96
|
+
"ajv": "^8.17.1",
|
|
97
|
+
"ajv-keywords": "^5.1.0",
|
|
98
|
+
"babel-loader": "^10.0.0",
|
|
99
|
+
"clean-webpack-plugin": "^4.0.0",
|
|
100
|
+
"copy-webpack-plugin": "^13.0.1",
|
|
101
|
+
"css-loader": "^7.1.2",
|
|
102
|
+
"eslint": "^9.39.1",
|
|
103
|
+
"eslint-config-standard": "^17.0.0",
|
|
104
|
+
"eslint-plugin-import": "^2.32.0",
|
|
105
|
+
"eslint-plugin-n": "^17.23.1",
|
|
106
|
+
"eslint-plugin-promise": "^7.2.1",
|
|
107
|
+
"eslint-plugin-react": "^7.37.4",
|
|
108
|
+
"eslint-plugin-storybook": "^10.1.4",
|
|
109
|
+
"file-loader": "^6.2.0",
|
|
110
|
+
"less-loader": "^12.3.0",
|
|
111
|
+
"mini-css-extract-plugin": "^2.9.4",
|
|
112
|
+
"next": "^16.0.6",
|
|
113
|
+
"null-loader": "^4.0.1",
|
|
114
|
+
"prop-types": "^15.8.1",
|
|
115
|
+
"react": "^19.2.1",
|
|
116
|
+
"react-dom": "^19.2.1",
|
|
117
|
+
"sass": "^1.94.2",
|
|
118
|
+
"sass-loader": "^16.0.6",
|
|
119
|
+
"storybook": "^10.1.4",
|
|
120
|
+
"style-loader": "^4.0.0",
|
|
121
|
+
"ts-loader": "^9.5.4",
|
|
122
|
+
"typescript": "^5.9.3",
|
|
123
|
+
"url-loader": "^4.1.1",
|
|
124
|
+
"webpack": "^5.103.0",
|
|
125
|
+
"webpack-cli": "^6.0.1",
|
|
126
|
+
"webpack-dev-server": "^5.2.2",
|
|
127
|
+
"webpack-node-externals": "^3.0.0"
|
|
128
|
+
},
|
|
129
|
+
"peerDependencies": {
|
|
130
|
+
"next": "^16.0.3",
|
|
131
|
+
"react": "^19.2.0",
|
|
132
|
+
"react-dom": "^19.2.0"
|
|
133
|
+
},
|
|
134
|
+
"optionalDependencies": {
|
|
135
|
+
"md5": "^2.3.0"
|
|
136
|
+
},
|
|
137
|
+
"type": "module"
|
|
136
138
|
}
|