@pixelated-tech/components 3.4.3 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -191
- package/dist/components/admin/componentusage/componentAnalysis.js +12 -4
- package/dist/components/admin/componentusage/componentDiscovery.js +20 -6
- package/dist/components/admin/site-health/site-health-accessibility.js +5 -1
- package/dist/components/admin/site-health/site-health-axe-core.js +4 -0
- package/dist/components/admin/site-health/site-health-cloudwatch.integration.js +0 -5
- package/dist/components/admin/site-health/site-health-cloudwatch.js +7 -1
- package/dist/components/admin/site-health/site-health-core-web-vitals.integration.js +3 -3
- package/dist/components/admin/site-health/site-health-dependency-vulnerabilities.js +4 -0
- package/dist/components/admin/site-health/site-health-github.js +8 -2
- package/dist/components/admin/site-health/site-health-google-analytics.js +6 -0
- package/dist/components/admin/site-health/site-health-google-search-console.js +6 -0
- package/dist/components/admin/site-health/site-health-on-site-seo.integration.js +128 -55
- package/dist/components/admin/site-health/site-health-on-site-seo.js +4 -0
- package/dist/components/admin/site-health/site-health-overview.js +11 -4
- package/dist/components/admin/site-health/site-health-performance.js +4 -0
- package/dist/components/admin/site-health/site-health-security.js +7 -3
- package/dist/components/admin/site-health/site-health-seo.js +5 -1
- package/dist/components/admin/site-health/site-health-template.js +20 -9
- package/dist/components/admin/site-health/site-health-uptime.js +4 -0
- package/dist/components/callout/callout.js +0 -10
- package/dist/components/carousel/carousel.js +15 -4
- package/dist/components/carousel/tiles.js +1 -1
- package/dist/components/cms/contentful.items.components.js +3 -4
- package/dist/components/cms/flickr.js +1 -1
- package/dist/components/cms/google.reviews.components.js +3 -3
- package/dist/components/cms/instagram.components.js +15 -5
- package/dist/components/cms/smartimage.js +2 -2
- package/dist/components/cms/wordpress.components.js +32 -6
- package/dist/components/cms/yelp.js +5 -0
- package/dist/components/config/config.server.js +7 -1
- package/dist/components/general/accordion.js +4 -3
- package/dist/components/general/css.js +0 -1
- package/dist/components/general/image.js +0 -1
- package/dist/components/general/loading.js +2 -1
- package/dist/components/general/microinteractions.js +0 -1
- package/dist/components/general/modal.css +2 -4
- package/dist/components/general/modal.js +72 -30
- package/dist/components/general/sidepanel.js +16 -0
- package/dist/components/general/tab.js +1 -0
- package/dist/components/menu/menu-accordion.css +1 -1
- package/dist/components/menu/menu-accordion.js +15 -4
- package/dist/components/menu/menu-expando.js +21 -19
- package/dist/components/menu/menu-simple.js +14 -14
- package/dist/components/nerdjoke/nerdjoke.js +1 -1
- package/dist/components/seo/faq-accordion.css +125 -0
- package/dist/components/seo/faq-accordion.js +56 -0
- package/dist/components/seo/googlesearch.js +0 -1
- package/dist/components/seo/schema-blogposting.js +6 -1
- package/dist/components/seo/schema-faq.js +6 -0
- package/dist/components/seo/schema-recipe.js +34 -1
- package/dist/components/seo/schema-services.js +20 -2
- package/dist/components/shoppingcart/ebay.components.js +3 -3
- package/dist/components/shoppingcart/shoppingcart.components.js +76 -28
- package/dist/components/shoppingcart/shoppingcart.functions.js +4 -4
- package/dist/components/sitebuilder/config/CompoundFontSelector.js +13 -4
- package/dist/components/sitebuilder/config/ConfigBuilder.css +194 -5
- package/dist/components/sitebuilder/config/ConfigBuilder.js +183 -17
- package/dist/components/sitebuilder/config/FontSelector.js +13 -2
- package/dist/components/sitebuilder/config/routes-form.json +67 -0
- package/dist/components/sitebuilder/config/siteinfo-form.json +28 -14
- package/dist/components/sitebuilder/config/visualdesignform.json +4 -4
- package/dist/components/sitebuilder/form/formbuilder.js +1 -0
- package/dist/components/sitebuilder/form/formcomponents.js +2 -3
- package/dist/components/sitebuilder/form/formengine.js +6 -5
- package/dist/components/sitebuilder/form/formvalidator.js +5 -0
- package/dist/components/sitebuilder/page/components/PageBuilderUI.js +5 -1
- package/dist/components/structured/buzzwordbingo.css +0 -1
- package/dist/components/structured/recipe.js +1 -1
- package/dist/components/structured/socialcard.js +2 -2
- package/dist/components/utilities/functions.js +82 -1
- package/dist/components/utilities/gemini-api.client.js +76 -0
- package/dist/components/utilities/gemini-api.server.js +185 -0
- package/dist/data/routes.json +5 -5
- package/dist/index.adminclient.js +30 -0
- package/dist/index.adminserver.js +19 -0
- package/dist/index.js +11 -18
- package/dist/index.server.js +16 -28
- package/dist/types/components/admin/componentusage/componentAnalysis.d.ts.map +1 -1
- package/dist/types/components/admin/componentusage/componentDiscovery.d.ts +1 -1
- package/dist/types/components/admin/componentusage/componentDiscovery.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-accessibility.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-accessibility.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-axe-core.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-axe-core.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts +9 -6
- package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-cloudwatch.integration.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-github.d.ts +9 -6
- package/dist/types/components/admin/site-health/site-health-github.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts +9 -6
- package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-google-search-console.d.ts +9 -6
- package/dist/types/components/admin/site-health/site-health-google-search-console.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts +8 -3
- package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-on-site-seo.integration.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-overview.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-overview.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-performance.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-performance.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-security.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-security.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-seo.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-seo.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-template.d.ts +13 -10
- package/dist/types/components/admin/site-health/site-health-template.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-types.d.ts +0 -21
- package/dist/types/components/admin/site-health/site-health-types.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-uptime.d.ts +7 -4
- package/dist/types/components/admin/site-health/site-health-uptime.d.ts.map +1 -1
- package/dist/types/components/callout/callout.d.ts +3 -3
- package/dist/types/components/callout/callout.d.ts.map +1 -1
- package/dist/types/components/carousel/carousel.d.ts +16 -7
- package/dist/types/components/carousel/carousel.d.ts.map +1 -1
- package/dist/types/components/carousel/tiles.d.ts +3 -6
- package/dist/types/components/carousel/tiles.d.ts.map +1 -1
- package/dist/types/components/cms/flickr.d.ts +3 -6
- package/dist/types/components/cms/flickr.d.ts.map +1 -1
- package/dist/types/components/cms/google.reviews.components.d.ts +1 -7
- package/dist/types/components/cms/google.reviews.components.d.ts.map +1 -1
- package/dist/types/components/cms/hubspot.components.d.ts +1 -2
- package/dist/types/components/cms/hubspot.components.d.ts.map +1 -1
- package/dist/types/components/cms/instagram.components.d.ts +14 -9
- package/dist/types/components/cms/instagram.components.d.ts.map +1 -1
- package/dist/types/components/cms/smartimage.d.ts +2 -28
- package/dist/types/components/cms/smartimage.d.ts.map +1 -1
- package/dist/types/components/cms/wordpress.components.d.ts +33 -14
- package/dist/types/components/cms/wordpress.components.d.ts.map +1 -1
- package/dist/types/components/cms/yelp.d.ts +9 -4
- package/dist/types/components/cms/yelp.d.ts.map +1 -1
- package/dist/types/components/config/config.server.d.ts +9 -6
- package/dist/types/components/config/config.server.d.ts.map +1 -1
- package/dist/types/components/general/accordion.d.ts +3 -2
- package/dist/types/components/general/accordion.d.ts.map +1 -1
- package/dist/types/components/general/loading.d.ts +5 -1
- package/dist/types/components/general/loading.d.ts.map +1 -1
- package/dist/types/components/general/microinteractions.d.ts +1 -3
- package/dist/types/components/general/microinteractions.d.ts.map +1 -1
- package/dist/types/components/general/modal.d.ts +11 -5
- package/dist/types/components/general/modal.d.ts.map +1 -1
- package/dist/types/components/general/semantic.d.ts +3 -3
- package/dist/types/components/general/sidepanel.d.ts +20 -13
- package/dist/types/components/general/sidepanel.d.ts.map +1 -1
- package/dist/types/components/general/tab.d.ts +1 -2
- package/dist/types/components/general/tab.d.ts.map +1 -1
- package/dist/types/components/menu/menu-accordion.d.ts +22 -9
- package/dist/types/components/menu/menu-accordion.d.ts.map +1 -1
- package/dist/types/components/menu/menu-expando.d.ts +14 -5
- package/dist/types/components/menu/menu-expando.d.ts.map +1 -1
- package/dist/types/components/menu/menu-simple.d.ts +4 -5
- package/dist/types/components/menu/menu-simple.d.ts.map +1 -1
- package/dist/types/components/nerdjoke/nerdjoke.d.ts +1 -1
- package/dist/types/components/nerdjoke/nerdjoke.d.ts.map +1 -1
- package/dist/types/components/seo/faq-accordion.d.ts +18 -0
- package/dist/types/components/seo/faq-accordion.d.ts.map +1 -0
- package/dist/types/components/seo/googleanalytics.d.ts.map +1 -1
- package/dist/types/components/seo/metadata.components.d.ts +2 -2
- package/dist/types/components/seo/metadata.components.d.ts.map +1 -1
- package/dist/types/components/seo/schema-blogposting.d.ts +7 -4
- package/dist/types/components/seo/schema-blogposting.d.ts.map +1 -1
- package/dist/types/components/seo/schema-faq.d.ts +6 -0
- package/dist/types/components/seo/schema-faq.d.ts.map +1 -0
- package/dist/types/components/seo/schema-recipe.d.ts +29 -30
- package/dist/types/components/seo/schema-recipe.d.ts.map +1 -1
- package/dist/types/components/seo/schema-services.d.ts +19 -9
- package/dist/types/components/seo/schema-services.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/paypal.d.ts +1 -1
- package/dist/types/components/shoppingcart/paypal.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts +77 -28
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts +4 -23
- package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts +10 -11
- package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts +41 -174
- package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/config/FontSelector.d.ts +12 -13
- package/dist/types/components/sitebuilder/config/FontSelector.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formbuilder.d.ts +7 -3
- package/dist/types/components/sitebuilder/form/formbuilder.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts +1 -1
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formengine.d.ts +1 -2
- package/dist/types/components/sitebuilder/form/formengine.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formextractor.d.ts +5 -4
- package/dist/types/components/sitebuilder/form/formextractor.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formtypes.d.ts +3 -3
- package/dist/types/components/sitebuilder/form/formtypes.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formvalidator.d.ts +8 -3
- package/dist/types/components/sitebuilder/form/formvalidator.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts +2 -3
- package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts +2 -3
- package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts +2 -3
- package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts +8 -7
- package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/PageEngine.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts +2 -3
- package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/lib/componentMap.d.ts +1 -1
- package/dist/types/components/structured/markdown.d.ts +1 -3
- package/dist/types/components/structured/markdown.d.ts.map +1 -1
- package/dist/types/components/structured/recipe.d.ts +5 -32
- package/dist/types/components/structured/recipe.d.ts.map +1 -1
- package/dist/types/components/structured/socialcard.d.ts +4 -0
- package/dist/types/components/structured/socialcard.d.ts.map +1 -1
- package/dist/types/components/structured/timeline.d.ts +1 -3
- package/dist/types/components/structured/timeline.d.ts.map +1 -1
- package/dist/types/components/utilities/functions.d.ts +20 -0
- package/dist/types/components/utilities/functions.d.ts.map +1 -1
- package/dist/types/components/utilities/gemini-api.client.d.ts +38 -0
- package/dist/types/components/utilities/gemini-api.client.d.ts.map +1 -0
- package/dist/types/components/utilities/gemini-api.server.d.ts +17 -0
- package/dist/types/components/utilities/gemini-api.server.d.ts.map +1 -0
- package/dist/types/index.adminclient.d.ts +27 -0
- package/dist/types/index.adminclient.d.ts.map +1 -0
- package/dist/types/index.adminserver.d.ts +20 -0
- package/dist/types/index.adminserver.d.ts.map +1 -0
- package/dist/types/index.d.ts +11 -18
- package/dist/types/index.server.d.ts +6 -28
- package/dist/types/stories/general/sidepanel.stories.d.ts.map +1 -1
- package/dist/types/stories/general/smartimage.stories.d.ts +74 -2
- package/dist/types/stories/general/smartimage.stories.d.ts.map +1 -1
- package/package.json +19 -9
- package/README.COMPONENTS.md +0 -2310
- package/dist/components/cms/pixelated.linkedin.js +0 -180
- package/dist/components/cms/pixelated.linkedin1.js +0 -84
- package/dist/components/cms/pixelated.linkedin2.js +0 -92
- package/dist/types/components/cms/pixelated.linkedin.d.ts +0 -2
- package/dist/types/components/cms/pixelated.linkedin.d.ts.map +0 -1
- package/dist/types/components/cms/pixelated.linkedin1.d.ts +0 -2
- package/dist/types/components/cms/pixelated.linkedin1.d.ts.map +0 -1
- package/dist/types/components/cms/pixelated.linkedin2.d.ts +0 -2
- package/dist/types/components/cms/pixelated.linkedin2.d.ts.map +0 -1
- package/dist/types/tests/pixelated.menu-expando.test.d.ts +0 -2
- package/dist/types/tests/pixelated.menu-expando.test.d.ts.map +0 -1
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
"name": "name",
|
|
9
9
|
"label": "Site Name",
|
|
10
10
|
"required": true,
|
|
11
|
-
"placeholder": "Enter site name"
|
|
11
|
+
"placeholder": "Enter site name",
|
|
12
|
+
"size": "40"
|
|
12
13
|
}
|
|
13
14
|
},
|
|
14
15
|
{
|
|
@@ -19,7 +20,8 @@
|
|
|
19
20
|
"name": "author",
|
|
20
21
|
"label": "Author",
|
|
21
22
|
"required": true,
|
|
22
|
-
"placeholder": "Enter author name"
|
|
23
|
+
"placeholder": "Enter author name",
|
|
24
|
+
"size": "40"
|
|
23
25
|
}
|
|
24
26
|
},
|
|
25
27
|
{
|
|
@@ -41,7 +43,8 @@
|
|
|
41
43
|
"name": "url",
|
|
42
44
|
"label": "Site URL",
|
|
43
45
|
"required": true,
|
|
44
|
-
"placeholder": "https://example.com"
|
|
46
|
+
"placeholder": "https://example.com",
|
|
47
|
+
"size": "40"
|
|
45
48
|
}
|
|
46
49
|
},
|
|
47
50
|
{
|
|
@@ -52,7 +55,8 @@
|
|
|
52
55
|
"name": "email",
|
|
53
56
|
"label": "Email",
|
|
54
57
|
"required": true,
|
|
55
|
-
"placeholder": "contact@example.com"
|
|
58
|
+
"placeholder": "contact@example.com",
|
|
59
|
+
"size": "40"
|
|
56
60
|
}
|
|
57
61
|
},
|
|
58
62
|
{
|
|
@@ -63,7 +67,8 @@
|
|
|
63
67
|
"name": "favicon",
|
|
64
68
|
"label": "Favicon",
|
|
65
69
|
"required": true,
|
|
66
|
-
"placeholder": "/favicon.ico"
|
|
70
|
+
"placeholder": "/favicon.ico",
|
|
71
|
+
"size": "40"
|
|
67
72
|
}
|
|
68
73
|
},
|
|
69
74
|
{
|
|
@@ -74,7 +79,8 @@
|
|
|
74
79
|
"name": "favicon_sizes",
|
|
75
80
|
"label": "Favicon Sizes",
|
|
76
81
|
"required": true,
|
|
77
|
-
"placeholder": "64x64 32x32 24x24 16x16"
|
|
82
|
+
"placeholder": "64x64 32x32 24x24 16x16",
|
|
83
|
+
"size": "40"
|
|
78
84
|
}
|
|
79
85
|
},
|
|
80
86
|
{
|
|
@@ -85,7 +91,8 @@
|
|
|
85
91
|
"name": "favicon_type",
|
|
86
92
|
"label": "Favicon Type",
|
|
87
93
|
"required": true,
|
|
88
|
-
"placeholder": "image/x-icon"
|
|
94
|
+
"placeholder": "image/x-icon",
|
|
95
|
+
"size": "40"
|
|
89
96
|
}
|
|
90
97
|
},
|
|
91
98
|
{
|
|
@@ -118,7 +125,8 @@
|
|
|
118
125
|
"name": "default_locale",
|
|
119
126
|
"label": "Default Locale",
|
|
120
127
|
"required": true,
|
|
121
|
-
"placeholder": "en"
|
|
128
|
+
"placeholder": "en",
|
|
129
|
+
"size": "40"
|
|
122
130
|
}
|
|
123
131
|
},
|
|
124
132
|
{
|
|
@@ -143,7 +151,8 @@
|
|
|
143
151
|
"id": "image",
|
|
144
152
|
"name": "image",
|
|
145
153
|
"label": "Site Image",
|
|
146
|
-
"placeholder": "/images/site-image.jpg"
|
|
154
|
+
"placeholder": "/images/site-image.jpg",
|
|
155
|
+
"size": "40"
|
|
147
156
|
}
|
|
148
157
|
},
|
|
149
158
|
{
|
|
@@ -153,7 +162,8 @@
|
|
|
153
162
|
"id": "image_height",
|
|
154
163
|
"name": "image_height",
|
|
155
164
|
"label": "Image Height",
|
|
156
|
-
"placeholder": "512"
|
|
165
|
+
"placeholder": "512",
|
|
166
|
+
"size": "40"
|
|
157
167
|
}
|
|
158
168
|
},
|
|
159
169
|
{
|
|
@@ -163,7 +173,8 @@
|
|
|
163
173
|
"id": "image_width",
|
|
164
174
|
"name": "image_width",
|
|
165
175
|
"label": "Image Width",
|
|
166
|
-
"placeholder": "512"
|
|
176
|
+
"placeholder": "512",
|
|
177
|
+
"size": "40"
|
|
167
178
|
}
|
|
168
179
|
},
|
|
169
180
|
{
|
|
@@ -173,7 +184,8 @@
|
|
|
173
184
|
"id": "telephone",
|
|
174
185
|
"name": "telephone",
|
|
175
186
|
"label": "Telephone",
|
|
176
|
-
"placeholder": "+1-555-123-4567"
|
|
187
|
+
"placeholder": "+1-555-123-4567",
|
|
188
|
+
"size": "40"
|
|
177
189
|
}
|
|
178
190
|
},
|
|
179
191
|
{
|
|
@@ -183,7 +195,8 @@
|
|
|
183
195
|
"id": "priceRange",
|
|
184
196
|
"name": "priceRange",
|
|
185
197
|
"label": "Price Range",
|
|
186
|
-
"placeholder": "$$"
|
|
198
|
+
"placeholder": "$$",
|
|
199
|
+
"size": "40"
|
|
187
200
|
}
|
|
188
201
|
},
|
|
189
202
|
{
|
|
@@ -193,7 +206,8 @@
|
|
|
193
206
|
"id": "keywords",
|
|
194
207
|
"name": "keywords",
|
|
195
208
|
"label": "Keywords",
|
|
196
|
-
"placeholder": "web development, design, services"
|
|
209
|
+
"placeholder": "web development, design, services",
|
|
210
|
+
"size": "40"
|
|
197
211
|
}
|
|
198
212
|
}
|
|
199
213
|
]
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"name": "primary-color",
|
|
9
9
|
"label": "Primary color",
|
|
10
10
|
"required": true,
|
|
11
|
-
"placeholder": "#
|
|
11
|
+
"placeholder": "#336699"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
{
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"name": "secondary-color",
|
|
20
20
|
"label": "Secondary color",
|
|
21
21
|
"required": true,
|
|
22
|
-
"placeholder": "#
|
|
22
|
+
"placeholder": "#BBCCDD"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
{
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"name": "accent1-color",
|
|
31
31
|
"label": "Accent color 1",
|
|
32
32
|
"required": true,
|
|
33
|
-
"placeholder": "#
|
|
33
|
+
"placeholder": "#CCCCCC"
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
{
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"name": "accent2-color",
|
|
42
42
|
"label": "Accent color 2",
|
|
43
43
|
"required": true,
|
|
44
|
-
"placeholder": "#
|
|
44
|
+
"placeholder": "#EEEEEE"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{
|
|
@@ -8,6 +8,7 @@ import { FormEngine } from './formengine';
|
|
|
8
8
|
/* ===== FORM BUILDER =====
|
|
9
9
|
Display all the components for a Form Builder -
|
|
10
10
|
Element Buttons, Element Details, and the Form */
|
|
11
|
+
FormBuilder.propTypes = {};
|
|
11
12
|
export function FormBuilder() {
|
|
12
13
|
const [formData, setFormData] = useState({ fields: [] });
|
|
13
14
|
const [fieldFormData, setFieldFormData] = useState({ fields: [] });
|
|
@@ -53,7 +53,7 @@ const useFormComponent = (props) => {
|
|
|
53
53
|
const customOnChange = props.onChange || (props.parent && props.parent.onChange);
|
|
54
54
|
if (customOnChange) {
|
|
55
55
|
try {
|
|
56
|
-
customOnChange(
|
|
56
|
+
customOnChange(event);
|
|
57
57
|
}
|
|
58
58
|
catch {
|
|
59
59
|
// swallow handler errors to avoid breaking validation flow
|
|
@@ -293,7 +293,6 @@ FormRadioOption.propTypes = {
|
|
|
293
293
|
function FormRadioOption(props) {
|
|
294
294
|
const inputProps = setupInputProps(props);
|
|
295
295
|
const isChecked = props.parent.checked === props.value;
|
|
296
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
297
296
|
const handleChange = (e) => {
|
|
298
297
|
if (props.parent.onChange) {
|
|
299
298
|
props.parent.onChange(props.value);
|
|
@@ -374,7 +373,7 @@ export function FormDataList(props) {
|
|
|
374
373
|
return (_jsx("datalist", { id: props.id, children: options }));
|
|
375
374
|
}
|
|
376
375
|
FormFieldset.propTypes = {};
|
|
377
|
-
export function FormFieldset() {
|
|
376
|
+
export function FormFieldset(props) {
|
|
378
377
|
return (_jsx(_Fragment, {}));
|
|
379
378
|
}
|
|
380
379
|
// Re-export FontSelector for use in forms
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
3
|
import React from 'react';
|
|
3
4
|
import PropTypes from 'prop-types';
|
|
@@ -14,14 +15,17 @@ FormEngine.propTypes = {
|
|
|
14
15
|
onSubmitHandler: PropTypes.func,
|
|
15
16
|
formData: PropTypes.object.isRequired
|
|
16
17
|
};
|
|
18
|
+
export function FormEngine(props) {
|
|
19
|
+
return (_jsx(FormValidationProvider, { children: _jsx(FormEngineInner, { ...props }) }));
|
|
20
|
+
}
|
|
17
21
|
function FormEngineInner(props) {
|
|
18
22
|
const { validateAllFields } = useFormValidation();
|
|
19
23
|
function generateFormProps(props) {
|
|
20
24
|
// GENERATE PROPS TO RENDER THE FORM CONTAINER, INTERNAL FUNCTION
|
|
21
25
|
if (debug)
|
|
22
26
|
console.log("Generating Form Props");
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
// Create a clean copy without non-serializable properties
|
|
28
|
+
const { formData, onSubmitHandler, ...formProps } = props;
|
|
25
29
|
return formProps;
|
|
26
30
|
}
|
|
27
31
|
generateNewFields.propTypes = {
|
|
@@ -77,6 +81,3 @@ function FormEngineInner(props) {
|
|
|
77
81
|
}
|
|
78
82
|
return (_jsx("form", { ...generateFormProps(props), onSubmit: (event) => { handleSubmit(event); }, suppressHydrationWarning: true, children: generateNewFields(props) }));
|
|
79
83
|
}
|
|
80
|
-
export function FormEngine(props) {
|
|
81
|
-
return (_jsx(FormValidationProvider, { children: _jsx(FormEngineInner, { ...props }) }));
|
|
82
|
-
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
3
|
import { createContext, useContext, useState, useCallback } from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
3
5
|
import * as FVF from './formfieldvalidations';
|
|
4
6
|
/**
|
|
5
7
|
* Centralized field validation service
|
|
@@ -51,6 +53,9 @@ export function useFormValidation() {
|
|
|
51
53
|
}
|
|
52
54
|
return context;
|
|
53
55
|
}
|
|
56
|
+
FormValidationProvider.propTypes = {
|
|
57
|
+
children: PropTypes.node.isRequired
|
|
58
|
+
};
|
|
54
59
|
export function FormValidationProvider({ children }) {
|
|
55
60
|
const [fieldValidity, setFieldValidity] = useState({});
|
|
56
61
|
const [fieldErrors, setFieldErrors] = useState({});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React from 'react';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
4
5
|
import { PageSectionHeader } from '../../../general/semantic';
|
|
5
6
|
import { usePageBuilder } from '../lib/usePageBuilder';
|
|
6
7
|
import { ComponentSelector } from '../components/ComponentSelector';
|
|
@@ -13,7 +14,10 @@ import './pagebuilder.scss';
|
|
|
13
14
|
* PageBuilderUI - Main orchestrator component
|
|
14
15
|
* Composes all sub-components and manages layout with inline editing
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
+
PageBuilderUI.propTypes = {
|
|
18
|
+
apiEndpoint: PropTypes.string,
|
|
19
|
+
};
|
|
20
|
+
export function PageBuilderUI({ apiEndpoint = '/api/pagebuilder' }) {
|
|
17
21
|
const { pageJSON, setPageJSON, editableComponent, selectedPath, editMode, setEditableComponent, setSelectedPath, setEditMode, handleAddNewComponent, handleSelectComponent, handleEditComponent, cancelEdit, handleDeleteComponent, handleMoveUp, handleMoveDown, } = usePageBuilder();
|
|
18
22
|
const [selectorKey, setSelectorKey] = React.useState(0);
|
|
19
23
|
// Handle loading a saved page
|
|
@@ -61,7 +61,6 @@ RecipeBook.propTypes = {
|
|
|
61
61
|
}).isRequired,
|
|
62
62
|
recipeCategories: PropTypes.array.isRequired
|
|
63
63
|
};
|
|
64
|
-
// export type RecipeBookType = InferProps<typeof RecipeBook.propTypes>;
|
|
65
64
|
export function RecipeBook(props) {
|
|
66
65
|
const [recipeElems] = useState(generateMyElems());
|
|
67
66
|
const [outputElems, setOutputElems] = useState([]);
|
|
@@ -205,6 +204,7 @@ export function RecipePickList(props) {
|
|
|
205
204
|
return (_jsx("form", { children: _jsx("select", { id: "recipe-list", name: "recipe-list", onChange: recipeListChanged, children: recipeOptions }) }));
|
|
206
205
|
}
|
|
207
206
|
/* ========== RECIPE BACK TO TOP ========== */
|
|
207
|
+
BackToTop.propTypes = {};
|
|
208
208
|
export function BackToTop() {
|
|
209
209
|
function scrollToTop() {
|
|
210
210
|
window.scroll({
|
|
@@ -30,10 +30,10 @@ function removeDeadHrefs(element) {
|
|
|
30
30
|
});
|
|
31
31
|
return doc.body.innerHTML;
|
|
32
32
|
}
|
|
33
|
+
/* ========== SOCIALCARD ========== */
|
|
33
34
|
SocialCards.propTypes = {
|
|
34
35
|
sources: PropTypes.object.isRequired
|
|
35
36
|
};
|
|
36
|
-
/* ========== SOCIALCARDS ========== */
|
|
37
37
|
export function SocialCards(props) {
|
|
38
38
|
const debug = false;
|
|
39
39
|
const [state, setState] = useState({
|
|
@@ -306,12 +306,12 @@ SocialCard.propTypes = {
|
|
|
306
306
|
iconSrcAlt: PropTypes.string.isRequired,
|
|
307
307
|
card: PropTypes.any.isRequired
|
|
308
308
|
};
|
|
309
|
-
/* ========== SOCIALCARD ========== */
|
|
310
309
|
export function SocialCard(props) {
|
|
311
310
|
const config = usePixelatedConfig();
|
|
312
311
|
return (_jsx("div", { className: "masonryItem", children: _jsxs("div", { className: "card", children: [_jsx("div", { className: "cardTitle", children: _jsxs("a", { href: props.card.link, target: "_blank", rel: "noopener noreferrer", children: [_jsx(SmartImage, { className: "cardIcon", src: props.iconSrc, title: props.iconSrcAlt, alt: props.iconSrcAlt, cloudinaryEnv: config?.cloudinary?.product_env, cloudinaryDomain: config?.cloudinary?.baseUrl, cloudinaryTransforms: config?.cloudinary?.transforms }), props.card.title] }) }), _jsx("div", { className: "cardBody", dangerouslySetInnerHTML: { __html: removeDeadHrefs(props.card.description) } }), _jsx("div", { className: "cardDate", children: props.card.pubDate })] }) }, props.card.guid));
|
|
313
312
|
}
|
|
314
313
|
/* ========== SPINNER ========== */
|
|
314
|
+
SocialCardsLoading.propTypes = {};
|
|
315
315
|
export function SocialCardsLoading() {
|
|
316
316
|
return (_jsx("div", { className: "cardsLoading", children: _jsx("div", { children: "Loading..." }) }));
|
|
317
317
|
}
|
|
@@ -9,7 +9,6 @@ export function html2dom(str) {
|
|
|
9
9
|
dom.innerHTML = str;
|
|
10
10
|
return dom;
|
|
11
11
|
}
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
12
|
export function mergeDeep(a, b) {
|
|
14
13
|
// first is default vals, all other objects overwrite
|
|
15
14
|
const extended = {};
|
|
@@ -125,3 +124,85 @@ export function logAllChange() {
|
|
|
125
124
|
}
|
|
126
125
|
// Call the function to activate the listeners once the script is loaded
|
|
127
126
|
// logChangeToAllElements();
|
|
127
|
+
/* ===== CLIENT COMPONENT DETECTION ===== */
|
|
128
|
+
/**
|
|
129
|
+
* Regex patterns that identify client-only code requiring browser execution
|
|
130
|
+
* Used by both ESLint rules and build scripts to determine client vs server components
|
|
131
|
+
*/
|
|
132
|
+
export const CLIENT_ONLY_PATTERNS = [
|
|
133
|
+
/\baddEventListener\b/,
|
|
134
|
+
/\bcreateContext\b/,
|
|
135
|
+
/\bdocument\./,
|
|
136
|
+
/\blocalStorage\b/,
|
|
137
|
+
/\bnavigator\./,
|
|
138
|
+
/\bonBlur\b/,
|
|
139
|
+
/\bonChange\b/,
|
|
140
|
+
/\bonClick\b/,
|
|
141
|
+
/\bonFocus\b/,
|
|
142
|
+
/\bonInput\b/,
|
|
143
|
+
/\bonKey\b/,
|
|
144
|
+
/\bonMouse\b/,
|
|
145
|
+
/\bonSubmit\b/,
|
|
146
|
+
/\bremoveEventListener\b/,
|
|
147
|
+
/\bsessionStorage\b/,
|
|
148
|
+
/\buseCallback\b/,
|
|
149
|
+
/\buseContext\b/,
|
|
150
|
+
/\buseEffect\b/,
|
|
151
|
+
/\buseLayoutEffect\b/,
|
|
152
|
+
/\buseMemo\b/,
|
|
153
|
+
/\buseReducer\b/,
|
|
154
|
+
/\buseRef\b/,
|
|
155
|
+
/\buseState\b/,
|
|
156
|
+
/\bwindow\./,
|
|
157
|
+
/["']use client["']/ // Client directive
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* Determines if a component file contains client-only code that requires browser execution
|
|
161
|
+
* @param fileContent - The source code content of the file
|
|
162
|
+
* @returns true if the file contains client-only patterns
|
|
163
|
+
*/
|
|
164
|
+
export function isClientComponent(fileContent) {
|
|
165
|
+
return CLIENT_ONLY_PATTERNS.some(pattern => pattern.test(fileContent));
|
|
166
|
+
}
|
|
167
|
+
/* ===== COMPONENT FILE DETECTION ===== */
|
|
168
|
+
/**
|
|
169
|
+
* Glob patterns for finding component files
|
|
170
|
+
*/
|
|
171
|
+
export const TS_FILE_IGNORE_PATTERNS = [
|
|
172
|
+
'**/*.d.ts',
|
|
173
|
+
'**/*.test.ts',
|
|
174
|
+
'**/*.spec.ts',
|
|
175
|
+
'**/*.stories.ts',
|
|
176
|
+
'**/documentation/**',
|
|
177
|
+
'**/examples/**',
|
|
178
|
+
'**/*.example.*'
|
|
179
|
+
];
|
|
180
|
+
export const TSX_FILE_IGNORE_PATTERNS = [
|
|
181
|
+
'**/*.test.tsx',
|
|
182
|
+
'**/*.spec.tsx',
|
|
183
|
+
'**/*.stories.tsx',
|
|
184
|
+
'**/documentation/**',
|
|
185
|
+
'**/examples/**',
|
|
186
|
+
'**/*.example.*'
|
|
187
|
+
];
|
|
188
|
+
/* ===== SERVER COMPONENT DETECTION ===== */
|
|
189
|
+
/**
|
|
190
|
+
* Regex patterns that identify server-only code that should not run on client
|
|
191
|
+
*/
|
|
192
|
+
export const SERVER_ONLY_PATTERNS = [
|
|
193
|
+
/["']use server["']/, // Server directive
|
|
194
|
+
/\b__dirname\b/,
|
|
195
|
+
/\b__filename\b/,
|
|
196
|
+
/@aws-sdk/,
|
|
197
|
+
/\bchild_process\b/,
|
|
198
|
+
/\bexec\b/,
|
|
199
|
+
/\bexecAsync\b/,
|
|
200
|
+
/\bfs\b/,
|
|
201
|
+
/\bfs\.readFileSync\b/,
|
|
202
|
+
/\bfs\.existsSync\b/,
|
|
203
|
+
/\bimport.*googleapis\b|\brequire.*googleapis\b/, // Actual import of googleapis
|
|
204
|
+
/\bimport.*path\b|\brequire.*path\b/, // Actual import of path module
|
|
205
|
+
/\bprocess\.cwd\(\)/,
|
|
206
|
+
/\brequire\.resolve\b/,
|
|
207
|
+
/\butil\b/
|
|
208
|
+
];
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* Service for integrating with Google Gemini API for SEO recommendations
|
|
4
|
+
*/
|
|
5
|
+
export class GeminiApiService {
|
|
6
|
+
apiKey;
|
|
7
|
+
baseUrl;
|
|
8
|
+
constructor(apiKey, baseUrl = 'https://generativelanguage.googleapis.com') {
|
|
9
|
+
this.apiKey = apiKey;
|
|
10
|
+
this.baseUrl = baseUrl;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generate SEO recommendations for a route
|
|
14
|
+
*/
|
|
15
|
+
async generateRouteRecommendations(request) {
|
|
16
|
+
try {
|
|
17
|
+
// Use the proxy API route instead of direct Google API call
|
|
18
|
+
const response = await fetch('/api/ai/recommendations', {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: {
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
},
|
|
23
|
+
body: JSON.stringify(request)
|
|
24
|
+
});
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
const errorText = await response.text();
|
|
27
|
+
console.error('AI API Error Response:', errorText);
|
|
28
|
+
throw new Error(`AI API error: ${response.status} ${response.statusText}`);
|
|
29
|
+
}
|
|
30
|
+
const data = await response.json();
|
|
31
|
+
if (!data.success) {
|
|
32
|
+
throw new Error(data.error || 'AI API request failed');
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
success: true,
|
|
36
|
+
data: data.data
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('AI API error:', error);
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* List available models to debug API issues
|
|
49
|
+
*/
|
|
50
|
+
async listModels() {
|
|
51
|
+
try {
|
|
52
|
+
const response = await fetch(`${this.baseUrl}/v1/models?key=${this.apiKey}`, {
|
|
53
|
+
method: 'GET',
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json',
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
throw new Error(`Failed to list models: ${response.status} ${response.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
const data = await response.json();
|
|
62
|
+
console.log('Available models:', data);
|
|
63
|
+
return data;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Error listing models:', error);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a Gemini API service instance
|
|
73
|
+
*/
|
|
74
|
+
export function createGeminiApiService(apiKey) {
|
|
75
|
+
return new GeminiApiService(apiKey);
|
|
76
|
+
}
|