@pixelated-tech/components 3.13.5 → 3.13.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.
Files changed (31) hide show
  1. package/dist/components/admin/deploy/deployment.integration.js +3 -3
  2. package/dist/components/admin/site-health/site-health-axe-core.integration.js +2 -1
  3. package/dist/components/admin/site-health/site-health-core-web-vitals.integration.js +1 -1
  4. package/dist/components/admin/site-health/site-health-on-site-seo.integration.js +3 -3
  5. package/dist/components/admin/site-health/site-health-security.integration.js +2 -2
  6. package/dist/components/admin/sites/sites.integration.js +2 -2
  7. package/dist/components/general/hero.js +1 -1
  8. package/dist/components/general/modal.css +70 -60
  9. package/dist/components/general/smartimage.js +2 -1
  10. package/dist/components/integrations/gemini-api.server.js +1 -1
  11. package/dist/components/integrations/gravatar.components.js +1 -1
  12. package/dist/components/integrations/socialcard.js +2 -2
  13. package/dist/components/shoppingcart/ebay.components.js +1 -1
  14. package/dist/components/shoppingcart/ebay.functions.js +1 -1
  15. package/dist/components/sitebuilder/config/ConfigBuilder.js +1 -1
  16. package/dist/components/sitebuilder/config/FontSelector.js +1 -1
  17. package/dist/components/sitebuilder/form/formextractor.js +1 -1
  18. package/dist/components/sitebuilder/form/formutils.js +1 -1
  19. package/dist/components/sitebuilder/page/components/ComponentSelector.js +1 -1
  20. package/dist/components/sitebuilder/page/components/ComponentTree.js +4 -4
  21. package/dist/components/sitebuilder/page/components/PageEngine.js +4 -4
  22. package/dist/components/sitebuilder/page/components/SaveLoadSection.js +4 -4
  23. package/dist/config/pixelated.config.json.enc +1 -1
  24. package/dist/scripts/create-pixelated-app.js +3 -3
  25. package/dist/scripts/release.sh +7 -3
  26. package/dist/scripts/zip-pixelated-theme.js +3 -3
  27. package/dist/types/components/general/hero.d.ts.map +1 -1
  28. package/dist/types/components/general/recipe.d.ts.map +1 -1
  29. package/dist/types/components/shoppingcart/ebay.components.d.ts.map +1 -1
  30. package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts.map +1 -1
  31. package/package.json +22 -37
@@ -57,7 +57,7 @@ async function executeScript(siteName, versionType, commitMessage, environments,
57
57
  };
58
58
  }
59
59
  catch (error) {
60
- throw new Error(`Deployment failed: ${error.message}`);
60
+ throw new Error(`Deployment failed: ${error.message}`, { cause: error });
61
61
  }
62
62
  }
63
63
  /**
@@ -133,7 +133,7 @@ async function runPrepCommands(siteName, versionType, commitMessage, localPath)
133
133
  return results.join('\n');
134
134
  }
135
135
  catch (error) {
136
- throw new Error(`Prep failed: ${error.message}`);
136
+ throw new Error(`Prep failed: ${error.message}`, { cause: error });
137
137
  }
138
138
  }
139
139
  /**
@@ -167,6 +167,6 @@ async function deployToEnvironment(siteName, environment, versionType, commitMes
167
167
  if (error.message.includes('Repository not found') || error.message.includes('does not exist')) {
168
168
  return `${errorMsg}\nRepository not found or access denied. Check your git remote configuration.`;
169
169
  }
170
- throw new Error(errorMsg);
170
+ throw new Error(errorMsg, { cause: error });
171
171
  }
172
172
  }
@@ -141,7 +141,7 @@ async function runAxeCoreAnalysis(url, runtime_env = 'auto') {
141
141
  const hint = `Could not launch Chrome/Chromium. Ensure Puppeteer browsers are installed (run 'npx puppeteer browsers install chrome') and that the browser binary is accessible. You can also set PUPPETEER_EXECUTABLE_PATH to the installed browser binary or adjust PUPPETEER_CACHE_DIR to point to a writable cache directory. Original error: ${original}`;
142
142
  if (debug)
143
143
  console.error('Puppeteer launch failed:', err);
144
- throw new Error(hint);
144
+ throw new Error(hint, { cause: err });
145
145
  }
146
146
  const page = await browser.newPage();
147
147
  // Set viewport for consistent results
@@ -197,6 +197,7 @@ async function runAxeCoreAnalysis(url, runtime_env = 'auto') {
197
197
  }
198
198
  catch (err) {
199
199
  let injected = false;
200
+ let lastError;
200
201
  // Try common local node_modules locations relative to process.cwd() and __dirname
201
202
  const possiblePaths = [
202
203
  path.join(process.cwd(), 'node_modules', 'axe-core', 'axe.min.js'),
@@ -119,7 +119,7 @@ export async function fetchPSIData(url) {
119
119
  : `PSI API request failed: ${error instanceof Error ? error.message : 'Unknown error'}`;
120
120
  if (debug)
121
121
  console.error('PSI request error (final):', { url, error });
122
- throw new Error(errorMessage);
122
+ throw new Error(errorMessage, { cause: error });
123
123
  }
124
124
  // Wait before retry (exponential backoff) - retry on both network errors and timeouts
125
125
  if (debug)
@@ -118,8 +118,8 @@ function analyzePatternMetric(html, metric) {
118
118
  const regex = new RegExp(metric.pattern, 'gi');
119
119
  const matches = html.match(regex) || [];
120
120
  const count = matches.length;
121
- let score = 0;
122
- let displayValue = '';
121
+ let score;
122
+ let displayValue;
123
123
  let details = undefined;
124
124
  // Apply count logic
125
125
  switch (metric.countLogic) {
@@ -652,7 +652,7 @@ function calculateGzipCompressionScore(data) {
652
652
  };
653
653
  }
654
654
  let score = 0;
655
- let displayValue = 'No compression detected';
655
+ let displayValue;
656
656
  if (data.isCompressed) {
657
657
  score = 1;
658
658
  displayValue = `Compression enabled: ${data.contentEncoding || data.transferEncoding}`;
@@ -128,9 +128,9 @@ async function runNpmAudit(localPath) {
128
128
  return JSON.parse(execError.stdout);
129
129
  }
130
130
  catch (parseError) {
131
- throw new Error(`Failed to parse npm audit output: ${parseError.message}`);
131
+ throw new Error(`Failed to parse npm audit output: ${parseError.message}`, { cause: parseError });
132
132
  }
133
133
  }
134
- throw new Error(`npm audit failed: ${execError.message}`);
134
+ throw new Error(`npm audit failed: ${execError.message}`, { cause: error });
135
135
  }
136
136
  }
@@ -19,7 +19,7 @@ export async function loadSitesConfig(configPath) {
19
19
  }
20
20
  catch (error) {
21
21
  console.error('Error loading sites:', error);
22
- throw new Error('Failed to load sites configuration');
22
+ throw new Error('Failed to load sites configuration', { cause: error });
23
23
  }
24
24
  }
25
25
  /**
@@ -37,7 +37,7 @@ export async function saveSitesConfig(sites, configPath) {
37
37
  }
38
38
  catch (error) {
39
39
  console.error('Error saving sites:', error);
40
- throw new Error('Failed to save sites configuration');
40
+ throw new Error('Failed to save sites configuration', { cause: error });
41
41
  }
42
42
  }
43
43
  /**
@@ -63,7 +63,7 @@ export function Hero({ img, imgAlt, imgId, variant = 'static', height = '60vh',
63
63
  return (_jsx(_Fragment, { children: _jsxs("div", { id: id, className: "hero" + (variant ? " " + variant : ''), style: { height: height ?? '60vh' }, children: [_jsx("div", { id: id + "-bg", className: "hero-div-bg-img", style: { backgroundImage: `url(${img})` } }), children] }) }));
64
64
  }
65
65
  else if (variant === 'anchored-img') {
66
- return (_jsx(_Fragment, { children: _jsxs("div", { className: "hero" + (variant ? " " + variant : ''), id: "hero-" + id?.toString(), children: [_jsx(SmartImage, { src: img, alt: imgAlt || '', id: id?.toString() || '', quality: 100, width: "1000px", style: { height: height ?? '60vh' } }), children] }) }));
66
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: "hero" + (variant ? " " + variant : ''), id: "hero-" + id?.toString(), children: [_jsx(SmartImage, { src: img, alt: imgAlt || '', id: id?.toString() || '', quality: 100, width: 4000, height: 3000, fetchPriority: "high", aboveFold: true, style: { height: height ?? '60vh' } }), children] }) }));
67
67
  }
68
68
  else {
69
69
  return (_jsx(_Fragment, { children: _jsx("div", { id: id, className: "hero" + (variant ? " " + variant : ''), style: { backgroundImage: `url(${img})`, height: height ?? '60vh' }, children: children }) }));
@@ -1,63 +1,73 @@
1
-
2
1
  .modal {
3
- position: fixed; /* Stay in place */
4
- z-index: 1000; /* Sit on top */
5
- top: 0;
6
- left: 0;
7
- width: 100%; /* Full width */
8
- height: 100%; /* Full height */
9
- overflow: auto; /* Enable scroll if needed */
10
- background-color: rgb(0,0,0); /* Fallback color */
11
- background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
12
- }
13
-
14
- /* Modal Content/Box */
15
- .modal-content {
16
- background-color: #fefefe;
17
- margin: 15% auto; /* 15% from the top and centered */
18
- padding: 20px;
19
- border: 1px solid #888;
20
- max-width: 80%;
21
- width: fit-content;
22
- position: relative;
23
- }
2
+ position: fixed;
3
+ /* Stay in place */
4
+ z-index: 1000;
5
+ /* Sit on top */
6
+ top: 0;
7
+ left: 0;
8
+ width: 100%;
9
+ /* Full width */
10
+ height: 100%;
11
+ /* Full height */
12
+ overflow: auto;
13
+ /* Enable scroll if needed */
14
+ background-color: rgb(0, 0, 0);
15
+ /* Fallback color */
16
+ background-color: rgba(0, 0, 0, 0.4);
17
+ /* Black w/ opacity */
18
+ }
19
+
20
+ /* Modal Content/Box */
21
+ .modal-content {
22
+ background-color: #fefefe;
23
+ margin: 15% auto;
24
+ /* 15% from the top and centered */
25
+ padding: 20px;
26
+ border: 1px solid #888;
27
+ max-width: 95vw;
28
+ max-height: 95vh;
29
+ width: fit-content;
30
+ position: relative;
31
+ }
32
+
33
+ .modal-content img {
34
+ border: 2px solid #aaa;
35
+ max-width: 90vw;
36
+ max-height: 90vh;
37
+ }
38
+
39
+ /* The Close Button */
40
+ .modal-close {
41
+ color: #aaa;
42
+ font-size: 28px;
43
+ line-height: 26px;
44
+ font-weight: bold;
45
+ text-align: center;
46
+ position: absolute;
47
+ float: right;
48
+ right: 10px;
49
+ top: 10px;
50
+ width: 30px;
51
+ height: 30px;
52
+ background-color: white;
53
+ border: 1px solid #999;
54
+ -moz-border-radius: 5px;
55
+ -webkit-border-radius: 5px;
56
+ border-radius: 5px;
57
+ z-index: 10;
58
+ }
59
+
60
+ .modal-close:hover,
61
+ .modal-close:focus {
62
+ color: black;
63
+ text-decoration: none;
64
+ cursor: pointer;
65
+ }
24
66
 
