@pixelated-tech/components 3.11.9 → 3.13.0
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/componentusage/componentAnalysis.js +2 -0
- package/dist/components/admin/deploy/deployment.integration.js +8 -0
- package/dist/components/admin/site-health/site-health-accessibility.js +6 -0
- package/dist/components/admin/site-health/site-health-axe-core.js +6 -0
- package/dist/components/admin/site-health/site-health-cloudwatch.js +10 -0
- package/dist/components/admin/site-health/site-health-dependency-vulnerabilities.js +6 -0
- package/dist/components/admin/site-health/site-health-github.js +10 -0
- package/dist/components/admin/site-health/site-health-google-analytics.js +10 -0
- package/dist/components/admin/site-health/site-health-google-search-console.js +10 -0
- package/dist/components/admin/site-health/site-health-mock-context.js +8 -0
- package/dist/components/admin/site-health/site-health-on-site-seo.js +6 -0
- package/dist/components/admin/site-health/site-health-overview.js +6 -0
- package/dist/components/admin/site-health/site-health-performance.js +6 -0
- package/dist/components/admin/site-health/site-health-security.js +6 -0
- package/dist/components/admin/site-health/site-health-seo.js +6 -0
- package/dist/components/admin/site-health/site-health-template.js +28 -0
- package/dist/components/admin/site-health/site-health-uptime.js +6 -0
- package/dist/components/config/config.js +41 -2
- package/dist/components/config/config.server.js +8 -0
- package/dist/components/general/404.js +6 -0
- package/dist/components/general/accordion.js +11 -0
- package/dist/components/general/buzzwordbingo.js +18 -0
- package/dist/components/general/callout.js +65 -2
- package/dist/components/general/carousel.drag.js +12 -0
- package/dist/components/general/carousel.js +50 -0
- package/dist/components/general/faq-accordion.js +15 -0
- package/dist/components/general/global-error.js +12 -0
- package/dist/components/general/hero.js +13 -0
- package/dist/components/general/loading.js +10 -1
- package/dist/components/general/markdown.js +6 -0
- package/dist/components/general/menu-accordion.js +30 -1
- package/dist/components/general/menu-expando.js +24 -1
- package/dist/components/general/menu-simple.js +21 -0
- package/dist/components/general/metadata.components.js +10 -0
- package/dist/components/general/metadata.functions.js +1 -1
- package/dist/components/general/microinteractions.js +22 -0
- package/dist/components/general/modal.js +12 -0
- package/dist/components/general/nerdjoke.js +11 -1
- package/dist/components/general/proxy-handler.js +7 -7
- package/dist/components/general/recipe.js +46 -1
- package/dist/components/general/resume.js +82 -0
- package/dist/components/general/schema-blogposting.js +6 -0
- package/dist/components/general/schema-localbusiness.js +36 -0
- package/dist/components/general/schema-recipe.js +20 -0
- package/dist/components/general/semantic.js +178 -0
- package/dist/components/general/sidepanel.js +26 -0
- package/dist/components/general/sitemap.js +50 -0
- package/dist/components/general/skeleton-loading.js +10 -1
- package/dist/components/general/skeleton.js +15 -0
- package/dist/components/general/smartimage.js +48 -2
- package/dist/components/general/splitscroll.js +21 -10
- package/dist/components/general/styleguide.js +6 -0
- package/dist/components/general/tab.js +12 -0
- package/dist/components/general/table.js +12 -0
- package/dist/components/general/tiles.js +32 -1
- package/dist/components/general/timeline.js +22 -0
- package/dist/components/general/well-known.js +137 -0
- package/dist/components/integrations/calendly.js +10 -0
- package/dist/components/integrations/cloudinary.js +16 -0
- package/dist/components/integrations/contentful.delivery.js +84 -0
- package/dist/components/integrations/contentful.items.components.js +46 -0
- package/dist/components/integrations/contentful.management.js +25 -25
- package/dist/components/integrations/flickr.js +34 -0
- package/dist/components/integrations/google.reviews.components.js +14 -0
- package/dist/components/integrations/googleanalytics.js +14 -0
- package/dist/components/integrations/googlemap.js +20 -0
- package/dist/components/integrations/googlesearch.js +6 -0
- package/dist/components/integrations/gravatar.components.js +59 -0
- package/dist/components/integrations/hubspot.components.js +30 -0
- package/dist/components/integrations/instagram.components.js +18 -0
- package/dist/components/integrations/lipsum.js +45 -0
- package/dist/components/integrations/loremipsum.js +12 -0
- package/dist/components/integrations/socialcard.js +20 -1
- package/dist/components/integrations/wordpress.components.js +40 -0
- package/dist/components/integrations/wordpress.functions.js +24 -0
- package/dist/components/integrations/yelp.js +8 -0
- package/dist/components/shoppingcart/ebay.components.js +70 -0
- package/dist/components/shoppingcart/ebay.functions.js +52 -0
- package/dist/components/shoppingcart/shoppingcart.components.js +89 -0
- package/dist/components/sitebuilder/config/CompoundFontSelector.js +32 -0
- package/dist/components/sitebuilder/config/ConfigBuilder.js +8 -0
- package/dist/components/sitebuilder/config/FontSelector.js +40 -0
- package/dist/components/sitebuilder/form/formbuilder.js +10 -1
- package/dist/components/sitebuilder/form/formcomponents.js +325 -6
- package/dist/components/sitebuilder/form/formengine.js +35 -1
- package/dist/components/sitebuilder/form/formextractor.js +33 -1
- package/dist/components/sitebuilder/form/formutils.js +0 -4
- package/dist/components/sitebuilder/form/formvalidator.js +6 -0
- package/dist/components/sitebuilder/page/components/ComponentPropertiesForm.js +8 -0
- package/dist/components/sitebuilder/page/components/ComponentSelector.js +10 -0
- package/dist/components/sitebuilder/page/components/ComponentTree.js +20 -0
- package/dist/components/sitebuilder/page/components/PageBuilderUI.js +6 -0
- package/dist/components/sitebuilder/page/components/PageEngine.js +20 -0
- package/dist/components/sitebuilder/page/components/SaveLoadSection.js +10 -0
- package/dist/components/sitebuilder/page/lib/pageStorageContentful.js +4 -4
- package/dist/config/pixelated.config.json.enc +1 -1
- package/dist/index.js +1 -1
- package/dist/index.server.js +4 -4
- package/dist/scripts/pixelated-eslint-plugin.js +105 -1
- package/dist/scripts/release.sh +12 -21
- package/dist/types/components/admin/componentusage/componentAnalysis.d.ts +2 -5
- package/dist/types/components/admin/componentusage/componentAnalysis.d.ts.map +1 -1
- package/dist/types/components/admin/deploy/deployment.integration.d.ts +1 -5
- package/dist/types/components/admin/deploy/deployment.integration.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-accessibility.d.ts +1 -0
- 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 +1 -0
- 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 +3 -0
- package/dist/types/components/admin/site-health/site-health-cloudwatch.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-dependency-vulnerabilities.d.ts +1 -0
- 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 +3 -0
- package/dist/types/components/admin/site-health/site-health-github.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-github.integration.d.ts +1 -11
- package/dist/types/components/admin/site-health/site-health-github.integration.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-google-analytics.d.ts +3 -0
- 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 +3 -0
- 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-mock-context.d.ts +8 -0
- package/dist/types/components/admin/site-health/site-health-mock-context.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-on-site-seo.d.ts +1 -0
- 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-overview.d.ts +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +12 -0
- package/dist/types/components/admin/site-health/site-health-template.d.ts.map +1 -1
- package/dist/types/components/admin/site-health/site-health-uptime.d.ts +1 -0
- package/dist/types/components/admin/site-health/site-health-uptime.d.ts.map +1 -1
- package/dist/types/components/admin/sites/sites.integration.d.ts +7 -1
- package/dist/types/components/admin/sites/sites.integration.d.ts.map +1 -1
- package/dist/types/components/config/config.d.ts.map +1 -1
- package/dist/types/components/config/config.server.d.ts +2 -0
- package/dist/types/components/config/config.server.d.ts.map +1 -1
- package/dist/types/components/config/config.types.d.ts +2 -2
- package/dist/types/components/config/config.types.d.ts.map +1 -1
- package/dist/types/components/general/404.d.ts +1 -0
- package/dist/types/components/general/404.d.ts.map +1 -1
- package/dist/types/components/general/accordion.d.ts +2 -0
- package/dist/types/components/general/accordion.d.ts.map +1 -1
- package/dist/types/components/general/buzzwordbingo.d.ts +3 -0
- package/dist/types/components/general/buzzwordbingo.d.ts.map +1 -1
- package/dist/types/components/general/callout.d.ts +24 -0
- package/dist/types/components/general/callout.d.ts.map +1 -1
- package/dist/types/components/general/carousel.d.ts +13 -0
- package/dist/types/components/general/carousel.d.ts.map +1 -1
- package/dist/types/components/general/carousel.drag.d.ts +4 -0
- package/dist/types/components/general/carousel.drag.d.ts.map +1 -1
- package/dist/types/components/general/faq-accordion.d.ts +5 -0
- package/dist/types/components/general/faq-accordion.d.ts.map +1 -1
- package/dist/types/components/general/global-error.d.ts +4 -0
- package/dist/types/components/general/global-error.d.ts.map +1 -1
- package/dist/types/components/general/hero.d.ts +4 -0
- package/dist/types/components/general/hero.d.ts.map +1 -1
- package/dist/types/components/general/loading.d.ts +1 -0
- package/dist/types/components/general/loading.d.ts.map +1 -1
- package/dist/types/components/general/markdown.d.ts +1 -0
- package/dist/types/components/general/markdown.d.ts.map +1 -1
- package/dist/types/components/general/menu-accordion.d.ts +7 -0
- package/dist/types/components/general/menu-accordion.d.ts.map +1 -1
- package/dist/types/components/general/menu-expando.d.ts +6 -0
- package/dist/types/components/general/menu-expando.d.ts.map +1 -1
- package/dist/types/components/general/menu-simple.d.ts +6 -0
- package/dist/types/components/general/menu-simple.d.ts.map +1 -1
- package/dist/types/components/general/metadata.components.d.ts +3 -0
- package/dist/types/components/general/metadata.components.d.ts.map +1 -1
- package/dist/types/components/general/microinteractions.d.ts +9 -0
- package/dist/types/components/general/microinteractions.d.ts.map +1 -1
- package/dist/types/components/general/modal.d.ts +4 -0
- package/dist/types/components/general/modal.d.ts.map +1 -1
- package/dist/types/components/general/nerdjoke.d.ts +2 -0
- package/dist/types/components/general/nerdjoke.d.ts.map +1 -1
- package/dist/types/components/general/proxy-handler.d.ts +7 -7
- package/dist/types/components/general/proxy-handler.d.ts.map +1 -1
- package/dist/types/components/general/recipe.d.ts +13 -0
- package/dist/types/components/general/recipe.d.ts.map +1 -1
- package/dist/types/components/general/resume.d.ts +21 -0
- package/dist/types/components/general/resume.d.ts.map +1 -1
- package/dist/types/components/general/schema-blogposting.d.ts +1 -0
- package/dist/types/components/general/schema-blogposting.d.ts.map +1 -1
- package/dist/types/components/general/schema-localbusiness.d.ts +16 -0
- package/dist/types/components/general/schema-localbusiness.d.ts.map +1 -1
- package/dist/types/components/general/schema-recipe.d.ts +1 -0
- package/dist/types/components/general/schema-recipe.d.ts.map +1 -1
- package/dist/types/components/general/semantic.d.ts +67 -0
- package/dist/types/components/general/semantic.d.ts.map +1 -1
- package/dist/types/components/general/sidepanel.d.ts +11 -0
- package/dist/types/components/general/sidepanel.d.ts.map +1 -1
- package/dist/types/components/general/sitemap.d.ts +19 -0
- package/dist/types/components/general/sitemap.d.ts.map +1 -1
- package/dist/types/components/general/skeleton-loading.d.ts +3 -6
- package/dist/types/components/general/skeleton-loading.d.ts.map +1 -1
- package/dist/types/components/general/skeleton.d.ts +5 -0
- package/dist/types/components/general/skeleton.d.ts.map +1 -1
- package/dist/types/components/general/smartimage.d.ts +22 -0
- package/dist/types/components/general/smartimage.d.ts.map +1 -1
- package/dist/types/components/general/splitscroll.d.ts +18 -40
- package/dist/types/components/general/splitscroll.d.ts.map +1 -1
- package/dist/types/components/general/styleguide.d.ts +1 -0
- package/dist/types/components/general/styleguide.d.ts.map +1 -1
- package/dist/types/components/general/tab.d.ts +4 -0
- package/dist/types/components/general/tab.d.ts.map +1 -1
- package/dist/types/components/general/table.d.ts +4 -0
- package/dist/types/components/general/table.d.ts.map +1 -1
- package/dist/types/components/general/tiles.d.ts +12 -1
- package/dist/types/components/general/tiles.d.ts.map +1 -1
- package/dist/types/components/general/timeline.d.ts +5 -0
- package/dist/types/components/general/timeline.d.ts.map +1 -1
- package/dist/types/components/general/well-known.d.ts +56 -0
- package/dist/types/components/general/well-known.d.ts.map +1 -0
- package/dist/types/components/integrations/calendly.d.ts +3 -0
- package/dist/types/components/integrations/calendly.d.ts.map +1 -1
- package/dist/types/components/integrations/cloudinary.d.ts +4 -0
- package/dist/types/components/integrations/cloudinary.d.ts.map +1 -1
- package/dist/types/components/integrations/contentful.delivery.d.ts +22 -0
- package/dist/types/components/integrations/contentful.delivery.d.ts.map +1 -1
- package/dist/types/components/integrations/contentful.items.components.d.ts +10 -0
- package/dist/types/components/integrations/contentful.items.components.d.ts.map +1 -1
- package/dist/types/components/integrations/contentful.management.d.ts +1 -5
- package/dist/types/components/integrations/contentful.management.d.ts.map +1 -1
- package/dist/types/components/integrations/flickr.d.ts +11 -0
- package/dist/types/components/integrations/flickr.d.ts.map +1 -1
- package/dist/types/components/integrations/google.reviews.components.d.ts +5 -0
- package/dist/types/components/integrations/google.reviews.components.d.ts.map +1 -1
- package/dist/types/components/integrations/googleanalytics.d.ts +3 -0
- package/dist/types/components/integrations/googleanalytics.d.ts.map +1 -1
- package/dist/types/components/integrations/googlemap.d.ts +8 -0
- package/dist/types/components/integrations/googlemap.d.ts.map +1 -1
- package/dist/types/components/integrations/googlesearch.d.ts +1 -0
- package/dist/types/components/integrations/googlesearch.d.ts.map +1 -1
- package/dist/types/components/integrations/gravatar.components.d.ts +35 -0
- package/dist/types/components/integrations/gravatar.components.d.ts.map +1 -1
- package/dist/types/components/integrations/hubspot.components.d.ts +9 -0
- package/dist/types/components/integrations/hubspot.components.d.ts.map +1 -1
- package/dist/types/components/integrations/instagram.components.d.ts +7 -0
- package/dist/types/components/integrations/instagram.components.d.ts.map +1 -1
- package/dist/types/components/integrations/lipsum.d.ts +14 -0
- package/dist/types/components/integrations/lipsum.d.ts.map +1 -0
- package/dist/types/components/integrations/loremipsum.d.ts +4 -0
- package/dist/types/components/integrations/loremipsum.d.ts.map +1 -1
- package/dist/types/components/integrations/socialcard.d.ts +4 -0
- package/dist/types/components/integrations/socialcard.d.ts.map +1 -1
- package/dist/types/components/integrations/wordpress.components.d.ts +14 -0
- package/dist/types/components/integrations/wordpress.components.d.ts.map +1 -1
- package/dist/types/components/integrations/wordpress.functions.d.ts +6 -0
- package/dist/types/components/integrations/wordpress.functions.d.ts.map +1 -1
- package/dist/types/components/integrations/yelp.d.ts +2 -0
- package/dist/types/components/integrations/yelp.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/ebay.components.d.ts +15 -0
- package/dist/types/components/shoppingcart/ebay.components.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/ebay.functions.d.ts +14 -2
- package/dist/types/components/shoppingcart/ebay.functions.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/paypal.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts +30 -0
- package/dist/types/components/shoppingcart/shoppingcart.components.d.ts.map +1 -1
- package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts +20 -12
- package/dist/types/components/shoppingcart/shoppingcart.functions.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts +12 -0
- package/dist/types/components/sitebuilder/config/CompoundFontSelector.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts +2 -0
- package/dist/types/components/sitebuilder/config/ConfigBuilder.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/config/FontSelector.d.ts +16 -0
- package/dist/types/components/sitebuilder/config/FontSelector.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formbuilder.d.ts +5 -1
- package/dist/types/components/sitebuilder/form/formbuilder.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts +129 -0
- package/dist/types/components/sitebuilder/form/formcomponents.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formengine.d.ts +5 -0
- package/dist/types/components/sitebuilder/form/formengine.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formextractor.d.ts +6 -0
- package/dist/types/components/sitebuilder/form/formextractor.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formutils.d.ts +0 -2
- package/dist/types/components/sitebuilder/form/formutils.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/form/formvalidator.d.ts +1 -0
- package/dist/types/components/sitebuilder/form/formvalidator.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts +2 -0
- package/dist/types/components/sitebuilder/page/components/ComponentPropertiesForm.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts +3 -0
- package/dist/types/components/sitebuilder/page/components/ComponentSelector.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts +8 -0
- package/dist/types/components/sitebuilder/page/components/ComponentTree.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts +1 -0
- package/dist/types/components/sitebuilder/page/components/PageBuilderUI.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/PageEngine.d.ts +8 -0
- package/dist/types/components/sitebuilder/page/components/PageEngine.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts +3 -0
- package/dist/types/components/sitebuilder/page/components/SaveLoadSection.d.ts.map +1 -1
- package/dist/types/components/sitebuilder/page/lib/pageStorageContentful.d.ts +1 -1
- package/dist/types/components/sitebuilder/page/lib/pageStorageContentful.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.server.d.ts +4 -4
- package/dist/types/scripts/pixelated-eslint-plugin.d.ts +36 -0
- package/dist/types/stories/general/skeleton-loading.stories.d.ts +1 -1
- package/dist/types/stories/general/skeleton-loading.stories.d.ts.map +1 -1
- package/dist/types/stories/integrations/lipsum.stories.d.ts +38 -0
- package/dist/types/stories/integrations/lipsum.stories.d.ts.map +1 -0
- package/dist/types/stories/shoppingcart/shoppingcart.stories.d.ts +3 -1
- package/dist/types/stories/shoppingcart/shoppingcart.stories.d.ts.map +1 -1
- package/dist/types/tests/args.test.d.ts +2 -0
- package/dist/types/tests/args.test.d.ts.map +1 -0
- package/dist/types/tests/lipsum.test.d.ts +2 -0
- package/dist/types/tests/lipsum.test.d.ts.map +1 -0
- package/dist/types/tests/securitytxt.test.d.ts +2 -0
- package/dist/types/tests/securitytxt.test.d.ts.map +1 -0
- package/dist/types/tests/storybook-docgen.test.d.ts +2 -0
- package/dist/types/tests/storybook-docgen.test.d.ts.map +1 -0
- package/package.json +17 -14
- package/dist/components/config/config.utils.js +0 -52
- package/dist/components/general/humanstxt.js +0 -81
- package/dist/types/components/config/config.utils.d.ts +0 -6
- package/dist/types/components/config/config.utils.d.ts.map +0 -1
- package/dist/types/components/general/humanstxt.d.ts +0 -37
- package/dist/types/components/general/humanstxt.d.ts.map +0 -1
|
@@ -32,32 +32,80 @@ import './gravatar.css';
|
|
|
32
32
|
avatarSize?: number; // in pixels
|
|
33
33
|
compact?: boolean; // compact variant
|
|
34
34
|
}; */
|
|
35
|
+
/**
|
|
36
|
+
* GravatarCard — Render a profile card using Gravatar profile data, with optional prop overrides.
|
|
37
|
+
*
|
|
38
|
+
* @param {shape} [props.profile] - Gravatar profile object (fetched server-side) including profile fields and accounts.
|
|
39
|
+
* @param {string} [props.hash] - Gravatar hash for the avatar.
|
|
40
|
+
* @param {string} [props.requestHash] - Optional request hash used when fetching the profile.
|
|
41
|
+
* @param {string} [props.profileUrl] - Direct URL to the Gravatar profile.
|
|
42
|
+
* @param {string} [props.preferredUsername] - Preferred username from the profile.
|
|
43
|
+
* @param {string} [props.thumbnailUrl] - Avatar image URL.
|
|
44
|
+
* @param {string} [props.displayName] - Display name to show on the card.
|
|
45
|
+
* @param {string} [props.pronouns] - Display pronouns (if available).
|
|
46
|
+
* @param {string} [props.aboutMe] - Short bio or about text.
|
|
47
|
+
* @param {string} [props.currentLocation] - Location string for the profile.
|
|
48
|
+
* @param {string} [props.job_title] - Job title from the profile.
|
|
49
|
+
* @param {string} [props.company] - Company name from the profile.
|
|
50
|
+
* @param {arrayOf} [props.accounts] - Array of social account objects (domain, url, username, etc.).
|
|
51
|
+
* @param {arrayOf} [props.emails] - Email objects associated with the profile.
|
|
52
|
+
* @param {string} [props.customRole] - Optional custom role to use instead of job_title.
|
|
53
|
+
* @param {shape} [props.socialLinks] - Override object for social links (github, linkedin, twitter, instagram, website).
|
|
54
|
+
* @param {oneOf} [props.layout] - Layout style: 'horizontal' or 'vertical'.
|
|
55
|
+
* @param {oneOf} [props.direction] - Photo position for horizontal layout: 'left' or 'right'.
|
|
56
|
+
* @param {number} [props.avatarSize] - Avatar size in pixels.
|
|
57
|
+
* @param {boolean} [props.compact] - Render a compact variant of the card.
|
|
58
|
+
*/
|
|
35
59
|
GravatarCard.propTypes = {
|
|
36
60
|
// Gravatar profile data (fetched server-side)
|
|
61
|
+
/** Gravatar profile object with common fields */
|
|
37
62
|
profile: PropTypes.shape({
|
|
63
|
+
/** Gravatar hash used to construct avatar URLs */
|
|
38
64
|
hash: PropTypes.string,
|
|
65
|
+
/** Optional request identifier used when fetching the profile */
|
|
39
66
|
requestHash: PropTypes.string,
|
|
67
|
+
/** Direct URL to the Gravatar profile */
|
|
40
68
|
profileUrl: PropTypes.string,
|
|
69
|
+
/** Preferred username from the Gravatar profile */
|
|
41
70
|
preferredUsername: PropTypes.string,
|
|
71
|
+
/** Avatar thumbnail URL from the profile */
|
|
42
72
|
thumbnailUrl: PropTypes.string,
|
|
73
|
+
/** Display name from profile */
|
|
43
74
|
displayName: PropTypes.string,
|
|
75
|
+
/** Pronouns string */
|
|
44
76
|
pronouns: PropTypes.string,
|
|
77
|
+
/** Short bio / about text */
|
|
45
78
|
aboutMe: PropTypes.string,
|
|
79
|
+
/** Current location string */
|
|
46
80
|
currentLocation: PropTypes.string,
|
|
81
|
+
/** Job title from profile */
|
|
47
82
|
job_title: PropTypes.string,
|
|
83
|
+
/** Company name from profile */
|
|
48
84
|
company: PropTypes.string,
|
|
85
|
+
/** Social accounts array */
|
|
49
86
|
accounts: PropTypes.arrayOf(PropTypes.shape({
|
|
87
|
+
/** Account domain (e.g., 'github.com') */
|
|
50
88
|
domain: PropTypes.string,
|
|
89
|
+
/** Display label for the account */
|
|
51
90
|
display: PropTypes.string,
|
|
91
|
+
/** URL for the account */
|
|
52
92
|
url: PropTypes.string,
|
|
93
|
+
/** Icon URL for the account */
|
|
53
94
|
iconUrl: PropTypes.string,
|
|
95
|
+
/** Account username */
|
|
54
96
|
username: PropTypes.string,
|
|
97
|
+
/** Whether the account is verified */
|
|
55
98
|
verified: PropTypes.bool,
|
|
99
|
+
/** Full name associated with the account */
|
|
56
100
|
name: PropTypes.string,
|
|
101
|
+
/** Shortname used to identify the service (e.g., 'github') */
|
|
57
102
|
shortname: PropTypes.string,
|
|
58
103
|
})),
|
|
104
|
+
/** Email addresses associated with the profile */
|
|
59
105
|
emails: PropTypes.arrayOf(PropTypes.shape({
|
|
106
|
+
/** Email primary flag (if applicable) */
|
|
60
107
|
primary: PropTypes.string,
|
|
108
|
+
/** Email address value */
|
|
61
109
|
value: PropTypes.string,
|
|
62
110
|
})),
|
|
63
111
|
}),
|
|
@@ -71,18 +119,29 @@ GravatarCard.propTypes = {
|
|
|
71
119
|
pronouns: PropTypes.string,
|
|
72
120
|
profileUrl: PropTypes.string,
|
|
73
121
|
// Additional custom fields not in Gravatar
|
|
122
|
+
/** Optional custom role to display instead of job_title */
|
|
74
123
|
customRole: PropTypes.string, // Alternative to job_title
|
|
124
|
+
/** Overrides for social links (preferred over profile accounts) */
|
|
75
125
|
socialLinks: PropTypes.shape({
|
|
126
|
+
/** GitHub profile URL */
|
|
76
127
|
github: PropTypes.string,
|
|
128
|
+
/** LinkedIn profile URL */
|
|
77
129
|
linkedin: PropTypes.string,
|
|
130
|
+
/** Twitter profile URL */
|
|
78
131
|
twitter: PropTypes.string,
|
|
132
|
+
/** Instagram profile URL */
|
|
79
133
|
instagram: PropTypes.string,
|
|
134
|
+
/** Personal website URL */
|
|
80
135
|
website: PropTypes.string,
|
|
81
136
|
}),
|
|
82
137
|
// Layout options
|
|
138
|
+
/** Layout style: 'horizontal' or 'vertical' */
|
|
83
139
|
layout: PropTypes.oneOf(['horizontal', 'vertical']),
|
|
140
|
+
/** Photo position when horizontal: 'left' or 'right' */
|
|
84
141
|
direction: PropTypes.oneOf(['left', 'right']), // photo position (for horizontal layout)
|
|
142
|
+
/** Avatar size in pixels */
|
|
85
143
|
avatarSize: PropTypes.number, // in pixels
|
|
144
|
+
/** Compact card variant */
|
|
86
145
|
compact: PropTypes.bool, // compact variant
|
|
87
146
|
};
|
|
88
147
|
export function GravatarCard(props) {
|
|
@@ -16,11 +16,25 @@ export function initializeHubSpotScript(region, portalId) {
|
|
|
16
16
|
script.defer = true;
|
|
17
17
|
document.head.appendChild(script);
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* HubSpotForm — Embed a HubSpot form by injecting the HubSpot script and creating a form instance.
|
|
21
|
+
*
|
|
22
|
+
* @param {string} [props.region] - HubSpot region code (e.g., 'na1').
|
|
23
|
+
* @param {string} [props.portalId] - HubSpot portal ID (account identifier).
|
|
24
|
+
* @param {string} [props.formId] - HubSpot form GUID to render.
|
|
25
|
+
* @param {string} [props.target] - CSS selector target for where the form will be injected (overrides containerId).
|
|
26
|
+
* @param {string} [props.containerId] - ID of the container element to mount the form into (default: 'hubspot-form-container').
|
|
27
|
+
*/
|
|
19
28
|
HubSpotForm.propTypes = {
|
|
29
|
+
/** HubSpot region code */
|
|
20
30
|
region: PropTypes.string,
|
|
31
|
+
/** HubSpot portal/account ID */
|
|
21
32
|
portalId: PropTypes.string,
|
|
33
|
+
/** HubSpot form GUID */
|
|
22
34
|
formId: PropTypes.string,
|
|
35
|
+
/** CSS selector or target element for the form */
|
|
23
36
|
target: PropTypes.string,
|
|
37
|
+
/** DOM ID of the container element for the form */
|
|
24
38
|
containerId: PropTypes.string,
|
|
25
39
|
};
|
|
26
40
|
export function HubSpotForm({ region, portalId, formId, target, containerId = 'hubspot-form-container' }) {
|
|
@@ -48,15 +62,31 @@ export function HubSpotForm({ region, portalId, formId, target, containerId = 'h
|
|
|
48
62
|
}, [finalRegion, finalPortalId, finalFormId, formTarget]);
|
|
49
63
|
return _jsx("div", { className: "hs-form-frame", "data-region": finalRegion, "data-form-id": finalFormId, "data-portal-id": finalPortalId });
|
|
50
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* HubspotTrackingCode — Inject the HubSpot tracking script for the given portal ID.
|
|
67
|
+
*
|
|
68
|
+
* @param {string} [props.hubID] - HubSpot portal ID used to load the tracking script.
|
|
69
|
+
*/
|
|
51
70
|
HubspotTrackingCode.propTypes = {
|
|
71
|
+
/** HubSpot portal ID for tracking script injection */
|
|
52
72
|
hubID: PropTypes.string.isRequired,
|
|
53
73
|
};
|
|
54
74
|
export function HubspotTrackingCode(props) {
|
|
55
75
|
return (_jsx(_Fragment, { children: _jsx("script", { type: "text/javascript", id: "hs-script-loader", async: true, defer: true, src: `//js-na2.hs-scripts.com/${props.hubID}.js` }) }));
|
|
56
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* getHubspotFormSubmissions — Retrieve submissions for a HubSpot form via the HubSpot Forms API (proxied).
|
|
79
|
+
*
|
|
80
|
+
* @param {string} [props.proxyURL] - Proxy base URL used to avoid CORS (must include trailing slash if required by proxy).
|
|
81
|
+
* @param {string} [props.formGUID] - HubSpot form GUID to fetch submissions for.
|
|
82
|
+
* @param {string} [props.apiToken] - HubSpot API token used for authorization.
|
|
83
|
+
*/
|
|
57
84
|
getHubspotFormSubmissions.propTypes = {
|
|
85
|
+
/** Proxy base URL to route the request through */
|
|
58
86
|
proxyURL: PropTypes.string.isRequired,
|
|
87
|
+
/** HubSpot form GUID */
|
|
59
88
|
formGUID: PropTypes.string.isRequired,
|
|
89
|
+
/** Bearer API token for HubSpot requests */
|
|
60
90
|
apiToken: PropTypes.string.isRequired,
|
|
61
91
|
};
|
|
62
92
|
export async function getHubspotFormSubmissions(props) {
|
|
@@ -5,13 +5,31 @@ import PropTypes from 'prop-types';
|
|
|
5
5
|
import { getInstagramTiles } from './instagram.functions';
|
|
6
6
|
import { usePixelatedConfig } from "../config/config.client";
|
|
7
7
|
import { Tiles } from '../general/tiles';
|
|
8
|
+
/**
|
|
9
|
+
* InstagramTiles — Fetch Instagram media and render as tiles.
|
|
10
|
+
*
|
|
11
|
+
* @param {string} [props.accessToken] - Instagram user access token with required permissions.
|
|
12
|
+
* @param {string} [props.userId] - Instagram user ID to fetch media from.
|
|
13
|
+
* @param {number} [props.limit] - Maximum number of media items to fetch (default: 12).
|
|
14
|
+
* @param {number} [props.rowCount] - Number of columns/rows to use in the tiles layout.
|
|
15
|
+
* @param {boolean} [props.useThumbnails] - Whether to prefer thumbnail images over full-size media.
|
|
16
|
+
* @param {boolean} [props.includeVideos] - Include video posts in results when true.
|
|
17
|
+
* @param {boolean} [props.includeCaptions] - Include captions in the returned tile metadata.
|
|
18
|
+
*/
|
|
8
19
|
InstagramTiles.propTypes = {
|
|
20
|
+
/** Instagram access token */
|
|
9
21
|
accessToken: PropTypes.string,
|
|
22
|
+
/** Instagram user ID */
|
|
10
23
|
userId: PropTypes.string,
|
|
24
|
+
/** Max number of media items to fetch */
|
|
11
25
|
limit: PropTypes.number,
|
|
26
|
+
/** Number of columns/rows used by Tiles layout */
|
|
12
27
|
rowCount: PropTypes.number,
|
|
28
|
+
/** Prefer thumbnails when available */
|
|
13
29
|
useThumbnails: PropTypes.bool,
|
|
30
|
+
/** Include video posts */
|
|
14
31
|
includeVideos: PropTypes.bool,
|
|
32
|
+
/** Include captions in tile metadata */
|
|
15
33
|
includeCaptions: PropTypes.bool,
|
|
16
34
|
};
|
|
17
35
|
export function InstagramTiles(props) {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
// https://www.outsystems.com/forge/component-documentation/12204/lorem-ipsum-lipsum-com-o11/0
|
|
3
|
+
/**
|
|
4
|
+
* getLipsum — Fetch placeholder text from lipsum.com and return an array of paragraphs.
|
|
5
|
+
*
|
|
6
|
+
* @param {oneOf} [props.LipsumTypeId] - Type of content to request ('Paragraph', 'Word', 'Char').
|
|
7
|
+
* @param {number} [props.Amount] - Quantity to request (number of paragraphs/words/chars).
|
|
8
|
+
* @param {boolean} [props.StartWithLoremIpsum] - Whether the text should start with the classic Lorem Ipsum opening.
|
|
9
|
+
*/
|
|
10
|
+
getLipsum.propTypes = {
|
|
11
|
+
/** Type of lipsum content to request */
|
|
12
|
+
LipsumTypeId: PropTypes.oneOf(['Paragraph', 'Word', 'Char']).isRequired,
|
|
13
|
+
/** Number of items to request */
|
|
14
|
+
Amount: PropTypes.number.isRequired,
|
|
15
|
+
/** Start with the canonical Lorem Ipsum text */
|
|
16
|
+
StartWithLoremIpsum: PropTypes.bool,
|
|
17
|
+
};
|
|
18
|
+
export async function getLipsum(props) {
|
|
19
|
+
const { LipsumTypeId, Amount, StartWithLoremIpsum } = props;
|
|
20
|
+
const proxyURL = "https://proxy.pixelated.tech/prod/proxy?url=";
|
|
21
|
+
const baseURL = "https://www.lipsum.com/feed/html";
|
|
22
|
+
const qs = `?LipsumTypeId=${LipsumTypeId}&amount=${Amount}&StartWithLoremIpsum=${StartWithLoremIpsum}`;
|
|
23
|
+
const fulURL = `${proxyURL}${baseURL}${qs}`;
|
|
24
|
+
const res = await fetch(fulURL)
|
|
25
|
+
.then((response) => {
|
|
26
|
+
return response.text();
|
|
27
|
+
})
|
|
28
|
+
.then((html) => {
|
|
29
|
+
const parser = new DOMParser();
|
|
30
|
+
const doc = parser.parseFromString(html, 'text/html');
|
|
31
|
+
const lipsum = doc.getElementById('lipsum');
|
|
32
|
+
// const lipsums = doc.getElementById('lipsum')?.innerHTML || "";
|
|
33
|
+
const paragraphs = lipsum?.querySelectorAll('p');
|
|
34
|
+
const strings = [];
|
|
35
|
+
paragraphs?.forEach((p) => {
|
|
36
|
+
strings.push(p.textContent.trim());
|
|
37
|
+
});
|
|
38
|
+
return strings;
|
|
39
|
+
})
|
|
40
|
+
.catch(error => {
|
|
41
|
+
console.error('Failed to fetch page: ', error);
|
|
42
|
+
return [];
|
|
43
|
+
});
|
|
44
|
+
return res;
|
|
45
|
+
}
|
|
@@ -4,10 +4,22 @@ import { useEffect, useState } from 'react';
|
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
5
|
import { usePixelatedConfig } from '../config/config.client';
|
|
6
6
|
const debug = false;
|
|
7
|
+
/**
|
|
8
|
+
* LoremIpsum — Fetch and render placeholder paragraphs via an external API (with optional proxy fallback).
|
|
9
|
+
*
|
|
10
|
+
* @param {number} [props.paragraphs] - Number of paragraphs to fetch.
|
|
11
|
+
* @param {string} [props.seed] - Optional seed to generate deterministic content.
|
|
12
|
+
* @param {string} [props.proxyBase] - Optional proxy base URL to use when direct fetch fails due to CORS.
|
|
13
|
+
* @param {string} [props.className] - CSS class name(s) applied to the wrapper element.
|
|
14
|
+
*/
|
|
7
15
|
LoremIpsum.propTypes = {
|
|
16
|
+
/** Paragraph count to request */
|
|
8
17
|
paragraphs: PropTypes.number,
|
|
18
|
+
/** Optional deterministic seed for content */
|
|
9
19
|
seed: PropTypes.string,
|
|
20
|
+
/** Proxy base URL used as a fallback */
|
|
10
21
|
proxyBase: PropTypes.string,
|
|
22
|
+
/** Wrapper CSS class name */
|
|
11
23
|
className: PropTypes.string,
|
|
12
24
|
};
|
|
13
25
|
export function LoremIpsum({ paragraphs = 1, seed = '', proxyBase, className = '' }) {
|
|
@@ -31,7 +31,13 @@ function removeDeadHrefs(element) {
|
|
|
31
31
|
return doc.body.innerHTML;
|
|
32
32
|
}
|
|
33
33
|
/* ========== SOCIALCARD ========== */
|
|
34
|
+
/**
|
|
35
|
+
* SocialCards — Aggregate feeds from configured sources (RSS, APIs) and render as social cards.
|
|
36
|
+
*
|
|
37
|
+
* @param {object} [props.sources] - Map of source configurations (url/userID/entryCount/iconSrc/iconSrcAlt) keyed by source name.
|
|
38
|
+
*/
|
|
34
39
|
SocialCards.propTypes = {
|
|
40
|
+
/** Map of feed source configurations (e.g., { instagram: { userID, entryCount }, blog: { url, entryCount }, ... }) */
|
|
35
41
|
sources: PropTypes.object.isRequired
|
|
36
42
|
};
|
|
37
43
|
export function SocialCards(props) {
|
|
@@ -289,9 +295,19 @@ export function SocialCards(props) {
|
|
|
289
295
|
return (state.mySocialCards);
|
|
290
296
|
}
|
|
291
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* SocialCard — Render a single social feed item as a card with icon, title, description, and date.
|
|
300
|
+
*
|
|
301
|
+
* @param {string} [props.iconSrc] - URL/path to the source icon image.
|
|
302
|
+
* @param {string} [props.iconSrcAlt] - Alt text for the source icon.
|
|
303
|
+
* @param {any} [props.card] - Feed item object containing title, link, description and pubDate.
|
|
304
|
+
*/
|
|
292
305
|
SocialCard.propTypes = {
|
|
306
|
+
/** Source icon image URL */
|
|
293
307
|
iconSrc: PropTypes.string.isRequired,
|
|
308
|
+
/** Alt text for the icon */
|
|
294
309
|
iconSrcAlt: PropTypes.string.isRequired,
|
|
310
|
+
/** Feed item object with title/link/description/pubDate */
|
|
295
311
|
card: PropTypes.any.isRequired
|
|
296
312
|
};
|
|
297
313
|
export function SocialCard(props) {
|
|
@@ -299,7 +315,10 @@ export function SocialCard(props) {
|
|
|
299
315
|
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));
|
|
300
316
|
}
|
|
301
317
|
/* ========== SPINNER ========== */
|
|
302
|
-
SocialCardsLoading.propTypes
|
|
318
|
+
/** SocialCardsLoading.propTypes — No props (simple loading indicator).
|
|
319
|
+
* @param {any} [props] - No props are accepted by SocialCardsLoading.
|
|
320
|
+
*/
|
|
321
|
+
SocialCardsLoading.propTypes = { /** no props */};
|
|
303
322
|
export function SocialCardsLoading() {
|
|
304
323
|
return (_jsx("div", { className: "cardsLoading", children: _jsx("div", { children: "Loading..." }) }));
|
|
305
324
|
}
|
|
@@ -14,11 +14,25 @@ function decodeString(str) {
|
|
|
14
14
|
textarea.innerHTML = str;
|
|
15
15
|
return textarea.value;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* BlogPostList — Render a list of WordPress posts. If `posts` are provided they are used directly; otherwise the component will fetch posts from the configured WordPress endpoint.
|
|
19
|
+
*
|
|
20
|
+
* @param {string} [props.site] - WordPress site identifier (overrides provider config).
|
|
21
|
+
* @param {string} [props.baseURL] - Base URL for WordPress API if not using site config.
|
|
22
|
+
* @param {number} [props.count] - Maximum number of posts to fetch/display.
|
|
23
|
+
* @param {array} [props.posts] - Optional pre-fetched posts to render (bypasses remote fetch).
|
|
24
|
+
* @param {boolean} [props.showCategories] - Whether to show category icons for each post.
|
|
25
|
+
*/
|
|
17
26
|
BlogPostList.propTypes = {
|
|
27
|
+
/** WordPress site identifier */
|
|
18
28
|
site: PropTypes.string,
|
|
29
|
+
/** Optional WordPress base URL */
|
|
19
30
|
baseURL: PropTypes.string,
|
|
31
|
+
/** Max number of posts to fetch/display */
|
|
20
32
|
count: PropTypes.number,
|
|
33
|
+
/** Optional array of pre-fetched posts */
|
|
21
34
|
posts: PropTypes.array,
|
|
35
|
+
/** Show category icons next to posts */
|
|
22
36
|
showCategories: PropTypes.bool,
|
|
23
37
|
};
|
|
24
38
|
export function BlogPostList(props) {
|
|
@@ -55,14 +69,34 @@ export function BlogPostList(props) {
|
|
|
55
69
|
}, [site, baseURL, count, cachedPosts]);
|
|
56
70
|
return (_jsxs(_Fragment, { children: [_jsx(Loading, {}), posts.map((post) => (_jsx(PageGridItem, { children: _jsx(BlogPostSummary, { ID: post.ID, title: post.title, date: post.date, excerpt: post.excerpt, URL: post.URL, categories: post.categories, featured_image: post.featured_image, showCategories: showCategories }) }, post.ID)))] }));
|
|
57
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* BlogPostSummary — Render a compact summary card for a single WordPress post.
|
|
74
|
+
*
|
|
75
|
+
* @param {oneOfType} [props.ID] - Post ID (string or number).
|
|
76
|
+
* @param {string} [props.title] - Post title.
|
|
77
|
+
* @param {string} [props.date] - Post publish date (ISO string).
|
|
78
|
+
* @param {string} [props.excerpt] - HTML excerpt to display as the summary.
|
|
79
|
+
* @param {string} [props.URL] - Canonical URL for the post.
|
|
80
|
+
* @param {object} [props.categories] - Categories object (keys -> category name) used to derive icons.
|
|
81
|
+
* @param {string} [props.featured_image] - URL of the post's featured image.
|
|
82
|
+
* @param {boolean} [props.showCategories] - Whether to render category icons beneath the summary.
|
|
83
|
+
*/
|
|
58
84
|
BlogPostSummary.propTypes = {
|
|
85
|
+
/** Post ID (string or number) */
|
|
59
86
|
ID: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
87
|
+
/** Post title */
|
|
60
88
|
title: PropTypes.string,
|
|
89
|
+
/** Post publish date (ISO string) */
|
|
61
90
|
date: PropTypes.string,
|
|
91
|
+
/** HTML excerpt */
|
|
62
92
|
excerpt: PropTypes.string,
|
|
93
|
+
/** Canonical URL for the post */
|
|
63
94
|
URL: PropTypes.string,
|
|
95
|
+
/** Categories object used for icons */
|
|
64
96
|
categories: PropTypes.object,
|
|
97
|
+
/** Featured image URL */
|
|
65
98
|
featured_image: PropTypes.string,
|
|
99
|
+
/** Show categories flag */
|
|
66
100
|
showCategories: PropTypes.bool,
|
|
67
101
|
};
|
|
68
102
|
export function BlogPostSummary(props) {
|
|
@@ -72,7 +106,13 @@ export function BlogPostSummary(props) {
|
|
|
72
106
|
return (_jsx("div", { className: "blog-post-summary", children: _jsxs("article", { className: "h-entry", children: [_jsx("h2", { className: "p-name", children: _jsx("a", { className: "u-url blog-post-url", href: props.URL || '', target: "_blank", rel: "noopener noreferrer", children: props.title ? decodeString(props.title) : '' }) }), _jsxs("div", { className: "dt-published", children: ["Published: ", props.date ? new Date(props.date).toLocaleDateString() : ''] }), props.featured_image ? (_jsxs("div", { className: "article-body row-12col", children: [_jsx("div", { className: "article-featured-image grid-s1-e4", children: _jsx(SmartImage, { className: "u-photo", src: props.featured_image, alt: props.title ? decodeString(props.title) : '', title: props.title ? decodeString(props.title) : '', style: {}, cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined }) }), _jsx("div", { className: "article-excerpt grid-s4-e13", children: _jsx("div", { className: "p-summary", dangerouslySetInnerHTML: { __html: myExcerpt } }) })] })) :
|
|
73
107
|
_jsx("div", { className: "article-excerpt grid-s1-e13", children: _jsx("div", { className: "p-summary", dangerouslySetInnerHTML: { __html: myExcerpt } }) }), props.showCategories !== false && (_jsxs("div", { children: ["Categories:", myCategoryImages.map(([categoryImg, index]) => (_jsx("span", { className: "p-category", children: _jsx(SmartImage, { src: `/images/icons/${categoryImg}.png`, title: String(categoryImg), alt: String(categoryImg), cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined }) }, categoryImg + "-" + index)))] }))] }) }, props.ID));
|
|
74
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* BlogPostCategories — Render a compact list of category names or icons for a post.
|
|
111
|
+
*
|
|
112
|
+
* @param {arrayOf} [props.categories] - Array of category strings to render.
|
|
113
|
+
*/
|
|
75
114
|
BlogPostCategories.propTypes = {
|
|
115
|
+
/** Array of category names */
|
|
76
116
|
categories: PropTypes.arrayOf(PropTypes.string),
|
|
77
117
|
};
|
|
78
118
|
export function BlogPostCategories(props) {
|
|
@@ -4,9 +4,19 @@ import PropTypes from "prop-types";
|
|
|
4
4
|
// const wpSite = "blog.pixelated.tech";
|
|
5
5
|
const wpApiURL = "https://public-api.wordpress.com/rest/v1/sites/";
|
|
6
6
|
const wpCategoriesPath = "/categories";
|
|
7
|
+
/**
|
|
8
|
+
* getWordPressItems — Fetch posts from the WordPress REST API for a given site.
|
|
9
|
+
*
|
|
10
|
+
* @param {string} [props.site] - WordPress site identifier (site slug or domain).
|
|
11
|
+
* @param {number} [props.count] - Optional number of posts to fetch (omit to fetch all available).
|
|
12
|
+
* @param {string} [props.baseURL] - Optional base URL for the WordPress API (defaults to public WordPress API URL).
|
|
13
|
+
*/
|
|
7
14
|
getWordPressItems.propTypes = {
|
|
15
|
+
/** WordPress site identifier (slug or domain) */
|
|
8
16
|
site: PropTypes.string.isRequired,
|
|
17
|
+
/** Number of posts to fetch (optional) */
|
|
9
18
|
count: PropTypes.number,
|
|
19
|
+
/** Base URL for WordPress API (optional) */
|
|
10
20
|
baseURL: PropTypes.string,
|
|
11
21
|
};
|
|
12
22
|
export async function getWordPressItems(props) {
|
|
@@ -43,7 +53,13 @@ export async function getWordPressItems(props) {
|
|
|
43
53
|
}
|
|
44
54
|
return posts;
|
|
45
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* getWordPressItemImages — Extract image objects from a WordPress post for use in sitemaps and galleries.
|
|
58
|
+
*
|
|
59
|
+
* @param {object} [props.item] - WordPress post object to extract image URLs from.
|
|
60
|
+
*/
|
|
46
61
|
getWordPressItemImages.propTypes = {
|
|
62
|
+
/** WordPress post object */
|
|
47
63
|
item: PropTypes.object.isRequired,
|
|
48
64
|
};
|
|
49
65
|
export function getWordPressItemImages(item) {
|
|
@@ -87,8 +103,16 @@ export function getWordPressItemImages(item) {
|
|
|
87
103
|
}
|
|
88
104
|
return images;
|
|
89
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* getWordPressCategories — Retrieve categories for a WordPress site.
|
|
108
|
+
*
|
|
109
|
+
* @param {string} [props.site] - WordPress site identifier (slug or domain).
|
|
110
|
+
* @param {string} [props.baseURL] - Optional base URL for the WordPress API.
|
|
111
|
+
*/
|
|
90
112
|
getWordPressCategories.propTypes = {
|
|
113
|
+
/** WordPress site identifier (slug or domain) */
|
|
91
114
|
site: PropTypes.string.isRequired,
|
|
115
|
+
/** Base URL for WordPress API (optional) */
|
|
92
116
|
baseURL: PropTypes.string,
|
|
93
117
|
};
|
|
94
118
|
export async function getWordPressCategories(props) {
|
|
@@ -13,8 +13,16 @@ https://www.google.com/search?q=yelp+reviews+react+component&oq=yelp+reviews+rea
|
|
|
13
13
|
https://www.reddit.com/r/nextjs/comments/16smhqa/next_js_fetching_data_from_yelp_api/
|
|
14
14
|
https://helloputnam.medium.com/easiest-way-to-include-business-reviews-on-a-web-app-google-facebook-yelp-etc-de3e243bbe75
|
|
15
15
|
*/
|
|
16
|
+
/**
|
|
17
|
+
* YelpReviews — Fetch and display Yelp reviews for a given business ID (note: Yelp API access may require paid plan).
|
|
18
|
+
*
|
|
19
|
+
* @param {string} [props.businessID] - Yelp business ID used to fetch reviews (required).
|
|
20
|
+
* @param {string} [props.key] - Optional API key (not used by the demo placeholder implementation).
|
|
21
|
+
*/
|
|
16
22
|
YelpReviews.propTypes = {
|
|
23
|
+
/** Yelp business identifier */
|
|
17
24
|
businessID: PropTypes.string.isRequired,
|
|
25
|
+
/** Optional Yelp API key */
|
|
18
26
|
key: PropTypes.string,
|
|
19
27
|
};
|
|
20
28
|
export function YelpReviews(props) {
|
|
@@ -14,8 +14,16 @@ import "../../css/pixelated.grid.scss";
|
|
|
14
14
|
import "./ebay.css";
|
|
15
15
|
const debug = false;
|
|
16
16
|
/* ========== EBAY ITEMS PAGE ========== */
|
|
17
|
+
/**
|
|
18
|
+
* EbayItems — Fetch and display eBay items using the configured API parameters and optional Cloudinary transforms.
|
|
19
|
+
*
|
|
20
|
+
* @param {object} [props.apiProps] - eBay API configuration and query parameters.
|
|
21
|
+
* @param {string} [props.cloudinaryProductEnv] - Optional Cloudinary cloud name used to transform image URLs.
|
|
22
|
+
*/
|
|
17
23
|
EbayItems.propTypes = {
|
|
24
|
+
/** eBay API configuration and query params */
|
|
18
25
|
apiProps: PropTypes.object.isRequired,
|
|
26
|
+
/** Optional Cloudinary product environment for image transforms */
|
|
19
27
|
cloudinaryProductEnv: PropTypes.string,
|
|
20
28
|
};
|
|
21
29
|
export function EbayItems(props) {
|
|
@@ -24,8 +32,16 @@ export function EbayItems(props) {
|
|
|
24
32
|
const [items, setItems] = useState([]);
|
|
25
33
|
const [aspects, setAspects] = useState([]);
|
|
26
34
|
const apiProps = { ...(config?.ebay || {}), ...props.apiProps };
|
|
35
|
+
/**
|
|
36
|
+
* paintItems — Map raw eBay item data into rendered `EbayListItem` elements.
|
|
37
|
+
*
|
|
38
|
+
* @param {array} [props.items] - Array of eBay item objects returned by the API.
|
|
39
|
+
* @param {string} [props.cloudinaryProductEnv] - Optional Cloudinary cloud name for image URL transformations.
|
|
40
|
+
*/
|
|
27
41
|
paintItems.propTypes = {
|
|
42
|
+
/** Array of eBay item objects */
|
|
28
43
|
items: PropTypes.array.isRequired,
|
|
44
|
+
/** Optional Cloudinary product environment */
|
|
29
45
|
cloudinaryProductEnv: PropTypes.string,
|
|
30
46
|
};
|
|
31
47
|
function paintItems(props) {
|
|
@@ -39,8 +55,16 @@ export function EbayItems(props) {
|
|
|
39
55
|
}
|
|
40
56
|
return newItems;
|
|
41
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* fetchItems — Perform a search query against eBay and update component state with results.
|
|
60
|
+
*
|
|
61
|
+
* @param {string} [props.aspectName] - Optional aspect name to filter search results.
|
|
62
|
+
* @param {string} [props.aspectValue] - Optional aspect value corresponding to `aspectName` to filter results.
|
|
63
|
+
*/
|
|
42
64
|
fetchItems.propTypes = {
|
|
65
|
+
/** Filter aspect name for the search (optional) */
|
|
43
66
|
aspectName: PropTypes.string,
|
|
67
|
+
/** Filter aspect value for the search (optional) */
|
|
44
68
|
aspectValue: PropTypes.string,
|
|
45
69
|
};
|
|
46
70
|
async function fetchItems(props) {
|
|
@@ -80,8 +104,16 @@ export function EbayItems(props) {
|
|
|
80
104
|
return (_jsx("div", { className: "section-container", children: _jsx("div", { id: "ebayItems", className: "ebayItems", children: _jsx(Loading, {}) }) }));
|
|
81
105
|
}
|
|
82
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* EbayListFilter — UI for filtering eBay item lists by aspect values.
|
|
109
|
+
*
|
|
110
|
+
* @param {any} [props.aspects] - Aspect distributions returned by eBay used to build filter controls.
|
|
111
|
+
* @param {function} [props.callback] - Callback invoked when a filter selection changes; receives filter criteria.
|
|
112
|
+
*/
|
|
83
113
|
EbayListFilter.propTypes = {
|
|
114
|
+
/** Aspect distributions used to render filter controls */
|
|
84
115
|
aspects: PropTypes.any.isRequired,
|
|
116
|
+
/** Callback to fetch filtered results */
|
|
85
117
|
callback: PropTypes.func.isRequired,
|
|
86
118
|
};
|
|
87
119
|
export function EbayListFilter(props) {
|
|
@@ -124,9 +156,19 @@ export function EbayListFilter(props) {
|
|
|
124
156
|
}
|
|
125
157
|
return (_jsxs("form", { name: "ebayItemsFilter", id: "ebayItemsFilter", children: [_jsxs("span", { className: "filterInput", children: [_jsx("label", { htmlFor: "aspectName", children: "Aspect:" }), _jsxs("select", { id: "aspectName", onChange: onAspectNameChange, children: [_jsx("option", { value: "" }), aspectNames.map((aspectName, index) => _jsx("option", { value: aspectName, children: aspectName }, index))] })] }), _jsxs("span", { className: "filterInput", children: [_jsx("label", { htmlFor: "aspectValue", onChange: onAspectValueChange, children: "Value:" }), _jsx("select", { id: "aspectValue", children: _jsx("option", { value: "" }) })] }), _jsx("span", { className: "filterInput", children: _jsx("button", { type: "button", onClick: handleAspectFilter, children: "Filter" }) })] }));
|
|
126
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* EbayListItem — Render a single eBay item with thumbnail, metadata and add-to-cart actions.
|
|
161
|
+
*
|
|
162
|
+
* @param {any} [props.item] - eBay item object returned by the API.
|
|
163
|
+
* @param {string} [props.cloudinaryProductEnv] - Optional Cloudinary cloud name to transform image URLs.
|
|
164
|
+
* @param {any} [props.apiProps] - eBay API properties (for link generation or calls).
|
|
165
|
+
*/
|
|
127
166
|
EbayListItem.propTypes = {
|
|
167
|
+
/** eBay item object */
|
|
128
168
|
item: PropTypes.any.isRequired,
|
|
169
|
+
/** Optional Cloudinary product environment */
|
|
129
170
|
cloudinaryProductEnv: PropTypes.string,
|
|
171
|
+
/** eBay API properties */
|
|
130
172
|
apiProps: PropTypes.any,
|
|
131
173
|
};
|
|
132
174
|
export function EbayListItem(props) {
|
|
@@ -151,9 +193,19 @@ export function EbayListItem(props) {
|
|
|
151
193
|
? _jsxs("a", { href: itemURL, target: itemURLTarget, rel: "noreferrer", children: ["$", thisItem.price.value + " " + thisItem.price.currency] })
|
|
152
194
|
: "$" + thisItem.price.value + " " + thisItem.price.currency }), _jsx("br", {}), _jsxs("div", { className: "ebayItemAddToCart", children: [_jsx(ViewItemDetails, { href: "/store", itemID: thisItem.legacyItemId }), _jsx(AddToCartButton, { handler: addToShoppingCart, item: shoppingCartItem, itemID: thisItem.legacyItemId })] })] })] }));
|
|
153
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* EbayItemHeader — Render a heading for an eBay item; optionally wrap in a link when a `url` is provided.
|
|
198
|
+
*
|
|
199
|
+
* @param {string} [props.title] - The item title to display.
|
|
200
|
+
* @param {string} [props.url] - Optional URL to link the title to (opens in `props.target`).
|
|
201
|
+
* @param {string} [props.target] - Link target attribute (e.g., '_blank').
|
|
202
|
+
*/
|
|
154
203
|
EbayItemHeader.propTypes = {
|
|
204
|
+
/** The item title text */
|
|
155
205
|
title: PropTypes.string.isRequired,
|
|
206
|
+
/** Optional link URL for the title */
|
|
156
207
|
url: PropTypes.string,
|
|
208
|
+
/** Link target attribute (e.g., '_blank') */
|
|
157
209
|
target: PropTypes.string,
|
|
158
210
|
};
|
|
159
211
|
export function EbayItemHeader(props) {
|
|
@@ -162,9 +214,19 @@ export function EbayItemHeader(props) {
|
|
|
162
214
|
: _jsx("h2", { className: "", children: props.title }) }));
|
|
163
215
|
}
|
|
164
216
|
/* ========== EBAY ITEM DETAIL PAGE ========== */
|
|
217
|
+
/**
|
|
218
|
+
* EbayItemDetail — Display detailed information for a single eBay item fetched via the API.
|
|
219
|
+
*
|
|
220
|
+
* @param {object} [props.apiProps] - eBay API configuration used to fetch the item.
|
|
221
|
+
* @param {string} [props.itemID] - eBay item identifier to fetch details for.
|
|
222
|
+
* @param {string} [props.cloudinaryProductEnv] - Optional Cloudinary product environment for image transforms.
|
|
223
|
+
*/
|
|
165
224
|
EbayItemDetail.propTypes = {
|
|
225
|
+
/** eBay API configuration */
|
|
166
226
|
apiProps: PropTypes.object.isRequired,
|
|
227
|
+
/** eBay item ID to fetch details for */
|
|
167
228
|
itemID: PropTypes.string.isRequired, // currently not used
|
|
229
|
+
/** Cloudinary product env for image transforms */
|
|
168
230
|
cloudinaryProductEnv: PropTypes.string,
|
|
169
231
|
};
|
|
170
232
|
export function EbayItemDetail(props) {
|
|
@@ -209,8 +271,16 @@ export function EbayItemDetail(props) {
|
|
|
209
271
|
}
|
|
210
272
|
}
|
|
211
273
|
/* ========== EBAY RATE LIMITS VISUALIZER ========== */
|
|
274
|
+
/**
|
|
275
|
+
* EbayRateLimitsVisualizer — Visualize eBay API rate limit information for debugging and monitoring.
|
|
276
|
+
*
|
|
277
|
+
* @param {string} [props.token] - OAuth access token used to authorize analytics requests.
|
|
278
|
+
* @param {object} [props.apiProps] - eBay analytics API configuration (baseAnalyticsURL, proxyURL).
|
|
279
|
+
*/
|
|
212
280
|
EbayRateLimitsVisualizer.propTypes = {
|
|
281
|
+
/** OAuth access token for analytics endpoints */
|
|
213
282
|
token: PropTypes.string,
|
|
283
|
+
/** eBay analytics API configuration */
|
|
214
284
|
apiProps: PropTypes.object,
|
|
215
285
|
};
|
|
216
286
|
export function EbayRateLimitsVisualizer(props) {
|