@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
|
@@ -90,10 +90,22 @@ const generateOptions = (options, parentProps, prefix, optionComponent) => {
|
|
|
90
90
|
}
|
|
91
91
|
return result;
|
|
92
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* FormLabel — Render a label and optional tooltip for a form field.
|
|
95
|
+
*
|
|
96
|
+
* @param {string} [props.id] - ID of the form control the label targets.
|
|
97
|
+
* @param {string} [props.label] - Text to display as the label.
|
|
98
|
+
* @param {string} [props.tooltip] - Optional tooltip text explaining the field.
|
|
99
|
+
* @param {string} [props.className] - Optional CSS class names for the label element.
|
|
100
|
+
*/
|
|
93
101
|
FormLabel.propTypes = {
|
|
102
|
+
/** ID of the control associated with this label */
|
|
94
103
|
id: PropTypes.string.isRequired,
|
|
104
|
+
/** Label text to display */
|
|
95
105
|
label: PropTypes.string,
|
|
106
|
+
/** Optional tooltip text */
|
|
96
107
|
tooltip: PropTypes.string,
|
|
108
|
+
/** Additional CSS class names */
|
|
97
109
|
className: PropTypes.string,
|
|
98
110
|
};
|
|
99
111
|
FormLabel.defaultProps = {
|
|
@@ -108,10 +120,22 @@ function FormLabel(props) {
|
|
|
108
120
|
? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] })
|
|
109
121
|
: ""] }));
|
|
110
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* FormTooltip — Display contextual helper or validation messages for a form field.
|
|
125
|
+
*
|
|
126
|
+
* @param {string} [props.id] - ID used to associate the tooltip with a control.
|
|
127
|
+
* @param {arrayOf} [props.text] - Array of strings to render inside the tooltip.
|
|
128
|
+
* @param {string} [props.className] - CSS class names applied to the tooltip container.
|
|
129
|
+
* @param {oneOf} [props.mode] - Mode of the tooltip: 'tooltip' for help or 'validate' for validation messages.
|
|
130
|
+
*/
|
|
111
131
|
FormTooltip.propTypes = {
|
|
132
|
+
/** Associated control id */
|
|
112
133
|
id: PropTypes.string,
|
|
134
|
+
/** Text lines to display in the tooltip */
|
|
113
135
|
text: PropTypes.arrayOf(PropTypes.string).isRequired,
|
|
136
|
+
/** Additional CSS class names */
|
|
114
137
|
className: PropTypes.string,
|
|
138
|
+
/** Tooltip mode */
|
|
115
139
|
mode: PropTypes.oneOf(['tooltip', 'validate']),
|
|
116
140
|
};
|
|
117
141
|
FormTooltip.defaultProps = {
|
|
@@ -144,39 +168,95 @@ function FormTooltip(props) {
|
|
|
144
168
|
let clickHandler = toggleTooltip;
|
|
145
169
|
return (_jsx(_Fragment, { children: _jsxs("div", { id: mode + "-" + props.id, className: `tooltip-container ${props.className || ''}`, children: [_jsx("span", { className: "tooltip-icon tooltip-icon-" + mode, ...mouseEvents, onClick: clickHandler, onKeyDown: handleKeyDown, "aria-label": "Show more info", "aria-expanded": showTooltip, "aria-describedby": showTooltip ? `${props.id}-tooltip` : undefined, tabIndex: 0, role: "button", children: icon }), showTooltip && _jsx("div", { className: "tooltip-text", role: "tooltip", id: `${props.id}-tooltip`, children: content })] }) }));
|
|
146
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* FormInput — Generic input field used by the FormEngine. Supports standard input attributes and validation hooks.
|
|
173
|
+
*
|
|
174
|
+
* @param {string} [props.type] - Input type (text, number, email, etc.).
|
|
175
|
+
* @param {string} [props.id] - Input id attribute (required).
|
|
176
|
+
* @param {string} [props.name] - Input name attribute.
|
|
177
|
+
* @param {string} [props.defaultValue] - Default value for uncontrolled inputs.
|
|
178
|
+
* @param {string} [props.value] - Controlled value for the input.
|
|
179
|
+
* @param {string} [props.list] - Datalist id to associate with the input.
|
|
180
|
+
* @param {string} [props.listItems] - Comma-separated datalist items (internal convenience prop).
|
|
181
|
+
* @param {string} [props.size] - Size attribute for text input.
|
|
182
|
+
* @param {string} [props.maxLength] - Maximum characters allowed.
|
|
183
|
+
* @param {string} [props.placeholder] - Placeholder text.
|
|
184
|
+
* @param {string} [props.autoComplete] - Autocomplete hint.
|
|
185
|
+
* @param {number} [props.tabIndex] - Tab order index.
|
|
186
|
+
* @param {object} [props.style] - Inline styles applied to the input element.
|
|
187
|
+
* @param {string} [props.min] - Minimum value (for number/date inputs).
|
|
188
|
+
* @param {string} [props.max] - Maximum value (for number/date inputs).
|
|
189
|
+
* @param {string} [props.step] - Step increment (for number inputs).
|
|
190
|
+
* @param {string} [props.autoFocus] - Whether to autofocus the input.
|
|
191
|
+
* @param {string} [props.disabled] - Disabled flag.
|
|
192
|
+
* @param {string} [props.readOnly] - Read-only flag.
|
|
193
|
+
* @param {string} [props.required] - Required flag.
|
|
194
|
+
* @param {string} [props.display] - Display style (inline/block) for layout purposes.
|
|
195
|
+
* @param {string} [props.label] - Label text associated with the input.
|
|
196
|
+
* @param {string} [props.tooltip] - Tooltip/help text for the input.
|
|
197
|
+
* @param {string} [props.className] - CSS class names applied to the input container.
|
|
198
|
+
* @param {string} [props.validate] - Named validation rule to run for this input.
|
|
199
|
+
* @param {function} [props.onChange] - Change handler invoked with synthetic change events.
|
|
200
|
+
*/
|
|
147
201
|
FormInput.propTypes = {
|
|
202
|
+
/** Input type (text, number, email, etc.) */
|
|
148
203
|
type: PropTypes.string,
|
|
204
|
+
/** Input id attribute */
|
|
149
205
|
id: PropTypes.string.isRequired,
|
|
206
|
+
/** Input name attribute */
|
|
150
207
|
name: PropTypes.string,
|
|
208
|
+
/** Default value for uncontrolled inputs */
|
|
151
209
|
defaultValue: PropTypes.string,
|
|
210
|
+
/** Controlled value */
|
|
152
211
|
value: PropTypes.string,
|
|
212
|
+
/** Associated datalist id */
|
|
153
213
|
list: PropTypes.string,
|
|
214
|
+
/** Comma-separated datalist items */
|
|
154
215
|
listItems: PropTypes.string, /* this one is mine */
|
|
216
|
+
/** Input size attribute */
|
|
155
217
|
size: PropTypes.string,
|
|
218
|
+
/** Maximum allowed characters */
|
|
156
219
|
maxLength: PropTypes.string,
|
|
220
|
+
/** Placeholder text */
|
|
157
221
|
placeholder: PropTypes.string,
|
|
222
|
+
/** Autocomplete hint */
|
|
158
223
|
autoComplete: PropTypes.string,
|
|
224
|
+
/** Tab ordering index */
|
|
159
225
|
tabIndex: PropTypes.number,
|
|
226
|
+
/** Inline style object */
|
|
160
227
|
style: PropTypes.object,
|
|
161
228
|
"aria-label": PropTypes.string,
|
|
162
229
|
"aria-hidden": PropTypes.string,
|
|
230
|
+
/** Minimum value for numeric/date inputs */
|
|
163
231
|
min: PropTypes.string,
|
|
232
|
+
/** Maximum value for numeric/date inputs */
|
|
164
233
|
max: PropTypes.string,
|
|
234
|
+
/** Step increment for numeric inputs */
|
|
165
235
|
step: PropTypes.string,
|
|
166
236
|
// flag attributes
|
|
237
|
+
/** Autofocus flag */
|
|
167
238
|
autoFocus: PropTypes.string,
|
|
239
|
+
/** Disabled flag */
|
|
168
240
|
disabled: PropTypes.string,
|
|
241
|
+
/** Read-only flag */
|
|
169
242
|
readOnly: PropTypes.string,
|
|
243
|
+
/** Whether this field is required (use 'required' to mark mandatory) */
|
|
170
244
|
required: PropTypes.string,
|
|
171
245
|
// className,
|
|
172
246
|
// data-mapping, data-component-endpoint, data-testid
|
|
173
247
|
// aria-invalid, aria-describedby,
|
|
174
248
|
// ----- for calculations
|
|
249
|
+
/** Layout hint; use 'vertical' to stack label and control */
|
|
175
250
|
display: PropTypes.string,
|
|
251
|
+
/** Text label associated with the control */
|
|
176
252
|
label: PropTypes.string,
|
|
253
|
+
/** Helper text shown in a tooltip for the control */
|
|
177
254
|
tooltip: PropTypes.string,
|
|
255
|
+
/** Additional CSS classes applied to the container */
|
|
178
256
|
className: PropTypes.string,
|
|
257
|
+
/** Name of the validation rule to run for this field */
|
|
179
258
|
validate: PropTypes.string,
|
|
259
|
+
/** Change handler invoked with the new value */
|
|
180
260
|
onChange: PropTypes.func,
|
|
181
261
|
};
|
|
182
262
|
export function FormInput(props) {
|
|
@@ -188,29 +268,65 @@ export function FormInput(props) {
|
|
|
188
268
|
: undefined;
|
|
189
269
|
return (_jsxs("div", { children: [props.type == "checkbox" ? _jsx("input", { ...inputProps }) : "", _jsx(FormLabel, { id: props.id, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display == "vertical" ? formValidate : "", props.type != "checkbox" ? _jsx("input", { ...inputProps }) : "", formDataList && Array.isArray(formDataList) ? _jsx(FormDataList, { id: props.list ?? '', items: formDataList }) : "", props.display != "vertical" ? formValidate : ""] }));
|
|
190
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* FormSelect — Render a standard HTML <select> element with generated option items.
|
|
273
|
+
*
|
|
274
|
+
* @param {string} [props.id] - Input id attribute.
|
|
275
|
+
* @param {string} [props.name] - Input name attribute.
|
|
276
|
+
* @param {string} [props.size] - visual size attribute for single-select lists.
|
|
277
|
+
* @param {string} [props.autoComplete] - Autocomplete hint.
|
|
278
|
+
* @param {oneOfType} [props.defaultValue] - Default selected value (string or array for multi-select).
|
|
279
|
+
* @param {string} [props.autoFocus] - Autofocus flag.
|
|
280
|
+
* @param {string} [props.disabled] - Disabled flag.
|
|
281
|
+
* @param {string} [props.multiple] - Multiple selection flag.
|
|
282
|
+
* @param {string} [props.readOnly] - Read-only flag.
|
|
283
|
+
* @param {string} [props.required] - Required flag.
|
|
284
|
+
* @param {string} [props.selected] - Currently selected value.
|
|
285
|
+
* @param {array} [props.options] - Array of option objects used to generate options.
|
|
286
|
+
* @param {string} [props.display] - Layout hint (e.g., 'vertical').
|
|
287
|
+
* @param {string} [props.label] - Field label text.
|
|
288
|
+
* @param {string} [props.tooltip] - Tooltip/help text.
|
|
289
|
+
* @param {string} [props.className] - CSS class names.
|
|
290
|
+
* @param {string} [props.validate] - Named validation rule.
|
|
291
|
+
* @param {function} [props.onChange] - Change handler invoked with new value.
|
|
292
|
+
*/
|
|
191
293
|
FormSelect.propTypes = {
|
|
294
|
+
/** Input id */
|
|
192
295
|
id: PropTypes.string.isRequired,
|
|
296
|
+
/** Input name */
|
|
193
297
|
name: PropTypes.string,
|
|
298
|
+
/** Visual size for select */
|
|
194
299
|
size: PropTypes.string,
|
|
300
|
+
/** Autocomplete hint */
|
|
195
301
|
autoComplete: PropTypes.string,
|
|
302
|
+
/** Default selected value (or array for multi-select) */
|
|
196
303
|
defaultValue: PropTypes.oneOfType([
|
|
197
304
|
PropTypes.string,
|
|
198
305
|
PropTypes.array
|
|
199
306
|
]),
|
|
200
|
-
|
|
307
|
+
/** Autofocus flag */
|
|
201
308
|
autoFocus: PropTypes.string,
|
|
309
|
+
/** Disabled flag */
|
|
202
310
|
disabled: PropTypes.string,
|
|
311
|
+
/** Multiple selection flag */
|
|
203
312
|
multiple: PropTypes.string,
|
|
313
|
+
/** Read-only flag */
|
|
204
314
|
readOnly: PropTypes.string,
|
|
315
|
+
/** Required flag */
|
|
205
316
|
required: PropTypes.string,
|
|
206
|
-
|
|
207
|
-
// ----- for calculations
|
|
317
|
+
/** Option list array */
|
|
208
318
|
options: PropTypes.array,
|
|
319
|
+
/** Layout hint (e.g., 'vertical') */
|
|
209
320
|
display: PropTypes.string,
|
|
321
|
+
/** Label text */
|
|
210
322
|
label: PropTypes.string,
|
|
323
|
+
/** Helper text shown in a tooltip for the control */
|
|
211
324
|
tooltip: PropTypes.string,
|
|
325
|
+
/** Additional CSS classes applied to the select container */
|
|
212
326
|
className: PropTypes.string,
|
|
327
|
+
/** Name of the validation rule to run for this field */
|
|
213
328
|
validate: PropTypes.string,
|
|
329
|
+
/** Change handler invoked with the new value */
|
|
214
330
|
onChange: PropTypes.func,
|
|
215
331
|
};
|
|
216
332
|
export function FormSelect(props) {
|
|
@@ -218,12 +334,20 @@ export function FormSelect(props) {
|
|
|
218
334
|
const options = generateOptions(props.options || [], props, "select", FormSelectOption);
|
|
219
335
|
return (_jsxs("div", { children: [_jsx(FormLabel, { id: props.id, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display == "vertical" ? formValidate : "", _jsx("select", { ...inputProps, suppressHydrationWarning: true, children: options }), props.display != "vertical" ? formValidate : ""] }));
|
|
220
336
|
}
|
|
337
|
+
/**
|
|
338
|
+
* FormSelectOption — Render an individual <option> element for a select.
|
|
339
|
+
*
|
|
340
|
+
* @param {string} [props.text] - Visible option text.
|
|
341
|
+
* @param {string} [props.value] - Option value attribute.
|
|
342
|
+
* @param {boolean} [props.disabled] - Disable this option when true.
|
|
343
|
+
*/
|
|
221
344
|
FormSelectOption.propTypes = {
|
|
345
|
+
/** Visible text for the option */
|
|
222
346
|
text: PropTypes.string,
|
|
347
|
+
/** Option value attribute */
|
|
223
348
|
value: PropTypes.string,
|
|
224
|
-
|
|
349
|
+
/** Disabled flag for the option */
|
|
225
350
|
disabled: PropTypes.bool,
|
|
226
|
-
// selected : PropTypes.string
|
|
227
351
|
};
|
|
228
352
|
function FormSelectOption(props) {
|
|
229
353
|
const { text, disabled, value, ...otherProps } = props;
|
|
@@ -234,47 +358,116 @@ function FormSelectOption(props) {
|
|
|
234
358
|
};
|
|
235
359
|
return (_jsx("option", { ...inputProps, children: text }));
|
|
236
360
|
}
|
|
361
|
+
/**
|
|
362
|
+
* FormTextarea — Multi-line text input with optional validation and label/tooltip support.
|
|
363
|
+
*
|
|
364
|
+
* @param {string} [props.id] - Textarea id attribute.
|
|
365
|
+
* @param {string} [props.name] - Textarea name attribute.
|
|
366
|
+
* @param {string} [props.rows] - Number of rows to display.
|
|
367
|
+
* @param {string} [props.cols] - Number of columns (cols) attribute.
|
|
368
|
+
* @param {string} [props.defaultValue] - Default text value for uncontrolled mode.
|
|
369
|
+
* @param {number} [props.maxLength] - Maximum characters allowed.
|
|
370
|
+
* @param {string} [props.placeholder] - Placeholder text.
|
|
371
|
+
* @param {string} [props.autoComplete] - Autocomplete hint.
|
|
372
|
+
* @param {string} [props.autoFocus] - Autofocus flag.
|
|
373
|
+
* @param {string} [props.disabled] - Disabled flag.
|
|
374
|
+
* @param {string} [props.readOnly] - Read-only flag.
|
|
375
|
+
* @param {string} [props.required] - Required flag.
|
|
376
|
+
* @param {string} [props.display] - Layout hint (e.g., 'vertical').
|
|
377
|
+
* @param {string} [props.label] - Field label text.
|
|
378
|
+
* @param {string} [props.tooltip] - Tooltip/help text.
|
|
379
|
+
* @param {string} [props.className] - CSS class names.
|
|
380
|
+
* @param {string} [props.validate] - Named validation rule.
|
|
381
|
+
* @param {function} [props.onChange] - Change handler invoked with new value.
|
|
382
|
+
*/
|
|
237
383
|
FormTextarea.propTypes = {
|
|
384
|
+
/** Textarea id */
|
|
238
385
|
id: PropTypes.string.isRequired,
|
|
386
|
+
/** Textarea name */
|
|
239
387
|
name: PropTypes.string,
|
|
388
|
+
/** Number of rows */
|
|
240
389
|
rows: PropTypes.string,
|
|
390
|
+
/** Number of columns (visual width) */
|
|
241
391
|
cols: PropTypes.string,
|
|
392
|
+
/** Default uncontrolled text value */
|
|
242
393
|
defaultValue: PropTypes.string,
|
|
394
|
+
/** Maximum number of characters allowed */
|
|
243
395
|
maxLength: PropTypes.number,
|
|
396
|
+
/** Short hint displayed when the field is empty */
|
|
244
397
|
placeholder: PropTypes.string,
|
|
398
|
+
/** Browser autocomplete hint */
|
|
245
399
|
autoComplete: PropTypes.string,
|
|
246
400
|
// flag attributes
|
|
401
|
+
/** If set, the control will receive focus on mount */
|
|
247
402
|
autoFocus: PropTypes.string,
|
|
403
|
+
/** Set to 'disabled' to render the control disabled */
|
|
248
404
|
disabled: PropTypes.string,
|
|
405
|
+
/** Set to 'readOnly' to prevent user edits */
|
|
249
406
|
readOnly: PropTypes.string,
|
|
407
|
+
/** Whether this field is required ('required' to mark mandatory) */
|
|
250
408
|
required: PropTypes.string,
|
|
251
409
|
// ----- for calculations
|
|
410
|
+
/** Layout hint; use 'vertical' to stack label and control */
|
|
252
411
|
display: PropTypes.string,
|
|
412
|
+
/** Text label associated with the control */
|
|
253
413
|
label: PropTypes.string,
|
|
414
|
+
/** Helper text shown in a tooltip for the control */
|
|
254
415
|
tooltip: PropTypes.string,
|
|
416
|
+
/** Additional CSS classes applied to the container */
|
|
255
417
|
className: PropTypes.string,
|
|
418
|
+
/** Name of the validation rule to run for this field */
|
|
256
419
|
validate: PropTypes.string,
|
|
420
|
+
/** Change handler invoked with the new value */
|
|
257
421
|
onChange: PropTypes.func,
|
|
258
422
|
};
|
|
259
423
|
export function FormTextarea(props) {
|
|
260
424
|
const { formValidate, inputProps } = useFormComponent(props);
|
|
261
425
|
return (_jsxs("div", { children: [_jsx(FormLabel, { id: props.id, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display == "vertical" ? formValidate : "", _jsx("textarea", { ...inputProps }), props.display != "vertical" ? formValidate : ""] }));
|
|
262
426
|
}
|
|
427
|
+
/**
|
|
428
|
+
* FormRadio — Render a group of radio buttons from the provided options and handle selection.
|
|
429
|
+
*
|
|
430
|
+
* @param {string} [props.id] - Unique id for this control group.
|
|
431
|
+
* @param {string} [props.name] - HTML name attribute shared by the radio inputs.
|
|
432
|
+
* @param {array} [props.options] - Array of option objects ({ text, value, ... }).
|
|
433
|
+
* @param {string} [props.autoFocus] - If present, the control will receive focus on mount.
|
|
434
|
+
* @param {string} [props.disabled] - Set to 'disabled' to disable the control group.
|
|
435
|
+
* @param {string} [props.readOnly] - Read-only flag; selection cannot be changed.
|
|
436
|
+
* @param {string} [props.required] - Set to 'required' to mark the group mandatory.
|
|
437
|
+
* @param {string} [props.selected] - Currently selected value.
|
|
438
|
+
* @param {string} [props.display] - Layout hint ('vertical' to stack options).
|
|
439
|
+
* @param {string} [props.label] - Optional label text shown above the group.
|
|
440
|
+
* @param {string} [props.tooltip] - Optional helper text shown in a tooltip.
|
|
441
|
+
* @param {string} [props.validate] - Named validation rule to apply to this field.
|
|
442
|
+
* @param {function} [props.onChange] - Handler invoked with the new selected value.
|
|
443
|
+
*/
|
|
263
444
|
FormRadio.propTypes = {
|
|
445
|
+
/** Unique id for the control group */
|
|
264
446
|
id: PropTypes.string.isRequired, // not using?
|
|
447
|
+
/** HTML name attribute shared by all radio inputs in the group */
|
|
265
448
|
name: PropTypes.string.isRequired,
|
|
449
|
+
/** Array of option objects used to create radio options */
|
|
266
450
|
options: PropTypes.array,
|
|
267
451
|
// flag attributes
|
|
452
|
+
/** If present, the control will receive focus on mount */
|
|
268
453
|
autoFocus: PropTypes.string,
|
|
454
|
+
/** Set to 'disabled' to disable the control group */
|
|
269
455
|
disabled: PropTypes.string,
|
|
456
|
+
/** Read-only flag; prevent user changes when set to 'readOnly' */
|
|
270
457
|
readOnly: PropTypes.string,
|
|
458
|
+
/** Set to 'required' to mark the group mandatory */
|
|
271
459
|
required: PropTypes.string,
|
|
272
460
|
// ? selected: PropTypes.string,
|
|
273
461
|
// ----- for calculations
|
|
462
|
+
/** Layout hint (use 'vertical' to stack options) */
|
|
274
463
|
display: PropTypes.string,
|
|
464
|
+
/** Optional label text shown above the group */
|
|
275
465
|
label: PropTypes.string,
|
|
466
|
+
/** Helper text shown in a tooltip for the group */
|
|
276
467
|
tooltip: PropTypes.string,
|
|
468
|
+
/** Named validation rule to apply */
|
|
277
469
|
validate: PropTypes.string,
|
|
470
|
+
/** Handler invoked with the new selected value */
|
|
278
471
|
onChange: PropTypes.func,
|
|
279
472
|
};
|
|
280
473
|
export function FormRadio(props) {
|
|
@@ -282,13 +475,27 @@ export function FormRadio(props) {
|
|
|
282
475
|
const options = generateOptions(props.options || [], props, "radio", FormRadioOption);
|
|
283
476
|
return (_jsxs("div", { children: [_jsx(FormLabel, { id: props.name, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display == "vertical" ? formValidate : "", options, props.display != "vertical" ? formValidate : ""] }));
|
|
284
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* FormRadioOption — Render an individual radio option within a FormRadio group.
|
|
480
|
+
*
|
|
481
|
+
* @param {string} [props.name] - HTML name attribute shared by the option.
|
|
482
|
+
* @param {string} [props.text] - Visible label text for the option.
|
|
483
|
+
* @param {string} [props.value] - Option value submitted when selected.
|
|
484
|
+
* @param {string} [props.checked] - Whether this option is currently selected.
|
|
485
|
+
* @param {any} [props.parent] - Reference to the parent control (used for controlled behavior).
|
|
486
|
+
*/
|
|
285
487
|
FormRadioOption.propTypes = {
|
|
488
|
+
/** HTML name attribute shared by the option */
|
|
286
489
|
name: PropTypes.string,
|
|
490
|
+
/** Visible label text for the option */
|
|
287
491
|
text: PropTypes.string,
|
|
492
|
+
/** Option value submitted when selected */
|
|
288
493
|
value: PropTypes.string.isRequired,
|
|
289
494
|
// flag attributes
|
|
495
|
+
/** Whether this option is currently selected */
|
|
290
496
|
checked: PropTypes.string,
|
|
291
497
|
// ----- for calculations
|
|
498
|
+
/** Reference to the parent control (used for controlled behavior) */
|
|
292
499
|
parent: PropTypes.any,
|
|
293
500
|
};
|
|
294
501
|
function FormRadioOption(props) {
|
|
@@ -305,20 +512,48 @@ function FormRadioOption(props) {
|
|
|
305
512
|
const controlProps = parentHasOnChange ? { checked: isChecked } : { defaultChecked: isChecked };
|
|
306
513
|
return (_jsxs("span", { className: props.parent && props.parent.display == "vertical" ? "displayVertical" : "", children: [_jsx("input", { type: "radio", id: `${props.parent?.name}-${props.value}`, name: props.parent?.name, value: props.value, ...controlProps, onChange: handleChange, required: !!(props.parent && props.parent.required), ...inputProps }), _jsx("label", { htmlFor: `${props.parent?.name}-${props.value}`, children: props.text })] }));
|
|
307
514
|
}
|
|
515
|
+
/**
|
|
516
|
+
* FormCheckbox — Render a set of checkbox inputs from provided options and manage selection array.
|
|
517
|
+
*
|
|
518
|
+
* @param {string} [props.id] - Unique id for this control group.
|
|
519
|
+
* @param {string} [props.name] - Base name used for generated checkbox inputs.
|
|
520
|
+
* @param {array} [props.options] - Array of option objects ({ text, value, ... }).
|
|
521
|
+
* @param {string} [props.autoFocus] - If present, the control will receive focus on mount.
|
|
522
|
+
* @param {string} [props.disabled] - Set to 'disabled' to disable the control group.
|
|
523
|
+
* @param {string} [props.readOnly] - Read-only flag; selection cannot be changed.
|
|
524
|
+
* @param {string} [props.display] - Layout hint (e.g., 'vertical' to stack checkboxes).
|
|
525
|
+
* @param {string} [props.label] - Optional label text shown above the group.
|
|
526
|
+
* @param {string} [props.tooltip] - Optional helper text shown in a tooltip.
|
|
527
|
+
* @param {string} [props.className] - Additional CSS classes applied to the container.
|
|
528
|
+
* @param {string} [props.validate] - Named validation rule to apply to the group.
|
|
529
|
+
* @param {function} [props.onChange] - Handler invoked with the updated selected values array.
|
|
530
|
+
*/
|
|
308
531
|
FormCheckbox.propTypes = {
|
|
532
|
+
/** Unique id for the control group */
|
|
309
533
|
id: PropTypes.string.isRequired,
|
|
534
|
+
/** Base name used for generated checkbox inputs */
|
|
310
535
|
name: PropTypes.string.isRequired,
|
|
536
|
+
/** Array of option objects used to create checkbox options */
|
|
311
537
|
options: PropTypes.array,
|
|
312
538
|
// flag attributes
|
|
539
|
+
/** If present, the control will receive focus on mount */
|
|
313
540
|
autoFocus: PropTypes.string,
|
|
541
|
+
/** Set to 'disabled' to disable the control group */
|
|
314
542
|
disabled: PropTypes.string,
|
|
543
|
+
/** Read-only flag; prevent user changes when set to 'readOnly' */
|
|
315
544
|
readOnly: PropTypes.string,
|
|
316
545
|
// ----- for calculations
|
|
546
|
+
/** Layout hint; use 'vertical' to stack checkboxes */
|
|
317
547
|
display: PropTypes.string,
|
|
548
|
+
/** Optional label text shown above the group */
|
|
318
549
|
label: PropTypes.string,
|
|
550
|
+
/** Helper text shown in a tooltip for the group */
|
|
319
551
|
tooltip: PropTypes.string,
|
|
552
|
+
/** Additional CSS classes applied to the container */
|
|
320
553
|
className: PropTypes.string,
|
|
554
|
+
/** Named validation rule to apply to the group */
|
|
321
555
|
validate: PropTypes.string,
|
|
556
|
+
/** Handler invoked with the updated selected values array */
|
|
322
557
|
onChange: PropTypes.func,
|
|
323
558
|
};
|
|
324
559
|
export function FormCheckbox(props) {
|
|
@@ -326,12 +561,24 @@ export function FormCheckbox(props) {
|
|
|
326
561
|
const options = generateOptions(props.options || [], props, "checkbox", FormCheckboxOption);
|
|
327
562
|
return (_jsxs("div", { children: [_jsx(FormLabel, { id: props.name, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display == "vertical" ? formValidate : "", options, props.display != "vertical" ? formValidate : ""] }));
|
|
328
563
|
}
|
|
564
|
+
/**
|
|
565
|
+
* FormCheckboxOption — Render a single checkbox option for a FormCheckbox group.
|
|
566
|
+
*
|
|
567
|
+
* @param {string} [props.text] - Visible label text for the checkbox option.
|
|
568
|
+
* @param {string} [props.value] - Value attribute for the option.
|
|
569
|
+
* @param {string} [props.selected] - Whether this option is selected (initial/default state).
|
|
570
|
+
* @param {any} [props.parent] - Reference to the parent control (used to update values).
|
|
571
|
+
*/
|
|
329
572
|
FormCheckboxOption.propTypes = {
|
|
573
|
+
/** Visible label text for the checkbox option */
|
|
330
574
|
text: PropTypes.string.isRequired,
|
|
575
|
+
/** Value attribute for the option */
|
|
331
576
|
value: PropTypes.string.isRequired,
|
|
332
577
|
// flag attributes
|
|
578
|
+
/** Whether this option is selected (used for initial/default state) */
|
|
333
579
|
selected: PropTypes.string,
|
|
334
580
|
// ----- for calculations
|
|
581
|
+
/** Reference to the parent control (used to update values) */
|
|
335
582
|
parent: PropTypes.any,
|
|
336
583
|
};
|
|
337
584
|
function FormCheckboxOption(props) {
|
|
@@ -352,19 +599,41 @@ function FormCheckboxOption(props) {
|
|
|
352
599
|
};
|
|
353
600
|
return (_jsxs("span", { className: props.parent.display == "vertical" ? "displayVertical" : "", children: [_jsx("input", { type: "checkbox", id: props.parent.name + "_" + props.text, name: props.text, value: props.value, checked: isChecked, onChange: handleChange, ...inputProps }), _jsx("label", { htmlFor: props.parent.name + "_" + props.text, children: props.text })] }));
|
|
354
601
|
}
|
|
602
|
+
/**
|
|
603
|
+
* FormButton — Render a standard HTML button used for form actions.
|
|
604
|
+
*
|
|
605
|
+
* @param {string} [props.type] - Button type: 'button' | 'submit' | 'reset'.
|
|
606
|
+
* @param {string} [props.id] - Unique identifier for the button element.
|
|
607
|
+
* @param {string} [props.text] - Text displayed inside the button.
|
|
608
|
+
* @param {string} [props.className] - Additional CSS classes for the button.
|
|
609
|
+
* @param {function} [props.onClick] - Click handler function.
|
|
610
|
+
*/
|
|
355
611
|
FormButton.propTypes = {
|
|
612
|
+
/** Button type: 'button' | 'submit' | 'reset' */
|
|
356
613
|
type: PropTypes.string,
|
|
614
|
+
/** Unique identifier for the button element */
|
|
357
615
|
id: PropTypes.string.isRequired,
|
|
616
|
+
/** Text displayed inside the button */
|
|
358
617
|
text: PropTypes.string,
|
|
359
618
|
// ----- for calculations
|
|
619
|
+
/** Additional CSS classes for the button */
|
|
360
620
|
className: PropTypes.string,
|
|
621
|
+
/** Click handler function */
|
|
361
622
|
onClick: PropTypes.func
|
|
362
623
|
};
|
|
363
624
|
export function FormButton(props) {
|
|
364
625
|
return (_jsx("div", { children: _jsx("button", { type: props.type, id: props.id, className: props.className || "", onClick: props.onClick || undefined, children: props.text }) }));
|
|
365
626
|
}
|
|
627
|
+
/**
|
|
628
|
+
* FormDataList — Render a native HTML <datalist> used to provide suggestions for text inputs.
|
|
629
|
+
*
|
|
630
|
+
* @param {string} [props.id] - Id attribute for the generated <datalist> element.
|
|
631
|
+
* @param {array} [props.items] - Array of string items to include as options.
|
|
632
|
+
*/
|
|
366
633
|
FormDataList.propTypes = {
|
|
634
|
+
/** Id attribute for the generated <datalist> element */
|
|
367
635
|
id: PropTypes.string.isRequired,
|
|
636
|
+
/** Array of string items to include as options */
|
|
368
637
|
items: PropTypes.array,
|
|
369
638
|
};
|
|
370
639
|
export function FormDataList(props) {
|
|
@@ -377,23 +646,57 @@ export function FormDataList(props) {
|
|
|
377
646
|
}
|
|
378
647
|
return (_jsx("datalist", { id: props.id, children: options }));
|
|
379
648
|
}
|
|
649
|
+
/**
|
|
650
|
+
* FormTagInput — Tag entry control that allows adding/removing multiple string tags.
|
|
651
|
+
*
|
|
652
|
+
* @param {string} [props.id] - Unique id for the tag input control.
|
|
653
|
+
* @param {string} [props.name] - Name attribute for the input element.
|
|
654
|
+
* @param {arrayOf} [props.defaultValue] - Initial tags for uncontrolled mode.
|
|
655
|
+
* @param {arrayOf} [props.value] - Controlled tags array when used as a controlled component.
|
|
656
|
+
* @param {string} [props.placeholder] - Placeholder text shown when empty.
|
|
657
|
+
* @param {string} [props.autoComplete] - Browser autocomplete hint.
|
|
658
|
+
* @param {string} [props.disabled] - Set to 'disabled' to disable input.
|
|
659
|
+
* @param {string} [props.readOnly] - Set to 'readOnly' to prevent edits.
|
|
660
|
+
* @param {string} [props.required] - Mark field as required when set to 'required'.
|
|
661
|
+
* @param {string} [props.display] - Layout hint (e.g., 'vertical' to place validation below).
|
|
662
|
+
* @param {string} [props.label] - Label text for the control.
|
|
663
|
+
* @param {string} [props.tooltip] - Helper text shown in a tooltip.
|
|
664
|
+
* @param {string} [props.className] - Additional CSS classes for the component.
|
|
665
|
+
* @param {string} [props.validate] - Named validation rule to run for this field.
|
|
666
|
+
* @param {function} [props.onChange] - Change handler invoked with the updated tags array.
|
|
667
|
+
*/
|
|
380
668
|
FormTagInput.propTypes = {
|
|
669
|
+
/** Unique id for the tag input control */
|
|
381
670
|
id: PropTypes.string.isRequired,
|
|
671
|
+
/** Name attribute for the input element */
|
|
382
672
|
name: PropTypes.string,
|
|
673
|
+
/** Initial tags for uncontrolled mode */
|
|
383
674
|
defaultValue: PropTypes.arrayOf(PropTypes.string),
|
|
675
|
+
/** Controlled tags array when used as a controlled component */
|
|
384
676
|
value: PropTypes.arrayOf(PropTypes.string),
|
|
677
|
+
/** Placeholder text shown when empty */
|
|
385
678
|
placeholder: PropTypes.string,
|
|
679
|
+
/** Browser autocomplete hint */
|
|
386
680
|
autoComplete: PropTypes.string,
|
|
387
681
|
// flag attributes
|
|
682
|
+
/** Set to 'disabled' to disable input */
|
|
388
683
|
disabled: PropTypes.string,
|
|
684
|
+
/** Set to 'readOnly' to prevent edits */
|
|
389
685
|
readOnly: PropTypes.string,
|
|
686
|
+
/** Mark field as required when set to 'required' */
|
|
390
687
|
required: PropTypes.string,
|
|
391
688
|
// ----- for calculations
|
|
689
|
+
/** Layout hint (e.g., 'vertical' to place validation below) */
|
|
392
690
|
display: PropTypes.string,
|
|
691
|
+
/** Label text for the control */
|
|
393
692
|
label: PropTypes.string,
|
|
693
|
+
/** Helper text shown in a tooltip */
|
|
394
694
|
tooltip: PropTypes.string,
|
|
695
|
+
/** Additional CSS classes for the component */
|
|
395
696
|
className: PropTypes.string,
|
|
697
|
+
/** Named validation rule to run for this field */
|
|
396
698
|
validate: PropTypes.string,
|
|
699
|
+
/** Change handler invoked with the updated tags array */
|
|
397
700
|
onChange: PropTypes.func,
|
|
398
701
|
};
|
|
399
702
|
export function FormTagInput(props) {
|
|
@@ -463,7 +766,15 @@ export function FormTagInput(props) {
|
|
|
463
766
|
};
|
|
464
767
|
return (_jsxs("div", { className: `form-tag-input ${props.className || ''}`, children: [_jsx(FormLabel, { id: props.id, label: props.label }, "label-" + props.id), props.tooltip ? _jsx(FormTooltip, { id: props.id, text: [props.tooltip] }) : "", props.display === "vertical" ? formValidate : "", _jsxs("div", { className: "tag-container", children: [currentTags.map((tag, index) => (_jsxs("span", { className: "tag-chip", children: [tag, _jsx("button", { type: "button", className: "tag-remove", onClick: () => removeTag(tag), "aria-label": `Remove ${tag}`, disabled: props.disabled === 'disabled', children: "\u00D7" })] }, index))), _jsx("input", { type: "text", id: props.id, name: props.name || undefined, value: inputValue, onChange: handleInputChange, onKeyDown: handleKeyDown, placeholder: props.placeholder || "Add tag...", autoComplete: props.autoComplete || undefined, disabled: props.disabled === 'disabled', readOnly: props.readOnly === 'readOnly', required: props.required === 'required', className: "tag-input", "aria-label": "Add new tag" })] }), props.display !== "vertical" ? formValidate : ""] }));
|
|
465
768
|
}
|
|
466
|
-
|
|
769
|
+
/**
|
|
770
|
+
* FormFieldset — Semantic grouping container used by form components.
|
|
771
|
+
*
|
|
772
|
+
* This component currently does not accept any props but provides a named
|
|
773
|
+
* placeholder for grouping form fields and future extensions.
|
|
774
|
+
* @param {any} [props] - No props are accepted by FormFieldset.
|
|
775
|
+
*/
|
|
776
|
+
/** FormFieldset.propTypes — No props */
|
|
777
|
+
FormFieldset.propTypes = { /** no props */};
|
|
467
778
|
export function FormFieldset(props) {
|
|
468
779
|
return (_jsx(_Fragment, {}));
|
|
469
780
|
}
|
|
@@ -475,8 +786,16 @@ export function FormFieldset(props) {
|
|
|
475
786
|
- aria-hidden + tabIndex -1 + autocomplete="off"
|
|
476
787
|
- no label / no validation / no required
|
|
477
788
|
*/
|
|
789
|
+
/**
|
|
790
|
+
* FormHoneypot — Render a hidden honeypot text input used to trap automated spam bots.
|
|
791
|
+
*
|
|
792
|
+
* @param {string} [props.id] - Id for the honeypot field (defaults to 'winnie').
|
|
793
|
+
* @param {string} [props.name] - Name attribute for the honeypot input (defaults to 'website').
|
|
794
|
+
*/
|
|
478
795
|
FormHoneypot.propTypes = {
|
|
796
|
+
/** Id for the honeypot field (defaults to 'winnie') */
|
|
479
797
|
id: PropTypes.string.isRequired,
|
|
798
|
+
/** Name attribute for the honeypot input (defaults to 'website') */
|
|
480
799
|
name: PropTypes.string,
|
|
481
800
|
};
|
|
482
801
|
export function FormHoneypot({ id = "winnie", name }) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
-
import { generateKey } from '
|
|
5
|
+
import { generateKey } from '../../general/utilities';
|
|
6
6
|
import { FormValidationProvider, useFormValidation } from './formvalidator';
|
|
7
7
|
import * as FC from './formcomponents';
|
|
8
8
|
import { CompoundFontSelector } from '../config/CompoundFontSelector';
|
|
@@ -16,21 +16,49 @@ export const COMPONENTS = {
|
|
|
16
16
|
const debug = false;
|
|
17
17
|
/* ===== FORM ENGINE =====
|
|
18
18
|
Generate all the elements to display a form */
|
|
19
|
+
/**
|
|
20
|
+
* FormEngine — Render a form defined by a JSON `formData` schema. Converts `formData.fields` to React components and manages submission handling and validation.
|
|
21
|
+
*
|
|
22
|
+
* @param {string} [props.name] - Form HTML name attribute.
|
|
23
|
+
* @param {string} [props.id] - Form HTML id attribute.
|
|
24
|
+
* @param {string} [props.method] - HTTP method for form submission (default: 'post').
|
|
25
|
+
* @param {function} [props.onSubmitHandler] - Optional submit handler invoked with the submit event.
|
|
26
|
+
* @param {object} [props.formData] - JSON schema describing fields (object with `fields` array).
|
|
27
|
+
*/
|
|
19
28
|
FormEngine.propTypes = {
|
|
29
|
+
/** Form name attribute */
|
|
20
30
|
name: PropTypes.string,
|
|
31
|
+
/** Form id attribute */
|
|
21
32
|
id: PropTypes.string,
|
|
33
|
+
/** HTTP method (e.g., 'post') */
|
|
22
34
|
method: PropTypes.string,
|
|
35
|
+
/** Submit handler called when the form is valid and submitted */
|
|
23
36
|
onSubmitHandler: PropTypes.func,
|
|
37
|
+
/** JSON schema describing form fields */
|
|
24
38
|
formData: PropTypes.object.isRequired
|
|
25
39
|
};
|
|
26
40
|
export function FormEngine(props) {
|
|
27
41
|
return (_jsx(FormValidationProvider, { children: _jsx(FormEngineInner, { ...props }) }));
|
|
28
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* FormEngineInner — Internal implementation of the `FormEngine` that renders the generated fields and handles form submit/validation.
|
|
45
|
+
*
|
|
46
|
+
* @param {string} [props.name] - Form HTML name attribute.
|
|
47
|
+
* @param {string} [props.id] - Form HTML id attribute.
|
|
48
|
+
* @param {string} [props.method] - HTTP method for submission.
|
|
49
|
+
* @param {function} [props.onSubmitHandler] - Submit handler invoked when form is validated.
|
|
50
|
+
* @param {object} [props.formData] - JSON schema describing fields (object with `fields` array).
|
|
51
|
+
*/
|
|
29
52
|
FormEngineInner.propTypes = {
|
|
53
|
+
/** Form name attribute */
|
|
30
54
|
name: PropTypes.string,
|
|
55
|
+
/** Form id attribute */
|
|
31
56
|
id: PropTypes.string,
|
|
57
|
+
/** HTTP method */
|
|
32
58
|
method: PropTypes.string,
|
|
59
|
+
/** Submit handler */
|
|
33
60
|
onSubmitHandler: PropTypes.func,
|
|
61
|
+
/** JSON form schema */
|
|
34
62
|
formData: PropTypes.object.isRequired
|
|
35
63
|
};
|
|
36
64
|
function FormEngineInner(props) {
|
|
@@ -46,7 +74,13 @@ function FormEngineInner(props) {
|
|
|
46
74
|
formProps.method = 'post';
|
|
47
75
|
return formProps;
|
|
48
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* generateNewFields — Internal: convert JSON-form `formData.fields` into React elements for rendering.
|
|
79
|
+
*
|
|
80
|
+
* @param {any} [props.formData] - JSON form schema with `fields` array to convert.
|
|
81
|
+
*/
|
|
49
82
|
generateNewFields.propTypes = {
|
|
83
|
+
/** JSON form schema with `fields` array */
|
|
50
84
|
formData: PropTypes.any.isRequired,
|
|
51
85
|
};
|
|
52
86
|
function generateNewFields(props) {
|