25
- .modal-content img {
26
- border: 2px solid #aaa;
27
- }
28
-
29
- /* The Close Button */
30
- .modal-close {
31
- color: #aaa;
32
- font-size: 28px;
33
- line-height: 26px;
34
- font-weight: bold;
35
- text-align: center;
36
- position: absolute;
37
- float: right;
38
- right: 10px;
39
- top: 10px;
40
- width: 30px;
41
- height:30px;
42
- background-color: white;
43
- border: 1px solid #999;
44
- -moz-border-radius: 5px;
45
- -webkit-border-radius: 5px;
46
- border-radius: 5px;
47
- z-index: 10;
48
- }
49
-
50
- .modal-close:hover,
51
- .modal-close:focus {
52
- color: black;
53
- text-decoration: none;
54
- cursor: pointer;
55
- }
56
-
57
- .show {
58
- display: block;
59
- }
67
+ .show {
68
+ display: block;
69
+ }
60
70
 
61
- .hide{
62
- display: none;
63
- }
71
+ .hide {
72
+ display: none;
73
+ }
@@ -177,7 +177,8 @@ export function SmartImage(props) {
177
177
  transforms: newProps.cloudinaryTransforms ?? undefined,
178
178
  cloudinaryDomain: newProps.cloudinaryDomain
179
179
  });
180
- newProps.sizes = `${newProps.width}px`;
180
+ if (!(newProps.sizes))
181
+ newProps.sizes = `${newProps.width}px`;
181
182
  }
182
183
  else {
183
184
  const breakpoints = [320, 640, 768, 1024, 1280, 1536];
@@ -53,7 +53,7 @@ function parseGeminiResponse(data) {
53
53
  catch (error) {
54
54
  console.error('Error parsing Gemini API response:', error);
55
55
  console.error('Raw response data:', JSON.stringify(data, null, 2));
56
- throw new Error('Failed to parse AI recommendations');
56
+ throw new Error('Failed to parse AI recommendations', { cause: error });
57
57
  }
58
58
  }
59
59
  function buildRecommendationPrompt(request) {
@@ -165,6 +165,6 @@ export function GravatarCard(props) {
165
165
  const photoOnRight = direction === 'right';
166
166
  const config = usePixelatedConfig();
167
167
  const avatarElement = (_jsx("div", { className: "gravatar-avatar-container", children: _jsx(SmartImage, { src: avatarUrl, alt: displayName, title: displayName, width: avatarSize ?? 120, height: avatarSize ?? 120, quality: 100, className: "gravatar-avatar", cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }) }));
168
- const contentElement = (_jsxs("div", { className: "gravatar-content", children: [_jsxs("div", { className: "gravatar-header", children: [_jsx("h3", { className: "gravatar-name", children: profileLink ? (_jsx("a", { href: profileLink, target: "_blank", rel: "noopener noreferrer", className: "gravatar-name-link", children: displayName })) : (displayName) }), pronouns && _jsxs("span", { className: "gravatar-pronouns", children: ["(", pronouns, ")"] })] }), (jobTitle || company) && (_jsxs("div", { className: "gravatar-job-company", children: [jobTitle && _jsx("strong", { children: jobTitle }), jobTitle && company && _jsx("span", { children: " at " }), company && _jsx("span", { children: company })] })), location && (_jsxs("div", { className: "gravatar-location", children: ["\uD83D\uDCCD ", location] })), aboutMe && !compact && (_jsx("p", { className: "gravatar-about", children: aboutMe })), (githubUrl || linkedinUrl || twitterUrl || instagramUrl || websiteUrl) && (_jsxs("div", { className: "gravatar-social-links", children: [githubUrl && (_jsx("a", { href: githubUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link", children: "GitHub" })), linkedinUrl && (_jsx("a", { href: linkedinUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-linkedin", children: "LinkedIn" })), twitterUrl && (_jsx("a", { href: twitterUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-twitter", children: "X" })), instagramUrl && (_jsx("a", { href: instagramUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-instagram", children: "Instagram" })), websiteUrl && (_jsx("a", { href: websiteUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-website", children: "Website" }))] }))] }));
168
+ const contentElement = (_jsxs("div", { className: "gravatar-content", children: [_jsxs("div", { className: "gravatar-header", children: [_jsx("h3", { className: "gravatar-name", children: profileLink ? (_jsx("a", { href: profileLink, target: "_blank", rel: "noopener noreferrer", className: "gravatar-name-link", children: displayName })) : (displayName) }), pronouns && _jsxs("span", { className: "gravatar-pronouns", children: ["(", pronouns, ")"] })] }), (jobTitle || company) && (_jsxs("div", { className: "gravatar-job-company", children: [jobTitle && _jsx("strong", { children: jobTitle }), jobTitle && company && _jsx("span", { children: " at " }), company && _jsx("span", { children: company })] })), location && (_jsxs("div", { className: "gravatar-location", children: [_jsx("span", { role: "img", "aria-label": "location", children: "\uD83D\uDCCD" }), " ", location] })), aboutMe && !compact && (_jsx("p", { className: "gravatar-about", children: aboutMe })), (githubUrl || linkedinUrl || twitterUrl || instagramUrl || websiteUrl) && (_jsxs("div", { className: "gravatar-social-links", children: [githubUrl && (_jsx("a", { href: githubUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link", children: "GitHub" })), linkedinUrl && (_jsx("a", { href: linkedinUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-linkedin", children: "LinkedIn" })), twitterUrl && (_jsx("a", { href: twitterUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-twitter", children: "X" })), instagramUrl && (_jsx("a", { href: instagramUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-instagram", children: "Instagram" })), websiteUrl && (_jsx("a", { href: websiteUrl, target: "_blank", rel: "noopener noreferrer", className: "gravatar-social-link gravatar-social-link-website", children: "Website" }))] }))] }));
169
169
  return (_jsx("div", { className: `gravatar-card ${isHorizontal ? 'gravatar-card-horizontal' : ''} ${compact ? 'gravatar-card-compact' : ''}`, children: isHorizontal && photoOnRight ? (_jsxs(_Fragment, { children: [contentElement, avatarElement] })) : (_jsxs(_Fragment, { children: [avatarElement, contentElement] })) }));
170
170
  }
@@ -168,7 +168,7 @@ export function SocialCards(props) {
168
168
  .then((items) => {
169
169
  let i = 0;
170
170
  for (const prop in items) {
171
- let myNewCard = {};
171
+ let myNewCard;
172
172
  const item = items[prop];
173
173
  myNewCard = item;
174
174
  /* ===== FIX FOR SOURCE ===== */
@@ -192,7 +192,7 @@ export function SocialCards(props) {
192
192
  let allCardData = [];
193
193
  for (const prop in state.sources) {
194
194
  const source = state.sources[prop];
195
- let sourceCardData = [];
195
+ let sourceCardData;
196
196
  if (Object.prototype.hasOwnProperty.call(source, 'url') && source.url && source.url.length > 0) {
197
197
  sourceCardData = await getFeedEntries(source.url, source.entryCount);
198
198
  allCardData = [...allCardData, ...sourceCardData];
@@ -378,5 +378,5 @@ export function EbayRateLimitsVisualizer(props) {
378
378
  // Check for API-level errors in the returned data
379
379
  const hasTokenError = data?.rate_limit?.errors?.[0]?.message === "Invalid access token" ||
380
380
  data?.user_rate_limit?.errors?.[0]?.message === "Invalid access token";
381
- return (_jsxs("div", { style: { padding: '20px', fontFamily: 'sans-serif', border: '1px solid #ddd', borderRadius: '8px' }, children: [_jsx("h3", { children: "Ebay Rate Limits Data Visualizer" }), _jsxs("div", { style: { marginBottom: '20px', display: 'flex', flexDirection: 'column', gap: '10px' }, children: [_jsxs("div", { style: { display: 'flex', gap: '10px', alignItems: 'center' }, children: [_jsx("label", { htmlFor: "ebay-token", children: _jsx("b", { children: "Token:" }) }), _jsx("input", { id: "ebay-token", type: "text", value: token, onChange: (e) => setToken(e.target.value), placeholder: "Paste eBay token here", style: { flexGrow: 1, padding: '5px', fontFamily: 'monospace' } }), _jsx("button", { onClick: fetchToken, disabled: fetchingToken || !apiProps.appId, children: fetchingToken ? 'Fetching Token...' : 'Auto-Fetch Token' })] }), _jsxs("div", { style: { display: 'flex', gap: '10px' }, children: [_jsx("button", { onClick: fetchData, disabled: loading || !token, style: { padding: '8px 16px', cursor: 'pointer', background: '#0070f3', color: 'white', border: 'none', borderRadius: '4px' }, children: loading ? 'Fetching Limits...' : 'Fetch Rate Limits' }), _jsx("button", { onClick: showMockData, style: { padding: '8px 16px', cursor: 'pointer', border: '1px solid #ccc', borderRadius: '4px', background: 'white' }, children: "Load Sample Structure" })] })] }), error && (_jsxs("div", { style: { color: '#d00', background: '#fff5f5', padding: '10px', borderRadius: '4px', marginBottom: '10px', border: '1px solid #feb2b2' }, children: [_jsx("b", { children: "Error:" }), " ", error] })), hasTokenError && (_jsxs("div", { style: { color: '#c53030', background: '#fff5f5', padding: '10px', borderRadius: '4px', marginBottom: '10px', border: '1px solid #feb2b2' }, children: ["\uD83D\uDEA8 ", _jsx("b", { children: "Authentication Error:" }), " Your eBay access token is invalid or expired. Use \"Auto-Fetch Token\" if credentials are set, or paste a new one."] })), data ? (_jsxs("div", { style: { marginTop: '20px' }, children: [_jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center' }, children: [_jsx("h4", { children: "Response Data:" }), _jsx("button", { onClick: () => setData(null), style: { padding: '4px 8px', fontSize: '12px' }, children: "Clear" })] }), _jsx("pre", { style: { background: '#f8f9fa', padding: '15px', borderRadius: '5px', overflow: 'auto', border: '1px solid #e9ecef', fontSize: '13px' }, children: JSON.stringify(data, null, 2) })] })) : (_jsx("div", { style: { color: '#666', fontStyle: 'italic', marginTop: '20px' }, children: "No rate limit data loaded yet." }))] }));
381
+ return (_jsxs("div", { style: { padding: '20px', fontFamily: 'sans-serif', border: '1px solid #ddd', borderRadius: '8px' }, children: [_jsx("h3", { children: "Ebay Rate Limits Data Visualizer" }), _jsxs("div", { style: { marginBottom: '20px', display: 'flex', flexDirection: 'column', gap: '10px' }, children: [_jsxs("div", { style: { display: 'flex', gap: '10px', alignItems: 'center' }, children: [_jsx("label", { htmlFor: "ebay-token", children: _jsx("b", { children: "Token:" }) }), _jsx("input", { id: "ebay-token", type: "text", value: token, onChange: (e) => setToken(e.target.value), placeholder: "Paste eBay token here", style: { flexGrow: 1, padding: '5px', fontFamily: 'monospace' } }), _jsx("button", { onClick: fetchToken, disabled: fetchingToken || !apiProps.appId, children: fetchingToken ? 'Fetching Token...' : 'Auto-Fetch Token' })] }), _jsxs("div", { style: { display: 'flex', gap: '10px' }, children: [_jsx("button", { onClick: fetchData, disabled: loading || !token, style: { padding: '8px 16px', cursor: 'pointer', background: '#0070f3', color: 'white', border: 'none', borderRadius: '4px' }, children: loading ? 'Fetching Limits...' : 'Fetch Rate Limits' }), _jsx("button", { onClick: showMockData, style: { padding: '8px 16px', cursor: 'pointer', border: '1px solid #ccc', borderRadius: '4px', background: 'white' }, children: "Load Sample Structure" })] })] }), error && (_jsxs("div", { style: { color: '#d00', background: '#fff5f5', padding: '10px', borderRadius: '4px', marginBottom: '10px', border: '1px solid #feb2b2' }, children: [_jsx("b", { children: "Error:" }), " ", error] })), hasTokenError && (_jsxs("div", { style: { color: '#c53030', background: '#fff5f5', padding: '10px', borderRadius: '4px', marginBottom: '10px', border: '1px solid #feb2b2' }, children: [_jsx("span", { role: "img", "aria-label": "error", children: "\uD83D\uDEA8" }), " ", _jsx("b", { children: "Authentication Error:" }), " Your eBay access token is invalid or expired. Use \"Auto-Fetch Token\" if credentials are set, or paste a new one."] })), data ? (_jsxs("div", { style: { marginTop: '20px' }, children: [_jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center' }, children: [_jsx("h4", { children: "Response Data:" }), _jsx("button", { onClick: () => setData(null), style: { padding: '4px 8px', fontSize: '12px' }, children: "Clear" })] }), _jsx("pre", { style: { background: '#f8f9fa', padding: '15px', borderRadius: '5px', overflow: 'auto', border: '1px solid #e9ecef', fontSize: '13px' }, children: JSON.stringify(data, null, 2) })] })) : (_jsx("div", { style: { color: '#666', fontStyle: 'italic', marginTop: '20px' }, children: "No rate limit data loaded yet." }))] }));
382
382
  }
@@ -66,7 +66,7 @@ getShoppingCartItem.propTypes = {
66
66
  apiProps: PropTypes.any,
67
67
  };
68
68
  export function getShoppingCartItem(props) {
69
- let qty = 0;
69
+ let qty;
70
70
  const thisItem = props.thisItem;
71
71
  const apiProps = props.apiProps;
72
72
  const itemCategory = apiProps?.itemCategory;
@@ -520,7 +520,7 @@ export function ConfigBuilder(props) {
520
520
  if (debug)
521
521
  console.log('AI Recommend button clicked for route:', index);
522
522
  handleAiRecommendations(index);
523
- }, className: "route-button ai-recommend", children: [_jsx("span", { className: "ai-icon", children: "\u2728" }), " Recommend"] }), _jsx("button", { onClick: () => removeRoute(index), className: "route-button remove", children: "Remove" })] })] }, index))) }), _jsx("button", { onClick: addRoute, children: "Add Route" })] }) }))
523
+ }, className: "route-button ai-recommend", children: [_jsx("span", { className: "ai-icon", role: "img", "aria-label": "sparkles", children: "\u2728" }), " Recommend"] }), _jsx("button", { onClick: () => removeRoute(index), className: "route-button remove", children: "Remove" })] })] }, index))) }), _jsx("button", { onClick: addRoute, children: "Add Route" })] }) }))
524
524
  },
