@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
|
@@ -29,31 +29,63 @@ const defaultDateFormat = 'MM/yyyy';
|
|
|
29
29
|
type simpleResumeProps = {
|
|
30
30
|
data: any
|
|
31
31
|
} */
|
|
32
|
+
/**
|
|
33
|
+
* Resume — Render a microformatted resume (h-resume) object into sections like contact, education, experience, and skills.
|
|
34
|
+
*
|
|
35
|
+
* @param {any} [props.data] - Resume data object (h-resume structured data expected).
|
|
36
|
+
*/
|
|
32
37
|
Resume.propTypes = {
|
|
38
|
+
/** Resume data object (h-resume) */
|
|
33
39
|
data: PropTypes.any.isRequired,
|
|
34
40
|
};
|
|
35
41
|
export function Resume(props) {
|
|
36
42
|
return (_jsx("section", { className: "p-resume", id: "resume-section", children: _jsx("div", { className: "section-container", children: _jsxs("div", { className: "row-12col", children: [_jsx("div", { className: "p-name grid-s1-e13", children: _jsx(ResumeName, { data: props.data?.items?.[0]?.properties?.name || '' }) }), _jsxs("div", { className: "divider grid-s1-e4", children: [_jsx("div", { className: "p-contact", children: _jsx(ResumeContact, { title: "Contact Information", data: props.data?.items?.[0]?.properties?.contact || [] }) }), _jsx("div", { className: "p-education", children: _jsx(ResumeEvents, { title: "Education", data: props.data?.items?.[0]?.properties?.education || [], dateFormat: "MM/yyyy", collapsible: false }) }), _jsx("div", { className: "p-skills", children: _jsx(ResumeSkills, { title: "Skills", data: props.data?.items?.[0]?.properties?.skills || [] }) })] }), _jsxs("div", { className: "grid-s4-e13", children: [_jsx("div", { className: "p-summary", children: _jsx(ResumeSummary, { title: "Professional Summary", data: props.data?.items?.[0]?.properties?.summary || '' }) }), _jsx("div", { className: "p-qualifications", children: _jsx(ResumeQualifications, { title: "Professional Qualifications", data: props.data?.items?.[0]?.properties?.qualifications || [] }) }), _jsx("div", { className: "p-experience", children: _jsx(ResumeEvents, { title: "Work History", data: props.data?.items?.[0]?.properties?.experience || [], dateFormat: "MM/yyyy", collapsible: false }) }), _jsx("div", { className: "p-projects", children: _jsx(ResumeProjects, { title: "Projects", data: props.data?.items?.[0]?.properties?.experience || [], collapsible: true }) }), _jsx("div", { className: "p-volunteer", children: _jsx(ResumeEvents, { title: "Volunteer Work", data: props.data?.items?.[0]?.properties?.volunteer || [], dateFormat: "MM/yyyy", collapsible: true }) }), _jsx("div", { className: "p-certifications", children: _jsx(ResumeEvents, { title: "Certifications", data: props.data?.items?.[0]?.properties?.certifications || [], dateFormat: "MM/yyyy", collapsible: true }) }), _jsx("div", { className: "p-awards", children: _jsx(ResumeEvents, { title: "Honors & Awards", data: props.data?.items?.[0]?.properties?.awards || [], dateFormat: "MM/yyyy", collapsible: true }) }), _jsx("div", { className: "p-training", children: _jsx(ResumeEvents, { title: "Training & Conferences", data: props.data?.items?.[0]?.properties?.training || [], dateFormat: "MM/dd/yyyy", collapsible: true }) }), _jsx("div", { className: "p-references", children: _jsx(ResumeReferences, { title: "References", data: props.data?.items?.[0]?.properties?.references || [], collapsible: true }) })] })] }) }) }));
|
|
37
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* ResumeName — Render the candidate's name from the resume data.
|
|
46
|
+
*
|
|
47
|
+
* @param {any} [props.data] - Array containing name values; the first entry is used as the display name.
|
|
48
|
+
*/
|
|
38
49
|
ResumeName.propTypes = {
|
|
50
|
+
/** Array containing the name value(s) */
|
|
39
51
|
data: PropTypes.any.isRequired,
|
|
40
52
|
};
|
|
41
53
|
export function ResumeName(props) {
|
|
42
54
|
const myName = props.data[0];
|
|
43
55
|
return (_jsx(_Fragment, { children: _jsx("h1", { className: "p-name", children: myName }) }));
|
|
44
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* ResumeContact — Renders contact information (email, address, phone, website) from resume data.
|
|
59
|
+
*
|
|
60
|
+
* @param {any} [props.data] - Contact microformat data array (expects typical contact properties).
|
|
61
|
+
* @param {string} [props.title] - Section heading to display above contact information.
|
|
62
|
+
*/
|
|
45
63
|
ResumeContact.propTypes = {
|
|
64
|
+
/** Contact microformat data array */
|
|
46
65
|
data: PropTypes.any.isRequired,
|
|
66
|
+
/** Section title */
|
|
47
67
|
title: PropTypes.string.isRequired,
|
|
48
68
|
};
|
|
49
69
|
export function ResumeContact(props) {
|
|
50
70
|
const myContact = props.data[0];
|
|
51
71
|
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: props.title }), _jsxs("ul", { children: [_jsx("li", { children: _jsx("span", { className: "p-email", children: _jsx("a", { href: `mailto:${myContact?.properties.email[0]}`, target: "_blank", rel: "noopener noreferrer", children: myContact?.properties.email[0] }) }) }), _jsxs("li", { children: [_jsxs("span", { className: "p-street-address", children: [myContact?.properties.adr[0].properties["street-address"], ", "] }), _jsxs("span", { className: "p-locality", children: [myContact?.properties.adr[0].properties.locality, ", "] }), _jsxs("span", { className: "p-region", children: [myContact?.properties.adr[0].properties.region, " "] }), _jsx("span", { className: "p-postal-code", children: myContact?.properties.adr[0].properties["postal-code"] })] }), _jsx("li", { children: _jsx("span", { className: "p-tel", children: myContact?.properties.tel[0] }) }), _jsx("li", { children: _jsx("span", { className: "p-url", children: _jsx("a", { href: myContact?.properties.url[0], target: "_blank", rel: "noopener", children: myContact?.properties.url[0] }) }) })] })] }));
|
|
52
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* ResumeEvents — Render a list of dated events (education, work, volunteer) with optional collapsible behavior.
|
|
75
|
+
*
|
|
76
|
+
* @param {any} [props.data] - Array of event objects with `properties` including start/end and location metadata.
|
|
77
|
+
* @param {string} [props.dateFormat] - Date format string passed to `date-fns` for rendering dates (e.g., 'MM/yyyy').
|
|
78
|
+
* @param {boolean} [props.collapsible] - If true, the event list is rendered inside a collapsible `<details>` element.
|
|
79
|
+
* @param {string} [props.title] - Section title for the events list.
|
|
80
|
+
*/
|
|
53
81
|
ResumeEvents.propTypes = {
|
|
82
|
+
/** Array of event objects (work, education, etc.) */
|
|
54
83
|
data: PropTypes.any.isRequired,
|
|
84
|
+
/** Date format string for display */
|
|
55
85
|
dateFormat: PropTypes.string.isRequired,
|
|
86
|
+
/** When true, events are shown inside a collapsible details element */
|
|
56
87
|
collapsible: PropTypes.bool,
|
|
88
|
+
/** Section title */
|
|
57
89
|
title: PropTypes.string.isRequired,
|
|
58
90
|
};
|
|
59
91
|
export function ResumeEvents(props) {
|
|
@@ -90,8 +122,16 @@ export function ResumeEvents(props) {
|
|
|
90
122
|
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: props.title }), _jsx("ul", { children: myElems })] }));
|
|
91
123
|
}
|
|
92
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* ResumeQualifications — Render grouped qualification lists (e.g., certifications, licenses) by category.
|
|
127
|
+
*
|
|
128
|
+
* @param {any} [props.data] - Object mapping qualification categories to arrays of items.
|
|
129
|
+
* @param {string} [props.title] - Section title to display above qualifications.
|
|
130
|
+
*/
|
|
93
131
|
ResumeQualifications.propTypes = {
|
|
132
|
+
/** Qualifications data by category */
|
|
94
133
|
data: PropTypes.any.isRequired,
|
|
134
|
+
/** Section title */
|
|
95
135
|
title: PropTypes.string.isRequired,
|
|
96
136
|
};
|
|
97
137
|
export function ResumeQualifications(props) {
|
|
@@ -106,8 +146,16 @@ export function ResumeQualifications(props) {
|
|
|
106
146
|
}
|
|
107
147
|
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: props.title }), myElems] }));
|
|
108
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* ResumeSkills — Render skill categories and values from the resume data.
|
|
151
|
+
*
|
|
152
|
+
* @param {any} [props.data] - Skills data (typically an object or array of categories and skill lists).
|
|
153
|
+
* @param {string} [props.title] - Section title for the skills block.
|
|
154
|
+
*/
|
|
109
155
|
ResumeSkills.propTypes = {
|
|
156
|
+
/** Skills data (categories and lists) */
|
|
110
157
|
data: PropTypes.any.isRequired,
|
|
158
|
+
/** Section title */
|
|
111
159
|
title: PropTypes.string.isRequired,
|
|
112
160
|
};
|
|
113
161
|
export function ResumeSkills(props) {
|
|
@@ -121,8 +169,16 @@ export function ResumeSkills(props) {
|
|
|
121
169
|
}
|
|
122
170
|
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: props.title }), _jsx("div", { className: "p-skills", children: myElems })] }));
|
|
123
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* ResumeSummary — Render a short professional summary paragraph or bullets.
|
|
174
|
+
*
|
|
175
|
+
* @param {any} [props.data] - Summary text or array of summary paragraphs.
|
|
176
|
+
* @param {string} [props.title] - Section title for the summary block.
|
|
177
|
+
*/
|
|
124
178
|
ResumeSummary.propTypes = {
|
|
179
|
+
/** Summary text or paragraphs */
|
|
125
180
|
data: PropTypes.any.isRequired,
|
|
181
|
+
/** Section title */
|
|
126
182
|
title: PropTypes.string.isRequired,
|
|
127
183
|
};
|
|
128
184
|
export function ResumeSummary(props) {
|
|
@@ -135,9 +191,19 @@ export function ResumeSummary(props) {
|
|
|
135
191
|
}
|
|
136
192
|
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: props.title }), _jsx("ul", { className: "p-summary", children: myElems })] }));
|
|
137
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* ResumeReferences — Render a list of professional references with contact details.
|
|
196
|
+
*
|
|
197
|
+
* @param {any} [props.data] - Array of reference objects (microformat references).
|
|
198
|
+
* @param {any} [props.title] - Section title for references.
|
|
199
|
+
* @param {boolean} [props.collapsible] - When true, the reference list is collapsible.
|
|
200
|
+
*/
|
|
138
201
|
ResumeReferences.propTypes = {
|
|
202
|
+
/** Reference objects array */
|
|
139
203
|
data: PropTypes.any.isRequired,
|
|
204
|
+
/** Section title */
|
|
140
205
|
title: PropTypes.any.isRequired,
|
|
206
|
+
/** When true, make the section collapsible */
|
|
141
207
|
collapsible: PropTypes.bool,
|
|
142
208
|
};
|
|
143
209
|
export function ResumeReferences(props) {
|
|
@@ -156,16 +222,32 @@ export function ResumeReferences(props) {
|
|
|
156
222
|
return (_jsxs(_Fragment, { children: [_jsx("h2", { children: props.title }), _jsx("div", { children: myElems })] }));
|
|
157
223
|
}
|
|
158
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* ResumeReference — Render a single reference entry (name, organization, contact info).
|
|
227
|
+
*
|
|
228
|
+
* @param {any} [props.data] - Reference object with contact properties used for display.
|
|
229
|
+
*/
|
|
159
230
|
ResumeReference.propTypes = {
|
|
231
|
+
/** Reference object with contact details */
|
|
160
232
|
data: PropTypes.any.isRequired,
|
|
161
233
|
};
|
|
162
234
|
export function ResumeReference(props) {
|
|
163
235
|
const myReference = props.data.properties;
|
|
164
236
|
return (_jsxs(_Fragment, { children: [_jsxs("div", { children: [(myReference?.url[0]) ? _jsx("a", { href: myReference?.url[0], target: "_blank", className: "u-url", rel: "noopener noreferrer", children: _jsx("span", { className: "p-name", children: myReference?.name[0] }) }) : _jsx("span", { className: "p-name", children: myReference?.name[0] }), ",", ' ', " ", _jsx("span", { className: "p-locality", children: myReference?.locality[0] }), ",", ' ', " ", _jsx("span", { className: "p-region", children: myReference?.region[0] })] }), _jsxs("div", { children: [_jsx("span", { className: "p-job-title", children: myReference["job-title"][0] }), ",", ' ', " ", _jsx("span", { className: "p-org", children: myReference?.org[0] })] }), _jsxs("div", { children: ["email : ", _jsx("a", { href: `mailto:${myReference?.email[0]}`, target: "_blank", rel: "noopener noreferrer", className: "u-email", children: myReference?.email[0] }), ' ', " || phone : ", _jsx("a", { href: `tel:${myReference?.tel[0]}`, className: "p-tel", children: myReference?.tel[0] })] }), _jsx("br", {}), _jsx("hr", {}), _jsx("br", {})] }));
|
|
165
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* ResumeProjects — Render projects associated with work history or portfolios.
|
|
240
|
+
*
|
|
241
|
+
* @param {any} [props.data] - Array of project objects with properties like name, url, photo, and note.
|
|
242
|
+
* @param {any} [props.title] - Section title for the projects block.
|
|
243
|
+
* @param {boolean} [props.collapsible] - When true, projects render inside a collapsible element.
|
|
244
|
+
*/
|
|
166
245
|
ResumeProjects.propTypes = {
|
|
246
|
+
/** Projects array */
|
|
167
247
|
data: PropTypes.any.isRequired,
|
|
248
|
+
/** Section title */
|
|
168
249
|
title: PropTypes.any.isRequired,
|
|
250
|
+
/** When true, make the section collapsible */
|
|
169
251
|
collapsible: PropTypes.bool,
|
|
170
252
|
};
|
|
171
253
|
export function ResumeProjects(props) {
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
+
/**
|
|
4
|
+
* SchemaBlogPosting — Inject a JSON-LD <script> tag containing a BlogPosting schema object.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} [props.post] - Structured JSON-LD object representing a blog post (BlogPosting schema).
|
|
7
|
+
*/
|
|
3
8
|
SchemaBlogPosting.propTypes = {
|
|
9
|
+
/** Structured BlogPosting JSON-LD object */
|
|
4
10
|
post: PropTypes.object.isRequired,
|
|
5
11
|
};
|
|
6
12
|
export function SchemaBlogPosting(props) {
|
|
@@ -8,22 +8,58 @@ import PropTypes from "prop-types";
|
|
|
8
8
|
* This component uses siteInfo passed as props to generate schema data.
|
|
9
9
|
* It does not use client-side hooks and can be rendered on the server.
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* LocalBusinessSchema — generates JSON-LD for a LocalBusiness using provided props or a fallback `siteInfo`.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} [props.name] - Business name (overrides siteInfo.name).
|
|
15
|
+
* @param {string} [props.streetAddress] - Street address line.
|
|
16
|
+
* @param {string} [props.addressLocality] - City or locality.
|
|
17
|
+
* @param {string} [props.addressRegion] - State, region or province.
|
|
18
|
+
* @param {string} [props.postalCode] - Postal/ZIP code.
|
|
19
|
+
* @param {string} [props.addressCountry] - Country (defaults to 'United States' when missing).
|
|
20
|
+
* @param {string} [props.telephone] - Contact phone number.
|
|
21
|
+
* @param {string} [props.url] - Canonical website URL.
|
|
22
|
+
* @param {string} [props.logo] - Logo image URL.
|
|
23
|
+
* @param {string} [props.image] - Representative image URL.
|
|
24
|
+
* @param {oneOfType} [props.openingHours] - Opening hours string or array in schema.org format.
|
|
25
|
+
* @param {string} [props.description] - Short business description.
|
|
26
|
+
* @param {string} [props.email] - Contact email address.
|
|
27
|
+
* @param {string} [props.priceRange] - Price range (e.g. '$$', optional).
|
|
28
|
+
* @param {arrayOf} [props.sameAs] - Array of social/profile URLs for schema 'sameAs'.
|
|
29
|
+
* @param {object} [props.siteInfo] - Site-level fallback information object.
|
|
30
|
+
*/
|
|
11
31
|
LocalBusinessSchema.propTypes = {
|
|
32
|
+
/** Business name to include in schema (falls back to siteInfo.name). */
|
|
12
33
|
name: PropTypes.string,
|
|
34
|
+
/** Street address for the business. */
|
|
13
35
|
streetAddress: PropTypes.string,
|
|
36
|
+
/** City or locality for the business address. */
|
|
14
37
|
addressLocality: PropTypes.string,
|
|
38
|
+
/** State/region for the business address. */
|
|
15
39
|
addressRegion: PropTypes.string,
|
|
40
|
+
/** Postal or ZIP code for the address. */
|
|
16
41
|
postalCode: PropTypes.string,
|
|
42
|
+
/** Country for the address (defaults to United States when absent). */
|
|
17
43
|
addressCountry: PropTypes.string,
|
|
44
|
+
/** Contact telephone number. */
|
|
18
45
|
telephone: PropTypes.string,
|
|
46
|
+
/** Canonical website URL. */
|
|
19
47
|
url: PropTypes.string,
|
|
48
|
+
/** Logo image URL for schema/logo property. */
|
|
20
49
|
logo: PropTypes.string,
|
|
50
|
+
/** Representative image URL. */
|
|
21
51
|
image: PropTypes.string,
|
|
52
|
+
/** Opening hours as a string or array in schema.org format (e.g., "Mo-Fr 09:00-17:00"). */
|
|
22
53
|
openingHours: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
|
|
54
|
+
/** Short description for schema. */
|
|
23
55
|
description: PropTypes.string,
|
|
56
|
+
/** Contact email address. */
|
|
24
57
|
email: PropTypes.string,
|
|
58
|
+
/** Price range string (e.g. '$$'). */
|
|
25
59
|
priceRange: PropTypes.string,
|
|
60
|
+
/** Array of profile/URL strings for sameAs (social links). */
|
|
26
61
|
sameAs: PropTypes.arrayOf(PropTypes.string), // Social media profiles
|
|
62
|
+
/** Site-level fallback information object (used when props omitted). */
|
|
27
63
|
siteInfo: PropTypes.object // Required siteinfo from parent component
|
|
28
64
|
};
|
|
29
65
|
export function LocalBusinessSchema(props) {
|
|
@@ -5,7 +5,27 @@ import PropTypes from 'prop-types';
|
|
|
5
5
|
* Generates JSON-LD structured data for recipes
|
|
6
6
|
* https://schema.org/Recipe
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* RecipeSchema — embeds a recipe as JSON-LD for SEO (schema.org/Recipe).
|
|
10
|
+
*
|
|
11
|
+
* @param {shape} [props.recipe] - Recipe object conforming to schema.org/Recipe; will be serialized as JSON-LD.
|
|
12
|
+
* @param {string} [props.name] - Recipe title.
|
|
13
|
+
* @param {string} [props.description] - Short recipe description.
|
|
14
|
+
* @param {shape} [props.author] - Author information (name and @type).
|
|
15
|
+
* @param {string} [props.datePublished] - ISO date the recipe was published.
|
|
16
|
+
* @param {string} [props.image] - Primary image URL for the recipe.
|
|
17
|
+
* @param {string} [props.recipeYield] - Yield or serving size (e.g., '4 servings').
|
|
18
|
+
* @param {string} [props.prepTime] - Prep time in ISO 8601 duration (e.g. 'PT20M').
|
|
19
|
+
* @param {string} [props.cookTime] - Cook time in ISO 8601 duration.
|
|
20
|
+
* @param {string} [props.totalTime] - Total time in ISO 8601 duration.
|
|
21
|
+
* @param {string} [props.recipeCategory] - Category of the recipe (e.g., 'Dessert').
|
|
22
|
+
* @param {string} [props.recipeCuisine] - Cuisine (e.g., 'Italian').
|
|
23
|
+
* @param {arrayOf} [props.recipeIngredient] - List of ingredient strings.
|
|
24
|
+
* @param {arrayOf} [props.recipeInstructions] - Structured list of instruction steps or paragraphs.
|
|
25
|
+
* @param {string} [props.license] - License URL or short string for the recipe content.
|
|
26
|
+
*/
|
|
8
27
|
RecipeSchema.propTypes = {
|
|
28
|
+
/** Recipe information object to be serialized as JSON-LD. */
|
|
9
29
|
recipe: PropTypes.shape({
|
|
10
30
|
'@context': PropTypes.string.isRequired,
|
|
11
31
|
'@type': PropTypes.string.isRequired,
|
|
@@ -19,8 +19,16 @@ export const flexWraps = ['nowrap', 'wrap', 'wrap-reverse'];
|
|
|
19
19
|
export const justifyContentValues = ['start', 'center', 'end', 'space-between', 'space-around', 'space-evenly'];
|
|
20
20
|
export const alignItemsValues = ['start', 'center', 'end', 'stretch', 'baseline'];
|
|
21
21
|
// ========== PAGE TITLE HEADER ==========
|
|
22
|
+
/**
|
|
23
|
+
* PageTitleHeader — Small H1 header used primarily for page titles.
|
|
24
|
+
*
|
|
25
|
+
* @param {string} [props.title] - Title text to display (required).
|
|
26
|
+
* @param {string} [props.url] - Optional URL; when present, the title will be rendered as a link.
|
|
27
|
+
*/
|
|
22
28
|
PageTitleHeader.propTypes = {
|
|
29
|
+
/** Page title text (required) */
|
|
23
30
|
title: PropTypes.string.isRequired,
|
|
31
|
+
/** Optional URL to wrap the title with */
|
|
24
32
|
url: PropTypes.string
|
|
25
33
|
};
|
|
26
34
|
export function PageTitleHeader({ title, url }) {
|
|
@@ -31,31 +39,75 @@ export function PageTitleHeader({ title, url }) {
|
|
|
31
39
|
}
|
|
32
40
|
;
|
|
33
41
|
// ========== PAGE SECTION ==========
|
|
42
|
+
/**
|
|
43
|
+
* PageSection — Flexible section wrapper used for page layout (grid or flex).
|
|
44
|
+
*
|
|
45
|
+
* @param {string} [props.id] - Optional element id for the section.
|
|
46
|
+
* @param {string} [props.className] - Optional additional CSS class names.
|
|
47
|
+
* @param {oneOf} [props.layoutType] - Layout mode: 'grid' | 'flex' | 'none'.
|
|
48
|
+
* @param {string} [props.gap] - Gap between child elements (CSS gap value).
|
|
49
|
+
* @param {string} [props.maxWidth] - Maximum content width (e.g., '1024px').
|
|
50
|
+
* @param {string} [props.padding] - Section padding (CSS shorthand).
|
|
51
|
+
* @param {string} [props.background] - Background color or CSS value.
|
|
52
|
+
* @param {string} [props.backgroundImage] - Background image URL.
|
|
53
|
+
* @param {number} [props.columns] - Number of grid columns when `layoutType` is 'grid'.
|
|
54
|
+
* @param {oneOf} [props.autoFlow] - Grid auto-flow property (e.g., 'row', 'column', 'dense').
|
|
55
|
+
* @param {oneOf} [props.justifyItems] - Grid justify-items value.
|
|
56
|
+
* @param {shape} [props.responsive] - Responsive column counts ({ mobile, tablet, desktop }).
|
|
57
|
+
* @param {number} [props.mobile] - Mobile column count (inside `responsive`).
|
|
58
|
+
* @param {number} [props.tablet] - Tablet column count (inside `responsive`).
|
|
59
|
+
* @param {number} [props.desktop] - Desktop column count (inside `responsive`).
|
|
60
|
+
* @param {oneOf} [props.direction] - Flex direction when `layoutType` is 'flex'.
|
|
61
|
+
* @param {oneOf} [props.wrap] - Flex wrap property when using flex layout.
|
|
62
|
+
* @param {oneOf} [props.justifyContent] - Flex justify-content value.
|
|
63
|
+
* @param {oneOf} [props.alignItems] - Alignment for cross-axis in grid/flex.
|
|
64
|
+
* @param {node} [props.children] - Child nodes to render inside the section.
|
|
65
|
+
*/
|
|
34
66
|
PageSection.propTypes = {
|
|
67
|
+
/** Optional element id */
|
|
35
68
|
id: PropTypes.string,
|
|
69
|
+
/** Optional CSS classes */
|
|
36
70
|
className: PropTypes.string,
|
|
71
|
+
/** Layout mode ('grid' | 'flex' | 'none') */
|
|
37
72
|
layoutType: PropTypes.oneOf([...layoutTypes]),
|
|
38
73
|
// Common props
|
|
74
|
+
/** Gap between children (CSS gap) */
|
|
39
75
|
gap: PropTypes.string,
|
|
76
|
+
/** Max width of the content area */
|
|
40
77
|
maxWidth: PropTypes.string,
|
|
78
|
+
/** Padding applied to content area */
|
|
41
79
|
padding: PropTypes.string,
|
|
80
|
+
/** Background color/string */
|
|
42
81
|
background: PropTypes.string,
|
|
82
|
+
/** Background image URL */
|
|
43
83
|
backgroundImage: PropTypes.string,
|
|
44
84
|
// Grid-specific props
|
|
85
|
+
/** Number of columns when using grid layout */
|
|
45
86
|
columns: PropTypes.number,
|
|
87
|
+
/** Grid auto-flow value */
|
|
46
88
|
autoFlow: PropTypes.oneOf([...autoFlowValues]),
|
|
89
|
+
/** Grid justify-items */
|
|
47
90
|
justifyItems: PropTypes.oneOf([...justifyItemsValues]),
|
|
91
|
+
/** Responsive column config */
|
|
48
92
|
responsive: PropTypes.shape({
|
|
93
|
+
/** Mobile column count */
|
|
49
94
|
mobile: PropTypes.number,
|
|
95
|
+
/** Tablet column count */
|
|
50
96
|
tablet: PropTypes.number,
|
|
97
|
+
/** Desktop column count */
|
|
51
98
|
desktop: PropTypes.number,
|
|
52
99
|
}),
|
|
53
100
|
// Flex-specific props
|
|
101
|
+
/** Flex direction value */
|
|
54
102
|
direction: PropTypes.oneOf([...flexDirections]),
|
|
103
|
+
/** Flex wrap behavior */
|
|
55
104
|
wrap: PropTypes.oneOf([...flexWraps]),
|
|
105
|
+
/** Flex justify-content value */
|
|
56
106
|
justifyContent: PropTypes.oneOf([...justifyContentValues]),
|
|
57
107
|
// Shared alignment
|
|
108
|
+
/** Cross-axis alignment for children */
|
|
58
109
|
alignItems: PropTypes.oneOf([...alignItemsValues]),
|
|
110
|
+
/** Child nodes */
|
|
59
111
|
children: PropTypes.node,
|
|
60
112
|
};
|
|
61
113
|
export function PageSection({ id, className, layoutType = 'grid', gap = '10px', maxWidth = '1024px', padding = '0 20px', /* 5px */ background, backgroundImage,
|
|
@@ -99,8 +151,16 @@ alignItems = 'stretch', children, }) {
|
|
|
99
151
|
return (_jsxs("section", { id: id || undefined, className: "page-section page-section-none", style: sectionStyle, children: [backgroundImage && _jsx(PageSectionBackgroundImage, { backgroundImage: backgroundImage, id: id }), _jsx("div", { className: "page-section-content", style: contentStyle, children: children })] }));
|
|
100
152
|
}
|
|
101
153
|
// ========== PAGE SECTION HEADER ==========
|
|
154
|
+
/**
|
|
155
|
+
* PageSectionHeader — Small header used to label a `PageSection`.
|
|
156
|
+
*
|
|
157
|
+
* @param {string} [props.title] - Section title text (required).
|
|
158
|
+
* @param {string} [props.url] - Optional URL to link the section title.
|
|
159
|
+
*/
|
|
102
160
|
PageSectionHeader.propTypes = {
|
|
161
|
+
/** Section title text */
|
|
103
162
|
title: PropTypes.string.isRequired,
|
|
163
|
+
/** Optional URL to link the title */
|
|
104
164
|
url: PropTypes.string
|
|
105
165
|
};
|
|
106
166
|
export function PageSectionHeader({ title, url }) {
|
|
@@ -111,8 +171,16 @@ export function PageSectionHeader({ title, url }) {
|
|
|
111
171
|
}
|
|
112
172
|
;
|
|
113
173
|
// ========== PAGE SECTION BACKGROUND IMAGE ==========
|
|
174
|
+
/**
|
|
175
|
+
* PageSectionBackgroundImage — Decorative background image used by `PageSection`.
|
|
176
|
+
*
|
|
177
|
+
* @param {string} [props.backgroundImage] - Background image URL (required).
|
|
178
|
+
* @param {string} [props.id] - Optional id used for element ids and titles.
|
|
179
|
+
*/
|
|
114
180
|
PageSectionBackgroundImage.propTypes = {
|
|
181
|
+
/** Background image URL */
|
|
115
182
|
backgroundImage: PropTypes.string.isRequired,
|
|
183
|
+
/** Optional id for the image element */
|
|
116
184
|
id: PropTypes.string,
|
|
117
185
|
};
|
|
118
186
|
export function PageSectionBackgroundImage(props) {
|
|
@@ -122,17 +190,43 @@ export function PageSectionBackgroundImage(props) {
|
|
|
122
190
|
title: props.id ? `${props.id} background image` : undefined, alt: props.id ? `${props.id} background image` : "", cloudinaryEnv: config?.cloudinary?.product_env ?? undefined, cloudinaryDomain: config?.cloudinary?.baseUrl ?? undefined, cloudinaryTransforms: config?.cloudinary?.transforms ?? undefined }) }));
|
|
123
191
|
}
|
|
124
192
|
// ========== GRID ITEM ==========
|
|
193
|
+
/**
|
|
194
|
+
* PageGridItem — Single grid cell wrapper that supports span and positioning helpers.
|
|
195
|
+
*
|
|
196
|
+
* @param {string} [props.id] - Optional id for the grid item element.
|
|
197
|
+
* @param {string} [props.className] - Additional CSS classes for the item.
|
|
198
|
+
* @param {number} [props.columnSpan] - How many columns the item spans.
|
|
199
|
+
* @param {number} [props.rowSpan] - How many rows the item spans.
|
|
200
|
+
* @param {number} [props.columnStart] - Starting column index for the item.
|
|
201
|
+
* @param {number} [props.columnEnd] - Ending column index for the item.
|
|
202
|
+
* @param {number} [props.rowStart] - Starting row index for the item.
|
|
203
|
+
* @param {number} [props.rowEnd] - Ending row index for the item.
|
|
204
|
+
* @param {oneOf} [props.alignSelf] - Cross-axis alignment for the item.
|
|
205
|
+
* @param {oneOf} [props.justifySelf] - Main-axis alignment for the item.
|
|
206
|
+
* @param {node} [props.children] - Child nodes to render inside the grid cell.
|
|
207
|
+
*/
|
|
125
208
|
PageGridItem.propTypes = {
|
|
209
|
+
/** Optional element id */
|
|
126
210
|
id: PropTypes.string,
|
|
211
|
+
/** Optional CSS classes */
|
|
127
212
|
className: PropTypes.string,
|
|
213
|
+
/** Column span value */
|
|
128
214
|
columnSpan: PropTypes.number,
|
|
215
|
+
/** Row span value */
|
|
129
216
|
rowSpan: PropTypes.number,
|
|
217
|
+
/** Column start index */
|
|
130
218
|
columnStart: PropTypes.number,
|
|
219
|
+
/** Column end index */
|
|
131
220
|
columnEnd: PropTypes.number,
|
|
221
|
+
/** Row start index */
|
|
132
222
|
rowStart: PropTypes.number,
|
|
223
|
+
/** Row end index */
|
|
133
224
|
rowEnd: PropTypes.number,
|
|
225
|
+
/** Cross-axis alignment */
|
|
134
226
|
alignSelf: PropTypes.oneOf(['start', 'center', 'end', 'stretch']),
|
|
227
|
+
/** Main-axis alignment */
|
|
135
228
|
justifySelf: PropTypes.oneOf(['start', 'center', 'end', 'stretch']),
|
|
229
|
+
/** Child nodes */
|
|
136
230
|
children: PropTypes.node,
|
|
137
231
|
};
|
|
138
232
|
export function PageGridItem({ id, className, columnSpan, rowSpan, columnStart, columnEnd, rowStart, rowEnd, alignSelf, justifySelf, children, }) {
|
|
@@ -155,10 +249,22 @@ export function PageGridItem({ id, className, columnSpan, rowSpan, columnStart,
|
|
|
155
249
|
(columnStart && columnEnd && !columnSpan ? ` grid-s${columnStart}-e${columnEnd}` : ''), id: (id) ? id : undefined, style: itemStyle, children: children }));
|
|
156
250
|
}
|
|
157
251
|
// ========== FLEX ITEM ==========
|
|
252
|
+
/**
|
|
253
|
+
* PageFlexItem — Simple flex item helper that exposes CSS flex and order helpers.
|
|
254
|
+
*
|
|
255
|
+
* @param {string} [props.flex] - CSS flex shorthand value (e.g., '1 1 auto').
|
|
256
|
+
* @param {number} [props.order] - Order value used by flexbox ordering.
|
|
257
|
+
* @param {oneOf} [props.alignSelf] - Override for cross-axis alignment on the item.
|
|
258
|
+
* @param {node} [props.children] - Child nodes to render inside the flex item.
|
|
259
|
+
*/
|
|
158
260
|
PageFlexItem.propTypes = {
|
|
261
|
+
/** CSS flex shorthand value */
|
|
159
262
|
flex: PropTypes.string,
|
|
263
|
+
/** Flex order value */
|
|
160
264
|
order: PropTypes.number,
|
|
265
|
+
/** Cross-axis alignment override */
|
|
161
266
|
alignSelf: PropTypes.oneOf(['auto', 'start', 'center', 'end', 'stretch', 'baseline']),
|
|
267
|
+
/** Child nodes */
|
|
162
268
|
children: PropTypes.node,
|
|
163
269
|
};
|
|
164
270
|
export function PageFlexItem({ flex = '1', order, alignSelf, children, }) {
|
|
@@ -176,15 +282,37 @@ const pageLinkShape = PropTypes.shape({
|
|
|
176
282
|
target: PropTypes.oneOf(["_self", "_blank"]),
|
|
177
283
|
});
|
|
178
284
|
// ========== PAGE HEADER ==========
|
|
285
|
+
/**
|
|
286
|
+
* PageHeader — Top page header block that can include eyebrow, headline, description and CTA.
|
|
287
|
+
*
|
|
288
|
+
* @param {string} [props.className] - Optional CSS classes to apply to the header.
|
|
289
|
+
* @param {string} [props.eyebrow] - Small eyebrow text shown above the headline.
|
|
290
|
+
* @param {string} [props.headline] - Main headline text.
|
|
291
|
+
* @param {string} [props.description] - Short description or subheading text.
|
|
292
|
+
* @param {string} [props.ctaLabel] - CTA button label text.
|
|
293
|
+
* @param {string} [props.ctaHref] - CTA URL to navigate to when clicked.
|
|
294
|
+
* @param {oneOf} [props.ctaTarget] - Optional target for CTA link ('_self' or '_blank').
|
|
295
|
+
* @param {node} [props.children] - Additional nodes to render inside the header.
|
|
296
|
+
* @param {boolean} [props.fixed] - When true, header becomes fixed and a spacer is inserted.
|
|
297
|
+
*/
|
|
179
298
|
PageHeader.propTypes = {
|
|
299
|
+
/** Optional CSS classes */
|
|
180
300
|
className: PropTypes.string,
|
|
301
|
+
/** Eyebrow above the headline */
|
|
181
302
|
eyebrow: PropTypes.string,
|
|
303
|
+
/** Headline text */
|
|
182
304
|
headline: PropTypes.string,
|
|
305
|
+
/** Subheading or description */
|
|
183
306
|
description: PropTypes.string,
|
|
307
|
+
/** CTA label */
|
|
184
308
|
ctaLabel: PropTypes.string,
|
|
309
|
+
/** CTA href */
|
|
185
310
|
ctaHref: PropTypes.string,
|
|
311
|
+
/** CTA target */
|
|
186
312
|
ctaTarget: PropTypes.oneOf(["_self", "_blank"]),
|
|
313
|
+
/** Additional child nodes */
|
|
187
314
|
children: PropTypes.node,
|
|
315
|
+
/** When true, header is fixed (sticky) */
|
|
188
316
|
fixed: PropTypes.bool,
|
|
189
317
|
};
|
|
190
318
|
export function PageHeader({ className, eyebrow, headline, description, ctaLabel, ctaHref, ctaTarget, children, fixed = false, }) {
|
|
@@ -212,11 +340,25 @@ export function PageHeader({ className, eyebrow, headline, description, ctaLabel
|
|
|
212
340
|
return (_jsxs(_Fragment, { children: [fixed && (_jsx("div", { className: "page-header-spacer", "aria-hidden": "true", style: spacerStyle })), _jsxs("header", { ref: headerRef, className: headerClasses, children: [eyebrow && _jsx("p", { className: "page-header-eyebrow", children: eyebrow }), headline && _jsx("h1", { children: headline }), description && _jsx("p", { className: "page-header-description", children: description }), ctaLabel && ctaHref && (_jsx("a", { className: "page-header-cta", href: ctaHref, target: resolvedTarget, rel: rel, children: ctaLabel })), children] })] }));
|
|
213
341
|
}
|
|
214
342
|
// ========== PAGE HERO ==========
|
|
343
|
+
/**
|
|
344
|
+
* PageHero — Generic hero wrapper used within page layouts.
|
|
345
|
+
*
|
|
346
|
+
* @param {string} [props.id] - Optional id for the hero section.
|
|
347
|
+
* @param {string} [props.className] - Additional CSS classes for the hero.
|
|
348
|
+
* @param {string} [props.background] - Background color or CSS value.
|
|
349
|
+
* @param {string} [props.backgroundImage] - Background image URL to render behind content.
|
|
350
|
+
* @param {node} [props.children] - Content to display inside the hero.
|
|
351
|
+
*/
|
|
215
352
|
PageHero.propTypes = {
|
|
353
|
+
/** Optional id for hero */
|
|
216
354
|
id: PropTypes.string,
|
|
355
|
+
/** Optional CSS classes */
|
|
217
356
|
className: PropTypes.string,
|
|
357
|
+
/** Background color or CSS string */
|
|
218
358
|
background: PropTypes.string,
|
|
359
|
+
/** Background image URL */
|
|
219
360
|
backgroundImage: PropTypes.string,
|
|
361
|
+
/** Child nodes */
|
|
220
362
|
children: PropTypes.node,
|
|
221
363
|
};
|
|
222
364
|
export function PageHero({ id, className, background, backgroundImage, children, }) {
|
|
@@ -226,11 +368,25 @@ export function PageHero({ id, className, background, backgroundImage, children,
|
|
|
226
368
|
return (_jsxs("section", { id: id || undefined, className: `page-hero${className ? ` ${className}` : ""}`, style: wrapperStyle, children: [backgroundImage && _jsx(PageSectionBackgroundImage, { backgroundImage: backgroundImage, id: id }), _jsx("div", { className: "page-hero-content", children: children })] }));
|
|
227
369
|
}
|
|
228
370
|
// ========== PAGE MAIN ==========
|
|
371
|
+
/**
|
|
372
|
+
* PageMain — Main content wrapper with optional width and padding controls.
|
|
373
|
+
*
|
|
374
|
+
* @param {string} [props.id] - Optional id attribute for the main element.
|
|
375
|
+
* @param {string} [props.className] - Additional CSS classes to apply.
|
|
376
|
+
* @param {string} [props.maxWidth] - Maximum content width (e.g., '1200px').
|
|
377
|
+
* @param {string} [props.padding] - Padding around the main content (CSS shorthand).
|
|
378
|
+
* @param {node} [props.children] - Main content nodes.
|
|
379
|
+
*/
|
|
229
380
|
PageMain.propTypes = {
|
|
381
|
+
/** Optional id */
|
|
230
382
|
id: PropTypes.string,
|
|
383
|
+
/** Optional CSS classes */
|
|
231
384
|
className: PropTypes.string,
|
|
385
|
+
/** Max content width */
|
|
232
386
|
maxWidth: PropTypes.string,
|
|
387
|
+
/** Padding for main content */
|
|
233
388
|
padding: PropTypes.string,
|
|
389
|
+
/** Child nodes */
|
|
234
390
|
children: PropTypes.node,
|
|
235
391
|
};
|
|
236
392
|
export function PageMain({ id, className, maxWidth = "1200px", padding = "0 20px 60px", children, }) {
|
|
@@ -241,9 +397,19 @@ export function PageMain({ id, className, maxWidth = "1200px", padding = "0 20px
|
|
|
241
397
|
return (_jsx("main", { id: id || undefined, className: `page-main${className ? ` ${className}` : ""}`, style: layoutStyle, children: children }));
|
|
242
398
|
}
|
|
243
399
|
// ========== PAGE NAV ==========
|
|
400
|
+
/**
|
|
401
|
+
* PageNav — Simple navigation helper that renders link items horizontally or vertically.
|
|
402
|
+
*
|
|
403
|
+
* @param {string} [props.className] - Optional CSS classes for the nav wrapper.
|
|
404
|
+
* @param {oneOf} [props.orientation] - Layout orientation: 'horizontal' or 'vertical'.
|
|
405
|
+
* @param {arrayOf} [props.links] - Array of link objects ({label, href, target}).
|
|
406
|
+
*/
|
|
244
407
|
PageNav.propTypes = {
|
|
408
|
+
/** Optional CSS classes */
|
|
245
409
|
className: PropTypes.string,
|
|
410
|
+
/** Orientation: 'horizontal' | 'vertical' */
|
|
246
411
|
orientation: PropTypes.oneOf(["horizontal", "vertical"]),
|
|
412
|
+
/** Array of link objects */
|
|
247
413
|
links: PropTypes.arrayOf(pageLinkShape),
|
|
248
414
|
};
|
|
249
415
|
export function PageNav({ className, orientation = "horizontal", links, }) {
|
|
@@ -260,10 +426,22 @@ export function PageNav({ className, orientation = "horizontal", links, }) {
|
|
|
260
426
|
}) }));
|
|
261
427
|
}
|
|
262
428
|
// ========== PAGE FOOTER ==========
|
|
429
|
+
/**
|
|
430
|
+
* PageFooter — Page footer that optionally renders text, links and children.
|
|
431
|
+
*
|
|
432
|
+
* @param {string} [props.className] - Optional additional CSS classes.
|
|
433
|
+
* @param {string} [props.text] - Footer text or short copyright string.
|
|
434
|
+
* @param {arrayOf} [props.links] - Array of link objects to show in footer.
|
|
435
|
+
* @param {node} [props.children] - Additional nodes rendered inside the footer.
|
|
436
|
+
*/
|
|
263
437
|
PageFooter.propTypes = {
|
|
438
|
+
/** Optional CSS classes */
|
|
264
439
|
className: PropTypes.string,
|
|
440
|
+
/** Footer text */
|
|
265
441
|
text: PropTypes.string,
|
|
442
|
+
/** Footer links */
|
|
266
443
|
links: PropTypes.arrayOf(pageLinkShape),
|
|
444
|
+
/** Child nodes */
|
|
267
445
|
children: PropTypes.node,
|
|
268
446
|
};
|
|
269
447
|
export function PageFooter({ className, text, links, children, }) {
|
|
@@ -7,17 +7,43 @@ import PropTypes from 'prop-types';
|
|
|
7
7
|
import './sidepanel.css';
|
|
8
8
|
// Define const arrays for options - used by both PropTypes and form generation
|
|
9
9
|
export const positions = ['left', 'right'];
|
|
10
|
+
/**
|
|
11
|
+
* SidePanel — off-canvas panel that can be opened from the left or right with optional overlay and tab toggle.
|
|
12
|
+
*
|
|
13
|
+
* @param {boolean} [props.isOpen] - Whether the panel is currently open.
|
|
14
|
+
* @param {function} [props.onClose] - Callback invoked to request the panel be closed.
|
|
15
|
+
* @param {function} [props.onToggle] - Callback to toggle the panel open/closed.
|
|
16
|
+
* @param {oneOf} [props.position] - Which side the panel appears on ('left' | 'right').
|
|
17
|
+
* @param {string} [props.width] - CSS width (e.g., '300px') used for panel size.
|
|
18
|
+
* @param {boolean} [props.showOverlay] - Whether to render a click-to-close overlay behind the panel.
|
|
19
|
+
* @param {boolean} [props.showTab] - Whether to display a persistent toggle tab.
|
|
20
|
+
* @param {node} [props.tabIcon] - Optional icon node to render inside the tab button.
|
|
21
|
+
* @param {string} [props.tabLabel] - Optional text label to show on the tab button.
|
|
22
|
+
* @param {node} [props.children] - Panel content to render inside the side panel.
|
|
23
|
+
* @param {string} [props.className] - Additional CSS class names to apply to the panel container.
|
|
24
|
+
*/
|
|
10
25
|
SidePanel.propTypes = {
|
|
26
|
+
/** Whether the panel is open (controls visible state). */
|
|
11
27
|
isOpen: PropTypes.bool.isRequired,
|
|
28
|
+
/** Function called to request closing the panel. */
|
|
12
29
|
onClose: PropTypes.func.isRequired,
|
|
30
|
+
/** Optional toggle callback to open/close the panel. */
|
|
13
31
|
onToggle: PropTypes.func,
|
|
32
|
+
/** Position of the panel on the screen ('left' or 'right'). */
|
|
14
33
|
position: PropTypes.oneOf([...positions]),
|
|
34
|
+
/** CSS width value for the panel (e.g., '300px'). */
|
|
15
35
|
width: PropTypes.string,
|
|
36
|
+
/** When true an overlay is shown and clicking it closes the panel. */
|
|
16
37
|
showOverlay: PropTypes.bool,
|
|
38
|
+
/** Whether to render a fixed tab toggle for the panel. */
|
|
17
39
|
showTab: PropTypes.bool,
|
|
40
|
+
/** Optional icon node shown inside the persistent tab. */
|
|
18
41
|
tabIcon: PropTypes.node,
|
|
42
|
+
/** Optional label text for the tab toggle. */
|
|
19
43
|
tabLabel: PropTypes.string,
|
|
44
|
+
/** Panel content as React children. */
|
|
20
45
|
children: PropTypes.node,
|
|
46
|
+
/** Extra CSS class names to apply to the component. */
|
|
21
47
|
className: PropTypes.string,
|
|
22
48
|
};
|
|
23
49
|
export default function SidePanel({ isOpen, onClose, onToggle, position = 'left', width = '300px', showOverlay = true, showTab = false, tabIcon /* = "≡" */, tabLabel, children, className = '' }) {
|