@pixelated-tech/components 3.11.8 → 3.12.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/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.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/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.css +5 -5
- package/dist/components/general/skeleton-loading.js +11 -2
- 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/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/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 +13 -1
- 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/config/pixelated.config.json.enc +1 -1
- package/dist/index.js +1 -0
- package/dist/index.server.js +1 -0
- package/dist/scripts/pixelated-eslint-plugin.js +56 -0
- package/dist/scripts/release.sh +12 -21
- 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-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/config/config.server.d.ts +2 -0
- package/dist/types/components/config/config.server.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/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/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 +12 -0
- package/dist/types/components/shoppingcart/ebay.functions.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/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/index.d.ts +1 -0
- package/dist/types/index.server.d.ts +1 -0
- package/dist/types/scripts/pixelated-eslint-plugin.d.ts +18 -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/storybook-docgen.test.d.ts +2 -0
- package/dist/types/tests/storybook-docgen.test.d.ts.map +1 -0
- package/package.json +12 -9
|
@@ -210,13 +210,29 @@ export async function createWordPressURLs(props) {
|
|
|
210
210
|
}
|
|
211
211
|
return sitemap;
|
|
212
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* createContentfulURLs — Create sitemap entries for Contentful content by fetching a content type field.
|
|
215
|
+
*
|
|
216
|
+
* @param {shape} [props.apiProps] - Contentful API props: { base_url, space_id, environment, delivery_access_token }.
|
|
217
|
+
* @param {string} [props.base_url] - Contentful base API URL.
|
|
218
|
+
* @param {string} [props.space_id] - Contentful space id.
|
|
219
|
+
* @param {string} [props.environment] - Contentful environment (e.g., 'master').
|
|
220
|
+
* @param {string} [props.delivery_access_token] - Delivery API token (read-only) for Contentful.
|
|
221
|
+
* @param {string} [props.origin] - Origin to prefix generated URLs (e.g., 'https://example.com').
|
|
222
|
+
*/
|
|
213
223
|
createContentfulURLs.propTypes = {
|
|
224
|
+
/** Contentful API properties */
|
|
214
225
|
apiProps: PropTypes.shape({
|
|
226
|
+
/** Contentful base URL */
|
|
215
227
|
base_url: PropTypes.string.isRequired,
|
|
228
|
+
/** Contentful space id */
|
|
216
229
|
space_id: PropTypes.string.isRequired,
|
|
230
|
+
/** Contentful environment */
|
|
217
231
|
environment: PropTypes.string.isRequired,
|
|
232
|
+
/** Delivery API token */
|
|
218
233
|
delivery_access_token: PropTypes.string.isRequired,
|
|
219
234
|
}).isRequired,
|
|
235
|
+
/** Origin used to build absolute URLs */
|
|
220
236
|
origin: PropTypes.string.isRequired,
|
|
221
237
|
};
|
|
222
238
|
export async function createContentfulURLs(props) {
|
|
@@ -241,13 +257,29 @@ export async function createContentfulURLs(props) {
|
|
|
241
257
|
}
|
|
242
258
|
return sitemap;
|
|
243
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* createContentfulPageBuilderURLs — Generate page URLs for Contentful Page Builder pages.
|
|
262
|
+
*
|
|
263
|
+
* @param {shape} [props.apiProps] - Contentful API props (base_url, space_id, environment, delivery_access_token).
|
|
264
|
+
* @param {string} [props.base_url] - Contentful base API URL.
|
|
265
|
+
* @param {string} [props.space_id] - Contentful space id.
|
|
266
|
+
* @param {string} [props.environment] - Contentful environment.
|
|
267
|
+
* @param {string} [props.delivery_access_token] - Delivery API token for read-only access.
|
|
268
|
+
* @param {string} [props.origin] - Origin used to build absolute page URLs.
|
|
269
|
+
*/
|
|
244
270
|
createContentfulPageBuilderURLs.propTypes = {
|
|
271
|
+
/** Contentful API properties */
|
|
245
272
|
apiProps: PropTypes.shape({
|
|
273
|
+
/** Contentful base URL */
|
|
246
274
|
base_url: PropTypes.string.isRequired,
|
|
275
|
+
/** Contentful space id */
|
|
247
276
|
space_id: PropTypes.string.isRequired,
|
|
277
|
+
/** Contentful environment */
|
|
248
278
|
environment: PropTypes.string.isRequired,
|
|
279
|
+
/** Delivery API token */
|
|
249
280
|
delivery_access_token: PropTypes.string.isRequired,
|
|
250
281
|
}).isRequired,
|
|
282
|
+
/** Origin used to build absolute URLs */
|
|
251
283
|
origin: PropTypes.string.isRequired,
|
|
252
284
|
};
|
|
253
285
|
export async function createContentfulPageBuilderURLs(props) {
|
|
@@ -267,14 +299,32 @@ export async function createContentfulPageBuilderURLs(props) {
|
|
|
267
299
|
}
|
|
268
300
|
return sitemap;
|
|
269
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* createContentfulImageURLs — Fetch Contentful assets and generate absolute image URLs for the sitemap.
|
|
304
|
+
*
|
|
305
|
+
* @param {shape} [props.apiProps] - Contentful API props (proxyURL optional, base_url, space_id, environment, access_token).
|
|
306
|
+
* @param {string} [props.proxyURL] - Optional proxy base URL to route image requests through.
|
|
307
|
+
* @param {string} [props.base_url] - Contentful base API URL.
|
|
308
|
+
* @param {string} [props.space_id] - Contentful space id.
|
|
309
|
+
* @param {string} [props.environment] - Contentful environment.
|
|
310
|
+
* @param {string} [props.access_token] - Access token to read assets from Contentful.
|
|
311
|
+
* @param {string} [props.origin] - Origin used to convert relative image paths to absolute URLs.
|
|
312
|
+
*/
|
|
270
313
|
createContentfulImageURLs.propTypes = {
|
|
314
|
+
/** Contentful API properties */
|
|
271
315
|
apiProps: PropTypes.shape({
|
|
316
|
+
/** Optional proxy URL */
|
|
272
317
|
proxyURL: PropTypes.string,
|
|
318
|
+
/** Contentful base URL */
|
|
273
319
|
base_url: PropTypes.string.isRequired,
|
|
320
|
+
/** Contentful space id */
|
|
274
321
|
space_id: PropTypes.string.isRequired,
|
|
322
|
+
/** Contentful environment */
|
|
275
323
|
environment: PropTypes.string.isRequired,
|
|
324
|
+
/** Access token to read assets */
|
|
276
325
|
access_token: PropTypes.string.isRequired,
|
|
277
326
|
}).isRequired,
|
|
327
|
+
/** Origin used to convert relative URLs to absolute */
|
|
278
328
|
origin: PropTypes.string.isRequired,
|
|
279
329
|
};
|
|
280
330
|
export async function createContentfulImageURLs(props) {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
border: 0;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
.hero {
|
|
33
|
+
.hero-loading {
|
|
34
34
|
display: block;
|
|
35
35
|
gap: 1.5rem;
|
|
36
36
|
padding: 0;
|
|
@@ -51,25 +51,25 @@
|
|
|
51
51
|
gap: .75rem
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
.cards-
|
|
54
|
+
.cards-loading {
|
|
55
55
|
display: grid;
|
|
56
56
|
grid-template-columns: 1fr;
|
|
57
57
|
gap: 1.5rem
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
@media(min-width:640px) {
|
|
61
|
-
.cards-
|
|
61
|
+
.cards-loading {
|
|
62
62
|
grid-template-columns: repeat(2, 1fr)
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
@media(min-width:1024px) {
|
|
67
|
-
.cards-
|
|
67
|
+
.cards-loading {
|
|
68
68
|
grid-template-columns: repeat(3, 1fr)
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
.card-
|
|
72
|
+
.card-article {
|
|
73
73
|
padding: 1rem;
|
|
74
74
|
border-radius: .5rem;
|
|
75
75
|
border: 1px solid rgba(17, 24, 39, 0.06);
|
|
@@ -5,9 +5,19 @@ import PropTypes from 'prop-types';
|
|
|
5
5
|
import { ToggleLoading } from './loading';
|
|
6
6
|
import { Skeleton } from './skeleton';
|
|
7
7
|
import './skeleton-loading.css';
|
|
8
|
+
/**
|
|
9
|
+
* SkeletonLoading — Accessible skeleton page used while content or data is loading.
|
|
10
|
+
*
|
|
11
|
+
* @param {number} [props.heroHeight] - Height in pixels for the hero skeleton block.
|
|
12
|
+
* @param {number} [props.cardCount] - Number of placeholder cards to render in the cards section.
|
|
13
|
+
* @param {string} [props.className] - Optional additional CSS classes applied to the root element.
|
|
14
|
+
*/
|
|
8
15
|
SkeletonLoading.propTypes = {
|
|
16
|
+
/** Hero skeleton height (px) */
|
|
9
17
|
heroHeight: PropTypes.number,
|
|
18
|
+
/** Number of placeholder cards to render */
|
|
10
19
|
cardCount: PropTypes.number,
|
|
20
|
+
/** Extra CSS classes for the root element */
|
|
11
21
|
className: PropTypes.string,
|
|
12
22
|
};
|
|
13
23
|
export function SkeletonLoading({ heroHeight = 220, cardCount = 6, className = '' }) {
|
|
@@ -21,6 +31,5 @@ export function SkeletonLoading({ heroHeight = 220, cardCount = 6, className = '
|
|
|
21
31
|
}
|
|
22
32
|
}, []);
|
|
23
33
|
const count = Math.max(0, Number(cardCount || 0));
|
|
24
|
-
return (_jsx("main", { className: `loading-page ${className}`, children: _jsxs("div", { className: "loading-container", children: [_jsx("div", { className: "visually-hidden", role: "status", "aria-live": "polite", children: "Loading\u2026" }), _jsx("section", { id: "hero-loading", "aria-hidden": true, className: "hero", children: _jsx(Skeleton, { variant: "rect", height: heroHeight }) }), _jsx("section", { id: "cards-loading", className: "cards-
|
|
34
|
+
return (_jsx("main", { className: `loading-page ${className}`, children: _jsxs("div", { className: "loading-container", children: [_jsx("div", { className: "visually-hidden", role: "status", "aria-live": "polite", children: "Loading\u2026" }), _jsx("section", { id: "hero-loading", "aria-hidden": true, className: "hero-loading", children: _jsx(Skeleton, { variant: "rect", height: heroHeight }) }), _jsx("section", { id: "cards-loading", className: "cards-loading", "aria-hidden": true, children: Array.from({ length: count }).map((_, i) => (_jsx("article", { className: "card-article", children: _jsxs("div", { className: "card-row", children: [_jsx(Skeleton, { variant: "avatar" }), _jsxs("div", { className: "card-body", children: [_jsx(Skeleton, { lines: 2 }), _jsx("div", { className: "card-body-extra", children: _jsx(Skeleton, { lines: 3, width: "90%" }) })] })] }) }, i))) })] }) }));
|
|
25
35
|
}
|
|
26
|
-
export default SkeletonLoading;
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import './skeleton.css';
|
|
4
|
+
/**
|
|
5
|
+
* Skeleton — renders an accessible placeholder skeleton for text, rectangular blocks, or avatars.
|
|
6
|
+
*
|
|
7
|
+
* Props:
|
|
8
|
+
* @param {('text'|'rect'|'avatar')} [variant='text'] Visual variant to render.
|
|
9
|
+
* @param {number} [lines=1] Number of text lines when variant is 'text'.
|
|
10
|
+
* @param {string|number} [width] Width for text lines (percent) or explicit width for rect/avatar.
|
|
11
|
+
* @param {string|number} [height] Height in pixels (rect/avatar) or CSS string.
|
|
12
|
+
* @param {boolean} [animated=true] Whether the skeleton should animate (respects prefers-reduced-motion).
|
|
13
|
+
*/
|
|
4
14
|
Skeleton.propTypes = {
|
|
15
|
+
/** Visual variant to render: 'text' (lines), 'rect' (rectangle), or 'avatar' (circle). */
|
|
5
16
|
variant: PropTypes.oneOf(['text', 'rect', 'avatar']),
|
|
17
|
+
/** Number of text lines to render when variant is 'text'. */
|
|
6
18
|
lines: PropTypes.number,
|
|
19
|
+
/** Width for text lines (percentage number) or explicit CSS/string width for rect/avatar. */
|
|
7
20
|
width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
21
|
+
/** Height in pixels or CSS string for rect/avatar; ignored for text lines. */
|
|
8
22
|
height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
23
|
+
/** Whether the skeleton should animate (respects prefers-reduced-motion). */
|
|
9
24
|
animated: PropTypes.bool,
|
|
10
25
|
};
|
|
11
26
|
export function Skeleton({ variant = 'text', lines = 1, width, height, animated = true, }) {
|
|
@@ -37,31 +37,77 @@ function generateSrcSet(src, productEnv, widths, opts) {
|
|
|
37
37
|
cloudinaryDomain: opts.cloudinaryDomain
|
|
38
38
|
})} ${w}w`).join(', ');
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* SmartImage — unified image component that picks the best delivery variant (Cloudinary, Next.js Image, or plain <img>), generates srcset, and manages loading behavior.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} [props.cloudinaryEnv] - Cloudinary environment key for constructing CDN URLs (product env).
|
|
44
|
+
* @param {string} [props.cloudinaryDomain] - Optional Cloudinary domain override.
|
|
45
|
+
* @param {string} [props.cloudinaryTransforms] - Optional transform presets for Cloudinary.
|
|
46
|
+
* @param {string} [props.src] - Source URL or path for the image (required).
|
|
47
|
+
* @param {string} [props.alt] - Alt text for the image (required for accessibility).
|
|
48
|
+
* @param {number|string} [props.width] - Preferred width in pixels or CSS value; used to build srcset when possible.
|
|
49
|
+
* @param {number|string} [props.height] - Preferred height in pixels or CSS value.
|
|
50
|
+
* @param {boolean} [props.aboveFold] - Hint that the image is above the fold and should be prioritized (eager loading / high fetch priority).
|
|
51
|
+
* @param {oneOf} [props.loading] - Loading strategy: 'lazy' or 'eager'.
|
|
52
|
+
* @param {boolean} [props.preload] - If true, suggests the image should be preloaded (best-effort).
|
|
53
|
+
* @param {oneOf} [props.decoding] - Decoding hint: 'async', 'auto' or 'sync'.
|
|
54
|
+
* @param {oneOf} [props.fetchPriority] - Fetch priority: 'high', 'low', or 'auto'.
|
|
55
|
+
* @param {string} [props.sizes] - Sizes attribute override for responsive images.
|
|
56
|
+
* @param {string} [props.srcSet] - Srcset override (if you want to supply your own).
|
|
57
|
+
* @param {string} [props.className] - Additional CSS classes for the rendered element.
|
|
58
|
+
* @param {object} [props.style] - Inline style object for the image element.
|
|
59
|
+
* @param {string} [props.id] - DOM id to set on the image element.
|
|
60
|
+
* @param {string} [props.name] - Name used to derive a stable id when none is provided.
|
|
61
|
+
* @param {string} [props.title] - Optional title attribute for the image.
|
|
62
|
+
* @param {number} [props.quality] - Quality hint used by Cloudinary when generating URLs (0-100).
|
|
63
|
+
* @param {oneOf} [props.placeholder] - Placeholder behavior: 'blur' to use blur placeholder, 'empty' to use none.
|
|
64
|
+
* @param {oneOf} [props.variant] - Force variant: 'cloudinary' | 'nextjs' | 'img'.
|
|
65
|
+
*/
|
|
40
66
|
SmartImage.propTypes = {
|
|
67
|
+
/** Cloudinary environment key (product environment) for URL generation. */
|
|
41
68
|
cloudinaryEnv: PropTypes.string,
|
|
69
|
+
/** Cloudinary domain override. */
|
|
42
70
|
cloudinaryDomain: PropTypes.string,
|
|
71
|
+
/** Optional Cloudinary transform presets. */
|
|
43
72
|
cloudinaryTransforms: PropTypes.string,
|
|
44
73
|
// shared props
|
|
74
|
+
/** Image source URL or path. */
|
|
45
75
|
src: PropTypes.string.isRequired,
|
|
76
|
+
/** Accessible alt text for the image. */
|
|
46
77
|
alt: PropTypes.string.isRequired,
|
|
47
|
-
|
|
48
|
-
// height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
78
|
+
/** Preferred width in pixels (used to build srcset when available). */
|
|
49
79
|
width: PropTypes.number,
|
|
80
|
+
/** Preferred height in pixels. */
|
|
50
81
|
height: PropTypes.number,
|
|
82
|
+
/** Hint that the image is above the fold and should be prioritized for loading. */
|
|
51
83
|
aboveFold: PropTypes.bool,
|
|
84
|
+
/** Loading hint: 'lazy' or 'eager'. */
|
|
52
85
|
loading: PropTypes.oneOf(['lazy', 'eager']),
|
|
86
|
+
/** When true suggests the image should be preloaded. */
|
|
53
87
|
preload: PropTypes.bool,
|
|
88
|
+
/** Decoding hint for the browser. */
|
|
54
89
|
decoding: PropTypes.oneOf(['async', 'auto', 'sync']),
|
|
90
|
+
/** Fetch priority hint for modern browsers. */
|
|
55
91
|
fetchPriority: PropTypes.oneOf(['high', 'low', 'auto']),
|
|
92
|
+
/** Sizes attribute override for responsive images. */
|
|
56
93
|
sizes: PropTypes.string,
|
|
94
|
+
/** Srcset override to pass explicit srcset values. */
|
|
57
95
|
srcSet: PropTypes.string,
|
|
96
|
+
/** Additional CSS class names for the image element. */
|
|
58
97
|
className: PropTypes.string,
|
|
98
|
+
/** Inline style object for the image element. */
|
|
59
99
|
style: PropTypes.object,
|
|
100
|
+
/** DOM id for the image. */
|
|
60
101
|
id: PropTypes.string,
|
|
102
|
+
/** Name used to derive a stable id or identification. */
|
|
61
103
|
name: PropTypes.string,
|
|
104
|
+
/** Optional title attribute for the image. */
|
|
62
105
|
title: PropTypes.string,
|
|
106
|
+
/** Quality hint (0-100) used for Cloudinary URL generation. */
|
|
63
107
|
quality: PropTypes.number,
|
|
108
|
+
/** Placeholder behavior for Next.js Image ('blur' for blurred placeholder). */
|
|
64
109
|
placeholder: PropTypes.oneOf(['blur', 'empty']),
|
|
110
|
+
/** Variant to force: 'cloudinary' | 'nextjs' | 'img'. */
|
|
65
111
|
variant: PropTypes.oneOf(['cloudinary', 'nextjs', 'img']),
|
|
66
112
|
};
|
|
67
113
|
export function SmartImage(props) {
|
|
@@ -15,16 +15,22 @@ import './splitscroll.css';
|
|
|
15
15
|
* @example
|
|
16
16
|
* ```tsx
|
|
17
17
|
* <SplitScroll>
|
|
18
|
-
* <
|
|
18
|
+
* <SplitScrollSection img="/image1.jpg" title="Section 1">
|
|
19
19
|
* <YourContent />
|
|
20
|
-
* </
|
|
21
|
-
* <
|
|
20
|
+
* </SplitScrollSection>
|
|
21
|
+
* <SplitScrollSection img="/image2.jpg" title="Section 2">
|
|
22
22
|
* <MoreContent />
|
|
23
|
-
* </
|
|
23
|
+
* </SplitScrollSection>
|
|
24
24
|
* </SplitScroll>
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
+
/**
|
|
28
|
+
* SplitScroll — a split-page layout where the left column shows sticky, layered images and the right column contains scrolling content sections.
|
|
29
|
+
*
|
|
30
|
+
* @param {node} [props.children] - One or more `SplitScrollSection` components that contain content for each section.
|
|
31
|
+
*/
|
|
27
32
|
SplitScroll.propTypes = {
|
|
33
|
+
/** Collection of `SplitScrollSection` children used to build the layout. */
|
|
28
34
|
children: PropTypes.node.isRequired,
|
|
29
35
|
};
|
|
30
36
|
export function SplitScroll({ children }) {
|
|
@@ -59,12 +65,18 @@ export function SplitScroll({ children }) {
|
|
|
59
65
|
return (_jsx("div", { className: "splitscroll-container", children: enhancedChildren }));
|
|
60
66
|
}
|
|
61
67
|
/**
|
|
62
|
-
*
|
|
68
|
+
* SplitScrollSection — Individual section within a SplitScroll.
|
|
63
69
|
*
|
|
64
70
|
* A facade for the Callout component with variant="split" preset.
|
|
65
71
|
* Automatically configured for the splitscroll layout.
|
|
72
|
+
*
|
|
73
|
+
* @param {string} [props.img] - Image URL shown on the left column.
|
|
74
|
+
* @param {string} [props.imgAlt] - Alt text for the image.
|
|
75
|
+
* @param {('square'|'bevel'|'squircle'|'round')} [props.imgShape] - Image shape style.
|
|
76
|
+
* @param {string} [props.title] - Section title text shown on the right column.
|
|
77
|
+
* @param {node} [props.children] - Content for the section's right column.
|
|
66
78
|
*/
|
|
67
|
-
|
|
79
|
+
SplitScrollSection.propTypes = {
|
|
68
80
|
img: PropTypes.string.isRequired,
|
|
69
81
|
imgAlt: PropTypes.string,
|
|
70
82
|
imgShape: PropTypes.oneOf(['square', 'bevel', 'squircle', 'round']),
|
|
@@ -79,11 +91,10 @@ const splitscrollSectionPropTypes = {
|
|
|
79
91
|
sectionIndex: PropTypes.number,
|
|
80
92
|
totalSections: PropTypes.number,
|
|
81
93
|
};
|
|
82
|
-
|
|
94
|
+
export function SplitScrollSection({ img, imgAlt, imgShape = 'square', title, subtitle, url, buttonText, children, aboveFold, isActive, sectionIndex, totalSections, }) {
|
|
83
95
|
return (_jsx("div", { className: `splitscroll-section ${isActive ? 'active' : ''}`, "data-section-index": sectionIndex, style: {
|
|
84
96
|
'--section-index': sectionIndex,
|
|
85
97
|
'--total-sections': totalSections
|
|
86
98
|
}, children: _jsx(Callout, { variant: "split", img: img, imgAlt: imgAlt, imgShape: imgShape, title: title, subtitle: subtitle, url: url, buttonText: buttonText, aboveFold: aboveFold ?? (sectionIndex === 0), children: children }) }));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
SplitScroll.Section = SplitScrollSectionComponent;
|
|
99
|
+
}
|
|
100
|
+
;
|
|
@@ -5,7 +5,13 @@ import { PageTitleHeader, PageSection } from "@pixelated-tech/components";
|
|
|
5
5
|
import { flattenRoutes } from "@pixelated-tech/components";
|
|
6
6
|
import routesData from '../../data/routes.json';
|
|
7
7
|
const routes = routesData.routes;
|
|
8
|
+
/**
|
|
9
|
+
* StyleGuideUI — developer style guide and design tokens viewer (colors, fonts, IA routes).
|
|
10
|
+
*
|
|
11
|
+
* @param {array} [props.routes] - Route definitions used to display site information and navigation structure.
|
|
12
|
+
*/
|
|
8
13
|
StyleGuideUI.propTypes = {
|
|
14
|
+
/** Array of route objects used to build example navigation and IA references. */
|
|
9
15
|
routes: PropTypes.array,
|
|
10
16
|
};
|
|
11
17
|
export function StyleGuideUI(props) {
|
|
@@ -9,10 +9,22 @@ const TabItemPropTypes = {
|
|
|
9
9
|
content: PropTypes.node.isRequired,
|
|
10
10
|
};
|
|
11
11
|
// type TabItemType = InferProps<typeof TabItemPropTypes>;
|
|
12
|
+
/**
|
|
13
|
+
* Tab — simple tabbed UI: clickable headers with content panes.
|
|
14
|
+
*
|
|
15
|
+
* @param {arrayOf} [props.tabs] - Array of tab items: { id, label, content }.
|
|
16
|
+
* @param {oneOf} [props.orientation] - Tab orientation: 'top' | 'bottom' | 'left' | 'right'.
|
|
17
|
+
* @param {string} [props.defaultActiveTab] - Id of the tab that should be active initially.
|
|
18
|
+
* @param {function} [props.onTabChange] - Callback invoked when the active tab changes (tabId).
|
|
19
|
+
*/
|
|
12
20
|
Tab.propTypes = {
|
|
21
|
+
/** Array of tabs to render, each should include id, label, and content. */
|
|
13
22
|
tabs: PropTypes.arrayOf(PropTypes.shape(TabItemPropTypes).isRequired).isRequired,
|
|
23
|
+
/** Layout orientation for the tab headers. */
|
|
14
24
|
orientation: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),
|
|
25
|
+
/** Optional default active tab id. */
|
|
15
26
|
defaultActiveTab: PropTypes.string,
|
|
27
|
+
/** Optional change handler called with the new tab id. */
|
|
16
28
|
onTabChange: PropTypes.func,
|
|
17
29
|
};
|
|
18
30
|
export function Tab({ tabs, orientation = 'top', defaultActiveTab, onTabChange }) {
|
|
@@ -15,10 +15,22 @@ function isImageURL(url) {
|
|
|
15
15
|
} };
|
|
16
16
|
return isImage && isURL;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Table — renders a simple data table with optional client-side column sorting.
|
|
20
|
+
*
|
|
21
|
+
* @param {array} [props.data] - Array of row objects (each object's keys become column headers).
|
|
22
|
+
* @param {string} [props.id] - DOM id for the table element (required for sortable headers to find the table).
|
|
23
|
+
* @param {boolean} [props.sortable] - Enable click-to-sort on column headers when true.
|
|
24
|
+
* @param {string} [props.altRowColor] - Optional alternate-row background color for zebra striping.
|
|
25
|
+
*/
|
|
18
26
|
Table.propTypes = {
|
|
27
|
+
/** Array of row objects; object keys become table columns. */
|
|
19
28
|
data: PropTypes.array.isRequired,
|
|
29
|
+
/** DOM id used for sorting and header lookups. */
|
|
20
30
|
id: PropTypes.string.isRequired,
|
|
31
|
+
/** Enable clickable column headers for client-side sorting. */
|
|
21
32
|
sortable: PropTypes.bool,
|
|
33
|
+
/** CSS color value used for alternate rows when zebra striping is desired. */
|
|
22
34
|
altRowColor: PropTypes.string,
|
|
23
35
|
};
|
|
24
36
|
export function Table(props) {
|
|
@@ -7,14 +7,26 @@ import { usePixelatedConfig } from '../config/config.client';
|
|
|
7
7
|
import "../../css/pixelated.grid.scss";
|
|
8
8
|
import "./tiles.css";
|
|
9
9
|
export const TilesVariants = ['caption', 'overlay'];
|
|
10
|
+
/**
|
|
11
|
+
* Tiles — renders a responsive grid of image tiles with optional click handlers and visual variants.
|
|
12
|
+
*
|
|
13
|
+
* @param {array} [props.cards] - Array of card objects to render (image, link, imageAlt, bodyText).
|
|
14
|
+
* @param {number} [props.rowCount] - Number of rows to display; affects column sizing.
|
|
15
|
+
* @param {function} [props.imgClick] - Optional (event, imageUrl) click handler for tile images.
|
|
16
|
+
* @param {oneOf} [props.variant] - Visual variant: 'caption' (caption beneath image) or 'overlay' (overlay on hover).
|
|
17
|
+
*/
|
|
10
18
|
Tiles.propTypes = {
|
|
19
|
+
/** Array of card objects used to populate the tile grid (image, link, imageAlt, bodyText). */
|
|
11
20
|
cards: PropTypes.array.isRequired,
|
|
21
|
+
/** Number of rows to display in the grid (controls layout). */
|
|
12
22
|
rowCount: PropTypes.number,
|
|
23
|
+
/** Optional click handler for tile images; called with (event, imageUrl). */
|
|
13
24
|
imgClick: PropTypes.func,
|
|
14
25
|
/**
|
|
15
26
|
* Optional visual variant. Allowed values are enumerated so consumers get
|
|
16
27
|
* a discoverable, typed API.
|
|
17
28
|
*/
|
|
29
|
+
/** Visual variant for tile rendering (e.g. 'caption' or 'overlay'). */
|
|
18
30
|
variant: PropTypes.oneOf(TilesVariants),
|
|
19
31
|
};
|
|
20
32
|
export function Tiles(props) {
|
|
@@ -27,15 +39,34 @@ export function Tiles(props) {
|
|
|
27
39
|
}
|
|
28
40
|
}
|
|
29
41
|
/* ========== TILE ========== */
|
|
42
|
+
/**
|
|
43
|
+
* Tile — single grid tile that displays an image with optional link and caption/overlay.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} [props.index] - Zero-based index for the tile (used for IDs).
|
|
46
|
+
* @param {number} [props.cardLength] - Total number of tiles in the current set.
|
|
47
|
+
* @param {string} [props.link] - Optional href for the whole tile.
|
|
48
|
+
* @param {string} [props.image] - Image URL to display (required).
|
|
49
|
+
* @param {string} [props.imageAlt] - Alt text for the image; used as caption fallback.
|
|
50
|
+
* @param {string} [props.bodyText] - Optional caption or descriptive text for the tile.
|
|
51
|
+
* @param {function} [props.imgClick] - Optional click handler for the image (event, imageUrl).
|
|
52
|
+
* @param {oneOf} [props.variant] - Visual variant: 'caption' | 'overlay'.
|
|
53
|
+
*/
|
|
30
54
|
Tile.propTypes = {
|
|
55
|
+
/** Zero-based index of the tile. */
|
|
31
56
|
index: PropTypes.number.isRequired,
|
|
57
|
+
/** Total number of tiles in this grid. */
|
|
32
58
|
cardLength: PropTypes.number.isRequired,
|
|
59
|
+
/** Optional href for this tile. */
|
|
33
60
|
link: PropTypes.string,
|
|
61
|
+
/** Image source URL to display (required). */
|
|
34
62
|
image: PropTypes.string.isRequired,
|
|
63
|
+
/** Alt text for the image; also used as caption fallback. */
|
|
35
64
|
imageAlt: PropTypes.string,
|
|
65
|
+
/** Optional caption or descriptive body text shown with the tile. */
|
|
36
66
|
bodyText: PropTypes.string,
|
|
67
|
+
/** Click handler invoked when the tile image is clicked; receives (event, imageUrl). */
|
|
37
68
|
imgClick: PropTypes.func,
|
|
38
|
-
/** 'caption' -
|
|
69
|
+
/** 'caption' - caption beneath image; 'overlay' - overlay displayed on hover. */
|
|
39
70
|
variant: PropTypes.oneOf(TilesVariants),
|
|
40
71
|
};
|
|
41
72
|
function Tile(props) {
|
|
@@ -6,7 +6,17 @@ import { SmartImage } from './smartimage';
|
|
|
6
6
|
import "../../css/pixelated.grid.scss";
|
|
7
7
|
import "./timeline.css";
|
|
8
8
|
// https://www.w3schools.com/howto/howto_css_timeline.asp
|
|
9
|
+
/**
|
|
10
|
+
* Timeline — vertical timeline display composed of dated or staged items with optional images and directional layout.
|
|
11
|
+
*
|
|
12
|
+
* @param {arrayOf} [props.timelineData] - Array of items each containing title, content, image, and direction.
|
|
13
|
+
* @param {string} [props.title] - Item title text.
|
|
14
|
+
* @param {string} [props.content] - Item content or description.
|
|
15
|
+
* @param {string} [props.image] - Optional image URL for the timeline item.
|
|
16
|
+
* @param {string} [props.direction] - Visual positioning key (e.g., 'left' or 'right').
|
|
17
|
+
*/
|
|
9
18
|
Timeline.propTypes = {
|
|
19
|
+
/** Array of timeline item objects with title, content, image and direction. */
|
|
10
20
|
timelineData: PropTypes.arrayOf(PropTypes.shape({
|
|
11
21
|
title: PropTypes.string.isRequired,
|
|
12
22
|
content: PropTypes.string,
|
|
@@ -17,10 +27,22 @@ Timeline.propTypes = {
|
|
|
17
27
|
export function Timeline(props) {
|
|
18
28
|
return (_jsx("div", { className: "timeline", children: props.timelineData.map((item, index) => item ? (_jsx(TimelineItem, { title: item.title ?? '', content: item.content, image: item.image, direction: item.direction }, index)) : null) }));
|
|
19
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* TimelineItem — Single item for the vertical timeline, including optional image and placement direction.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} [props.title] - Title text for the timeline item (required).
|
|
34
|
+
* @param {string} [props.content] - Description or content of the timeline item.
|
|
35
|
+
* @param {string} [props.image] - Optional image URL to display for the item.
|
|
36
|
+
* @param {string} [props.direction] - Visual alignment for the item (e.g., 'left' or 'right').
|
|
37
|
+
*/
|
|
20
38
|
TimelineItem.propTypes = {
|
|
39
|
+
/** Item title */
|
|
21
40
|
title: PropTypes.string.isRequired,
|
|
41
|
+
/** Item content or description */
|
|
22
42
|
content: PropTypes.string,
|
|
43
|
+
/** Optional image URL for the item */
|
|
23
44
|
image: PropTypes.string,
|
|
45
|
+
/** Placement direction ('left'|'right') */
|
|
24
46
|
direction: PropTypes.string.isRequired
|
|
25
47
|
};
|
|
26
48
|
export default function TimelineItem(props) {
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect } from "react";
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
+
/**
|
|
5
|
+
* Calendly — Embed a Calendly scheduling widget using the provided URL.
|
|
6
|
+
*
|
|
7
|
+
* @param {string} [props.url] - The Calendly widget URL (required).
|
|
8
|
+
* @param {string} [props.width] - Minimum width for the widget container (e.g., '320px').
|
|
9
|
+
* @param {string} [props.height] - Height for the widget container (e.g., '700px').
|
|
10
|
+
*/
|
|
4
11
|
Calendly.propTypes = {
|
|
12
|
+
/** Calendly widget URL */
|
|
5
13
|
url: PropTypes.string.isRequired,
|
|
14
|
+
/** Minimum width for the widget container */
|
|
6
15
|
width: PropTypes.string.isRequired,
|
|
16
|
+
/** Height for the widget container */
|
|
7
17
|
height: PropTypes.string.isRequired,
|
|
8
18
|
};
|
|
9
19
|
export function Calendly({ url, width, height }) {
|
|
@@ -59,8 +59,16 @@ export function buildCloudinaryUrl(params) {
|
|
|
59
59
|
const encodedUrl = url.includes("?") ? encodeURIComponent(url) : url;
|
|
60
60
|
return `${domainAndCloud}/image/fetch/${t}/${encodedUrl}`;
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* getCloudinaryRemoteFetchURL — Build a Cloudinary remote fetch URL for a provided image path.
|
|
64
|
+
*
|
|
65
|
+
* @param {string} [props.url] - Image URL or path to convert to Cloudinary fetch URL.
|
|
66
|
+
* @param {string} [props.product_env] - Cloudinary product environment (cloud name) to use when building the URL.
|
|
67
|
+
*/
|
|
62
68
|
getCloudinaryRemoteFetchURL.propTypes = {
|
|
69
|
+
/** Image URL or path to transform via Cloudinary */
|
|
63
70
|
url: PropTypes.string.isRequired,
|
|
71
|
+
/** Cloudinary product environment (cloud name) */
|
|
64
72
|
product_env: PropTypes.string.isRequired
|
|
65
73
|
};
|
|
66
74
|
export function getCloudinaryRemoteFetchURL(props) {
|
|
@@ -77,8 +85,16 @@ export function userIsMobile() {
|
|
|
77
85
|
}
|
|
78
86
|
return match;
|
|
79
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* loadAllImagesFromCloudinary — Replace <img> sources with Cloudinary-built remote fetch URLs for improved delivery in production.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} [props.origin] - Optional origin to validate local development environments (ignored in local dev).
|
|
92
|
+
* @param {string} [props.product_env] - Cloudinary product environment (cloud name) to use when building URLs.
|
|
93
|
+
*/
|
|
80
94
|
loadAllImagesFromCloudinary.propTypes = {
|
|
95
|
+
/** Optional origin string to detect local dev */
|
|
81
96
|
origin: PropTypes.string,
|
|
97
|
+
/** Cloudinary product environment (cloud name) */
|
|
82
98
|
product_env: PropTypes.string.isRequired
|
|
83
99
|
};
|
|
84
100
|
export function loadAllImagesFromCloudinary(props) {
|