525
525
  {
526
526
  id: 'services',
@@ -98,7 +98,7 @@ export function FontSelector(props) {
98
98
  }
99
99
  return null;
100
100
  };
101
- return (_jsxs("div", { className: "font-selector-container", children: [_jsxs("label", { htmlFor: id, className: "font-selector-label", children: [label, required && _jsx("span", { className: "font-selector-required", children: "*" }), getTooltip() && (_jsx("span", { className: "font-selector-tooltip", title: getTooltip().replace(/\[([^\]]+)\]\([^)]+\)/, '$1'), children: "\uD83D\uDC41\uFE0F" }))] }), _jsxs("div", { className: "font-selector-input-container", children: [_jsx("input", { type: "text", id: id, name: name, value: inputValue ?? '', onChange: handleInputChange, onFocus: handleFocus, onBlur: handleBlur, placeholder: placeholder ?? undefined, required: required ?? false, autoComplete: "off", className: "font-selector-input" }), showDropdown && filteredOptions.length > 0 && (_jsx("div", { className: "font-selector-dropdown", children: isLoading ? (_jsx("div", { className: "font-selector-loading", children: "Loading fonts..." })) : (filteredOptions.map((option) => (_jsxs("div", { className: "font-selector-option", onClick: () => handleOptionSelect(option), onKeyDown: (e) => {
101
+ return (_jsxs("div", { className: "font-selector-container", children: [_jsxs("label", { htmlFor: id, className: "font-selector-label", children: [label, required && _jsx("span", { className: "font-selector-required", children: "*" }), getTooltip() && (_jsx("span", { className: "font-selector-tooltip", title: getTooltip().replace(/\[([^\]]+)\]\([^)]+\)/, '$1'), children: _jsx("span", { role: "img", "aria-label": "preview", children: "\uD83D\uDC41\uFE0F" }) }))] }), _jsxs("div", { className: "font-selector-input-container", children: [_jsx("input", { type: "text", id: id, name: name, value: inputValue ?? '', onChange: handleInputChange, onFocus: handleFocus, onBlur: handleBlur, placeholder: placeholder ?? undefined, required: required ?? false, autoComplete: "off", className: "font-selector-input" }), showDropdown && filteredOptions.length > 0 && (_jsx("div", { className: "font-selector-dropdown", children: isLoading ? (_jsx("div", { className: "font-selector-loading", children: "Loading fonts..." })) : (filteredOptions.map((option) => (_jsxs("div", { className: "font-selector-option", onClick: () => handleOptionSelect(option), onKeyDown: (e) => {
102
102
  if (e.key === 'Enter' || e.key === ' ') {
103
103
  e.preventDefault();
104
104
  handleOptionSelect(option);
@@ -268,7 +268,7 @@ export function FormExtractEngine(props) {
268
268
  }
269
269
  }
270
270
  else if (props.htmlPaste) {
271
- let json = {};
271
+ let json;
272
272
  if (!htmlPaste || (props.htmlPaste !== htmlPaste)) {
273
273
  setHtmlPaste(props.htmlPaste);
274
274
  const thisHTML = new DOMParser().parseFromString(props.htmlPaste, 'text/html');
@@ -54,7 +54,7 @@ function generateFieldJSON(component, type) {
54
54
  }
55
55
  ];
56
56
  // Type-specific fields
57
- let typeSpecificFields = [];
57
+ let typeSpecificFields;
58
58
  if (component === 'FormSelect') {
59
59
  typeSpecificFields = [
60
60
  {
@@ -68,7 +68,7 @@ export function ComponentSelector(props) {
68
68
  padding: '0.75rem',
69
69
  marginBottom: '1rem',
70
70
  color: '#0d47a1'
71
- }, children: [_jsx("strong", { children: "\u2795 Adding child component" }), _jsx("div", { style: { fontSize: '0.875rem', marginTop: '0.25rem' }, children: "Select a component type to add as a child" })] })), _jsx("label", { htmlFor: "component-type-selector", style: { display: 'block', marginBottom: '0.5rem', fontWeight: 'bold' }, children: "Component Type:" }), _jsxs("select", { id: "component-type-selector", onChange: handleComponentChange, value: selectedValue, style: {
71
+ }, children: [_jsxs("strong", { children: [_jsx("span", { role: "img", "aria-label": "add", children: "\u2795" }), " Adding child component"] }), _jsx("div", { style: { fontSize: '0.875rem', marginTop: '0.25rem' }, children: "Select a component type to add as a child" })] })), _jsx("label", { htmlFor: "component-type-selector", style: { display: 'block', marginBottom: '0.5rem', fontWeight: 'bold' }, children: "Component Type:" }), _jsxs("select", { id: "component-type-selector", onChange: handleComponentChange, value: selectedValue, style: {
72
72
  marginBottom: '1rem',
73
73
  fontSize: '1rem',
74
74
  border: '1px solid #ccc',
@@ -76,7 +76,7 @@ export function ComponentTree({ components, onSelectComponent, onEditComponent,
76
76
  cursor: 'pointer',
77
77
  fontSize: '0.65rem',
78
78
  lineHeight: '1',
79
- }, title: "Move down", children: "\u25BC" })] }), _jsx("button", { onClick: (e) => {
79
+ }, title: "Move down", children: _jsx("span", { role: "img", "aria-label": "move down", children: "\u25BC" }) })] }), _jsxs("button", { onClick: (e) => {
80
80
  e.stopPropagation();
81
81
  onEditComponent(component, currentPath);
82
82
  }, style: {
@@ -87,7 +87,7 @@ export function ComponentTree({ components, onSelectComponent, onEditComponent,
87
87
  borderRadius: '3px',
88
88
  cursor: 'pointer',
89
89
  fontSize: '0.75rem',
90
- }, title: "Edit properties", children: "\u270F\uFE0F Edit" }), isLayout && (_jsx("button", { onClick: (e) => {
90
+ }, title: "Edit properties", children: [_jsx("span", { role: "img", "aria-label": "edit", children: "\u270F\uFE0F" }), " Edit"] }), isLayout && (_jsxs("button", { onClick: (e) => {
91
91
  e.stopPropagation();
92
92
  onSelectComponent(component, currentPath);
93
93
  }, style: {
@@ -98,7 +98,7 @@ export function ComponentTree({ components, onSelectComponent, onEditComponent,
98
98
  borderRadius: '3px',
99
99
  cursor: 'pointer',
100
100
  fontSize: '0.75rem',
101
- }, title: "Add child component", children: "\u2795 Child" })), _jsx("button", { onClick: (e) => {
101
+ }, title: "Add child component", children: [_jsx("span", { role: "img", "aria-label": "add", children: "\u2795" }), " Child"] })), _jsxs("button", { onClick: (e) => {
102
102
  e.stopPropagation();
103
103
  onDeleteComponent(currentPath);
104
104
  }, style: {
@@ -109,7 +109,7 @@ export function ComponentTree({ components, onSelectComponent, onEditComponent,
109
109
  borderRadius: '3px',
110
110
  cursor: 'pointer',
111
111
  fontSize: '0.75rem',
112
- }, title: "Delete component", children: "\uD83D\uDDD1\uFE0F Delete" })] })] }), hasChildren && (_jsx("div", { children: component.children.map((child, childIndex) => renderTreeNode(child, childIndex, `${currentPath}.children`)) }))] }, currentPath));
112
+ }, title: "Delete component", children: [_jsx("span", { role: "img", "aria-label": "delete", children: "\uD83D\uDDD1\uFE0F" }), " Delete"] })] })] }), hasChildren && (_jsx("div", { children: component.children.map((child, childIndex) => renderTreeNode(child, childIndex, `${currentPath}.children`)) }))] }, currentPath));
113
113
  }
114
114
  return (_jsx("div", { children: components.map((component, index) => renderTreeNode(component, index, 'root')) }));
115
115
  }
@@ -102,16 +102,16 @@ export function PageEngine(props) {
102
102
  }, title: "Move up", children: "\u25B2" }), _jsx("button", { className: "move-btn move-down", onClick: (e) => {
103
103
  e.stopPropagation();
104
104
  onMoveDown?.(currentPath);
105
- }, title: "Move down", children: "\u25BC" })] }), _jsx("button", { className: "edit-btn", onClick: (e) => {
105
+ }, title: "Move down", children: _jsx("span", { role: "img", "aria-label": "move down", children: "\u25BC" }) })] }), _jsx("button", { className: "edit-btn", onClick: (e) => {
106
106
  e.stopPropagation();
107
107
  onEditComponent?.(componentData, currentPath);
108
- }, title: "Edit properties", children: "\u270F\uFE0F" }), isLayout && (_jsx("button", { className: "child-btn", onClick: (e) => {
108
+ }, title: "Edit properties", children: _jsx("span", { role: "img", "aria-label": "edit", children: "\u270F\uFE0F" }) }), isLayout && (_jsx("button", { className: "child-btn", onClick: (e) => {
109
109
  e.stopPropagation();
110
110
  onSelectComponent?.(componentData, currentPath);
111
- }, title: "Add child component", children: "\u2795" })), _jsx("button", { className: "delete-btn", onClick: (e) => {
111
+ }, title: "Add child component", children: _jsx("span", { role: "img", "aria-label": "add", children: "\u2795" }) })), _jsx("button", { className: "delete-btn", onClick: (e) => {
112
112
  e.stopPropagation();
113
113
  onDeleteComponent?.(currentPath);
114
- }, title: "Delete component", children: "\uD83D\uDDD1\uFE0F" })] })] }, `wrapper-${index}`));
114
+ }, title: "Delete component", children: _jsx("span", { role: "img", "aria-label": "delete", children: "\uD83D\uDDD1\uFE0F" }) })] })] }, `wrapper-${index}`));
115
115
  }
