@pixelated-tech/components 3.7.3 → 3.7.4
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/admin/site-health/site-health-on-site-seo.integration.js +15 -0
- package/dist/components/general/callout.js +4 -3
- package/dist/components/general/intersection-observer.js +117 -0
- package/dist/components/general/microinteractions.js +39 -50
- package/dist/components/general/schema-services.js +17 -4
- package/dist/components/general/schema-website.js +100 -7
- package/dist/components/general/splitscroll.css +125 -0
- package/dist/components/general/splitscroll.js +89 -0
- package/dist/components/sitebuilder/config/ConfigBuilder.js +142 -25
- package/dist/components/sitebuilder/config/services-form.json +51 -0
- package/dist/components/sitebuilder/config/siteinfo-form.json +68 -0
- package/dist/index.js +2 -0
- package/dist/scripts/setup-remotes.sh +69 -0
- package/dist/types/components/admin/site-health/site-health-on-site-seo.integration.d.ts.map +1 -1
- package/dist/types/components/config/config.types.d.ts +8 -1
- package/dist/types/components/config/config.types.d.ts.map +1 -1
- package/dist/types/components/general/callout.d.ts +3 -2
- package/dist/types/components/general/callout.d.ts.map +1 -1
- package/dist/types/components/general/intersection-observer.d.ts +73 -0
- package/dist/types/components/general/intersection-observer.d.ts.map +1 -0
- package/dist/types/components/general/microinteractions.d.ts +1 -1
- package/dist/types/components/general/microinteractions.d.ts.map +1 -1
- package/dist/types/components/general/schema-services.d.ts +25 -6
- package/dist/types/components/general/schema-services.d.ts.map +1 -1
- package/dist/types/components/general/schema-website.d.ts +60 -5
- package/dist/types/components/general/schema-website.d.ts.map +1 -1
- package/dist/types/components/general/splitscroll.d.ts +51 -0
- package/dist/types/components/general/splitscroll.d.ts.map +1 -0
- package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts +30 -0
- package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/stories/callout/callout.stories.d.ts +7 -0
- package/dist/types/stories/callout/callout.stories.d.ts.map +1 -1
- package/dist/types/stories/general/splitscroll.stories.d.ts +19 -0
- package/dist/types/stories/general/splitscroll.stories.d.ts.map +1 -0
- package/dist/types/stories/lookbook/lookbook.stories.d.ts +19 -0
- package/dist/types/stories/lookbook/lookbook.stories.d.ts.map +1 -0
- package/dist/types/tests/splitscroll.test.d.ts +2 -0
- package/dist/types/tests/splitscroll.test.d.ts.map +1 -0
- package/package.json +5 -5
|
@@ -12,6 +12,7 @@ import * as FC from '../form/formcomponents';
|
|
|
12
12
|
import siteInfoForm from './siteinfo-form.json';
|
|
13
13
|
import visualDesignForm from './visualdesignform.json';
|
|
14
14
|
import routesForm from './routes-form.json';
|
|
15
|
+
import servicesForm from './services-form.json';
|
|
15
16
|
import defaultConfigData from '../../../data/routes.json';
|
|
16
17
|
import './ConfigBuilder.css';
|
|
17
18
|
const RoutePropTypes = {
|
|
@@ -49,6 +50,21 @@ const SiteInfoPropTypes = {
|
|
|
49
50
|
priceRange: PropTypes.string,
|
|
50
51
|
sameAs: PropTypes.arrayOf(PropTypes.string.isRequired),
|
|
51
52
|
keywords: PropTypes.string,
|
|
53
|
+
openingHours: PropTypes.string,
|
|
54
|
+
publisherType: PropTypes.string,
|
|
55
|
+
copyrightYear: PropTypes.number,
|
|
56
|
+
potentialAction: PropTypes.shape({
|
|
57
|
+
'@type': PropTypes.string,
|
|
58
|
+
target: PropTypes.string.isRequired,
|
|
59
|
+
'query-input': PropTypes.string,
|
|
60
|
+
queryInput: PropTypes.string,
|
|
61
|
+
}),
|
|
62
|
+
services: PropTypes.arrayOf(PropTypes.shape({
|
|
63
|
+
name: PropTypes.string.isRequired,
|
|
64
|
+
description: PropTypes.string.isRequired,
|
|
65
|
+
url: PropTypes.string,
|
|
66
|
+
areaServed: PropTypes.arrayOf(PropTypes.string.isRequired),
|
|
67
|
+
})),
|
|
52
68
|
};
|
|
53
69
|
const VisualDesignVariable = {
|
|
54
70
|
value: PropTypes.string.isRequired,
|
|
@@ -92,7 +108,10 @@ ConfigBuilder.propTypes = {
|
|
|
92
108
|
export function ConfigBuilder(props) {
|
|
93
109
|
const { initialConfig, onSave } = props;
|
|
94
110
|
const defaultConfig = {
|
|
95
|
-
siteInfo:
|
|
111
|
+
siteInfo: {
|
|
112
|
+
...defaultConfigData.siteInfo,
|
|
113
|
+
services: defaultConfigData.siteInfo.services || []
|
|
114
|
+
},
|
|
96
115
|
routes: [], // Start with empty routes, the JSON structure is different
|
|
97
116
|
visualdesign: defaultConfigData.visualdesign
|
|
98
117
|
};
|
|
@@ -157,8 +176,21 @@ export function ConfigBuilder(props) {
|
|
|
157
176
|
? route.keywords.split(',').map((k) => k.trim()).filter((k) => k.length > 0)
|
|
158
177
|
: [])
|
|
159
178
|
}));
|
|
179
|
+
// Ensure services keywords/arrays are valid
|
|
180
|
+
const normalizedServices = (parsedConfig.siteInfo.services || []).map((service) => ({
|
|
181
|
+
...service,
|
|
182
|
+
areaServed: Array.isArray(service.areaServed)
|
|
183
|
+
? service.areaServed
|
|
184
|
+
: (typeof service.areaServed === 'string'
|
|
185
|
+
? service.areaServed.split(',').map((s) => s.trim()).filter((s) => s.length > 0)
|
|
186
|
+
: [])
|
|
187
|
+
}));
|
|
160
188
|
setConfig({
|
|
161
189
|
...parsedConfig,
|
|
190
|
+
siteInfo: {
|
|
191
|
+
...parsedConfig.siteInfo,
|
|
192
|
+
services: normalizedServices
|
|
193
|
+
},
|
|
162
194
|
routes: normalizedRoutes
|
|
163
195
|
});
|
|
164
196
|
setSocialLinks(parsedConfig.siteInfo.sameAs || ['']);
|
|
@@ -195,13 +227,26 @@ export function ConfigBuilder(props) {
|
|
|
195
227
|
}
|
|
196
228
|
}, [initialConfig]);
|
|
197
229
|
// Prepare form data for FormEngine with current values
|
|
230
|
+
const getNestedValue = (obj, path) => {
|
|
231
|
+
return path.split('.').reduce((current, key) => current?.[key], obj);
|
|
232
|
+
};
|
|
233
|
+
const setNestedValue = (obj, path, value) => {
|
|
234
|
+
const keys = path.split('.');
|
|
235
|
+
const lastKey = keys.pop();
|
|
236
|
+
const target = keys.reduce((current, key) => {
|
|
237
|
+
if (!current[key])
|
|
238
|
+
current[key] = {};
|
|
239
|
+
return current[key];
|
|
240
|
+
}, obj);
|
|
241
|
+
target[lastKey] = value;
|
|
242
|
+
};
|
|
198
243
|
const formData = {
|
|
199
244
|
fields: siteInfoForm.fields.map(field => ({
|
|
200
245
|
...field,
|
|
201
246
|
props: {
|
|
202
247
|
...field.props,
|
|
203
|
-
value: config.siteInfo
|
|
204
|
-
defaultValue: config.siteInfo
|
|
248
|
+
value: getNestedValue(config.siteInfo, field.props.name) || '',
|
|
249
|
+
defaultValue: getNestedValue(config.siteInfo, field.props.name) || field.props.defaultValue || '',
|
|
205
250
|
onChange: (value) => {
|
|
206
251
|
// Handle both direct values and event objects
|
|
207
252
|
let actualValue = value;
|
|
@@ -210,13 +255,14 @@ export function ConfigBuilder(props) {
|
|
|
210
255
|
const target = value.target;
|
|
211
256
|
actualValue = target.type === 'checkbox' ? (target.checked ? target.value : '') : target.value;
|
|
212
257
|
}
|
|
213
|
-
setConfig((prev) =>
|
|
214
|
-
...prev
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
258
|
+
setConfig((prev) => {
|
|
259
|
+
const newSiteInfo = { ...prev.siteInfo };
|
|
260
|
+
setNestedValue(newSiteInfo, field.props.name, actualValue);
|
|
261
|
+
return {
|
|
262
|
+
...prev,
|
|
263
|
+
siteInfo: newSiteInfo
|
|
264
|
+
};
|
|
265
|
+
});
|
|
220
266
|
}
|
|
221
267
|
}
|
|
222
268
|
}))
|
|
@@ -257,7 +303,7 @@ export function ConfigBuilder(props) {
|
|
|
257
303
|
const siteInfoData = {};
|
|
258
304
|
// Extract form data
|
|
259
305
|
for (const [key, value] of formData.entries()) {
|
|
260
|
-
siteInfoData
|
|
306
|
+
setNestedValue(siteInfoData, key, value);
|
|
261
307
|
}
|
|
262
308
|
// Update config with form data
|
|
263
309
|
setConfig(prev => ({
|
|
@@ -297,14 +343,9 @@ export function ConfigBuilder(props) {
|
|
|
297
343
|
}));
|
|
298
344
|
};
|
|
299
345
|
const updateRoute = (index, field, value) => {
|
|
300
|
-
// Special handling for keywords field - convert comma-separated string to array
|
|
301
|
-
let processedValue = value;
|
|
302
|
-
if (field === 'keywords' && typeof value === 'string') {
|
|
303
|
-
processedValue = value.split(',').map((k) => k.trim()).filter((k) => k.length > 0);
|
|
304
|
-
}
|
|
305
346
|
setConfig(prev => ({
|
|
306
347
|
...prev,
|
|
307
|
-
routes: prev.routes.map((route, i) => i === index ? { ...route, [field]:
|
|
348
|
+
routes: prev.routes.map((route, i) => i === index ? { ...route, [field]: value } : route)
|
|
308
349
|
}));
|
|
309
350
|
};
|
|
310
351
|
const removeRoute = (index) => {
|
|
@@ -313,12 +354,63 @@ export function ConfigBuilder(props) {
|
|
|
313
354
|
routes: prev.routes.filter((_, i) => i !== index)
|
|
314
355
|
}));
|
|
315
356
|
};
|
|
357
|
+
const addService = () => {
|
|
358
|
+
setConfig(prev => ({
|
|
359
|
+
...prev,
|
|
360
|
+
siteInfo: {
|
|
361
|
+
...prev.siteInfo,
|
|
362
|
+
services: [...(prev.siteInfo.services || []), { name: '', description: '', url: '', areaServed: '' }]
|
|
363
|
+
}
|
|
364
|
+
}));
|
|
365
|
+
};
|
|
366
|
+
const updateService = (index, field, value) => {
|
|
367
|
+
setConfig(prev => ({
|
|
368
|
+
...prev,
|
|
369
|
+
siteInfo: {
|
|
370
|
+
...prev.siteInfo,
|
|
371
|
+
services: (prev.siteInfo.services || []).map((service, i) => i === index ? { ...service, [field]: value } : service)
|
|
372
|
+
}
|
|
373
|
+
}));
|
|
374
|
+
};
|
|
375
|
+
const removeService = (index) => {
|
|
376
|
+
setConfig(prev => ({
|
|
377
|
+
...prev,
|
|
378
|
+
siteInfo: {
|
|
379
|
+
...prev.siteInfo,
|
|
380
|
+
services: (prev.siteInfo.services || []).filter((_, i) => i !== index)
|
|
381
|
+
}
|
|
382
|
+
}));
|
|
383
|
+
};
|
|
384
|
+
// Helper to convert comma-separated strings back to arrays for output
|
|
385
|
+
const getProcessedConfig = (rawConfig) => {
|
|
386
|
+
// Use a simple spread/map to avoid full deep clone where unnecessary,
|
|
387
|
+
// but enough to safely modify for output
|
|
388
|
+
const processed = {
|
|
389
|
+
...rawConfig,
|
|
390
|
+
siteInfo: {
|
|
391
|
+
...rawConfig.siteInfo,
|
|
392
|
+
services: (rawConfig.siteInfo.services || []).map((service) => ({
|
|
393
|
+
...service,
|
|
394
|
+
areaServed: typeof service.areaServed === 'string'
|
|
395
|
+
? service.areaServed.split(',').map((s) => s.trim()).filter((s) => s.length > 0)
|
|
396
|
+
: service.areaServed
|
|
397
|
+
}))
|
|
398
|
+
},
|
|
399
|
+
routes: (rawConfig.routes || []).map((route) => ({
|
|
400
|
+
...route,
|
|
401
|
+
keywords: typeof route.keywords === 'string'
|
|
402
|
+
? route.keywords.split(',').map((k) => k.trim()).filter((k) => k.length > 0)
|
|
403
|
+
: route.keywords
|
|
404
|
+
}))
|
|
405
|
+
};
|
|
406
|
+
return processed;
|
|
407
|
+
};
|
|
316
408
|
const handleSave = () => {
|
|
317
409
|
if (!isFormValid) {
|
|
318
410
|
alert('Please fill in all required fields correctly before saving.');
|
|
319
411
|
return;
|
|
320
412
|
}
|
|
321
|
-
onSave?.(config);
|
|
413
|
+
onSave?.(getProcessedConfig(config));
|
|
322
414
|
};
|
|
323
415
|
const handleAiRecommendations = async (routeIndex) => {
|
|
324
416
|
console.log('handleAiRecommendations called with routeIndex:', routeIndex);
|
|
@@ -401,14 +493,13 @@ export function ConfigBuilder(props) {
|
|
|
401
493
|
: { value: fieldValue || '' }),
|
|
402
494
|
onChange: (e) => {
|
|
403
495
|
let value;
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
value = e.target.value.split(',').map((s) => s.trim()).filter((s) => s);
|
|
496
|
+
// Handle both direct values and event objects
|
|
497
|
+
const actualValue = (e && typeof e === 'object' && e.target) ? (e.target.type === 'checkbox' ? e.target.checked : e.target.value) : e;
|
|
498
|
+
if (field.props.name === 'keywords' && typeof actualValue === 'string') {
|
|
499
|
+
value = actualValue.split(',').map((s) => s.trim()).filter((s) => s);
|
|
409
500
|
}
|
|
410
501
|
else {
|
|
411
|
-
value =
|
|
502
|
+
value = actualValue;
|
|
412
503
|
}
|
|
413
504
|
updateRoute(index, field.props.name, value);
|
|
414
505
|
}
|
|
@@ -419,6 +510,32 @@ export function ConfigBuilder(props) {
|
|
|
419
510
|
handleAiRecommendations(index);
|
|
420
511
|
}, 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" })] }) }))
|
|
421
512
|
},
|
|
513
|
+
{
|
|
514
|
+
id: 'services',
|
|
515
|
+
label: 'Services',
|
|
516
|
+
content: (_jsx(FormValidationProvider, { children: _jsxs("div", { className: "routes-section", children: [_jsx("div", { className: "routes-list", children: (config.siteInfo.services || []).map((service, index) => (_jsxs("div", { className: "route-item", children: [servicesForm.fields.map((field) => {
|
|
517
|
+
const Component = FC[field.component];
|
|
518
|
+
if (!Component)
|
|
519
|
+
return null;
|
|
520
|
+
let fieldValue = service[field.props.name];
|
|
521
|
+
if (field.props.name === 'areaServed' && Array.isArray(fieldValue)) {
|
|
522
|
+
fieldValue = fieldValue.join(', ');
|
|
523
|
+
}
|
|
524
|
+
const fieldProps = {
|
|
525
|
+
...field.props,
|
|
526
|
+
id: `${field.props.id}-${index}`,
|
|
527
|
+
...(field.component === 'FormTextarea'
|
|
528
|
+
? { defaultValue: fieldValue || '' }
|
|
529
|
+
: { value: fieldValue || '' }),
|
|
530
|
+
onChange: (e) => {
|
|
531
|
+
// Handle both direct values and event objects
|
|
532
|
+
const actualValue = (e && typeof e === 'object' && e.target) ? e.target.value : e;
|
|
533
|
+
updateService(index, field.props.name, actualValue);
|
|
534
|
+
}
|
|
535
|
+
};
|
|
536
|
+
return _jsx(Component, { ...fieldProps }, fieldProps.id);
|
|
537
|
+
}), _jsx("div", { className: "route-buttons", children: _jsx("button", { onClick: () => removeService(index), className: "route-button remove", children: "Remove" }) })] }, index))) }), _jsx("button", { onClick: addService, children: "Add Service" })] }) }))
|
|
538
|
+
},
|
|
422
539
|
{
|
|
423
540
|
id: 'visualdesign',
|
|
424
541
|
label: 'Visual Design',
|
|
@@ -429,7 +546,7 @@ export function ConfigBuilder(props) {
|
|
|
429
546
|
title: 'Configuration Preview',
|
|
430
547
|
content: _jsx("pre", { children: (() => {
|
|
431
548
|
try {
|
|
432
|
-
return JSON.stringify(config, null, 2);
|
|
549
|
+
return JSON.stringify(getProcessedConfig(config), null, 2);
|
|
433
550
|
}
|
|
434
551
|
catch (e) {
|
|
435
552
|
// Simple fallback that doesn't try to analyze the object deeply
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fields": [
|
|
3
|
+
{
|
|
4
|
+
"component": "FormInput",
|
|
5
|
+
"props": {
|
|
6
|
+
"type": "text",
|
|
7
|
+
"id": "name",
|
|
8
|
+
"name": "name",
|
|
9
|
+
"label": "Service Name",
|
|
10
|
+
"required": true,
|
|
11
|
+
"placeholder": "e.g. Web Development",
|
|
12
|
+
"size": "40"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"component": "FormTextarea",
|
|
17
|
+
"props": {
|
|
18
|
+
"id": "description",
|
|
19
|
+
"name": "description",
|
|
20
|
+
"label": "Description",
|
|
21
|
+
"required": true,
|
|
22
|
+
"placeholder": "Detailed description of the service...",
|
|
23
|
+
"rows": "3"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"component": "FormInput",
|
|
28
|
+
"props": {
|
|
29
|
+
"type": "url",
|
|
30
|
+
"id": "url",
|
|
31
|
+
"name": "url",
|
|
32
|
+
"label": "Service URL",
|
|
33
|
+
"required": false,
|
|
34
|
+
"placeholder": "https://pixelated.tech/services/web-dev",
|
|
35
|
+
"size": "40"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"component": "FormInput",
|
|
40
|
+
"props": {
|
|
41
|
+
"type": "text",
|
|
42
|
+
"id": "areaServed",
|
|
43
|
+
"name": "areaServed",
|
|
44
|
+
"label": "Area Served",
|
|
45
|
+
"required": false,
|
|
46
|
+
"placeholder": "New Jersey, South Carolina",
|
|
47
|
+
"size": "40"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|
|
@@ -188,6 +188,17 @@
|
|
|
188
188
|
"size": "40"
|
|
189
189
|
}
|
|
190
190
|
},
|
|
191
|
+
{
|
|
192
|
+
"component": "FormInput",
|
|
193
|
+
"props": {
|
|
194
|
+
"type": "text",
|
|
195
|
+
"id": "openingHours",
|
|
196
|
+
"name": "openingHours",
|
|
197
|
+
"label": "Opening Hours",
|
|
198
|
+
"placeholder": "Mo-Fr 09:00-17:00",
|
|
199
|
+
"size": "40"
|
|
200
|
+
}
|
|
201
|
+
},
|
|
191
202
|
{
|
|
192
203
|
"component": "FormInput",
|
|
193
204
|
"props": {
|
|
@@ -209,6 +220,63 @@
|
|
|
209
220
|
"placeholder": "web development, design, services",
|
|
210
221
|
"size": "40"
|
|
211
222
|
}
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"component": "FormSelect",
|
|
226
|
+
"props": {
|
|
227
|
+
"id": "publisherType",
|
|
228
|
+
"name": "publisherType",
|
|
229
|
+
"label": "Publisher Type",
|
|
230
|
+
"options": [
|
|
231
|
+
{ "value": "Organization", "label": "Organization" },
|
|
232
|
+
{ "value": "LocalBusiness", "label": "Local Business" },
|
|
233
|
+
{ "value": "Person", "label": "Person" }
|
|
234
|
+
]
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"component": "FormInput",
|
|
239
|
+
"props": {
|
|
240
|
+
"type": "number",
|
|
241
|
+
"id": "copyrightYear",
|
|
242
|
+
"name": "copyrightYear",
|
|
243
|
+
"label": "Copyright Year",
|
|
244
|
+
"placeholder": "2024",
|
|
245
|
+
"size": "40"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"component": "FormInput",
|
|
250
|
+
"props": {
|
|
251
|
+
"type": "text",
|
|
252
|
+
"id": "potentialAction.@type",
|
|
253
|
+
"name": "potentialAction.@type",
|
|
254
|
+
"label": "Search Action Type",
|
|
255
|
+
"placeholder": "SearchAction",
|
|
256
|
+
"size": "40"
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"component": "FormInput",
|
|
261
|
+
"props": {
|
|
262
|
+
"type": "text",
|
|
263
|
+
"id": "potentialAction.target",
|
|
264
|
+
"name": "potentialAction.target",
|
|
265
|
+
"label": "Search Target URL",
|
|
266
|
+
"placeholder": "https://example.com/search?q={search_term_string}",
|
|
267
|
+
"size": "40"
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"component": "FormInput",
|
|
272
|
+
"props": {
|
|
273
|
+
"type": "text",
|
|
274
|
+
"id": "potentialAction.query-input",
|
|
275
|
+
"name": "potentialAction.query-input",
|
|
276
|
+
"label": "Query Input",
|
|
277
|
+
"placeholder": "required name=search_term_string",
|
|
278
|
+
"size": "40"
|
|
279
|
+
}
|
|
212
280
|
}
|
|
213
281
|
]
|
|
214
282
|
}
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,9 @@ export * from './components/general/hubspot.components';
|
|
|
28
28
|
export * from './components/general/image';
|
|
29
29
|
export * from './components/general/instagram.components';
|
|
30
30
|
export * from './components/general/instagram.functions';
|
|
31
|
+
export * from './components/general/intersection-observer';
|
|
31
32
|
export * from './components/general/loading';
|
|
33
|
+
export * from './components/general/splitscroll';
|
|
32
34
|
export * from './components/general/manifest';
|
|
33
35
|
export * from './components/general/markdown';
|
|
34
36
|
export * from './components/general/menu-accordion';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Setup remotes for all Pixelated projects
|
|
4
|
+
# This script configures consistent Git remotes across all repositories
|
|
5
|
+
|
|
6
|
+
set -e # Exit on any error
|
|
7
|
+
|
|
8
|
+
# Base directory (parent of all repos)
|
|
9
|
+
BASE_DIR="$(pwd)"
|
|
10
|
+
echo "Base directory: $BASE_DIR"
|
|
11
|
+
|
|
12
|
+
# List of repositories to configure
|
|
13
|
+
REPOS=(
|
|
14
|
+
"brianwhaley"
|
|
15
|
+
"informationfocus"
|
|
16
|
+
"oaktreelandscaping"
|
|
17
|
+
"palmetto-epoxy"
|
|
18
|
+
"pixelated"
|
|
19
|
+
"pixelated-admin"
|
|
20
|
+
"pixelated-components"
|
|
21
|
+
"pixelated-template"
|
|
22
|
+
"pixelvivid"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# GitHub username/organization
|
|
26
|
+
GITHUB_USER="brianwhaley"
|
|
27
|
+
|
|
28
|
+
echo "Setting up Git remotes for Pixelated projects..."
|
|
29
|
+
echo "================================================="
|
|
30
|
+
|
|
31
|
+
# First, clean up any global remotes that might interfere
|
|
32
|
+
echo "Cleaning up global remotes..."
|
|
33
|
+
for repo in "${REPOS[@]}"; do
|
|
34
|
+
git config --global --unset-all remote."$repo".url 2>/dev/null || true
|
|
35
|
+
git config --global --unset remote."$repo".fetch 2>/dev/null || true
|
|
36
|
+
done
|
|
37
|
+
echo "✓ Global remotes cleaned up"
|
|
38
|
+
|
|
39
|
+
for repo in "${REPOS[@]}"; do
|
|
40
|
+
repo_path="$BASE_DIR/$repo"
|
|
41
|
+
|
|
42
|
+
if [ -d "$repo_path/.git" ]; then
|
|
43
|
+
echo "Configuring remotes for: $repo"
|
|
44
|
+
cd "$repo_path"
|
|
45
|
+
|
|
46
|
+
# Add remotes for all repositories
|
|
47
|
+
for target_repo in "${REPOS[@]}"; do
|
|
48
|
+
echo " - Setting up $target_repo remote"
|
|
49
|
+
remote_url="https://github.com/$GITHUB_USER/$target_repo.git"
|
|
50
|
+
# Remove remote if it exists, then add fresh
|
|
51
|
+
git remote remove "$target_repo" 2>/dev/null || true
|
|
52
|
+
git remote add "$target_repo" "$remote_url"
|
|
53
|
+
done
|
|
54
|
+
|
|
55
|
+
echo " ✓ All remotes configured for $repo"
|
|
56
|
+
else
|
|
57
|
+
echo "⚠️ Skipping $repo (not a Git repository or doesn't exist)"
|
|
58
|
+
fi
|
|
59
|
+
echo ""
|
|
60
|
+
done
|
|
61
|
+
|
|
62
|
+
echo "================================================="
|
|
63
|
+
echo "Remote setup complete!"
|
|
64
|
+
echo ""
|
|
65
|
+
echo "Each repository now has remotes named after all Pixelated projects."
|
|
66
|
+
echo "Example usage:"
|
|
67
|
+
echo " git remote -v # List all remotes"
|
|
68
|
+
echo " git fetch pixelated-components # Fetch from pixelated-components"
|
|
69
|
+
echo " git push pixelated-components main # Push to pixelated-components"
|
package/dist/types/components/admin/site-health/site-health-on-site-seo.integration.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site-health-on-site-seo.integration.d.ts","sourceRoot":"","sources":["../../../../../src/components/admin/site-health/site-health-on-site-seo.integration.ts"],"names":[],"mappings":"AAq0BA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,QAAQ,GAAG,eAAe,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"site-health-on-site-seo.integration.d.ts","sourceRoot":"","sources":["../../../../../src/components/admin/site-health/site-health-on-site-seo.integration.ts"],"names":[],"mappings":"AAq0BA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,QAAQ,GAAG,eAAe,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA6dD;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6KtF"}
|
|
@@ -95,6 +95,14 @@ export interface SiteInfo {
|
|
|
95
95
|
priceRange?: string;
|
|
96
96
|
sameAs?: string[];
|
|
97
97
|
keywords?: string;
|
|
98
|
+
publisherType?: string;
|
|
99
|
+
copyrightYear?: number;
|
|
100
|
+
potentialAction?: {
|
|
101
|
+
"@type"?: string;
|
|
102
|
+
target: string;
|
|
103
|
+
"query-input"?: string;
|
|
104
|
+
queryInput?: string;
|
|
105
|
+
};
|
|
98
106
|
author?: string;
|
|
99
107
|
theme_color?: string;
|
|
100
108
|
background_color?: string;
|
|
@@ -114,7 +122,6 @@ export interface PixelatedConfig {
|
|
|
114
122
|
hubspot?: HubspotConfig;
|
|
115
123
|
paypal?: PaypalConfig;
|
|
116
124
|
proxy?: ProxyConfig;
|
|
117
|
-
siteInfo?: SiteInfo;
|
|
118
125
|
wordpress?: WordpressConfig;
|
|
119
126
|
}
|
|
120
127
|
//# sourceMappingURL=config.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../../src/components/config/config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export type VariantType = typeof variants[number];
|
|
|
9
9
|
export type LayoutType = typeof layouts[number];
|
|
10
10
|
export type DirectionType = typeof directions[number];
|
|
11
11
|
export type CalloutType = InferProps<typeof Callout.propTypes>;
|
|
12
|
-
export declare function Callout({ variant, boxShape, layout, direction, gridColumns, url, img, imgAlt, imgShape, imgClick, title, subtitle, content, buttonText, aboveFold, }: CalloutType): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function Callout({ variant, boxShape, layout, direction, gridColumns, url, img, imgAlt, imgShape, imgClick, title, subtitle, content, children, buttonText, aboveFold, }: CalloutType): import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
export declare namespace Callout {
|
|
14
14
|
var propTypes: {
|
|
15
15
|
variant: PropTypes.Requireable<"split" | "grid" | "overlay" | "default" | "boxed" | "boxed grid" | "full">;
|
|
@@ -27,7 +27,8 @@ export declare namespace Callout {
|
|
|
27
27
|
imgClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
28
28
|
title: PropTypes.Requireable<string>;
|
|
29
29
|
subtitle: PropTypes.Requireable<string>;
|
|
30
|
-
content: PropTypes.Requireable<
|
|
30
|
+
content: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
|
|
31
|
+
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
31
32
|
buttonText: PropTypes.Requireable<string>;
|
|
32
33
|
aboveFold: PropTypes.Requireable<boolean>;
|
|
33
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callout.d.ts","sourceRoot":"","sources":["../../../../src/components/general/callout.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInD,OAAO,gBAAgB,CAAC;AAiBxB,eAAO,MAAM,QAAQ,iFAAkF,CAAC;AACxG,eAAO,MAAM,MAAM,mDAAoD,CAAC;AACxE,eAAO,MAAM,OAAO,qCAAsC,CAAC;AAC3D,eAAO,MAAM,UAAU,4BAA6B,CAAC;AAGrD,MAAM,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"callout.d.ts","sourceRoot":"","sources":["../../../../src/components/general/callout.tsx"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAInD,OAAO,gBAAgB,CAAC;AAiBxB,eAAO,MAAM,QAAQ,iFAAkF,CAAC;AACxG,eAAO,MAAM,MAAM,mDAAoD,CAAC;AACxE,eAAO,MAAM,OAAO,qCAAsC,CAAC;AAC3D,eAAO,MAAM,UAAU,4BAA6B,CAAC;AAGrD,MAAM,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AA2BtD,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;AAC/D,wBAAgB,OAAO,CAAC,EACvB,OAAmB,EACnB,QAAqB,EACrB,MAAqB,EACrB,SAAkB,EAClB,WAAiC,EACjC,GAAG,EAAE,GAAG,EAAE,MAAM,EAChB,QAAmB,EACnB,QAAQ,EACR,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAC9C,SAAS,GAGgB,EAAE,WAAW,2CA2EtC;yBAxFe,OAAO;;;;;;;;;;;;;;;;;;;;;;;AAkGvB,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3E,wBAAgB,aAAa,CAAE,EAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAC,EAAE,iBAAiB,2CASrE;yBATe,aAAa;;;;;;;AAmB7B,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3E,wBAAgB,aAAa,CAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAG,iBAAiB,2CAgBxE;yBAhBe,aAAa"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Options for the IntersectionObserver hook
|
|
4
|
+
*/
|
|
5
|
+
export interface UseIntersectionObserverOptions {
|
|
6
|
+
/** The element that is used as the viewport for checking visibility (null = browser viewport) */
|
|
7
|
+
root?: Element | null;
|
|
8
|
+
/** Margin around the root. Can have values similar to CSS margin property */
|
|
9
|
+
rootMargin?: string;
|
|
10
|
+
/** Either a single number or an array of numbers between 0 and 1 indicating at what percentage of the target's visibility the observer's callback should be executed */
|
|
11
|
+
threshold?: number | number[];
|
|
12
|
+
/** Whether to disconnect the observer after the first intersection */
|
|
13
|
+
disconnectAfterIntersection?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Callback function type for intersection changes
|
|
17
|
+
*/
|
|
18
|
+
export type IntersectionCallback = (entry: IntersectionObserverEntry, observer: IntersectionObserver) => void;
|
|
19
|
+
/**
|
|
20
|
+
* Custom hook for IntersectionObserver
|
|
21
|
+
*
|
|
22
|
+
* @param callback - Function to call when intersection changes
|
|
23
|
+
* @param options - IntersectionObserver options
|
|
24
|
+
* @returns Ref to attach to the element to observe
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const elementRef = useIntersectionObserver((entry) => {
|
|
29
|
+
* if (entry.isIntersecting) {
|
|
30
|
+
* console.log('Element is visible!');
|
|
31
|
+
* }
|
|
32
|
+
* }, { threshold: 0.5 });
|
|
33
|
+
*
|
|
34
|
+
* return <div ref={elementRef}>Observed content</div>
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function useIntersectionObserver<T extends Element>(callback: IntersectionCallback, options?: UseIntersectionObserverOptions): RefObject<T | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Utility function to observe multiple elements with the same configuration
|
|
40
|
+
* Useful for observing a list of elements or when you need more control than the hook provides
|
|
41
|
+
*
|
|
42
|
+
* @param selector - CSS selector for elements to observe
|
|
43
|
+
* @param callback - Function to call when intersection changes
|
|
44
|
+
* @param options - IntersectionObserver options
|
|
45
|
+
* @returns Cleanup function to disconnect the observer
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* useEffect(() => {
|
|
50
|
+
* const cleanup = observeIntersection('.fade-in', (entry) => {
|
|
51
|
+
* if (entry.isIntersecting) {
|
|
52
|
+
* entry.target.classList.add('visible');
|
|
53
|
+
* }
|
|
54
|
+
* }, { threshold: 0.1 });
|
|
55
|
+
*
|
|
56
|
+
* return cleanup;
|
|
57
|
+
* }, []);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function observeIntersection(selector: string, callback: IntersectionCallback, options?: UseIntersectionObserverOptions): () => void;
|
|
61
|
+
/**
|
|
62
|
+
* Utility functions for viewport detection
|
|
63
|
+
* These are useful for initial checks before setting up observers
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Check if an element is fully in the viewport
|
|
67
|
+
*/
|
|
68
|
+
export declare function isElementInViewport(element: Element): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Check if an element is partially in the viewport
|
|
71
|
+
*/
|
|
72
|
+
export declare function isElementPartiallyInViewport(element: Element): boolean;
|
|
73
|
+
//# sourceMappingURL=intersection-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intersection-observer.d.ts","sourceRoot":"","sources":["../../../../src/components/general/intersection-observer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAAE,MAAM,OAAO,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC9C,iGAAiG;IACjG,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wKAAwK;IACxK,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,sEAAsE;IACtE,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAE9G;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,OAAO,EACxD,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE,8BAAmC,GAC1C,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAoCrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,GAAE,8BAAmC,GAC1C,MAAM,IAAI,CAmCZ;AAED;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQ7D;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAQtE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import PropTypes, { InferProps } from "prop-types";
|
|
2
2
|
import './microinteractions.css';
|
|
3
3
|
export type MicroInteractionsType = InferProps<typeof MicroInteractions.propTypes>;
|
|
4
|
-
export declare function MicroInteractions(props: MicroInteractionsType): void;
|
|
4
|
+
export declare function MicroInteractions(props: MicroInteractionsType): (() => void) | undefined;
|
|
5
5
|
export declare namespace MicroInteractions {
|
|
6
6
|
var propTypes: {
|
|
7
7
|
buttonring: PropTypes.Requireable<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"microinteractions.d.ts","sourceRoot":"","sources":["../../../../src/components/general/microinteractions.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"microinteractions.d.ts","sourceRoot":"","sources":["../../../../src/components/general/microinteractions.tsx"],"names":[],"mappings":"AACA,OAAO,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,yBAAyB,CAAC;AAsBjC,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,4BAgB7D;yBAhBe,iBAAiB"}
|