@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.
Files changed (241) hide show
  1. package/README.md +12 -191
  2. package/dist/components/admin/componentusage/componentAnalysis.js +12 -4
  3. package/dist/components/admin/componentusage/componentDiscovery.js +20 -6
  4. package/dist/components/admin/site-health/site-health-accessibility.js +5 -1
  5. package/dist/components/admin/site-health/site-health-axe-core.js +4 -0
  6. package/dist/components/admin/site-health/site-health-cloudwatch.integration.js +0 -5
  7. package/dist/components/admin/site-health/site-health-cloudwatch.js +7 -1
  8. package/dist/components/admin/site-health/site-health-core-web-vitals.integration.js +3 -3
  9. package/dist/components/admin/site-health/site-health-dependency-vulnerabilities.js +4 -0
  10. package/dist/components/admin/site-health/site-health-github.js +8 -2
  11. package/dist/components/admin/site-health/site-health-google-analytics.js +6 -0
  12. package/dist/components/admin/site-health/site-health-google-search-console.js +6 -0
  13. package/dist/components/admin/site-health/site-health-on-site-seo.integration.js +128 -55
  14. package/dist/components/admin/site-health/site-health-on-site-seo.js +4 -0
  15. package/dist/components/admin/site-health/site-health-overview.js +11 -4
  16. package/dist/components/admin/site-health/site-health-performance.js +4 -0
  17. package/dist/components/admin/site-health/site-health-security.js +7 -3
  18. package/dist/components/admin/site-health/site-health-seo.js +5 -1
  19. package/dist/components/admin/site-health/site-health-template.js +20 -9
  20. package/dist/components/admin/site-health/site-health-uptime.js +4 -0
  21. package/dist/components/callout/callout.js +0 -10
  22. package/dist/components/carousel/carousel.js +15 -4
  23. package/dist/components/carousel/tiles.js +1 -1
  24. package/dist/components/cms/contentful.items.components.js +3 -4
  25. package/dist/components/cms/flickr.js +1 -1
  26. package/dist/components/cms/google.reviews.components.js +3 -3
  27. package/dist/components/cms/instagram.components.js +15 -5
  28. package/dist/components/cms/smartimage.js +2 -2
  29. package/dist/components/cms/wordpress.components.js +32 -6
  30. package/dist/components/cms/yelp.js +5 -0
  31. package/dist/components/config/config.server.js +7 -1
  32. package/dist/components/general/accordion.js +4 -3
  33. package/dist/components/general/css.js +0 -1
  34. package/dist/components/general/image.js +0 -1
  35. package/dist/components/general/loading.js +2 -1
  36. package/dist/components/general/microinteractions.js +0 -1
  37. package/dist/components/general/modal.css +2 -4
  38. package/dist/components/general/modal.js +72 -30
  39. package/dist/components/general/sidepanel.js +16 -0
  40. package/dist/components/general/tab.js +1 -0
  41. package/dist/components/menu/menu-accordion.css +1 -1
  42. package/dist/components/menu/menu-accordion.js +15 -4
  43. package/dist/components/menu/menu-expando.js +21 -19
  44. package/dist/components/menu/menu-simple.js +14 -14
  45. package/dist/components/nerdjoke/nerdjoke.js +1 -1
  46. package/dist/components/seo/faq-accordion.css +125 -0
  47. package/dist/components/seo/faq-accordion.js +56 -0
  48. package/dist/components/seo/googlesearch.js +0 -1
  49. package/dist/components/seo/schema-blogposting.js +6 -1
  50. package/dist/components/seo/schema-faq.js +6 -0
  51. package/dist/components/seo/schema-recipe.js +34 -1
  52. package/dist/components/seo/schema-services.js +20 -2
  53. package/dist/components/shoppingcart/ebay.components.js +3 -3
  54. package/dist/components/shoppingcart/shoppingcart.components.js +76 -28
  55. package/dist/components/shoppingcart/shoppingcart.functions.js +4 -4
  56. package/dist/components/sitebuilder/config/CompoundFontSelector.js +13 -4
  57. package/dist/components/sitebuilder/config/ConfigBuilder.css +194 -5
  58. package/dist/components/sitebuilder/config/ConfigBuilder.js +183 -17
  59. package/dist/components/sitebuilder/config/FontSelector.js +13 -2
  60. package/dist/components/sitebuilder/config/routes-form.json +67 -0
  61. package/dist/components/sitebuilder/config/siteinfo-form.json +28 -14
  62. package/dist/components/sitebuilder/config/visualdesignform.json +4 -4
  63. package/dist/components/sitebuilder/form/formbuilder.js +1 -0
  64. package/dist/components/sitebuilder/form/formcomponents.js +2 -3
  65. package/dist/components/sitebuilder/form/formengine.js +6 -5
  66. package/dist/components/sitebuilder/form/formvalidator.js +5 -0
  67. package/dist/components/sitebuilder/page/components/PageBuilderUI.js +5 -1
  68. package/dist/components/structured/buzzwordbingo.css +0 -1
  69. package/dist/components/structured/recipe.js +1 -1
  70. package/dist/components/structured/socialcard.js +2 -2
  71. package/dist/components/utilities/functions.js +82 -1
  72. package/dist/components/utilities/gemini-api.client.js +76 -0
  73. package/dist/components/utilities/gemini-api.server.js +185 -0
  74. package/dist/data/routes.json +5 -5
  75. package/dist/index.adminclient.js +30 -0
  76. package/dist/index.adminserver.js +19 -0
  77. package/dist/index.js +11 -18
  78. package/dist/index.server.js +16 -28
  79. package/dist/types/components/admin/componentusage/componentAnalysis.d.ts.map +1 -1
  80. package/dist/types/components/admin/componentusage/componentDiscovery.d.ts +1 -1
  81. package/dist/types/components/admin/componentusage/componentDiscovery.d.ts.map +1 -1
  82. package/dist/types/components/admin/site-health/site-health-accessibility.d.ts +7 -4
  83. package/dist/types/components/admin/site-health/site-health-accessibility.d.ts.map +1 -1
  84. package/dist/types/components/admin/site-health/site-health-axe-core.d.ts +7 -4
  85. package/dist/types/components/admin/site-health/site-health-axe-core.d.ts.map +1 -1
  86. package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts +9 -6
  87. package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts.map +1 -1
  88. package/dist/types/components/admin/site-health/site-health-cloudwatch.integration.d.ts.map +1 -1
  89. package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts +7 -4
  90. package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts.map +1 -1
  91. package/dist/types/components/admin/site-health/site-health-github.d.ts +9 -6
  92. package/dist/types/components/admin/site-health/site-health-github.d.ts.map +1 -1
  93. package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts +9 -6
  94. package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts.map +1 -1
  95. package/dist/types/components/admin/site-health/site-health-google-search-console.d.ts +9 -6
  96. package/dist/types/components/admin/site-health/site-health-google-search-console.d.ts.map +1 -1
  97. package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts +8 -3
  98. package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts.map +1 -1
  99. package/dist/types/components/admin/site-health/site-health-on-site-seo.integration.d.ts.map +1 -1
  100. package/dist/types/components/admin/site-health/site-health-overview.d.ts +7 -4
  101. package/dist/types/components/admin/site-health/site-health-overview.d.ts.map +1 -1
  102. package/dist/types/components/admin/site-health/site-health-performance.d.ts +7 -4
  103. package/dist/types/components/admin/site-health/site-health-performance.d.ts.map +1 -1
  104. package/dist/types/components/admin/site-health/site-health-security.d.ts +7 -4
  105. package/dist/types/components/admin/site-health/site-health-security.d.ts.map +1 -1
  106. package/dist/types/components/admin/site-health/site-health-seo.d.ts +7 -4
  107. package/dist/types/components/admin/site-health/site-health-seo.d.ts.map +1 -1
  108. package/dist/types/components/admin/site-health/site-health-template.d.ts +13 -10
  109. package/dist/types/components/admin/site-health/site-health-template.d.ts.map +1 -1
  110. package/dist/types/components/admin/site-health/site-health-types.d.ts +0 -21
  111. package/dist/types/components/admin/site-health/site-health-types.d.ts.map +1 -1
  112. package/dist/types/components/admin/site-health/site-health-uptime.d.ts +7 -4
  113. package/dist/types/components/admin/site-health/site-health-uptime.d.ts.map +1 -1
  114. package/dist/types/components/callout/callout.d.ts +3 -3
  115. package/dist/types/components/callout/callout.d.ts.map +1 -1
  116. package/dist/types/components/carousel/carousel.d.ts +16 -7
  117. package/dist/types/components/carousel/carousel.d.ts.map +1 -1
  118. package/dist/types/components/carousel/tiles.d.ts +3 -6
  119. package/dist/types/components/carousel/tiles.d.ts.map +1 -1
  120. package/dist/types/components/cms/flickr.d.ts +3 -6
  121. package/dist/types/components/cms/flickr.d.ts.map +1 -1
  122. package/dist/types/components/cms/google.reviews.components.d.ts +1 -7
  123. package/dist/types/components/cms/google.reviews.components.d.ts.map +1 -1
  124. package/dist/types/components/cms/hubspot.components.d.ts +1 -2
  125. package/dist/types/components/cms/hubspot.components.d.ts.map +1 -1
  126. package/dist/types/components/cms/instagram.components.d.ts +14 -9
  127. package/dist/types/components/cms/instagram.components.d.ts.map +1 -1
  128. package/dist/types/components/cms/smartimage.d.ts +2 -28
  129. package/dist/types/components/cms/smartimage.d.ts.map +1 -1
  130. package/dist/types/components/cms/wordpress.components.d.ts +33 -14
  131. package/dist/types/components/cms/wordpress.components.d.ts.map +1 -1
  132. package/dist/types/components/cms/yelp.d.ts +9 -4
  133. package/dist/types/components/cms/yelp.d.ts.map +1 -1
  134. package/dist/types/components/config/config.server.d.ts +9 -6
  135. package/dist/types/components/config/config.server.d.ts.map +1 -1
  136. package/dist/types/components/general/accordion.d.ts +3 -2
  137. package/dist/types/components/general/accordion.d.ts.map +1 -1
  138. package/dist/types/components/general/loading.d.ts +5 -1
  139. package/dist/types/components/general/loading.d.ts.map +1 -1
  140. package/dist/types/components/general/microinteractions.d.ts +1 -3
  141. package/dist/types/components/general/microinteractions.d.ts.map +1 -1
  142. package/dist/types/components/general/modal.d.ts +11 -5
  143. package/dist/types/components/general/modal.d.ts.map +1 -1
  144. package/dist/types/components/general/semantic.d.ts +3 -3
  145. package/dist/types/components/general/sidepanel.d.ts +20 -13
  146. package/dist/types/components/general/sidepanel.d.ts.map +1 -1
  147. package/dist/types/components/general/tab.d.ts +1 -2
  148. package/dist/types/components/general/tab.d.ts.map +1 -1
  149. package/dist/types/components/menu/menu-accordion.d.ts +22 -9
  150. package/dist/types/components/menu/menu-accordion.d.ts.map +1 -1
  151. package/dist/types/components/menu/menu-expando.d.ts +14 -5
  152. package/dist/types/components/menu/menu-expando.d.ts.map +1 -1
  153. package/dist/types/components/menu/menu-simple.d.ts +4 -5
  154. package/dist/types/components/menu/menu-simple.d.ts.map +1 -1
  155. package/dist/types/components/nerdjoke/nerdjoke.d.ts +1 -1
  156. package/dist/types/components/nerdjoke/nerdjoke.d.ts.map +1 -1
  157. package/dist/types/components/seo/faq-accordion.d.ts +18 -0
  158. package/dist/types/components/seo/faq-accordion.d.ts.map +1 -0
  159. package/dist/types/components/seo/googleanalytics.d.ts.map +1 -1
  160. package/dist/types/components/seo/metadata.components.d.ts +2 -2
  161. package/dist/types/components/seo/metadata.components.d.ts.map +1 -1
  162. package/dist/types/components/seo/schema-blogposting.d.ts +7 -4
  163. package/dist/types/components/seo/schema-blogposting.d.ts.map +1 -1
  164. package/dist/types/components/seo/schema-faq.d.ts +6 -0
  165. package/dist/types/components/seo/schema-faq.d.ts.map +1 -0
  166. package/dist/types/components/seo/schema-recipe.d.ts +29 -30
  167. package/dist/types/components/seo/schema-recipe.d.ts.map +1 -1
  168. package/dist/types/components/seo/schema-services.d.ts +19 -9
  169. package/dist/types/components/seo/schema-services.d.ts.map +1 -1
  170. package/dist/types/components/shoppingcart/paypal.d.ts +1 -1
  171. package/dist/types/components/shoppingcart/paypal.d.ts.map +1 -1
  172. package/dist/types/components/shoppingcart/shoppingcart.components.d.ts +77 -28
  173. package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
  174. package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts +4 -23
  175. package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts.map +1 -1
  176. package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts +10 -11
  177. package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts.map +1 -1
  178. package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts +41 -174
  179. package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts.map +1 -1
  180. package/dist/types/components/sitebuilder/config/FontSelector.d.ts +12 -13
  181. package/dist/types/components/sitebuilder/config/FontSelector.d.ts.map +1 -1
  182. package/dist/types/components/sitebuilder/form/formbuilder.d.ts +7 -3
  183. package/dist/types/components/sitebuilder/form/formbuilder.d.ts.map +1 -1
  184. package/dist/types/components/sitebuilder/form/formcomponents.d.ts +1 -1
  185. package/dist/types/components/sitebuilder/form/formcomponents.d.ts.map +1 -1
  186. package/dist/types/components/sitebuilder/form/formengine.d.ts +1 -2
  187. package/dist/types/components/sitebuilder/form/formengine.d.ts.map +1 -1
  188. package/dist/types/components/sitebuilder/form/formextractor.d.ts +5 -4
  189. package/dist/types/components/sitebuilder/form/formextractor.d.ts.map +1 -1
  190. package/dist/types/components/sitebuilder/form/formtypes.d.ts +3 -3
  191. package/dist/types/components/sitebuilder/form/formtypes.d.ts.map +1 -1
  192. package/dist/types/components/sitebuilder/form/formvalidator.d.ts +8 -3
  193. package/dist/types/components/sitebuilder/form/formvalidator.d.ts.map +1 -1
  194. package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts +2 -3
  195. package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts.map +1 -1
  196. package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts +2 -3
  197. package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts.map +1 -1
  198. package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts +2 -3
  199. package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts.map +1 -1
  200. package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts +8 -7
  201. package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts.map +1 -1
  202. package/dist/types/components/sitebuilder/page/components/PageEngine.d.ts.map +1 -1
  203. package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts +2 -3
  204. package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts.map +1 -1
  205. package/dist/types/components/sitebuilder/page/lib/componentMap.d.ts +1 -1
  206. package/dist/types/components/structured/markdown.d.ts +1 -3
  207. package/dist/types/components/structured/markdown.d.ts.map +1 -1
  208. package/dist/types/components/structured/recipe.d.ts +5 -32
  209. package/dist/types/components/structured/recipe.d.ts.map +1 -1
  210. package/dist/types/components/structured/socialcard.d.ts +4 -0
  211. package/dist/types/components/structured/socialcard.d.ts.map +1 -1
  212. package/dist/types/components/structured/timeline.d.ts +1 -3
  213. package/dist/types/components/structured/timeline.d.ts.map +1 -1
  214. package/dist/types/components/utilities/functions.d.ts +20 -0
  215. package/dist/types/components/utilities/functions.d.ts.map +1 -1
  216. package/dist/types/components/utilities/gemini-api.client.d.ts +38 -0
  217. package/dist/types/components/utilities/gemini-api.client.d.ts.map +1 -0
  218. package/dist/types/components/utilities/gemini-api.server.d.ts +17 -0
  219. package/dist/types/components/utilities/gemini-api.server.d.ts.map +1 -0
  220. package/dist/types/index.adminclient.d.ts +27 -0
  221. package/dist/types/index.adminclient.d.ts.map +1 -0
  222. package/dist/types/index.adminserver.d.ts +20 -0
  223. package/dist/types/index.adminserver.d.ts.map +1 -0
  224. package/dist/types/index.d.ts +11 -18
  225. package/dist/types/index.server.d.ts +6 -28
  226. package/dist/types/stories/general/sidepanel.stories.d.ts.map +1 -1
  227. package/dist/types/stories/general/smartimage.stories.d.ts +74 -2
  228. package/dist/types/stories/general/smartimage.stories.d.ts.map +1 -1
  229. package/package.json +19 -9
  230. package/README.COMPONENTS.md +0 -2310
  231. package/dist/components/cms/pixelated.linkedin.js +0 -180
  232. package/dist/components/cms/pixelated.linkedin1.js +0 -84
  233. package/dist/components/cms/pixelated.linkedin2.js +0 -92
  234. package/dist/types/components/cms/pixelated.linkedin.d.ts +0 -2
  235. package/dist/types/components/cms/pixelated.linkedin.d.ts.map +0 -1
  236. package/dist/types/components/cms/pixelated.linkedin1.d.ts +0 -2
  237. package/dist/types/components/cms/pixelated.linkedin1.d.ts.map +0 -1
  238. package/dist/types/components/cms/pixelated.linkedin2.d.ts +0 -2
  239. package/dist/types/components/cms/pixelated.linkedin2.d.ts.map +0 -1
  240. package/dist/types/tests/pixelated.menu-expando.test.d.ts +0 -2
  241. 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": "#369"
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": "#BCD"
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": "#CCC"
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": "#EEE"
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(value);
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
- const formProps = JSON.parse(JSON.stringify(props));
24
- ['formData', 'onSubmitHandler'].forEach(e => delete formProps[e]);
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
- export function PageBuilderUI({ apiEndpoint = '/api/pagebuilder' } = {}) {
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
@@ -33,7 +33,6 @@
33
33
  }
34
34
 
35
35
  .bingoBoxFreeSpace {
36
- background-color: #EEE;
37
36
  font-size: 1.1em;
38
37
  font-weight: bold;
39
38
  }
@@ -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
+ }