116
116
  const components = [];
117
117
  const pageComponents = props?.pageData?.components;
@@ -126,17 +126,17 @@ export function SaveLoadSection({ pageData, onLoad, apiEndpoint = '/api/pagebuil
126
126
  border: '1px solid #ccc',
127
127
  borderRadius: '4px',
128
128
  fontSize: '1rem'
129
- } })] }), _jsxs("div", { style: { display: 'flex', gap: '0.5rem', marginBottom: '0.5rem' }, children: [_jsx("button", { onClick: handleSave, disabled: isLoading || !pageName.trim(), className: "button", style: {
129
+ } })] }), _jsxs("div", { style: { display: 'flex', gap: '0.5rem', marginBottom: '0.5rem' }, children: [_jsxs("button", { onClick: handleSave, disabled: isLoading || !pageName.trim(), className: "button", style: {
130
130
  flex: 1,
131
131
  background: '#4CAF50',
132
132
  color: 'white',
133
133
  opacity: isLoading || !pageName.trim() ? 0.5 : 1
134
- }, children: "\uD83D\uDCBE Save Page" }), _jsxs("button", { onClick: () => setShowLoadList(!showLoadList), disabled: isLoading, className: "button", style: {
134
+ }, children: [_jsx("span", { role: "img", "aria-label": "save", children: "\uD83D\uDCBE" }), " Save Page"] }), _jsxs("button", { onClick: () => setShowLoadList(!showLoadList), disabled: isLoading, className: "button", style: {
135
135
  flex: 1,
136
136
  background: '#2196F3',
137
137
  color: 'white',
138
138
  opacity: isLoading ? 0.5 : 1
139
- }, children: ["\uD83D\uDCC1 ", showLoadList ? 'Hide' : 'Load Page'] })] }), showLoadList && (_jsx("div", { style: {
139
+ }, children: [_jsx("span", { role: "img", "aria-label": "folder", children: "\uD83D\uDCC1" }), " ", showLoadList ? 'Hide' : 'Load Page'] })] }), showLoadList && (_jsx("div", { style: {
140
140
  marginTop: '0.5rem',
141
141
  padding: '0.5rem',
142
142
  border: '1px solid #ddd',
@@ -167,7 +167,7 @@ export function SaveLoadSection({ pageData, onLoad, apiEndpoint = '/api/pagebuil
167
167
  padding: '0.25rem 0.5rem',
168
168
  cursor: 'pointer',
169
169
  fontSize: '0.875rem'
170
- }, children: "\uD83D\uDDD1\uFE0F" })] }, page))) })) })), message && (_jsx("div", { style: {
170
+ }, children: _jsx("span", { role: "img", "aria-label": "delete", children: "\uD83D\uDDD1\uFE0F" }) })] }, page))) })) })), message && (_jsx("div", { style: {
171
171
  marginTop: '0.5rem',
172
172
  padding: '0.5rem',
173
173
  borderRadius: '4px',
@@ -1 +1 @@
1
- pxl:v1:18abfb175f3eda28fcb71b19:88d9139c5e6c054df401944497a84a85:7b752c165f15de118c4443b8c4163493f501bba71b244f91547e65bdf73b7ef08b0bb6002ccbfc60da18e4ad08058e83c9ca982587b6bba7e7a12d7d938907228cdd2e3910ae8af3b89d591a1155499f069dde0ff0c6b1900c4c8fc3dc483bea9756d46127258633ecf04b2233ab5ec33cf5dbb0d8c2701b93a8b73b0ba5381e7bfc0ee16cc4f9b97a244f909499ccb28424abd6cbe7aba404b405af61933bb2ce98605af816b98f0712bb106581cd66c381efc0541141c078d2cc776164f0485b80d7bc5d65de302b975769ead4a4d73fa732b08f5b1c2c7b5e4aedeb02b478e21de71cf63592121c008668f819aae230d12511ec9a4bfbba8878624b0fa9d3dd94af75f1c02b79fcfaf2632bb58e9dd2015a5fe105ab5b1e6fd41e52a62ee6b320af44927748877bb058c94ef4d04bba5f54fa89bb4bc3133195e4ee2684f88eb02c3a5169a77353c3313aa70a164b37572325fd649498b2893d39c0f96142ea5d4273d0dd6b20119dbfeb0fe7e4534015270bebdb72bc6e209d95450303587fd0e46da080da61264df599f856b17d31bbf4e83f22d10937fd91108c24ee0d5b01c2eae1ae42f5f0035026b0c713655740e1b191fcd1164f35fb530d6e5569f0b1b57cb8caacf840e70bffb2722651e3cfcd98d89a8b4db933fdebb9ea686f1356c176c6c9f8af18a6ea1d9e1209f7dee17db270480fd572e4a3a41695cdf8336ddd2e233ae13c09f6c8a7acc6a115db21c0c25abec8b8b9fa25e207404117799a4caa21835ab95d03ae2acd0e0e40ed55adc5d64dd8ef2071a342a5d51ed89b7a098407656af61047eab8c4d5c882097316bec3ef6fbcc541dac6e03484d682dcdc1b452a7d4459882d3a2c6256869c86133708905e033e8e5111a6d17c78d9fa8cf252319dba026167d54fa2c6301c84381bb24b202ffb48f58edd48728de570dd3f5dfdc3e4920e803c4219431925bf2d651e1fc27e4368c6244fba498f66d5f4426a45918618ce0541ec48e330f8860d852483f4e10db4ef1cbcf216d82de6e0b6ac987a4492b53533c353e6e7238f5bc2b51db693c685ec7ba250d53af3fcd69b5e697524887dca88f5d16d5548dd364c38a50624072e270bdff6e782415a8aa0acd14ec22186518a0fb49f695cabcafbb4d9a5f04959efe36284e332d50cb0dbcbe81822ec5b618260c4d4c816b1de6c08f42a874f07c01ebfbedb4778c75c3fccd1a34c4adfa13f85ff2887a4e403a139eba2d92d0862dbcb051f8d2fa9737e5f80f1f755359015244fc72b8971391222a2e526493fc9f058b7656c2b1c77eb1143828a2ed8665c1d13d23598da5c1856f5f2669709a321052b8232e6d6044ce84dd083fcb64c34828bfcda076af0ea40a362172b98d39ed2bc7e45c31ea7f11429bffcf1df8dd1ed35564101ee89e368274ff50a55b4ad5edb0cf9b2144ce117254ee6ceaed213c45cfead5a25861844ec9502ac96196a8b43577901b68958dc2d7e1ec000a429540b0fdcc469d43d4dd1d2863828507deba7c9a18e49b6c234309f505205b3d900c2dfd967fc532a725e24bcf39005fdf3ccb5350c6d2713b9935dece88f741eb9e0fb3c0696c52c9a92d4d92e0d296d175d852f722897bc3ecb85a53ddf3aeb45bc5b262e83f4fcaf8679c515541e58f1c084351aed15081eb5d33965f7e9bcc69f3c112adff17bba33f5cfd91f7ed173f08c02e42b29fb25d62ad3d7dac1c0a3b5fa97a4537f1f983e08da6fd60cb38becc41894d16e367b959926f05a60864e04fd1965e2395ec76a22dd6b99efdeb3ca61935732f0e62c8ad26a22f1c0846ea56a54274d03c3c62666a6172daa85088b0fab81198174836f4f5b0635f7fb416066d6f42ef16738ac04c4ea84bceb54cd8fe02b4caf211e323737bfe92a5bbc1c1fa80d30cbdb03644197eb01d54df8bcd2a45d5090ef4448f59c77d248152969a73d24f7748a13a37ae30ec91ad854dc1c3b700fd26a3d00c887f6a323ad1fbe2d73526b7862198bfa7892306e11cad0d4be8945587fb11e0dbd4c12612c5635b934fcaac6c657e5741c2b7fd8b3a4a85267ceec54b8996f9c7b2597e05a3387fe8bc6f0771a9d48b81081083a424faee8ad1b2d1e6f2c642601cb638608c9546b894916f05f7f1b5fff08e7c0dabe672e688a15bc22e26492994fb79435cb4cd26a1e54ceba10114e368899dc139f1f364e2fcab599573d0f98dddd2db287d7613fe16b3bc56cdda1f52b9f481b81cb72d5108bd071a5c1cf14289b61d144afc26691ec37db143f84fdc57aa416a289467881f06666dc204c66d8847e40467eb2954bd058286c3e46a82c1ced4156df93d8f0fb02e478cf58e46f7d70ee77edb5a8bd7b1240aa5ad0c8a9874081c7c13fe178092ca50b051b2f95bb618688fd075266b57f10a03ebcc3935cfc6b06a348b54f67f7f6dbf75b1bc4407e4dd158d84f2aa9871e2976e28766689d6594362dba0f8ccefcfab3fdd603f31ed5ad63d6bf98eb73f3a3bb38561395746ec811c04ff241fffd14b5d280da67fb865ea1e2cccd7ca902b61f849936d7760f37785272dc6d8f9c7f0838802cc9410ec98e9d41db26677fef0bf710a62b22610718c3fc5ab0fb188d295d1eaa1a98c9d90e57501db94b5c8bbae4ec5440726360d8cdaa9c9e84ddcfa046db2c5bba29498bf3088a8a86aa097f1155324de34e07bd1fa6388e40ec15ecd9d790409754c86767d0f2dff63054cfa17bc56c5888705c1953c6673b5211f3325a05c35cb7f5638b5efba2f0307d03d9197b0463356e893d4f01c4c5594e0ddcf9d425b95575b459b7711c87ee78b7a76eb738a92b6aa294b164b4500096c0da71d072b71e61507de8aff343db309469d3164a982e8c49e5a972fc6042740ef2fd640a7a75d6f56522a7833beb49ad143ca9d4b809378e52d944a9c248892136752984578a39fbc6a69198df8710469cec7234f7a30be36837df4dab8790a00ac8fcc90617f04ed5a6f112332fe3ef489f3e21d8df1a45f50e4bde9a73686d0adb177e8a9ed3f8d78f35417e0de0c8e516a58f9b042a3fed04332385ac06965e0699998b52d567c337bab2c9b938b7a2b83ca78c99d2dc64f8e9f4fbc78dbf52b63d9f9c07ffaf69522009eb8c1764566daad9591e979893bc26f4baa0ce9ca92b13dda352421aea067d68703cf6496442fc109e9c48567a0879421040ccddf062c15b7adb888f6e6c0ac2dee7283de42b0b0cd2e785d6d130a2692a4d6589756f959581016079ec23fc9d59ceb2906fabd4c6181bb3fb226750bac42a10ac80472e8b3c89d5543e1368e6a2b78b6d449f1c60e63c20134a229ceb4cfce0b86ebbcf257a6aa6e8b1d83166e5178d6d3d3c0996469b52aae46fc04a704709032a2974fff1b0d6cd4ec57b3571bec80e63a0a92171d4307a28b87b48d5224c360a67fe671b69fe482555e8a2103dd0dbee0cda986e225ff4ec5a3b5c4488c8a4ad9458ac9f5108894358ff41740ae6725e2740fb5fa8129ec5fbec951aa087d42f1dd9bc06880ce1dd55b5e7bc233b2779d62489c9ccc6be147d107d7727c0679e2a53b0c19e9f763771a2b71affdb21139cb68711faa079848ba805277cf8e8c6998435d8985ad0167113dac10ca510b3a93d0f56816760ca3d7b13127bb67c49b36118bf1f2e3fce3adfc6c3fb0ab737abc41f55552a0ab6a8094800b416f8a8b4b289f04fca273a58bb953d2d7ce1f0d4f379387c6900df1747d04ee16b3089a4487c55d9d3e90f873375c4eed4d87f61c6b1272b56e9fabe6410238490c39461360f1e9e062f7ddcbca3bd3a364b6b1beb8fc2813244ca4de827591b546234355d1a5df99a16829aa3469950e121e82fe7d8b437a7d22829bb35fdc8f24e2dc865cbfd9e2d4e4bd1d730dbcffa6d590b4ff3c6d25a0b6f3b3f968170c27fd63720506b3ee70b3b768fb1b2d298f10eb2c7c6942aaee3edba9ed5389770f3653421a7043d3da7a0a7b1d8b78f0dc4cea26c0e499e7d1b39103158d7a9c96672832f3211d00acc978fe6c6e8d1e1d339a97bd38eb9132e2ed3458125437eff12b3c0f3f8a886845bc093b5dbf4c3461b0ad5581955f1ba2147e4b69f89fa44bba25fd328c99179da337b2e364f096f162a861c21372528b09b3f9e8c2fa2d0f07ff2d186f141cc37e8129d496f92db1ebcbc6728e2d30976159b5dd855209ce869a0ef6cbf1e23a9a4449830e74b850057df371657a4b8742038dd6988e646f26a3d42066ac4c1e7aff56a1b745b44478c98efbe95cef831420a293e88f91e36b44cdbaf32b2a5baae26a9c11086e8adab9bea6c2f4ad518a621a1e962e80a15bb321ffc5c3a74ed8f809d796248df548fa7fe7b887591c474a922969bd5921deb6a2e0b92265cfd7d68eb3d43fa77f1ec978b934c1654cfb482dd67a8eee6aa83eb82c22ac047c538512068ddb0e9bc078f5072bf979c5aea6ed010f62e8871a765e4717b7eda6fbc49dffc6e1aed93b5851c023c3a606b393a184e40b0a18b179058de45a3b6054d156d8f015d5450f3956eee77973b41df51b2e59828ae3f75154f57b3d739c8ac22fcfe911289c3acde01aabcc2d72b530e537c534d06a5349a95044a7d433ef380b0c1eb650a535228835c0fc4cd7060e0dabde4a9e6b79554dfb01dd91149d3876e4363cc0dafeae2af3589d411f0e269c26958097586d856c2fcbbb970a3a904f138372585e4db360b6f70e48e99e1001d2de573f50c23b8c769804e1f1c7c5c82078abbe9c4efc6c69a58792952b00e21ff6ddf97ef5089456776eb0f6ff1ba403e0cc9d75744f0487caf14815ea870e950464f40f829cf7375c2392edaf7026fb5f1b911d7ecad096e3a936f7ae374335c82736acd1937041bac88f36402dc20fcc2fe7f9a078f50c52349ae091de47775411753f64598f91245092072b625dc082243e3226c7232836f416dc7c0b2ce45ec8212eaa58c328a3adbf9b604ad960714df0958213bb6c269ca9547f2d2ca2f75aff91858de806f19aac2da3344294eb397d387ca223400736ad33512460107a8c3d18b6e6aea341bd287babf266209f8bc5e94a94d3298bd839115f3da00af1e4fbd8529fa6c69883a128a55cfc82041afef78f8d7cb3c4c8593b9259f56aa7dc465887232ebee84
1
+ pxl:v1:19583b2d4cffcf9960898880:e73ee5b6d8c0ed02bf573a7ebb38abdc:e72b5481c485ee728bcdc549d4a134c698f335ccfbe83a8b19b4643a533f3de9dc49e93dbdeb7066305d74f04f0794dabf108f6cb4f31ecfbe27e45636147eb4c6f66e2f308ca25d7ab8cad465b7a29f8dbe2d20871df5ea1c2190cdc9ec2ccfc65348e95e2347b0a8bf2e65cb1f8c72ed9ac882b112a16a46623d042893f7e6768ad60c0d2f15b06af324b0db4b8d50a732f334a8c66031f734f00dbd06bded7addcd4f1bc0ca75aecb71739439a762d3795b86bf6309c51bfc790a6953f449aea40e7362ba492057d5dcfb330a544837e85b1ae02da591149d92151b72f9cff92037ad8e24db20459065d37754d4d56f5b21496cad5d34fcece3f8b2a04f571d7bc3111b0003ac3ab6d3f3c6be26405372e491f662ae56ac64f1b3f0eb7351ecae27a510f0c7d38da8850099506f1a05c696d86cb646136a55df756de37ce577cd9e38a57f4f5037283391dab2220bec50eb578fbe061a815c42d3e43b66bd48b54c0f4d89cc2c3bed153917b63099ff281afbb84fcf3b2ecf441d8d6954fd416f65b9adb4d35958ad50c0499c6e3546c5d44d021404a080f954e20df1abcd736f7622f018b24cb8c51b0a1bdd0b399dae60ba501da0e99d07d3c22cfcaff1b14095f1327208df1ef4510735e370a2fde079688d3f270602fa89816e1e0de2d27dd6e33fc456b30a4cae7f391a6b70c6e62c41a23a5fbabc8f644e4f0d352a151a4b3fdfdfc8b96ba2e375f7b1ad99429ed11d704afdf518718a0cd5644259518a75b153207baccee9d7409034668960115b54dfc275052c4609afdc5f3efd76d3081f92fc5847c8b10aa72e1e014b20a8579a856c83b067438e300681ef38d710b234577bd74889b6bfd3941f50ac836bcba61e11f31bcd6edc1966ed16966b82d7e71875dbfc22a5143e443dabf268f8b872411ab927b971e04f01cf306f63a1f2d9f3b831373f0c4da16411f1407b528b838754cb6254b5b30e31271c91c9198f4e422b293ac8bf83cf76d6855fcae4ffe5b97a09f83176146b192ed5fb2f45d71ef1391c6d9111aba24f2e346f140fd5103fc35e4bc0e99bcb829cc554e562bf08a2987a43697e2b7467397862081d6da852f5d134d9ebeaa31ed8b8ab308fead700d0dbfb701dba2c56380f93a304dd9565ab5c249d86f5a7ed75a33604c74b129aedb83bac274242514a6904056b7fac94503c95c9e260c5473eccf81848ca98a8c85aede061e0a3a9b54a448c2fd18a4371d31766b3a8538b50f15feda7034cbc1f18f1c3fa4a650b42e28135e56210902b4b972cc766f53972cb9f5c1ec183b50f4e916a4b9ce7f351dd4e10d98d34129e1a1b208268d7327000e2e235f2db9f1c4fc58fa19015cab3b93aa4af1bd623d766c9b4db64d015647b4b06f0d45b70d1a09231fd7427476c98eb30d2b8c70c410a4fdb42902bf9ce63753948064312d16d6910840eaec8a3ea93b56041de614d60c3568fc185793b336770f1a52f8230ee090147325b19a05418b19a1d39d1b420f7b174e9c57ce0f623ea09c7662bad65115025b84b677ab49fbab30370ef52b7fd742f1dd68def6fe345e051cad1fc6cf5d44d8e149ffdc35e50faaff77aa43758e4a0a7ad4c603e8282b1f1d7c7a5a505cb6892fd0ccfb2a60a7b7818d9f0d7fdeb45e012868e5f14d736022ebe3446a6f7b213e4fb617ffeadfc748bc4641123fcc9a711584ffafdbceaf12a059b044cd68b6682f53e136960f06788949fdbffb044f4fc67046732f7bbde208b38d2e76ba7662964f0856dd8a380cf0983236240fa9e4dcc138790a3e7264d5a9b280f81cf3e9b6b86bbe066d37bef68cedcb0b9ec913f53d71364872f020d0ed6f410170fc91b582905bd36a10b32199d1f3031a9d2309bab7108dc144c4d8b54fb57e61388728298a8e1343d23e5ffddc18822d20a6caa9d8286bbc9a6d30ad914b785c02daf03d95f65e0f7ee03ce9d780bcfc783c5712258aae147eb917d1e1757ea0a631f2d790c721ed239eeb0a051c6cb270ec98647eb6f40bcede502cced490deb1888576d5d68fe680b1cb63fbdf8fa577617ed22b60f59f3760386766e11ad9b7ced8fb3d83fe9fbda75e562a5da38fd66f5d9623ed4186b7c7503f7d7b1fb8038b7e7b04ac183c0af83e51a7ce86048fed388a1a5ac46142961eba722efb14646475329f9697a8b496eb41e3a951e1e90eff05c50bcd6e7adc143c6ef54ec80c49bdacda5f2e7c50f00e666b60b55cc6f8440cd886f7c0356ec956de7b5b9a49ca5ce38a1abd31ddad53d18fb6784f413cd3ac5e8ad9efd5b1d7efdc87dda531f7b4d724de806c93991ae81acfb6a93d69b203e1cab6e2522d0af98c426a3094bbf278d4d2e8485f5bcc403cb0bf4cf3dd0471082a8c27877a63e1927ead904a16fbd80d74bb0d286d4c5659c864a0c8e7a1cda2706a424a4bb6f2ac3d5f925282bdbd013ac1f893b71bb255f35befe53cc05ad38cad4984816aa4362d78c466ae12cec0ecad84f1d87a84cab700fbaf0e5f2c93cd60ff93fa379d61d0399637c7084700f9615b9deaea2a36d8622b3a2503166b59ac1e0d3ac653837373dc1f3f15cceb7bec7338452b0386c616a95c61341f4455f9f18db6205474f10bf29936f3f99375048df0620b4479a9cf7f93ec45768e2753fcb7fe8428dd2c680a2837d6ff22c23d433b6ce5fd53007e655d6c54129da61fa572d8181c584316bd761bc9cf600da95c47583cff1eeefd612bfdb1082165763861449bfa04ef37120b4be70a7f988708f2bba2d9d3c45c35328ee4c896ba94f0108806e60b11fe6c190fc34c9aaf80e40cf46602ae9024afd5fa9e45b242d6ffad514114e368ba79e38626613ebc068e2320199972bbadba8f36767368a79e32e77ca8049da792ed14241d50c585e01585ea95550a0135c434dff3c66afcfa7bf669640a1a6cc34e085d52d996eeaf1626694aa32d3b3d3dc128afe302a4ebe7e8def8a968861bf14d9eda7dedb250fbe317c10527dd517e0c53d3eaff395e290fab3ceda9447292451b44938d49fc696f09d51aff79b1d20b36ac97dd8d284dc5c98ad5fdb94745b32a7371b70cbbf3d9457a65863e3edfe187bc0779221153be444c38ecce6bd46f42399015fe4209a39e4fa0127f4862432d7fb6db829294d472c96a105db4c3e02463e253ce7c30d5aa8e45061f61d413211a389ed744dfc7ecca99e2793e2e71134a10e114b67bb29571b363eea388d4763fae1e86453b124a9b0a0726b63395a853525522dd2a244b18f422f05e57d2c47f8b527150259471c5b0c4c8c0ecc4b3a9eded3107fed768d5f564e342c68c71e1cd0144c8f883f065a51b4a46a3c03452b2e72437d3e0ac43ab7fd8b53b18508fdbe6baf49412d04b84dd44abcec211762c29664bb5244223e06d63727221184d17825ca16dc65fe33e8f1e93e9f092854144d58a70dc96fadfdb4312b513daff6db6ea7cc24d34fbd5303885aa3b07905381b87e44fdaf2c0202a2f49716a393c3e01cb14eb53292a00d98c520b3f160cdb3b024878da4822495084f7402af6b48b3cfbbe4ca8fd78d575616f8b8b0560681a49ae402fbb408ccc5970a13bf0efa01d6680a674b64d36ecfa0a34cfb0de566e29d2021b04ab512f6316e125876255840b5deeaf816e888f0b4692b0b0c0c61981b1f384c0b3d6cf283cd956758505d9788cdf5089703b08c31d090bfc19b637b42bc7266dfee6fe70e493dd71156c31e8bfab797bdb4a0f1d93ca536103d7e4abc8358b5648a79c98ad73ff277c85da7e694a34aad92f2184bf0d38d3f1c1294ec6881698b4b771d604beab7025eec814177c5afbbf8ac6b8c7a98faa182514c0dd770e2a99a353e58f64e994a26c35240277df9a543a5fb1a93f47ecc6936fa5fa2ddbb8872f73de0550df9c8800c3a56ebf989c9e591882d877db06044d82054e6d1cb9a919030cabbaa33f3932386df2f63cfa73e107fad014765f98b109e4bc5c8b9157ff32b806aa13d2f6fc853220ab35721be88649e9c43eeef0dd17adcf42dcf612d177390526ba680bee4de1c6a92985abdc2c9a997f65bdb255950e8b860a502451d32bcf7965d6fe31eb09b48ecae97ec21f99bd2f1c3aeb49612987b8557f1e97e925a9d588d5a5b0b14674ab771e51d37574dacc51427dc97a7c68e7066a81262266493f23e9449848cbd418ef43e60e4eeaa41c67f2b0b57dca0696e4b2e22fa44b852bde27cde94e2905d75d335335d556632bfd6c42472bc6257248465a79f8422232e690e9e9268d2ce05108e10b1f2687b81f43fbebba95d0b504351d3bc5ce583a564b7b08c161fcd5d77cad808444f35a37fbfd9f9d529f9c350c0d7f182e959632448002f1e8c500fb75fb4b29b703ddde7e768935bae4d3a54239f624573276ca088a89064af9a254926533626a2f88ef52846b171cb3ce9b454e7763a2d57d2e39ebbc72c524e408152e14ffc8836ec4ca1c7a5120c730dad3407e61528c5bed2d8f4c045f06761acb2837f0aa334c4093d70829bedc07e49df72cb95be2e70c9fa6fa50a2c43a66f0634207e04a18c8020487b3c1ab89c53171fb52dfbf337adc38d96587bb8968f8d346091782edf9e871f6be3320701c7ec4bc73332f5486ac3103cb900d887d0e53eea1a60e923def40e28f0cc3f1f03483c760512fd88f59ebc9d3f6fd2e0af899c14bfaf15e210508ff0400ec57bbf0ff73603552f4b0c935991f0bc2a4564ba004810c2b109558f016d34e76351ebbd8344aed1a0c203629eda2ae82cef2e294e72461912eb9d075f2247558abf9085b177c1ef08086cc800bca75a968ea543d0602ff9f045375f4a4c6d0095d709df5b58f2669dda6a2a43057a3977475b57ad69e741b15e3bdc22df2523c903d6f3bb52ae5ed9e2d41705a8ca5cc5538cb53b10b13780c329537255222a458bfc2ca2404043b73edf776fb213e6dda63fab89bb05239f3ae51af23a45e1d10e3fd2513b9016d417dbc06b1f0f1cf8dd105eb10bdb21d7893f70c50704e27f8312d81142e628439d0a97934f90ab55700b67440341a92e3e93642af1e3344b0c8ccbcd799c076c3ab5c6c69645bde836fcf174db35338c78c41a9880958918b11e0fd434dfad18cfd9f54b38d9b40379973a61f049ede301ac0
@@ -255,7 +255,7 @@ export async function createAndPushRemote(destPath, siteName, defaultOwner) {
255
255
  });`;
256
256
  await fs.writeFile(tmpFile, tmpContent, 'utf8');
257
257
 
258
- let execOut = null;
258
+ let execOut;
259
259
  try {
260
260
  execOut = await _exec(`npx tsx ${tmpFile}`, { cwd: destPath, timeout: 60_000 });
261
261
  } catch (e) {
@@ -273,7 +273,7 @@ export async function createAndPushRemote(destPath, siteName, defaultOwner) {
273
273
  throw new Error('Missing provider output');
274
274
  }
275
275
 
276
- let githubInfo = null;
276
+ let githubInfo;
277
277
  try { githubInfo = JSON.parse(outStr); } catch (e) { console.error('❌ Invalid JSON from config provider:', outStr); throw e; }
278
278
  const token = githubInfo?.token;
279
279
  const cfgOwner = githubInfo?.defaultOwner;
@@ -373,7 +373,7 @@ export async function createAmplifyApp(rl, siteName, cloneUrl, sitePath) {
373
373
  try {
374
374
  createResp = await client.send(new CreateAppCommand({ name: siteName, platform: 'WEB_DYNAMIC', repository: cloneUrl || undefined, accessToken: githubToken || undefined }));
375
375
  } catch (e) {
376
- throw new Error('Failed to create Amplify app via SDK: ' + (e?.message || e));
376
+ throw new Error('Failed to create Amplify app via SDK: ' + (e?.message || e), { cause: e });
377
377
  }
378
378
 
379
379
  const appId = createResp?.app?.appId || createResp?.appId || createResp?.id;
@@ -164,10 +164,13 @@ fi
164
164
  echo ""
165
165
  echo "📦 Step $((STEP_COUNT++)): Updating dependencies..."
166
166
  echo "================================================="
167
- UPDATES=$(npm outdated | awk 'NR>1 {print $1"@"$4}' || true)
167
+ # build list of packages we can actually update (use the "wanted" column \3 instead of latest \4 so we stay inside semver)
168
+ UPDATES=$(npm outdated | awk 'NR>1 {print \$1"@"\$3}' || true)
169
+
168
170
  if [ -n "$UPDATES" ]; then
169
171
  echo "Updating the following packages: $UPDATES"
170
- echo "$UPDATES" | xargs npm install --force --save 2>/dev/null || true
172
+ # removed --force from npm install to avoid unnecessary breaking updates
173
+ echo "$UPDATES" | xargs npm install --save 2>/dev/null || true
171
174
  echo "✅ Successfully updated: $UPDATES"
172
175
  else
173
176
  echo "✅ No dependency updates needed."
@@ -178,7 +181,8 @@ fi
178
181
  echo ""
179
182
  echo "📦 Step $((STEP_COUNT++)): Updating Audit Fixes..."
180
183
  echo "================================================="
181
- npm audit fix --force 2>/dev/null || true
184
+ # remove --force to avoid breaking changes
185
+ npm audit fix 2>/dev/null || true
182
186
 
183
187
 
184
188
 
@@ -49,7 +49,7 @@ export function zipPixelatedTheme(inputPath, zipName = 'Pixelated.zip') {
49
49
  console.log(`Removed existing zip: ${zipPath}`);
50
50
  }
51
51
  } catch (err) {
52
- throw new Error(`Failed to remove existing zip '${zipPath}': ${err?.message ?? err}`);
52
+ throw new Error(`Failed to remove existing zip '${zipPath}': ${err?.message ?? err}`, { cause: err });
53
53
  }
54
54
 
55
55
  // Ensure `zip` command is available
@@ -74,9 +74,9 @@ export function zipPixelatedTheme(inputPath, zipName = 'Pixelated.zip') {
74
74
  } catch (err) {
75
75
  // Normalize ENOENT into a clearer message for callers/tests
76
76
  if (err && err.code === 'ENOENT') {
77
- throw new Error('`zip` command not found on PATH — please install zip (e.g. `brew install zip`)');
77
+ throw new Error('`zip` command not found on PATH — please install zip (e.g. `brew install zip`)', { cause: err });
78
78
  }
79
- throw new Error(`Failed to run zip: ${String(err)}`);
79
+ throw new Error(`Failed to run zip: ${String(err)}`, { cause: err });
80
80
  }
81
81
 
82
82
  if (result && result.error) {
@@ -1 +1 @@
1
- {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../../src/components/general/hero.tsx"],"names":[],"mappings":"AAEA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,YAAY,CAAC;AA+BpB,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;AACzD,wBAAgB,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAkB,EAAE,MAAe,EAAE,QAAQ,EAAE,EAAE,QAAQ,2CAwDnG;yBAxDe,IAAI;;QAdnB,sCAAsC;;QAEtC,2DAA2D;;QAE3D,8BAA8B;;QAE9B,6CAA6C;;QAE7C,6DAA6D;;QAE7D,gDAAgD"}
1
+ {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../../src/components/general/hero.tsx"],"names":[],"mappings":"AAEA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,YAAY,CAAC;AA+BpB,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;AACzD,wBAAgB,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAkB,EAAE,MAAe,EAAE,QAAQ,EAAE,EAAE,QAAQ,2CA2DnG;yBA3De,IAAI;;QAdnB,sCAAsC;;QAEtC,2DAA2D;;QAE3D,8BAA8B;;QAE9B,6CAA6C;;QAE7C,6DAA6D;;QAE7D,gDAAgD"}
@@ -1 +1 @@
1
- {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../../../src/components/general/recipe.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,cAAc,CAAC;AAetB,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,GAAG,GAAG,gBAAgB,CAuD5E;AAwDD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,2CAkF/C;yBAlFe,UAAU;;QAT1B,kEAAkE;;YAEhE,qDAAqD;;;QAGtD,uEAAuE;;;;AA6GxE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CAOvD;yBAPe,cAAc;;QAV9B,uCAAuC;;QAEtC,+CAA+C;;QAE/C,6BAA6B;;QAE7B,oEAAoE;;;;AA+BrE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAE,KAAK,EAAE,kBAAkB,2CA0CxD;yBA1Ce,cAAc;;QAR9B,oEAAoE;;QAEnE,oCAAoC;;QAEpC,wEAAwE;;;;AAiEzE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CA8CvD;yBA9Ce,cAAc;;QAR9B,uEAAuE;;QAEtE,kEAAkE;;QAElE,4FAA4F;;;;AA0D7F,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,wBAAgB,SAAS,4CAwBxB;yBAxBe,SAAS"}
1
+ {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../../../src/components/general/recipe.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,cAAc,CAAC;AAetB,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,GAAG,GAAG,gBAAgB,CAuD5E;AAwDD,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AACrE,wBAAgB,UAAU,CAAC,KAAK,EAAE,cAAc,2CAkF/C;yBAlFe,UAAU;;QAT1B,kEAAkE;;YAEhE,qDAAqD;;;QAGtD,uEAAuE;;;;AA6GxE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CAOvD;yBAPe,cAAc;;QAV9B,uCAAuC;;QAEtC,+CAA+C;;QAE/C,6BAA6B;;QAE7B,oEAAoE;;;;AA+BrE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAE,KAAK,EAAE,kBAAkB,2CA0CxD;yBA1Ce,cAAc;;QAR9B,oEAAoE;;QAEnE,oCAAoC;;QAEpC,wEAAwE;;;;AAiEzE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CA+CvD;yBA/Ce,cAAc;;QAR9B,uEAAuE;;QAEtE,kEAAkE;;QAElE,4FAA4F;;;;AA2D7F,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,wBAAgB,SAAS,4CAwBxB;yBAxBe,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"ebay.components.d.ts","sourceRoot":"","sources":["../../../../src/components/shoppingcart/ebay.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASnD,OAAO,+BAA+B,CAAC;AACvC,OAAO,YAAY,CAAC;AAkBpB,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,2CAmG7C;yBAnGe,SAAS;;QANzB,8CAA8C;;QAE7C,mEAAmE;;;;AAwHpE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,kDAqEvD;yBArEe,cAAc;;QAN9B,0DAA0D;;QAEzD,yCAAyC;;;;AA8F1C,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAwDnD;yBAxDe,YAAY;;QAR5B,uBAAuB;;QAEtB,8CAA8C;;QAE9C,0BAA0B;;;;AA+E3B,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CASvD;yBATe,cAAc;;QAR9B,0BAA0B;;QAEzB,sCAAsC;;QAEtC,6CAA6C;;;;AAkC9C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CAuFvD;yBAvFe,cAAc;;QAR9B,6BAA6B;;QAE5B,wCAAwC;;QAExC,kDAAkD;;;;AA4GnD,MAAM,MAAM,4BAA4B,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjG,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,4BAA4B,2CAgK3E;yBAhKe,wBAAwB;;QANxC,iDAAiD;;QAEhD,uCAAuC"}
1
+ {"version":3,"file":"ebay.components.d.ts","sourceRoot":"","sources":["../../../../src/components/shoppingcart/ebay.components.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASnD,OAAO,+BAA+B,CAAC;AACvC,OAAO,YAAY,CAAC;AAkBpB,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,2CAmG7C;yBAnGe,SAAS;;QANzB,8CAA8C;;QAE7C,mEAAmE;;;;AAwHpE,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,kDAsEvD;yBAtEe,cAAc;;QAN9B,0DAA0D;;QAEzD,yCAAyC;;;;AA+F1C,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,2CAwDnD;yBAxDe,YAAY;;QAR5B,uBAAuB;;QAEtB,8CAA8C;;QAE9C,0BAA0B;;;;AA+E3B,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CASvD;yBATe,cAAc;;QAR9B,0BAA0B;;QAEzB,sCAAsC;;QAEtC,6CAA6C;;;;AAkC9C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AAC7E,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,2CAuFvD;yBAvFe,cAAc;;QAR9B,6BAA6B;;QAE5B,wCAAwC;;QAExC,kDAAkD;;;;AA4GnD,MAAM,MAAM,4BAA4B,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjG,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,4BAA4B,2CAgK3E;yBAhKe,wBAAwB;;QANxC,iDAAiD;;QAEhD,uCAAuC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentSelector.d.ts","sourceRoot":"","sources":["../../../../../../src/components/sitebuilder/page/components/ComponentSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA6BnD,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,2CAiF7D;yBAjFe,iBAAiB;;QAXjC,oDAAoD;;QAEnD,wDAAwD;;QAExD,2FAA2F"}
1
+ {"version":3,"file":"ComponentSelector.d.ts","sourceRoot":"","sources":["../../../../../../src/components/sitebuilder/page/components/ComponentSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA6BnD,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,2CAkF7D;yBAlFe,iBAAiB;;QAXjC,oDAAoD;;QAEnD,wDAAwD;;QAExD,2FAA2F"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@pixelated-tech/components",
3
- "version": "3.13.5",
3
+ "version": "3.13.6",
4
+ "type": "module",
4
5
  "private": false,
5
6
  "author": {
6
7
  "name": "Pixelated Technologies",
@@ -87,7 +88,7 @@
87
88
  "config:decrypt": "npm run config:vault -- decrypt src/config/pixelated.config.json.enc",
88
89
  "create-pixelated-app": "node src/scripts/create-pixelated-app.js",
89
90
  "zip-theme": "node src/scripts/zip-pixelated-theme.js ../pixelated-blog-wp-theme Pixelated.zip",
90
- "update": "UPDATES=$(npm outdated | awk 'NR>1 {print $1\"@\"$4}' || true); if [ -n \"$UPDATES\" ]; then echo \"Updating the following packages: $UPDATES\"; echo \"$UPDATES\" | xargs npm install --force --save 2>/dev/null || true; echo \"✅ Successfully updated: $UPDATES\"; else echo \"✅ No dependency updates needed.\"; fi; npm audit fix 2>/dev/null || true"
91
+ "update": "UPDATES=$(npm outdated | awk 'NR>1 {print $1\"@\"$3}' || true); if [ -n \"$UPDATES\" ]; then echo \"Updating the following packages: $UPDATES\"; echo \"$UPDATES\" | xargs npm install --force --save 2>/dev/null || true; echo \"✅ Successfully updated: $UPDATES\"; else echo \"✅ No dependency updates needed.\"; fi; npm audit fix 2>/dev/null || true"
91
92
  },
92
93
  "scripts-20260113": {
93
94
  "build": "npm run validate-exports && npm run buildClean && npm run tsc && npm run rsync && npm run tscClean ",
@@ -100,7 +101,6 @@
100
101
  "rsync2": "rsync -a --include='*.css' --include='*.scss' --include='*.json' --include='scripts/**' --include='*/' --exclude='*' src/ dist"
101
102
  },
102
103
  "scripts-old": {
103
- "buildBabel": "npm run buildClean && NODE_ENV=production babel src --out-dir dist --copy-files",
104
104
  "build-webpack": "rm -rf dist && npx tsc --project tsconfig.json && webpack --config webpack.config.js && npm run build-webpack-rsync",
105
105
  "build-webpack-rsync": "rsync -a --include='*' --include='*/' src/css dist/css"
106
106
  },
@@ -110,30 +110,27 @@
110
110
  "html-entities": "^2.6.0"
111
111
  },
112
112
  "devDependencies": {
113
- "@aws-sdk/client-amplify": "^3.893.0",
114
- "@aws-sdk/client-cloudwatch": "^3.893.0",
115
- "@aws-sdk/client-iam": "^3.893.0",
116
- "@aws-sdk/client-route-53": "^3.893.0",
117
- "@babel/cli": "^7.28.6",
113
+ "@aws-sdk/client-amplify": "^3.996.0",
114
+ "@aws-sdk/client-cloudwatch": "^3.996.0",
115
+ "@aws-sdk/client-iam": "^3.996.0",
116
+ "@aws-sdk/client-route-53": "^3.996.0",
118
117
  "@babel/core": "^7.29.0",
119
118
  "@babel/plugin-proposal-class-properties": "^7.18.6",
120
119
  "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
121
120
  "@babel/preset-env": "^7.29.0",
122
121
  "@babel/preset-react": "^7.28.5",
123
122
  "@babel/preset-typescript": "^7.28.5",
124
- "@eslint/js": "^9.39.2",
125
- "@eslint/json": "^1.0.1",
126
- "@eslint/markdown": "^7.5.1",
127
- "@storybook/addon-a11y": "^10.2.9",
128
- "@storybook/addon-docs": "^10.2.9",
123
+ "@eslint/js": "^9.39.3",
124
+ "@storybook/addon-a11y": "^10.2.11",
125
+ "@storybook/addon-docs": "^10.2.11",
129
126
  "@storybook/addon-webpack5-compiler-babel": "^4.0.0",
130
127
  "@storybook/preset-scss": "^1.0.3",
131
- "@storybook/react-webpack5": "^10.2.9",
128
+ "@storybook/react-webpack5": "^10.2.11",
132
129
  "@testing-library/dom": "^10.4.1",
133
130
  "@testing-library/react": "^16.3.2",
134
131
  "@testing-library/user-event": "^14.6.1",
135
132
  "@types/md5": "^2.3.6",
136
- "@types/node": "^25.2.3",
133
+ "@types/node": "^25.3.0",
137
134
  "@types/prop-types": "^15.7.15",
138
135
  "@types/react": "^19.2.14",
139
136
  "@types/react-dom": "^19.2.3",
@@ -145,24 +142,20 @@
145
142
  "ajv": "^8.18.0",
146
143
  "ajv-keywords": "^5.1.0",
147
144
  "babel-loader": "^10.0.0",
148
- "clean-webpack-plugin": "^4.0.0",
145
+ "clean-webpack-plugin": "^1.0.1",
149
146
  "copy-webpack-plugin": "^13.0.1",
150
147
  "css-loader": "^7.1.4",
151
- "eslint": "^9.39.2",
152
- "eslint-config-standard": "^10.2.1",
153
- "eslint-plugin-import": "^2.32.0",
148
+ "eslint": "^9.39.3",
149
+ "eslint-plugin-import": "^1.16.0",
154
150
  "eslint-plugin-jsx-a11y": "^6.10.2",
155
- "eslint-plugin-n": "^17.24.0",
156
- "eslint-plugin-promise": "^4.3.1",
157
151
  "eslint-plugin-react": "^7.37.5",
158
- "eslint-plugin-storybook": "^0.1.1",
159
- "file-loader": "^1.0.0",
160
- "happy-dom": "^20.6.2",
152
+ "file-loader": "^6.2.0",
153
+ "happy-dom": "^20.7.0",
161
154
  "jsdom": "^28.1.0",
162
155
  "less-loader": "^12.3.1",
163
156
  "mini-css-extract-plugin": "^2.10.0",
164
157
  "next": "^16.1.6",
165
- "null-loader": "^0.1.1",
158
+ "null-loader": "^4.0.1",
166
159
  "prop-types": "^15.8.1",
167
160
  "react": "^19.2.4",
168
161
  "react-dom": "^19.2.4",
@@ -171,11 +164,11 @@
171
164
  "redux": "^5.0.1",
172
165
  "sass": "^1.97.3",
173
166
  "sass-loader": "^16.0.7",
174
- "storybook": "^10.2.9",
167
+ "storybook": "^10.2.11",
175
168
  "style-loader": "^4.0.0",
176
169
  "ts-loader": "^9.5.4",
177
170
  "typescript": "^5.9.3",
178
- "url-loader": "^0.5.9",
171
+ "url-loader": "^4.1.1",
179
172
  "vitest": "^4.0.18",
180
173
  "webpack": "^5.105.2",
181
174
  "webpack-cli": "^6.0.1",
@@ -192,17 +185,9 @@
192
185
  "@aws-sdk/client-route-53": "^3.893.0",
193
186
  "googleapis": "^171.4.0",
194
187
  "md5": "^2.3.0",
195
- "puppeteer": "^24.37.3",
188
+ "puppeteer": "^24.37.5",
196
189
  "react-redux": "*",
197
190
  "recharts": "^3.7.0",
198
191
  "redux": "*"
199
- },
200
- "overrides": {
201
- "eslint-config-standard": {
202
- "eslint": "^9.39.2",
203
- "eslint-plugin-n": "^17.23.2",
204
- "eslint-plugin-promise": "^7.2.1"
205
- }
206
- },
207
- "type": "module"
192
+ }
208
193
  }