@pixelated-tech/components 3.7.4 → 3.7.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/dist/components/general/google.reviews.components.js +2 -1
- package/dist/components/general/menu-expando.js +2 -1
- package/dist/components/general/proxy-handler.js +57 -0
- package/dist/components/general/smartimage.js +3 -1
- package/dist/components/shoppingcart/shoppingcart.components.js +1 -1
- package/dist/components/sitebuilder/form/form.css +81 -0
- package/dist/components/sitebuilder/form/formcomponents.js +86 -0
- package/dist/components/utilities/functions.js +1 -0
- package/dist/data/form.json +12 -0
- package/dist/index.server.js +1 -0
- package/dist/scripts/{proptypes-inferprops.js → pixelated-eslint-plugin.js} +238 -3
- package/dist/types/components/general/google.reviews.components.d.ts.map +1 -1
- package/dist/types/components/general/menu-expando.d.ts.map +1 -1
- package/dist/types/components/general/proxy-handler.d.ts +20 -0
- package/dist/types/components/general/proxy-handler.d.ts.map +1 -0
- package/dist/types/components/general/smartimage.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts +21 -0
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts.map +1 -1
- package/dist/types/components/utilities/functions.d.ts.map +1 -1
- package/dist/types/index.server.d.ts +1 -0
- package/dist/types/scripts/pixelated-eslint-plugin.d.ts +117 -0
- package/dist/types/scripts/pixelated-eslint-plugin.d.ts.map +1 -0
- package/dist/types/stories/general/splitscroll.stories.d.ts +3 -3
- package/dist/types/tests/proxy-handler.test.d.ts +2 -0
- package/dist/types/tests/proxy-handler.test.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/types/scripts/proptypes-inferprops.d.ts +0 -28
- package/dist/types/scripts/proptypes-inferprops.d.ts.map +0 -1
- package/dist/types/stories/lookbook/lookbook.stories.d.ts +0 -19
- package/dist/types/stories/lookbook/lookbook.stories.d.ts.map +0 -1
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useEffect } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
+
import { SmartImage } from './smartimage';
|
|
5
6
|
import { getGoogleReviewsByPlaceId } from './google.reviews.functions';
|
|
6
7
|
import './google.reviews.css';
|
|
7
8
|
const GOOGLE_MAPS_API_KEY = 'AIzaSyBtknq7LHzN0xb0lIN3K0CXXf0swVp6ReA';
|
|
@@ -50,5 +51,5 @@ export function GoogleReviewsCard(props) {
|
|
|
50
51
|
if (error) {
|
|
51
52
|
return (_jsx("div", { className: "google-reviews-card", children: _jsxs("p", { className: "error", children: ["Error: ", error] }) }));
|
|
52
53
|
}
|
|
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(
|
|
54
|
+
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(SmartImage, { 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
55
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
+
import { SmartImage } from './smartimage';
|
|
5
6
|
import './menu-expando.css';
|
|
6
7
|
MenuExpando.propTypes = {
|
|
7
8
|
menuItems: PropTypes.oneOfType([
|
|
@@ -145,5 +146,5 @@ export function MenuExpandoButton(props) {
|
|
|
145
146
|
handleMenuExpandoButtonClick(event);
|
|
146
147
|
}
|
|
147
148
|
}
|
|
148
|
-
return (_jsx("div", { className: "menuExpandoButton", id: "menuExpandoButton", onClick: handleMenuExpandoButtonClick, onKeyDown: handleKeyDown, tabIndex: 0, role: "button", "aria-label": "Toggle mobile menu", children: _jsx(
|
|
149
|
+
return (_jsx("div", { className: "menuExpandoButton", id: "menuExpandoButton", onClick: handleMenuExpandoButtonClick, onKeyDown: handleKeyDown, tabIndex: 0, role: "button", "aria-label": "Toggle mobile menu", children: _jsx(SmartImage, { src: "/images/icons/mobile-menu2.png", title: "Mobile Menu", alt: "Mobile Menu" }) }));
|
|
149
150
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
/**
|
|
3
|
+
* handlePixelatedProxy
|
|
4
|
+
*
|
|
5
|
+
* A centralized middleware handler for all Pixelated Technology sites.
|
|
6
|
+
* Manages standard headers (x-path, x-url) and enforces a robust Security Policy.
|
|
7
|
+
*
|
|
8
|
+
* TODO: Future enhancement - Accept an options object to allow per-site CSP overrides,
|
|
9
|
+
* enabling/disabling specific permissions (e.g., camera access), or setting custom rate limits.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* STANDARD_PROXY_MATCHER
|
|
13
|
+
*
|
|
14
|
+
* A statically analyzable matcher array for Next.js middleware.
|
|
15
|
+
* Excludes static assets, images, API routes, and favicons from proxy processing.
|
|
16
|
+
*/
|
|
17
|
+
export const STANDARD_PROXY_MATCHER = ["/((?!_next/image|_next/static|api|favicon.ico).*)"];
|
|
18
|
+
export function handlePixelatedProxy(req) {
|
|
19
|
+
const path = req.nextUrl.pathname + (req.nextUrl.search || "");
|
|
20
|
+
const origin = req.nextUrl?.origin ?? new URL(req.url).origin;
|
|
21
|
+
const url = req.nextUrl?.href ?? req.url ?? `${origin}${path}`;
|
|
22
|
+
const requestHeaders = new Headers(req.headers);
|
|
23
|
+
requestHeaders.set("x-path", path);
|
|
24
|
+
requestHeaders.set("x-origin", String(origin));
|
|
25
|
+
requestHeaders.set("x-url", String(url));
|
|
26
|
+
const response = NextResponse.next({
|
|
27
|
+
request: {
|
|
28
|
+
headers: requestHeaders,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
// --- Security Headers ---
|
|
32
|
+
// HSTS: Force HTTPS for 1 year
|
|
33
|
+
response.headers.set("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload");
|
|
34
|
+
// Clickjacking Protection
|
|
35
|
+
response.headers.set("X-Frame-Options", "DENY");
|
|
36
|
+
// MIME-Sniffing Protection
|
|
37
|
+
response.headers.set("X-Content-Type-Options", "nosniff");
|
|
38
|
+
// Referrer Policy
|
|
39
|
+
response.headers.set("Referrer-Policy", "strict-origin-when-cross-origin");
|
|
40
|
+
// Permissions Policy: Lock down hardware access
|
|
41
|
+
response.headers.set("Permissions-Policy", "camera=(), microphone=(), geolocation=(), interest-cohort=()");
|
|
42
|
+
// Content Security Policy (CSP)
|
|
43
|
+
// Includes all discovered domains in the workspace: HubSpot, Gravatar, Flickr, Contentful, Cloudinary, eBay, and Google Analytics + Search.
|
|
44
|
+
const csp = [
|
|
45
|
+
"default-src 'self'",
|
|
46
|
+
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com https://*.googletagmanager.com https://*.hs-scripts.com https://*.hs-analytics.net https://*.hsforms.net https://*.hscollectedforms.net https://*.hs-banner.com https://*.google.com https://*.doubleclick.net https://*.googleadservices.com https://*.adtrafficquality.google https://*.hsappstatic.net https://assets.calendly.com",
|
|
47
|
+
"connect-src 'self' https: https://*.hubspot.com https://proxy.pixelated.tech https://sendmail.pixelated.tech https://*.google-analytics.com https://*.analytics.google.com",
|
|
48
|
+
"img-src 'self' data: https: https://*.gravatar.com https://*.staticflickr.com https://*.ctfassets.net https://res.cloudinary.com https://*.ebayimg.com",
|
|
49
|
+
"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://*.google.com",
|
|
50
|
+
"font-src 'self' data: https://fonts.gstatic.com",
|
|
51
|
+
"frame-src 'self' https://*.hubspot.com https://*.googletagmanager.com https://*.adtrafficquality.google https://*.google.com https://calendly.com https://*.calendly.com https://*.hsforms.net",
|
|
52
|
+
"frame-ancestors 'none'",
|
|
53
|
+
"object-src 'none'",
|
|
54
|
+
].join("; ");
|
|
55
|
+
response.headers.set("Content-Security-Policy", csp);
|
|
56
|
+
return response;
|
|
57
|
+
}
|
|
@@ -163,5 +163,7 @@ export function SmartImage(props) {
|
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
/* ===== IMG VARIANT ===== */
|
|
166
|
-
return (
|
|
166
|
+
return (
|
|
167
|
+
/* eslint-disable-next-line pixelated/no-raw-img */
|
|
168
|
+
_jsx("img", { ...newProps, ref: imgRef, alt: newProps.alt }));
|
|
167
169
|
}
|
|
@@ -173,7 +173,7 @@ export function ShoppingCartItem(props) {
|
|
|
173
173
|
const thisItemTarget = "_self"; // "_blank"
|
|
174
174
|
const config = usePixelatedConfig();
|
|
175
175
|
return (_jsxs("div", { className: "pixCartItem row-12col", children: [_jsx("div", { className: "pixCartItemPhoto grid-s1-e4", children: thisItem.itemURL && thisItem.itemImageURL
|
|
176
|
-
? _jsx("a", { href: thisItem.itemURL, target: thisItemTarget, rel: "noopener noreferrer", children: _jsx(
|
|
176
|
+
? _jsx("a", { href: thisItem.itemURL, target: thisItemTarget, rel: "noopener noreferrer", children: _jsx(SmartImage, { src: thisItem.itemImageURL, alt: thisItem.itemTitle, cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }) })
|
|
177
177
|
: thisItem.itemImageURL
|
|
178
178
|
? (
|
|
179
179
|
/* <img src={thisItem.itemImageURL} title={thisItem.itemTitle} alt={thisItem.itemTitle} /> */
|
|
@@ -123,4 +123,85 @@ form span {
|
|
|
123
123
|
|
|
124
124
|
.tooltip-text-item:last-child {
|
|
125
125
|
margin-bottom: 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* ========================================
|
|
129
|
+
============= TAG INPUT ============
|
|
130
|
+
======================================== */
|
|
131
|
+
|
|
132
|
+
.form-tag-input {
|
|
133
|
+
margin: 5px 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.tag-container {
|
|
137
|
+
display: flex;
|
|
138
|
+
flex-wrap: wrap;
|
|
139
|
+
align-items: center;
|
|
140
|
+
min-height: 40px;
|
|
141
|
+
padding: 5px;
|
|
142
|
+
border: 1px solid #CCC;
|
|
143
|
+
border-radius: 5px;
|
|
144
|
+
background-color: #FFF;
|
|
145
|
+
gap: 5px;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.tag-container:focus-within {
|
|
149
|
+
border-color: #0C0;
|
|
150
|
+
box-shadow: 0 0 5px 2px #CCC;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.tag-chip {
|
|
154
|
+
display: inline-flex;
|
|
155
|
+
align-items: center;
|
|
156
|
+
background-color: #eee;
|
|
157
|
+
padding: 4px 8px;
|
|
158
|
+
border-radius: 10px;
|
|
159
|
+
border: 1px solid #bbb;
|
|
160
|
+
white-space: nowrap;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.tag-remove {
|
|
164
|
+
background: none;
|
|
165
|
+
border: none;
|
|
166
|
+
color: #1565c0;
|
|
167
|
+
cursor: pointer;
|
|
168
|
+
font-size: 1.2em;
|
|
169
|
+
line-height: 1;
|
|
170
|
+
padding: 0;
|
|
171
|
+
margin-left: 4px;
|
|
172
|
+
border-radius: 50%;
|
|
173
|
+
width: 16px;
|
|
174
|
+
height: 16px;
|
|
175
|
+
display: flex;
|
|
176
|
+
align-items: center;
|
|
177
|
+
justify-content: center;
|
|
178
|
+
transition: background-color 0.2s;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.tag-remove:hover {
|
|
182
|
+
background-color: rgba(21, 101, 192, 0.1);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.tag-remove:disabled {
|
|
186
|
+
cursor: not-allowed;
|
|
187
|
+
opacity: 0.5;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.tag-input {
|
|
191
|
+
flex: 1;
|
|
192
|
+
min-width: 120px;
|
|
193
|
+
border: none;
|
|
194
|
+
outline: none;
|
|
195
|
+
padding: 4px 8px;
|
|
196
|
+
font-size: 1.1em;
|
|
197
|
+
font-family: Verdana, Geneva, sans-serif;
|
|
198
|
+
background: transparent;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.tag-input:focus {
|
|
202
|
+
outline: none;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.tag-input::placeholder {
|
|
206
|
+
color: #999;
|
|
126
207
|
}
|
|
@@ -372,6 +372,92 @@ export function FormDataList(props) {
|
|
|
372
372
|
}
|
|
373
373
|
return (_jsx("datalist", { id: props.id, children: options }));
|
|
374
374
|
}
|
|
375
|
+
FormTagInput.propTypes = {
|
|
376
|
+
id: PropTypes.string.isRequired,
|
|
377
|
+
name: PropTypes.string,
|
|
378
|
+
defaultValue: PropTypes.arrayOf(PropTypes.string),
|
|
379
|
+
value: PropTypes.arrayOf(PropTypes.string),
|
|
380
|
+
placeholder: PropTypes.string,
|
|
381
|
+
autoComplete: PropTypes.string,
|
|
382
|
+
// flag attributes
|
|
383
|
+
disabled: PropTypes.string,
|
|
384
|
+
readOnly: PropTypes.string,
|
|
385
|
+
required: PropTypes.string,
|
|
386
|
+
// ----- for calculations
|
|
387
|
+
display: PropTypes.string,
|
|
388
|
+
label: PropTypes.string,
|
|
389
|
+
tooltip: PropTypes.string,
|
|
390
|
+
className: PropTypes.string,
|
|
391
|
+
validate: PropTypes.string,
|
|
392
|
+
onChange: PropTypes.func,
|
|
393
|
+
};
|
|
394
|
+
export function FormTagInput(props) {
|
|
395
|
+
const [inputValue, setInputValue] = useState('');
|
|
396
|
+
const [internalTags, setInternalTags] = useState(Array.isArray(props.defaultValue) ? props.defaultValue.filter((tag) => tag != null) : []);
|
|
397
|
+
const { formValidate, handleBlur } = useFormComponent(props);
|
|
398
|
+
const { validateField } = useFormValidation();
|
|
399
|
+
// Determine if component is controlled or uncontrolled
|
|
400
|
+
const isControlled = props.value !== undefined;
|
|
401
|
+
// Get current tags array - use props.value if controlled, otherwise internal state
|
|
402
|
+
const currentTags = isControlled
|
|
403
|
+
? (Array.isArray(props.value) ? props.value.filter((tag) => tag != null) : [])
|
|
404
|
+
: internalTags;
|
|
405
|
+
// Handle adding a new tag
|
|
406
|
+
const addTag = (tag) => {
|
|
407
|
+
const trimmedTag = tag.trim();
|
|
408
|
+
if (trimmedTag && !currentTags.includes(trimmedTag)) {
|
|
409
|
+
const newTags = [...currentTags, trimmedTag];
|
|
410
|
+
// Always call onChange if provided (for external updates)
|
|
411
|
+
if (props.onChange) {
|
|
412
|
+
props.onChange(newTags);
|
|
413
|
+
}
|
|
414
|
+
if (!isControlled) {
|
|
415
|
+
// Uncontrolled mode: update internal state
|
|
416
|
+
setInternalTags(newTags);
|
|
417
|
+
}
|
|
418
|
+
// Trigger form validation
|
|
419
|
+
if (props.id) {
|
|
420
|
+
validateField(props.id, true, []);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
setInputValue('');
|
|
424
|
+
};
|
|
425
|
+
// Handle removing a tag
|
|
426
|
+
const removeTag = (tagToRemove) => {
|
|
427
|
+
const newTags = currentTags.filter(tag => tag !== tagToRemove);
|
|
428
|
+
// Always call onChange if provided (for external updates)
|
|
429
|
+
if (props.onChange) {
|
|
430
|
+
props.onChange(newTags);
|
|
431
|
+
}
|
|
432
|
+
if (!isControlled) {
|
|
433
|
+
// Uncontrolled mode: update internal state
|
|
434
|
+
setInternalTags(newTags);
|
|
435
|
+
}
|
|
436
|
+
// Trigger form validation
|
|
437
|
+
if (props.id) {
|
|
438
|
+
validateField(props.id, true, []);
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
// Handle input key events
|
|
442
|
+
const handleKeyDown = (event) => {
|
|
443
|
+
if (event.key === 'Enter' || event.key === ',') {
|
|
444
|
+
event.preventDefault();
|
|
445
|
+
addTag(inputValue);
|
|
446
|
+
}
|
|
447
|
+
else if (event.key === 'Backspace' && inputValue === '' && currentTags.length > 0) {
|
|
448
|
+
// Remove last tag on backspace when input is empty
|
|
449
|
+
const lastTag = currentTags[currentTags.length - 1];
|
|
450
|
+
if (lastTag) {
|
|
451
|
+
removeTag(lastTag);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
// Handle input change
|
|
456
|
+
const handleInputChange = (event) => {
|
|
457
|
+
setInputValue(event.target.value);
|
|
458
|
+
};
|
|
459
|
+
return (_jsxs("div", { className: `form-tag-input ${props.className || ''}`, children: [_jsx(FormLabel, { id: props.id, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display === "vertical" ? formValidate : "", _jsxs("div", { className: "tag-container", children: [currentTags.map((tag, index) => (_jsxs("span", { className: "tag-chip", children: [tag, _jsx("button", { type: "button", className: "tag-remove", onClick: () => removeTag(tag), "aria-label": `Remove ${tag}`, disabled: props.disabled === 'disabled', children: "\u00D7" })] }, index))), _jsx("input", { type: "text", id: props.id, name: props.name || undefined, value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, placeholder: props.placeholder || "Add tag...", autoComplete: props.autoComplete || undefined, disabled: props.disabled === 'disabled', readOnly: props.readOnly === 'readOnly', required: props.required === 'required', className: "tag-input", "aria-label": "Add new tag" })] }), props.display !== "vertical" ? formValidate : ""] }));
|
|
460
|
+
}
|
|
375
461
|
FormFieldset.propTypes = {};
|
|
376
462
|
export function FormFieldset(props) {
|
|
377
463
|
return (_jsx(_Fragment, {}));
|
|
@@ -201,6 +201,7 @@ export const SERVER_ONLY_PATTERNS = [
|
|
|
201
201
|
/\bfs\.readFileSync\b/,
|
|
202
202
|
/\bfs\.existsSync\b/,
|
|
203
203
|
/\bimport.*googleapis\b|\brequire.*googleapis\b/, // Actual import of googleapis
|
|
204
|
+
/\bimport.*next\/server\b|\brequire.*next\/server\b/, // Actual import of next/server
|
|
204
205
|
/\bimport.*path\b|\brequire.*path\b/, // Actual import of path module
|
|
205
206
|
/\bprocess\.cwd\(\)/,
|
|
206
207
|
/\brequire\.resolve\b/,
|
package/dist/data/form.json
CHANGED
|
@@ -358,6 +358,18 @@
|
|
|
358
358
|
"tooltip": "Please enter your comments"
|
|
359
359
|
}
|
|
360
360
|
},
|
|
361
|
+
{
|
|
362
|
+
"component" : "FormTagInput",
|
|
363
|
+
"props" : {
|
|
364
|
+
"id" : "tags",
|
|
365
|
+
"name" : "tags",
|
|
366
|
+
"defaultValue" : ["react", "javascript"],
|
|
367
|
+
"display" : "horizontal",
|
|
368
|
+
"label" : "Tags : ",
|
|
369
|
+
"placeholder" : "Add tags...",
|
|
370
|
+
"tooltip" : "Add tags by typing and pressing Enter or comma"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
361
373
|
{
|
|
362
374
|
"component" : "FormButton",
|
|
363
375
|
"props" : {
|
package/dist/index.server.js
CHANGED
|
@@ -18,6 +18,7 @@ export * from './components/general/gravatar.functions';
|
|
|
18
18
|
export * from './components/general/instagram.functions';
|
|
19
19
|
export * from './components/general/manifest';
|
|
20
20
|
export * from './components/general/metadata.functions';
|
|
21
|
+
export * from './components/general/proxy-handler';
|
|
21
22
|
export * from './components/general/resume';
|
|
22
23
|
export * from './components/general/schema-blogposting';
|
|
23
24
|
export * from './components/general/schema-blogposting.functions';
|
|
@@ -1,6 +1,45 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Pixelated ESLint Plugin
|
|
6
|
+
* Enforces workspace standards for SEO, performance, and project structure.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/* ===== CLIENT COMPONENT DETECTION (Copied from functions.ts for standalone usage) ===== */
|
|
10
|
+
const CLIENT_ONLY_PATTERNS = [
|
|
11
|
+
/\baddEventListener\b/,
|
|
12
|
+
/\bcreateContext\b/,
|
|
13
|
+
/\bdocument\./,
|
|
14
|
+
/\blocalStorage\b/,
|
|
15
|
+
/\bnavigator\./,
|
|
16
|
+
/\bonBlur\b/,
|
|
17
|
+
/\bonChange\b/,
|
|
18
|
+
/\bonClick\b/,
|
|
19
|
+
/\bonFocus\b/,
|
|
20
|
+
/\bonInput\b/,
|
|
21
|
+
/\bonKey\b/,
|
|
22
|
+
/\bonMouse\b/,
|
|
23
|
+
/\bonSubmit\b/,
|
|
24
|
+
/\bremoveEventListener\b/,
|
|
25
|
+
/\bsessionStorage\b/,
|
|
26
|
+
/\buseCallback\b/,
|
|
27
|
+
/\buseContext\b/,
|
|
28
|
+
/\buseEffect\b/,
|
|
29
|
+
/\buseLayoutEffect\b/,
|
|
30
|
+
/\buseMemo\b/,
|
|
31
|
+
/\buseReducer\b/,
|
|
32
|
+
/\buseRef\b/,
|
|
33
|
+
/\buseState\b/,
|
|
34
|
+
/\bwindow\./,
|
|
35
|
+
/["']use client["']/ // Client directive
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
function isClientComponent(fileContent) {
|
|
39
|
+
return CLIENT_ONLY_PATTERNS.some(pattern => pattern.test(fileContent));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const propTypesInferPropsRule = {
|
|
4
43
|
meta: {
|
|
5
44
|
type: 'problem',
|
|
6
45
|
docs: {
|
|
@@ -202,4 +241,200 @@ export default {
|
|
|
202
241
|
},
|
|
203
242
|
};
|
|
204
243
|
},
|
|
205
|
-
};
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
const requiredSchemasRule = {
|
|
247
|
+
meta: {
|
|
248
|
+
type: 'suggestion',
|
|
249
|
+
docs: {
|
|
250
|
+
description: 'Ensure required SEO schemas are present in layout.tsx',
|
|
251
|
+
category: 'SEO',
|
|
252
|
+
recommended: true,
|
|
253
|
+
},
|
|
254
|
+
messages: {
|
|
255
|
+
missingSchema: 'Required SEO Schema "{{schemaName}}" is missing from layout.tsx.',
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
create(context) {
|
|
259
|
+
if (!context.getFilename().endsWith('layout.tsx')) return {};
|
|
260
|
+
|
|
261
|
+
const requiredSchemas = ['WebsiteSchema', 'LocalBusinessSchema', 'ServicesSchema'];
|
|
262
|
+
const foundSchemas = new Set();
|
|
263
|
+
|
|
264
|
+
return {
|
|
265
|
+
JSXIdentifier(node) {
|
|
266
|
+
if (requiredSchemas.includes(node.name)) {
|
|
267
|
+
foundSchemas.add(node.name);
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
'Program:exit'() {
|
|
271
|
+
requiredSchemas.forEach(schema => {
|
|
272
|
+
if (!foundSchemas.has(schema)) {
|
|
273
|
+
context.report({
|
|
274
|
+
loc: { line: 1, column: 0 },
|
|
275
|
+
messageId: 'missingSchema',
|
|
276
|
+
data: { schemaName: schema },
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
},
|
|
281
|
+
};
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
const requiredFilesRule = {
|
|
286
|
+
meta: {
|
|
287
|
+
type: 'suggestion',
|
|
288
|
+
docs: {
|
|
289
|
+
description: 'Ensure critical project files are present',
|
|
290
|
+
category: 'Project Structure',
|
|
291
|
+
recommended: true,
|
|
292
|
+
},
|
|
293
|
+
messages: {
|
|
294
|
+
missingFile: 'Missing recommended project file: "{{fileName}}".',
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
create(context) {
|
|
298
|
+
// Only run this check once per project execution, ideally on layout.tsx
|
|
299
|
+
if (!context.getFilename().endsWith('layout.tsx')) return {};
|
|
300
|
+
|
|
301
|
+
const projectRoot = context.cwd;
|
|
302
|
+
const requiredFiles = [
|
|
303
|
+
{ name: 'sitemap', pattern: /sitemap\.(ts|js|xml|tsx)$/ },
|
|
304
|
+
{ name: 'manifest', pattern: /manifest\.(json|ts|tsx)$/ },
|
|
305
|
+
{ name: 'not-found', pattern: /not-found\.tsx$/ },
|
|
306
|
+
{ name: 'robots', pattern: /robots\.(ts|tsx)$/ },
|
|
307
|
+
{ name: 'proxy.ts', pattern: /^proxy\.ts$/ },
|
|
308
|
+
{ name: 'amplify.yml', pattern: /^amplify\.yml$/ },
|
|
309
|
+
];
|
|
310
|
+
|
|
311
|
+
return {
|
|
312
|
+
'Program:exit'() {
|
|
313
|
+
try {
|
|
314
|
+
const files = fs.readdirSync(projectRoot);
|
|
315
|
+
|
|
316
|
+
// Check common subdirectories
|
|
317
|
+
let appFiles = [];
|
|
318
|
+
let srcFiles = [];
|
|
319
|
+
const appPath = path.join(projectRoot, 'src/app');
|
|
320
|
+
const srcPath = path.join(projectRoot, 'src');
|
|
321
|
+
|
|
322
|
+
if (fs.existsSync(appPath)) {
|
|
323
|
+
appFiles = fs.readdirSync(appPath);
|
|
324
|
+
}
|
|
325
|
+
if (fs.existsSync(srcPath)) {
|
|
326
|
+
srcFiles = fs.readdirSync(srcPath);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const allFiles = [...files, ...appFiles, ...srcFiles];
|
|
330
|
+
|
|
331
|
+
requiredFiles.forEach(req => {
|
|
332
|
+
const found = allFiles.some(f => req.pattern.test(f));
|
|
333
|
+
if (!found) {
|
|
334
|
+
context.report({
|
|
335
|
+
loc: { line: 1, column: 0 },
|
|
336
|
+
messageId: 'missingFile',
|
|
337
|
+
data: { fileName: req.name },
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
} catch (e) {
|
|
342
|
+
// Ignore errors
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
},
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
const noRawImgRule = {
|
|
350
|
+
meta: {
|
|
351
|
+
type: 'suggestion',
|
|
352
|
+
docs: {
|
|
353
|
+
description: 'Prevent usage of raw <img> tags in favor of SmartImage',
|
|
354
|
+
category: 'Performance',
|
|
355
|
+
recommended: true,
|
|
356
|
+
},
|
|
357
|
+
messages: {
|
|
358
|
+
useSmartImage: 'Use <SmartImage /> instead of raw <img> for better performance and CDN support.',
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
create(context) {
|
|
362
|
+
return {
|
|
363
|
+
JSXOpeningElement(node) {
|
|
364
|
+
if (node.name.name === 'img') {
|
|
365
|
+
context.report({
|
|
366
|
+
node,
|
|
367
|
+
messageId: 'useSmartImage',
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
};
|
|
372
|
+
},
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
const requiredFaqRule = {
|
|
376
|
+
meta: {
|
|
377
|
+
type: 'suggestion',
|
|
378
|
+
docs: {
|
|
379
|
+
description: 'Ensure FAQ page and FAQSchema are present',
|
|
380
|
+
category: 'SEO',
|
|
381
|
+
recommended: true,
|
|
382
|
+
},
|
|
383
|
+
messages: {
|
|
384
|
+
missingFaqPage: 'FAQ page is missing. FAQ pages are strongly recommended for every site (src/app/faq/page.tsx).',
|
|
385
|
+
missingFaqSchema: 'FAQSchema is missing from the FAQ page.',
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
create(context) {
|
|
389
|
+
// Only check this when linting layout.tsx
|
|
390
|
+
if (!context.getFilename().endsWith('layout.tsx')) return {};
|
|
391
|
+
|
|
392
|
+
const projectRoot = context.cwd;
|
|
393
|
+
const faqPath = path.join(projectRoot, 'src/app/faq/page.tsx');
|
|
394
|
+
|
|
395
|
+
return {
|
|
396
|
+
'Program:exit'() {
|
|
397
|
+
if (!fs.existsSync(faqPath)) {
|
|
398
|
+
context.report({
|
|
399
|
+
loc: { line: 1, column: 0 },
|
|
400
|
+
messageId: 'missingFaqPage',
|
|
401
|
+
});
|
|
402
|
+
} else {
|
|
403
|
+
try {
|
|
404
|
+
const content = fs.readFileSync(faqPath, 'utf8');
|
|
405
|
+
if (!content.includes('FAQSchema')) {
|
|
406
|
+
context.report({
|
|
407
|
+
loc: { line: 1, column: 0 },
|
|
408
|
+
messageId: 'missingFaqSchema',
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
} catch (e) {
|
|
412
|
+
// Ignore read errors
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
};
|
|
417
|
+
},
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
export default {
|
|
421
|
+
rules: {
|
|
422
|
+
'prop-types-inferprops': propTypesInferPropsRule,
|
|
423
|
+
'required-schemas': requiredSchemasRule,
|
|
424
|
+
'required-files': requiredFilesRule,
|
|
425
|
+
'no-raw-img': noRawImgRule,
|
|
426
|
+
'required-faq': requiredFaqRule,
|
|
427
|
+
},
|
|
428
|
+
configs: {
|
|
429
|
+
recommended: {
|
|
430
|
+
rules: {
|
|
431
|
+
'pixelated/prop-types-inferprops': 'error',
|
|
432
|
+
'pixelated/required-schemas': 'warn',
|
|
433
|
+
'pixelated/required-files': 'warn',
|
|
434
|
+
'pixelated/no-raw-img': 'warn',
|
|
435
|
+
'pixelated/required-faq': 'warn',
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
};
|
|
440
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.reviews.components.d.ts","sourceRoot":"","sources":["../../../../src/components/general/google.reviews.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"google.reviews.components.d.ts","sourceRoot":"","sources":["../../../../src/components/general/google.reviews.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,sBAAsB,CAAC;AAW9B,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,2CAiG7D;yBAjGe,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-expando.d.ts","sourceRoot":"","sources":["../../../../src/components/general/menu-expando.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"menu-expando.d.ts","sourceRoot":"","sources":["../../../../src/components/general/menu-expando.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,oBAAoB,CAAC;AAY5B,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,2CAqJjD;yBArJe,WAAW;;;;;;;;;;;AA2J3B,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,2CAIzD;yBAJe,eAAe;;;;;;AAQ/B,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,2CA4B7D;yBA5Be,iBAAiB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import type { NextRequest } from "next/server";
|
|
3
|
+
/**
|
|
4
|
+
* handlePixelatedProxy
|
|
5
|
+
*
|
|
6
|
+
* A centralized middleware handler for all Pixelated Technology sites.
|
|
7
|
+
* Manages standard headers (x-path, x-url) and enforces a robust Security Policy.
|
|
8
|
+
*
|
|
9
|
+
* TODO: Future enhancement - Accept an options object to allow per-site CSP overrides,
|
|
10
|
+
* enabling/disabling specific permissions (e.g., camera access), or setting custom rate limits.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* STANDARD_PROXY_MATCHER
|
|
14
|
+
*
|
|
15
|
+
* A statically analyzable matcher array for Next.js middleware.
|
|
16
|
+
* Excludes static assets, images, API routes, and favicons from proxy processing.
|
|
17
|
+
*/
|
|
18
|
+
export declare const STANDARD_PROXY_MATCHER: string[];
|
|
19
|
+
export declare function handlePixelatedProxy(req: NextRequest): NextResponse<unknown>;
|
|
20
|
+
//# sourceMappingURL=proxy-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-handler.d.ts","sourceRoot":"","sources":["../../../../src/components/general/proxy-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,UAAwD,CAAC;AAE5F,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,yBAkDpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartimage.d.ts","sourceRoot":"","sources":["../../../../src/components/general/smartimage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4EnD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACjH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"smartimage.d.ts","sourceRoot":"","sources":["../../../../src/components/general/smartimage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4EnD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AACjH,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,2CAqI/C;yBArIe,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shoppingcart.components.d.ts","sourceRoot":"","sources":["../../../../src/components/shoppingcart/shoppingcart.components.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMnD,OAAO,8BAA8B,CAAC;AAStC,OAAO,oBAAoB,CAAC;AAa5B,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAE,KAAK,EAAE,gBAAgB,2CAuLpD;yBAvLe,YAAY;;;;;AAoM5B,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"shoppingcart.components.d.ts","sourceRoot":"","sources":["../../../../src/components/shoppingcart/shoppingcart.components.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMnD,OAAO,8BAA8B,CAAC;AAStC,OAAO,oBAAoB,CAAC;AAa5B,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAE,KAAK,EAAE,gBAAgB,2CAuLpD;yBAvLe,YAAY;;;;;AAoM5B,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,2CAoD3D;yBApDe,gBAAgB;;;;;;;;;;;;AA+EhC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,2CA0CrD;yBA1Ce,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;AAgD7B,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,2CAkC/C;yBAlCe,UAAU;;;;;AAyC1B,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,2CAQzD;yBARe,eAAe;;;;;;AAgB/B,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,2CAkBzD;yBAlBe,eAAe;;;;;;;AAyB/B,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CAQvD;yBARe,cAAc"}
|
|
@@ -194,6 +194,27 @@ export declare namespace FormDataList {
|
|
|
194
194
|
items: PropTypes.Requireable<any[]>;
|
|
195
195
|
};
|
|
196
196
|
}
|
|
197
|
+
export type FormTagInputType = InferProps<typeof FormTagInput.propTypes>;
|
|
198
|
+
export declare function FormTagInput(props: FormTagInputType): import("react/jsx-runtime").JSX.Element;
|
|
199
|
+
export declare namespace FormTagInput {
|
|
200
|
+
var propTypes: {
|
|
201
|
+
id: PropTypes.Validator<string>;
|
|
202
|
+
name: PropTypes.Requireable<string>;
|
|
203
|
+
defaultValue: PropTypes.Requireable<(string | null | undefined)[]>;
|
|
204
|
+
value: PropTypes.Requireable<(string | null | undefined)[]>;
|
|
205
|
+
placeholder: PropTypes.Requireable<string>;
|
|
206
|
+
autoComplete: PropTypes.Requireable<string>;
|
|
207
|
+
disabled: PropTypes.Requireable<string>;
|
|
208
|
+
readOnly: PropTypes.Requireable<string>;
|
|
209
|
+
required: PropTypes.Requireable<string>;
|
|
210
|
+
display: PropTypes.Requireable<string>;
|
|
211
|
+
label: PropTypes.Requireable<string>;
|
|
212
|
+
tooltip: PropTypes.Requireable<string>;
|
|
213
|
+
className: PropTypes.Requireable<string>;
|
|
214
|
+
validate: PropTypes.Requireable<string>;
|
|
215
|
+
onChange: PropTypes.Requireable<(...args: any[]) => any>;
|
|
216
|
+
};
|
|
217
|
+
}
|
|
197
218
|
export type FormFieldsetType = InferProps<typeof FormFieldset.propTypes>;
|
|
198
219
|
export declare function FormFieldset(props: FormFieldsetType): import("react/jsx-runtime").JSX.Element;
|
|
199
220
|
export declare namespace FormFieldset {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formcomponents.d.ts","sourceRoot":"","sources":["../../../../../src/components/sitebuilder/form/formcomponents.tsx"],"names":[],"mappings":"AAIA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,YAAY,CAAC;AAuIpB,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,iBAAS,SAAS,CAAC,KAAK,EAAE,aAAa,2CAYtC;kBAZQ,SAAS;;;;;;;;;;;;;AA4BlB,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC;AACvE,iBAAS,WAAW,CAAC,KAAK,EAAE,eAAe,kDA2C1C;kBA3CQ,WAAW;;;;;;;;;;;;AAiFpB,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,2CAmB7C;yBAnBe,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDzB,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,2CAc/C;yBAde,UAAU;;;;;;;;;;;;;;;;;;;;;AA6B1B,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACjF,iBAAS,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,2CAUpD;kBAVQ,gBAAgB;;;;;;;AAyCzB,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAWnD;yBAXe,YAAY;;;;;;;;;;;;;;;;;;;;;;AAmC5B,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,2CAY7C;yBAZe,SAAS;;;;;;;;;;;;;;;;AA4BzB,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AAC/E,iBAAS,eAAe,CAAC,KAAK,EAAE,mBAAmB,2CAsBlD;kBAtBQ,eAAe;;;;;;;;;AA6CxB,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAYnD;yBAZe,YAAY;;;;;;;;;;;;;;;;AA6B5B,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACrF,iBAAS,kBAAkB,CAAC,KAAK,EAAE,sBAAsB,2CA2BxD;kBA3BQ,kBAAkB;;;;;;;;AA0C3B,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,2CAU/C;yBAVe,UAAU;;;;;;;;;AAuB1B,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAWnD;yBAXe,YAAY;;;;;;
|
|
1
|
+
{"version":3,"file":"formcomponents.d.ts","sourceRoot":"","sources":["../../../../../src/components/sitebuilder/form/formcomponents.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/components/utilities/functions.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAE,GAAG,EAAE,MAAM,oBAUpC;AAGD,wBAAgB,SAAS,CAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;;EAmBxC;AAED,wBAAgB,wBAAwB,CAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,QAIhF;AAED,wBAAgB,aAAa,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAOtD;AAED,wBAAgB,WAAW,WAc1B;AAED,wBAAgB,YAAY,WAK3B;AAED,wBAAgB,UAAU,CAAE,GAAG,EAAE,MAAM,UAEtC;AAQD,wBAAgB,YAAY,CAAE,YAAY,EAAE,MAAM,UAgCjD;AAID;;;;OAII;AACJ,wBAAgB,YAAY,SAoB3B;AAKD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UA0BhC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAGD;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAQnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAOpC,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../../../src/components/utilities/functions.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAE,GAAG,EAAE,MAAM,oBAUpC;AAGD,wBAAgB,SAAS,CAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG;;EAmBxC;AAED,wBAAgB,wBAAwB,CAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,QAIhF;AAED,wBAAgB,aAAa,CAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAOtD;AAED,wBAAgB,WAAW,WAc1B;AAED,wBAAgB,YAAY,WAK3B;AAED,wBAAgB,UAAU,CAAE,GAAG,EAAE,MAAM,UAEtC;AAQD,wBAAgB,YAAY,CAAE,YAAY,EAAE,MAAM,UAgCjD;AAID;;;;OAII;AACJ,wBAAgB,YAAY,SAoB3B;AAKD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UA0BhC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAGD;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAQnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAOpC,CAAC;AAGF;;GAEG;AACH,eAAO,MAAM,oBAAoB,UAiBhC,CAAC"}
|
|
@@ -11,6 +11,7 @@ export * from "./components/general/gravatar.functions";
|
|
|
11
11
|
export * from "./components/general/instagram.functions";
|
|
12
12
|
export * from "./components/general/manifest";
|
|
13
13
|
export * from "./components/general/metadata.functions";
|
|
14
|
+
export * from "./components/general/proxy-handler";
|
|
14
15
|
export * from "./components/general/resume";
|
|
15
16
|
export * from "./components/general/schema-blogposting";
|
|
16
17
|
export * from "./components/general/schema-blogposting.functions";
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
let rules: {
|
|
3
|
+
'prop-types-inferprops': {
|
|
4
|
+
meta: {
|
|
5
|
+
type: string;
|
|
6
|
+
docs: {
|
|
7
|
+
description: string;
|
|
8
|
+
category: string;
|
|
9
|
+
recommended: boolean;
|
|
10
|
+
};
|
|
11
|
+
fixable: boolean;
|
|
12
|
+
schema: never[];
|
|
13
|
+
messages: {
|
|
14
|
+
missingPropTypes: string;
|
|
15
|
+
missingInferProps: string;
|
|
16
|
+
invalidInferProps: string;
|
|
17
|
+
missingInferPropsUsage: string;
|
|
18
|
+
propTypesPlacement: string;
|
|
19
|
+
inferPropsPlacement: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
create(context: any): {
|
|
23
|
+
FunctionDeclaration(node: any): void;
|
|
24
|
+
AssignmentExpression(node: any): void;
|
|
25
|
+
TSTypeAliasDeclaration(node: any): void;
|
|
26
|
+
'FunctionDeclaration:exit'(node: any): void;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
'required-schemas': {
|
|
30
|
+
meta: {
|
|
31
|
+
type: string;
|
|
32
|
+
docs: {
|
|
33
|
+
description: string;
|
|
34
|
+
category: string;
|
|
35
|
+
recommended: boolean;
|
|
36
|
+
};
|
|
37
|
+
messages: {
|
|
38
|
+
missingSchema: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
create(context: any): {
|
|
42
|
+
JSXIdentifier?: undefined;
|
|
43
|
+
'Program:exit'?: undefined;
|
|
44
|
+
} | {
|
|
45
|
+
JSXIdentifier(node: any): void;
|
|
46
|
+
'Program:exit'(): void;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
'required-files': {
|
|
50
|
+
meta: {
|
|
51
|
+
type: string;
|
|
52
|
+
docs: {
|
|
53
|
+
description: string;
|
|
54
|
+
category: string;
|
|
55
|
+
recommended: boolean;
|
|
56
|
+
};
|
|
57
|
+
messages: {
|
|
58
|
+
missingFile: string;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
create(context: any): {
|
|
62
|
+
'Program:exit'?: undefined;
|
|
63
|
+
} | {
|
|
64
|
+
'Program:exit'(): void;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
'no-raw-img': {
|
|
68
|
+
meta: {
|
|
69
|
+
type: string;
|
|
70
|
+
docs: {
|
|
71
|
+
description: string;
|
|
72
|
+
category: string;
|
|
73
|
+
recommended: boolean;
|
|
74
|
+
};
|
|
75
|
+
messages: {
|
|
76
|
+
useSmartImage: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
create(context: any): {
|
|
80
|
+
JSXOpeningElement(node: any): void;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
'required-faq': {
|
|
84
|
+
meta: {
|
|
85
|
+
type: string;
|
|
86
|
+
docs: {
|
|
87
|
+
description: string;
|
|
88
|
+
category: string;
|
|
89
|
+
recommended: boolean;
|
|
90
|
+
};
|
|
91
|
+
messages: {
|
|
92
|
+
missingFaqPage: string;
|
|
93
|
+
missingFaqSchema: string;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
create(context: any): {
|
|
97
|
+
'Program:exit'?: undefined;
|
|
98
|
+
} | {
|
|
99
|
+
'Program:exit'(): void;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
namespace configs {
|
|
104
|
+
namespace recommended {
|
|
105
|
+
let rules_1: {
|
|
106
|
+
'pixelated/prop-types-inferprops': string;
|
|
107
|
+
'pixelated/required-schemas': string;
|
|
108
|
+
'pixelated/required-files': string;
|
|
109
|
+
'pixelated/no-raw-img': string;
|
|
110
|
+
'pixelated/required-faq': string;
|
|
111
|
+
};
|
|
112
|
+
export { rules_1 as rules };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export default _default;
|
|
117
|
+
//# sourceMappingURL=pixelated-eslint-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pixelated-eslint-plugin.d.ts","sourceRoot":"","sources":["../../../src/scripts/pixelated-eslint-plugin.js"],"names":[],"mappings":""}
|
|
@@ -4,14 +4,14 @@ declare namespace _default {
|
|
|
4
4
|
export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[];
|
|
5
5
|
}
|
|
6
6
|
export default _default;
|
|
7
|
-
export namespace
|
|
7
|
+
export namespace SplitScroll_Basic {
|
|
8
8
|
function render(): import("react/jsx-runtime").JSX.Element;
|
|
9
9
|
}
|
|
10
|
-
export namespace
|
|
10
|
+
export namespace SplitScroll_ProductShowcase {
|
|
11
11
|
export function render_1(): import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
export { render_1 as render };
|
|
13
13
|
}
|
|
14
|
-
export namespace
|
|
14
|
+
export namespace SplitScroll_Minimal {
|
|
15
15
|
export function render_2(): import("react/jsx-runtime").JSX.Element;
|
|
16
16
|
export { render_2 as render };
|
|
17
17
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-handler.test.d.ts","sourceRoot":"","sources":["../../../src/tests/proxy-handler.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
namespace meta {
|
|
3
|
-
let type: string;
|
|
4
|
-
namespace docs {
|
|
5
|
-
let description: string;
|
|
6
|
-
let category: string;
|
|
7
|
-
let recommended: boolean;
|
|
8
|
-
}
|
|
9
|
-
let fixable: boolean;
|
|
10
|
-
let schema: never[];
|
|
11
|
-
namespace messages {
|
|
12
|
-
let missingPropTypes: string;
|
|
13
|
-
let missingInferProps: string;
|
|
14
|
-
let invalidInferProps: string;
|
|
15
|
-
let missingInferPropsUsage: string;
|
|
16
|
-
let propTypesPlacement: string;
|
|
17
|
-
let inferPropsPlacement: string;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function create(context: any): {
|
|
21
|
-
FunctionDeclaration(node: any): void;
|
|
22
|
-
AssignmentExpression(node: any): void;
|
|
23
|
-
TSTypeAliasDeclaration(node: any): void;
|
|
24
|
-
'FunctionDeclaration:exit'(node: any): void;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
export default _default;
|
|
28
|
-
//# sourceMappingURL=proptypes-inferprops.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proptypes-inferprops.d.ts","sourceRoot":"","sources":["../../../src/scripts/proptypes-inferprops.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;IAqBC;;;;;MAsLC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
export let title: string;
|
|
3
|
-
export { SplitScroll as component };
|
|
4
|
-
export let decorators: ((Story: any) => import("react/jsx-runtime").JSX.Element)[];
|
|
5
|
-
}
|
|
6
|
-
export default _default;
|
|
7
|
-
export namespace BasicSplitScroll {
|
|
8
|
-
function render(): import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
}
|
|
10
|
-
export namespace ProductShowcase {
|
|
11
|
-
export function render_1(): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export { render_1 as render };
|
|
13
|
-
}
|
|
14
|
-
export namespace MinimalSplitScroll {
|
|
15
|
-
export function render_2(): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export { render_2 as render };
|
|
17
|
-
}
|
|
18
|
-
import { SplitScroll } from '@/components/general/splitscroll';
|
|
19
|
-
//# sourceMappingURL=lookbook.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lookbook.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/lookbook/lookbook.stories.js"],"names":[],"mappings":";;;;;;;IA4BS,2DAwGP;;;IAIO,oEAyFP;;;;IAIO,oEAuBP;;;4BA3P0B,kCAAkC"}
|