@qwickapps/react-framework 1.3.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/LICENSE +44 -0
- package/README.md +794 -0
- package/dist/components/AccessibilityChecker.d.ts +12 -0
- package/dist/components/AccessibilityChecker.d.ts.map +1 -0
- package/dist/components/Html.d.ts +48 -0
- package/dist/components/Html.d.ts.map +1 -0
- package/dist/components/Logo.d.ts +79 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Markdown.d.ts +47 -0
- package/dist/components/Markdown.d.ts.map +1 -0
- package/dist/components/QwickApp.d.ts +56 -0
- package/dist/components/QwickApp.d.ts.map +1 -0
- package/dist/components/QwickAppsLogo.d.ts +25 -0
- package/dist/components/QwickAppsLogo.d.ts.map +1 -0
- package/dist/components/ResponsiveMenu.d.ts +38 -0
- package/dist/components/ResponsiveMenu.d.ts.map +1 -0
- package/dist/components/SafeSpan.d.ts +23 -0
- package/dist/components/SafeSpan.d.ts.map +1 -0
- package/dist/components/Scaffold.d.ts +57 -0
- package/dist/components/Scaffold.d.ts.map +1 -0
- package/dist/components/blocks/Article.d.ts +23 -0
- package/dist/components/blocks/Article.d.ts.map +1 -0
- package/dist/components/blocks/CardListGrid.d.ts +23 -0
- package/dist/components/blocks/CardListGrid.d.ts.map +1 -0
- package/dist/components/blocks/Code.d.ts +21 -0
- package/dist/components/blocks/Code.d.ts.map +1 -0
- package/dist/components/blocks/Content.d.ts +24 -0
- package/dist/components/blocks/Content.d.ts.map +1 -0
- package/dist/components/blocks/CoverImageHeader.d.ts +44 -0
- package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -0
- package/dist/components/blocks/FeatureCard.d.ts +66 -0
- package/dist/components/blocks/FeatureCard.d.ts.map +1 -0
- package/dist/components/blocks/FeatureGrid.d.ts +48 -0
- package/dist/components/blocks/FeatureGrid.d.ts.map +1 -0
- package/dist/components/blocks/Footer.d.ts +56 -0
- package/dist/components/blocks/Footer.d.ts.map +1 -0
- package/dist/components/blocks/HeroBlock.d.ts +33 -0
- package/dist/components/blocks/HeroBlock.d.ts.map +1 -0
- package/dist/components/blocks/PageBannerHeader.d.ts +30 -0
- package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -0
- package/dist/components/blocks/ProductCard.d.ts +57 -0
- package/dist/components/blocks/ProductCard.d.ts.map +1 -0
- package/dist/components/blocks/Section.d.ts +40 -0
- package/dist/components/blocks/Section.d.ts.map +1 -0
- package/dist/components/blocks/index.d.ts +37 -0
- package/dist/components/blocks/index.d.ts.map +1 -0
- package/dist/components/buttons/Button.d.ts +38 -0
- package/dist/components/buttons/Button.d.ts.map +1 -0
- package/dist/components/buttons/PaletteSwitcher.d.ts +24 -0
- package/dist/components/buttons/PaletteSwitcher.d.ts.map +1 -0
- package/dist/components/buttons/ThemeSwitcher.d.ts +24 -0
- package/dist/components/buttons/ThemeSwitcher.d.ts.map +1 -0
- package/dist/components/buttons/index.d.ts +11 -0
- package/dist/components/buttons/index.d.ts.map +1 -0
- package/dist/components/forms/FormBlock.d.ts +45 -0
- package/dist/components/forms/FormBlock.d.ts.map +1 -0
- package/dist/components/forms/index.d.ts +8 -0
- package/dist/components/forms/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +32 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/input/ChoiceInputField.d.ts +30 -0
- package/dist/components/input/ChoiceInputField.d.ts.map +1 -0
- package/dist/components/input/HtmlInputField.d.ts +29 -0
- package/dist/components/input/HtmlInputField.d.ts.map +1 -0
- package/dist/components/input/SelectInputField.d.ts +29 -0
- package/dist/components/input/SelectInputField.d.ts.map +1 -0
- package/dist/components/input/TextField.d.ts +18 -0
- package/dist/components/input/TextField.d.ts.map +1 -0
- package/dist/components/input/TextInputField.d.ts +32 -0
- package/dist/components/input/TextInputField.d.ts.map +1 -0
- package/dist/components/input/index.d.ts +17 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/layout/GridCell.d.ts +16 -0
- package/dist/components/layout/GridCell.d.ts.map +1 -0
- package/dist/components/layout/GridCellWrapper.d.ts +46 -0
- package/dist/components/layout/GridCellWrapper.d.ts.map +1 -0
- package/dist/components/layout/GridLayout.d.ts +38 -0
- package/dist/components/layout/GridLayout.d.ts.map +1 -0
- package/dist/components/layout/index.d.ts +12 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/menu/Menu.d.ts +1 -0
- package/dist/components/menu/Menu.d.ts.map +1 -0
- package/dist/components/menu/MenuItem.d.ts +31 -0
- package/dist/components/menu/MenuItem.d.ts.map +1 -0
- package/dist/components/menu/index.d.ts +7 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/pages/FormPage.d.ts +66 -0
- package/dist/components/pages/FormPage.d.ts.map +1 -0
- package/dist/components/pages/Page.d.ts +124 -0
- package/dist/components/pages/Page.d.ts.map +1 -0
- package/dist/components/pages/index.d.ts +11 -0
- package/dist/components/pages/index.d.ts.map +1 -0
- package/dist/contexts/DataContext.d.ts +139 -0
- package/dist/contexts/DataContext.d.ts.map +1 -0
- package/dist/contexts/DimensionsContext.d.ts +42 -0
- package/dist/contexts/DimensionsContext.d.ts.map +1 -0
- package/dist/contexts/PaletteContext.d.ts +53 -0
- package/dist/contexts/PaletteContext.d.ts.map +1 -0
- package/dist/contexts/QwickAppContext.d.ts +71 -0
- package/dist/contexts/QwickAppContext.d.ts.map +1 -0
- package/dist/contexts/ThemeContext.d.ts +65 -0
- package/dist/contexts/ThemeContext.d.ts.map +1 -0
- package/dist/contexts/index.d.ts +9 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useBaseProps.d.ts +101 -0
- package/dist/hooks/useBaseProps.d.ts.map +1 -0
- package/dist/hooks/useDataBinding.d.ts +22 -0
- package/dist/hooks/useDataBinding.d.ts.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.css +1 -0
- package/dist/index.esm.js +24143 -0
- package/dist/index.js +24245 -0
- package/dist/palettes/PaletteAutumn.d.ts +10 -0
- package/dist/palettes/PaletteAutumn.d.ts.map +1 -0
- package/dist/palettes/PaletteCosmic.d.ts +10 -0
- package/dist/palettes/PaletteCosmic.d.ts.map +1 -0
- package/dist/palettes/PaletteDefault.d.ts +10 -0
- package/dist/palettes/PaletteDefault.d.ts.map +1 -0
- package/dist/palettes/PaletteOcean.d.ts +10 -0
- package/dist/palettes/PaletteOcean.d.ts.map +1 -0
- package/dist/palettes/PaletteSpring.d.ts +10 -0
- package/dist/palettes/PaletteSpring.d.ts.map +1 -0
- package/dist/palettes/PaletteWinter.d.ts +10 -0
- package/dist/palettes/PaletteWinter.d.ts.map +1 -0
- package/dist/palettes/index.d.ts +13 -0
- package/dist/palettes/index.d.ts.map +1 -0
- package/dist/schemas/ActionSchema.d.ts +21 -0
- package/dist/schemas/ActionSchema.d.ts.map +1 -0
- package/dist/schemas/ArticleSchema.d.ts +13 -0
- package/dist/schemas/ArticleSchema.d.ts.map +1 -0
- package/dist/schemas/Builders.d.ts +7 -0
- package/dist/schemas/Builders.d.ts.map +1 -0
- package/dist/schemas/ButtonSchema.d.ts +19 -0
- package/dist/schemas/ButtonSchema.d.ts.map +1 -0
- package/dist/schemas/CardListGridSchema.d.ts +17 -0
- package/dist/schemas/CardListGridSchema.d.ts.map +1 -0
- package/dist/schemas/ChoiceInputFieldSchema.d.ts +18 -0
- package/dist/schemas/ChoiceInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/CodeSchema.d.ts +18 -0
- package/dist/schemas/CodeSchema.d.ts.map +1 -0
- package/dist/schemas/ContentSchema.d.ts +20 -0
- package/dist/schemas/ContentSchema.d.ts.map +1 -0
- package/dist/schemas/CoverImageHeaderSchema.d.ts +28 -0
- package/dist/schemas/CoverImageHeaderSchema.d.ts.map +1 -0
- package/dist/schemas/FeatureCardSchema.d.ts +28 -0
- package/dist/schemas/FeatureCardSchema.d.ts.map +1 -0
- package/dist/schemas/FeatureGridSchema.d.ts +17 -0
- package/dist/schemas/FeatureGridSchema.d.ts.map +1 -0
- package/dist/schemas/FeatureItemSchema.d.ts +16 -0
- package/dist/schemas/FeatureItemSchema.d.ts.map +1 -0
- package/dist/schemas/FooterItemSchema.d.ts +15 -0
- package/dist/schemas/FooterItemSchema.d.ts.map +1 -0
- package/dist/schemas/FooterSchema.d.ts +20 -0
- package/dist/schemas/FooterSchema.d.ts.map +1 -0
- package/dist/schemas/FooterSectionSchema.d.ts +15 -0
- package/dist/schemas/FooterSectionSchema.d.ts.map +1 -0
- package/dist/schemas/FormBlockSchema.d.ts +19 -0
- package/dist/schemas/FormBlockSchema.d.ts.map +1 -0
- package/dist/schemas/HeaderActionSchema.d.ts +17 -0
- package/dist/schemas/HeaderActionSchema.d.ts.map +1 -0
- package/dist/schemas/HeroBlockSchema.d.ts +22 -0
- package/dist/schemas/HeroBlockSchema.d.ts.map +1 -0
- package/dist/schemas/HtmlInputFieldSchema.d.ts +18 -0
- package/dist/schemas/HtmlInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/MetadataItemSchema.d.ts +13 -0
- package/dist/schemas/MetadataItemSchema.d.ts.map +1 -0
- package/dist/schemas/PageBannerHeaderSchema.d.ts +28 -0
- package/dist/schemas/PageBannerHeaderSchema.d.ts.map +1 -0
- package/dist/schemas/PaletteSwitcherSchema.d.ts +16 -0
- package/dist/schemas/PaletteSwitcherSchema.d.ts.map +1 -0
- package/dist/schemas/ProductCardSchema.d.ts +39 -0
- package/dist/schemas/ProductCardSchema.d.ts.map +1 -0
- package/dist/schemas/SafeSpanSchema.d.ts +13 -0
- package/dist/schemas/SafeSpanSchema.d.ts.map +1 -0
- package/dist/schemas/SectionSchema.d.ts +17 -0
- package/dist/schemas/SectionSchema.d.ts.map +1 -0
- package/dist/schemas/SelectInputFieldSchema.d.ts +27 -0
- package/dist/schemas/SelectInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/TextInputFieldSchema.d.ts +22 -0
- package/dist/schemas/TextInputFieldSchema.d.ts.map +1 -0
- package/dist/schemas/ThemeSwitcherSchema.d.ts +19 -0
- package/dist/schemas/ThemeSwitcherSchema.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +33 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/types.d.ts +7 -0
- package/dist/schemas/types.d.ts.map +1 -0
- package/dist/templates/TemplateResolver.d.ts +52 -0
- package/dist/templates/TemplateResolver.d.ts.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/tests/ConsoleWarningTest.d.ts +5 -0
- package/dist/tests/ConsoleWarningTest.d.ts.map +1 -0
- package/dist/tests/StorageKeyTest.d.ts +6 -0
- package/dist/tests/StorageKeyTest.d.ts.map +1 -0
- package/dist/tests/ThemeStorageKeyTest.d.ts +6 -0
- package/dist/tests/ThemeStorageKeyTest.d.ts.map +1 -0
- package/dist/types/CacheProvider.d.ts +18 -0
- package/dist/types/CacheProvider.d.ts.map +1 -0
- package/dist/types/ContentProxy.d.ts +47 -0
- package/dist/types/ContentProxy.d.ts.map +1 -0
- package/dist/types/DataBinding.d.ts +7 -0
- package/dist/types/DataBinding.d.ts.map +1 -0
- package/dist/types/DataProvider.d.ts +7 -0
- package/dist/types/DataProvider.d.ts.map +1 -0
- package/dist/types/DataTypes.d.ts +185 -0
- package/dist/types/DataTypes.d.ts.map +1 -0
- package/dist/types/TemplateProvider.d.ts +10 -0
- package/dist/types/TemplateProvider.d.ts.map +1 -0
- package/dist/types/TemplateResolver.d.ts +23 -0
- package/dist/types/TemplateResolver.d.ts.map +1 -0
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/breakpoints.d.ts +35 -0
- package/dist/utils/breakpoints.d.ts.map +1 -0
- package/dist/utils/customPaletteManager.d.ts +8 -0
- package/dist/utils/customPaletteManager.d.ts.map +1 -0
- package/dist/utils/dimensions.d.ts +34 -0
- package/dist/utils/dimensions.d.ts.map +1 -0
- package/dist/utils/htmlTransform.d.ts +44 -0
- package/dist/utils/htmlTransform.d.ts.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/paletteUtils.d.ts +38 -0
- package/dist/utils/paletteUtils.d.ts.map +1 -0
- package/dist/utils/persistenceUtils.d.ts +31 -0
- package/dist/utils/persistenceUtils.d.ts.map +1 -0
- package/dist/utils/reactUtils.d.ts +24 -0
- package/dist/utils/reactUtils.d.ts.map +1 -0
- package/dist/utils/spacing.d.ts +34 -0
- package/dist/utils/spacing.d.ts.map +1 -0
- package/dist/utils/themePerformanceMonitor.d.ts +32 -0
- package/dist/utils/themePerformanceMonitor.d.ts.map +1 -0
- package/dist/utils/themeUtils.d.ts +27 -0
- package/dist/utils/themeUtils.d.ts.map +1 -0
- package/package.json +141 -0
- package/src/__tests__/components/Logo.test.js +172 -0
- package/src/__tests__/contexts/DataContext.test.js +505 -0
- package/src/__tests__/contexts/PaletteContext.test.js +115 -0
- package/src/__tests__/contexts/ThemeContext.test.js +123 -0
- package/src/__tests__/utils/paletteUtils.test.js +142 -0
- package/src/__tests__/utils/themeUtils.test.js +142 -0
- package/src/components/AccessibilityChecker.tsx +264 -0
- package/src/components/Html.tsx +191 -0
- package/src/components/Logo.css +217 -0
- package/src/components/Logo.tsx +370 -0
- package/src/components/Markdown.tsx +191 -0
- package/src/components/QwickApp.css +257 -0
- package/src/components/QwickApp.tsx +157 -0
- package/src/components/QwickAppsLogo.tsx +77 -0
- package/src/components/ResponsiveMenu.css +416 -0
- package/src/components/ResponsiveMenu.tsx +310 -0
- package/src/components/SafeSpan.tsx +128 -0
- package/src/components/Scaffold.css +541 -0
- package/src/components/Scaffold.tsx +463 -0
- package/src/components/__tests__/Article.test.tsx +419 -0
- package/src/components/__tests__/Button.test.tsx +702 -0
- package/src/components/__tests__/CardListGrid.test.tsx +478 -0
- package/src/components/__tests__/ChoiceInputField.test.tsx +864 -0
- package/src/components/__tests__/Code.test.tsx +595 -0
- package/src/components/__tests__/Content.integration.test.tsx +193 -0
- package/src/components/__tests__/Content.test.tsx +504 -0
- package/src/components/__tests__/CoverImageHeader.test.tsx +456 -0
- package/src/components/__tests__/FeatureCard.integration.test.tsx +384 -0
- package/src/components/__tests__/FeatureGrid.integration.test.tsx +364 -0
- package/src/components/__tests__/FeatureGrid.test.tsx +494 -0
- package/src/components/__tests__/Footer.test.tsx +544 -0
- package/src/components/__tests__/FormBlock.test.tsx +857 -0
- package/src/components/__tests__/HeroBlock.integration.test.tsx +272 -0
- package/src/components/__tests__/HeroBlock.test.tsx +463 -0
- package/src/components/__tests__/Html.test.tsx +174 -0
- package/src/components/__tests__/HtmlInputField.test.tsx +856 -0
- package/src/components/__tests__/Markdown.test.tsx +233 -0
- package/src/components/__tests__/PageBannerHeader.test.tsx +614 -0
- package/src/components/__tests__/PaletteSwitcher.test.tsx +864 -0
- package/src/components/__tests__/ProductCard.test.tsx +377 -0
- package/src/components/__tests__/SafeSpan.integration.test.tsx +123 -0
- package/src/components/__tests__/SafeSpan.simple.test.tsx +65 -0
- package/src/components/__tests__/SafeSpan.test.tsx +388 -0
- package/src/components/__tests__/Section.integration.test.tsx +288 -0
- package/src/components/__tests__/Section.test.tsx +494 -0
- package/src/components/__tests__/SelectInputField.test.tsx +886 -0
- package/src/components/__tests__/TextInputField.test.tsx +749 -0
- package/src/components/__tests__/ThemeSwitcher.test.tsx +777 -0
- package/src/components/blocks/Article.tsx +194 -0
- package/src/components/blocks/CardListGrid.tsx +132 -0
- package/src/components/blocks/Code.tsx +313 -0
- package/src/components/blocks/Content.tsx +265 -0
- package/src/components/blocks/CoverImageHeader.css +17 -0
- package/src/components/blocks/CoverImageHeader.tsx +435 -0
- package/src/components/blocks/FeatureCard.tsx +321 -0
- package/src/components/blocks/FeatureGrid.tsx +147 -0
- package/src/components/blocks/Footer.tsx +343 -0
- package/src/components/blocks/HeroBlock.tsx +280 -0
- package/src/components/blocks/PageBannerHeader.tsx +471 -0
- package/src/components/blocks/ProductCard.tsx +472 -0
- package/src/components/blocks/Section.tsx +209 -0
- package/src/components/blocks/index.ts +37 -0
- package/src/components/buttons/Button.tsx +233 -0
- package/src/components/buttons/PaletteSwitcher.tsx +268 -0
- package/src/components/buttons/ThemeSwitcher.tsx +283 -0
- package/src/components/buttons/index.ts +11 -0
- package/src/components/forms/FormBlock.tsx +291 -0
- package/src/components/forms/index.ts +7 -0
- package/src/components/index.ts +37 -0
- package/src/components/input/ChoiceInputField.tsx +188 -0
- package/src/components/input/HtmlInputField.tsx +326 -0
- package/src/components/input/SelectInputField.tsx +197 -0
- package/src/components/input/TextField.tsx +47 -0
- package/src/components/input/TextInputField.tsx +144 -0
- package/src/components/input/index.ts +17 -0
- package/src/components/layout/GridCell.tsx +46 -0
- package/src/components/layout/GridCellWrapper.tsx +87 -0
- package/src/components/layout/GridLayout.tsx +169 -0
- package/src/components/layout/index.ts +13 -0
- package/src/components/menu/Menu.tsx +0 -0
- package/src/components/menu/MenuItem.tsx +32 -0
- package/src/components/menu/index.ts +6 -0
- package/src/components/pages/FormPage.tsx +108 -0
- package/src/components/pages/Page.css +460 -0
- package/src/components/pages/Page.tsx +345 -0
- package/src/components/pages/index.ts +11 -0
- package/src/contexts/DataContext.tsx +355 -0
- package/src/contexts/DimensionsContext.tsx +154 -0
- package/src/contexts/PaletteContext.tsx +217 -0
- package/src/contexts/QwickAppContext.tsx +95 -0
- package/src/contexts/ThemeContext.tsx +376 -0
- package/src/contexts/index.ts +9 -0
- package/src/hooks/__tests__/useDataBinding.test.tsx.disabled +229 -0
- package/src/hooks/index.ts +11 -0
- package/src/hooks/useBaseProps.ts +267 -0
- package/src/hooks/useDataBinding.ts +77 -0
- package/src/index.ts +23 -0
- package/src/palettes/PaletteAutumn.css +172 -0
- package/src/palettes/PaletteAutumn.ts +16 -0
- package/src/palettes/PaletteCosmic.css +172 -0
- package/src/palettes/PaletteCosmic.ts +16 -0
- package/src/palettes/PaletteDefault.css +178 -0
- package/src/palettes/PaletteDefault.ts +17 -0
- package/src/palettes/PaletteOcean.css +172 -0
- package/src/palettes/PaletteOcean.ts +16 -0
- package/src/palettes/PaletteSpring.css +160 -0
- package/src/palettes/PaletteSpring.ts +16 -0
- package/src/palettes/PaletteWinter.css +172 -0
- package/src/palettes/PaletteWinter.ts +16 -0
- package/src/palettes/index.css +12 -0
- package/src/palettes/index.ts +29 -0
- package/src/schemas/ActionSchema.ts +140 -0
- package/src/schemas/ArticleSchema.ts +35 -0
- package/src/schemas/ButtonSchema.ts +99 -0
- package/src/schemas/CardListGridSchema.ts +102 -0
- package/src/schemas/ChoiceInputFieldSchema.ts +89 -0
- package/src/schemas/CodeSchema.ts +88 -0
- package/src/schemas/ContentSchema.ts +128 -0
- package/src/schemas/CoverImageHeaderSchema.ts +208 -0
- package/src/schemas/FeatureCardSchema.ts +161 -0
- package/src/schemas/FeatureGridSchema.ts +87 -0
- package/src/schemas/FeatureItemSchema.ts +68 -0
- package/src/schemas/FooterItemSchema.ts +57 -0
- package/src/schemas/FooterSchema.ts +116 -0
- package/src/schemas/FooterSectionSchema.ts +50 -0
- package/src/schemas/FormBlockSchema.ts +102 -0
- package/src/schemas/HeaderActionSchema.ts +83 -0
- package/src/schemas/HeroBlockSchema.ts +149 -0
- package/src/schemas/HtmlInputFieldSchema.ts +88 -0
- package/src/schemas/MetadataItemSchema.ts +35 -0
- package/src/schemas/PageBannerHeaderSchema.ts +206 -0
- package/src/schemas/PaletteSwitcherSchema.ts +66 -0
- package/src/schemas/ProductCardSchema.ts +264 -0
- package/src/schemas/SafeSpanSchema.ts +36 -0
- package/src/schemas/SectionSchema.ts +106 -0
- package/src/schemas/SelectInputFieldSchema.ts +137 -0
- package/src/schemas/TextInputFieldSchema.ts +129 -0
- package/src/schemas/ThemeSwitcherSchema.ts +97 -0
- package/src/schemas/__tests__/builders.test.ts +313 -0
- package/src/schemas/index.ts +34 -0
- package/src/setupTests.js +60 -0
- package/src/stories/Article.stories.tsx +549 -0
- package/src/stories/Button.stories.tsx +498 -0
- package/src/stories/CardListGrid.stories.tsx +539 -0
- package/src/stories/ChoiceInputField.stories.tsx +591 -0
- package/src/stories/Code.stories.tsx +711 -0
- package/src/stories/Content.stories.tsx +463 -0
- package/src/stories/CoverImageHeader.stories.tsx +794 -0
- package/src/stories/DataBinding.advanced.stories.tsx +548 -0
- package/src/stories/DataBinding.stories.tsx +452 -0
- package/src/stories/DataProvider.stories.tsx +1361 -0
- package/src/stories/FeatureCard.stories.tsx +642 -0
- package/src/stories/FeatureGrid.stories.tsx +669 -0
- package/src/stories/Footer.stories.tsx +724 -0
- package/src/stories/FormBlock.stories.tsx +834 -0
- package/src/stories/HeroBlock.stories.tsx +442 -0
- package/src/stories/Html.stories.tsx +264 -0
- package/src/stories/HtmlInputField.stories.tsx +558 -0
- package/src/stories/Introduction.stories.tsx +721 -0
- package/src/stories/LayoutBlocks.stories.tsx +382 -0
- package/src/stories/LayoutSystem.stories.tsx +253 -0
- package/src/stories/Logo.stories.tsx +400 -0
- package/src/stories/Markdown.stories.tsx +349 -0
- package/src/stories/Page.stories.tsx +762 -0
- package/src/stories/PageBannerHeader.stories.tsx +949 -0
- package/src/stories/PaletteSwitcher.stories.tsx +156 -0
- package/src/stories/ProductCard.stories.tsx +504 -0
- package/src/stories/QwickApp.stories.tsx +461 -0
- package/src/stories/ResponsiveMenu.stories.tsx +299 -0
- package/src/stories/SafeSpan.stories.tsx +612 -0
- package/src/stories/Section.stories.tsx +613 -0
- package/src/stories/SelectInputField.stories.tsx +605 -0
- package/src/stories/TextInputField.stories.tsx +526 -0
- package/src/stories/ThemeSwitcher.stories.tsx +170 -0
- package/src/stories/form/FormComponents.stories.tsx +588 -0
- package/src/templates/TemplateResolver.ts +156 -0
- package/src/templates/index.ts +6 -0
- package/src/tests/ConsoleWarningTest.tsx +30 -0
- package/src/tests/StorageKeyTest.tsx +110 -0
- package/src/tests/ThemeStorageKeyTest.tsx +114 -0
- package/src/types/CacheProvider.ts +14 -0
- package/src/types/ContentProxy.ts +99 -0
- package/src/types/DataTypes.ts +196 -0
- package/src/types/TemplateProvider.ts +9 -0
- package/src/types/TemplateResolver.ts +26 -0
- package/src/types/index.ts +99 -0
- package/src/utils/__tests__/createDataDrivenComponent.test.tsx.disabled +193 -0
- package/src/utils/__tests__/htmlTransform.test.tsx +255 -0
- package/src/utils/breakpoints.ts +87 -0
- package/src/utils/customPaletteManager.js +214 -0
- package/src/utils/dimensions.ts +147 -0
- package/src/utils/htmlTransform.tsx +323 -0
- package/src/utils/index.ts +16 -0
- package/src/utils/logger.ts +28 -0
- package/src/utils/paletteUtils.ts +78 -0
- package/src/utils/persistenceUtils.ts +107 -0
- package/src/utils/reactUtils.tsx +37 -0
- package/src/utils/spacing.ts +155 -0
- package/src/utils/themePerformanceMonitor.js +113 -0
- package/src/utils/themeUtils.ts +67 -0
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChoiceInputField Component Stories - Dynamic options management with data binding support
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Box, Typography, Alert } from '@mui/material';
|
|
8
|
+
import { JsonDataProvider } from '@qwickapps/schema';
|
|
9
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
10
|
+
import { Code } from '../components/blocks';
|
|
11
|
+
import ChoiceInputField from '../components/input/ChoiceInputField';
|
|
12
|
+
import QwickApp from '../components/QwickApp';
|
|
13
|
+
import { useState } from 'react';
|
|
14
|
+
|
|
15
|
+
// Sample choice input field data for different use cases
|
|
16
|
+
const sampleCmsData = {
|
|
17
|
+
'choiceInputFields': {
|
|
18
|
+
'poll-question': {
|
|
19
|
+
label: 'Poll Options',
|
|
20
|
+
options: [
|
|
21
|
+
'Strongly Agree',
|
|
22
|
+
'Agree',
|
|
23
|
+
'Neutral',
|
|
24
|
+
'Disagree',
|
|
25
|
+
'Strongly Disagree'
|
|
26
|
+
],
|
|
27
|
+
optionLabelPrefix: 'Choice',
|
|
28
|
+
placeholder: 'Enter poll option...',
|
|
29
|
+
addButtonText: 'Add Poll Option',
|
|
30
|
+
rows: 1
|
|
31
|
+
},
|
|
32
|
+
'quiz-answers': {
|
|
33
|
+
label: 'Quiz Answer Options',
|
|
34
|
+
options: [
|
|
35
|
+
'<b>JavaScript</b> - A programming language',
|
|
36
|
+
'<i>Python</i> - Another programming language',
|
|
37
|
+
'<code>HTML</code> - Markup language',
|
|
38
|
+
'<u>CSS</u> - Styling language'
|
|
39
|
+
],
|
|
40
|
+
optionLabelPrefix: 'Answer',
|
|
41
|
+
placeholder: 'Enter quiz answer with HTML formatting...',
|
|
42
|
+
addButtonText: 'Add Answer',
|
|
43
|
+
rows: 2
|
|
44
|
+
},
|
|
45
|
+
'feature-requests': {
|
|
46
|
+
label: 'Feature Request Categories',
|
|
47
|
+
options: [
|
|
48
|
+
'<b>🚀 Performance</b><br/>Speed and optimization improvements',
|
|
49
|
+
'<b>🎨 UI/UX</b><br/>Interface and experience enhancements',
|
|
50
|
+
'<b>⚙️ Functionality</b><br/>New features and capabilities',
|
|
51
|
+
'<b>🔧 Bug Fixes</b><br/>Issues and error corrections'
|
|
52
|
+
],
|
|
53
|
+
optionLabelPrefix: 'Category',
|
|
54
|
+
placeholder: 'Describe feature category with HTML...',
|
|
55
|
+
addButtonText: 'Add Category',
|
|
56
|
+
rows: 3
|
|
57
|
+
},
|
|
58
|
+
'product-benefits': {
|
|
59
|
+
label: 'Product Benefits',
|
|
60
|
+
options: [
|
|
61
|
+
'⚡ <b>Lightning Fast</b> - Optimized for speed',
|
|
62
|
+
'🔒 <i>Secure by Design</i> - Built with security first',
|
|
63
|
+
'📱 <u>Mobile Responsive</u> - Works on all devices'
|
|
64
|
+
],
|
|
65
|
+
optionLabelPrefix: 'Benefit',
|
|
66
|
+
placeholder: 'Describe product benefit...',
|
|
67
|
+
addButtonText: 'Add Benefit',
|
|
68
|
+
rows: 2
|
|
69
|
+
},
|
|
70
|
+
'survey-responses': {
|
|
71
|
+
label: 'Survey Response Options',
|
|
72
|
+
options: [
|
|
73
|
+
'Excellent',
|
|
74
|
+
'Very Good',
|
|
75
|
+
'Good',
|
|
76
|
+
'Fair',
|
|
77
|
+
'Poor'
|
|
78
|
+
],
|
|
79
|
+
optionLabelPrefix: 'Response',
|
|
80
|
+
placeholder: 'Enter response option...',
|
|
81
|
+
addButtonText: 'Add Response',
|
|
82
|
+
rows: 1
|
|
83
|
+
},
|
|
84
|
+
'faq-categories': {
|
|
85
|
+
label: 'FAQ Categories',
|
|
86
|
+
options: [
|
|
87
|
+
'<b>Getting Started</b><br/>Basic setup and onboarding questions',
|
|
88
|
+
'<b>Account Management</b><br/>Profile, billing, and subscription questions',
|
|
89
|
+
'<b>Technical Support</b><br/>Technical issues and troubleshooting',
|
|
90
|
+
'<b>Features & Usage</b><br/>How to use specific features'
|
|
91
|
+
],
|
|
92
|
+
optionLabelPrefix: 'Category',
|
|
93
|
+
placeholder: 'Define FAQ category with description...',
|
|
94
|
+
addButtonText: 'Add FAQ Category',
|
|
95
|
+
rows: 3
|
|
96
|
+
},
|
|
97
|
+
'menu-items': {
|
|
98
|
+
label: 'Navigation Menu Items',
|
|
99
|
+
options: [
|
|
100
|
+
'Home',
|
|
101
|
+
'About Us',
|
|
102
|
+
'Services',
|
|
103
|
+
'Contact'
|
|
104
|
+
],
|
|
105
|
+
optionLabelPrefix: 'Menu Item',
|
|
106
|
+
placeholder: 'Enter menu item name...',
|
|
107
|
+
addButtonText: 'Add Menu Item',
|
|
108
|
+
rows: 1
|
|
109
|
+
},
|
|
110
|
+
'pricing-tiers': {
|
|
111
|
+
label: 'Pricing Tier Options',
|
|
112
|
+
options: [
|
|
113
|
+
'<b>💎 Premium</b> - $99/month<br/><i>All features included</i>',
|
|
114
|
+
'<b>⚡ Pro</b> - $49/month<br/><i>Most popular plan</i>',
|
|
115
|
+
'<b>🌟 Starter</b> - $19/month<br/><i>Perfect for beginners</i>'
|
|
116
|
+
],
|
|
117
|
+
optionLabelPrefix: 'Tier',
|
|
118
|
+
placeholder: 'Define pricing tier with details...',
|
|
119
|
+
addButtonText: 'Add Pricing Tier',
|
|
120
|
+
rows: 3
|
|
121
|
+
},
|
|
122
|
+
'team-roles': {
|
|
123
|
+
label: 'Team Role Definitions',
|
|
124
|
+
options: [
|
|
125
|
+
'<b>👑 Project Manager</b><br/>Oversees project execution and team coordination',
|
|
126
|
+
'<b>💻 Senior Developer</b><br/>Leads technical development and code reviews'
|
|
127
|
+
],
|
|
128
|
+
optionLabelPrefix: 'Role',
|
|
129
|
+
placeholder: 'Define team role and responsibilities...',
|
|
130
|
+
addButtonText: 'Add Team Role',
|
|
131
|
+
rows: 3
|
|
132
|
+
},
|
|
133
|
+
'basic-options': {
|
|
134
|
+
label: 'Basic Options List',
|
|
135
|
+
options: [
|
|
136
|
+
'Option A',
|
|
137
|
+
'Option B'
|
|
138
|
+
],
|
|
139
|
+
optionLabelPrefix: 'Option',
|
|
140
|
+
placeholder: 'Enter option...',
|
|
141
|
+
addButtonText: 'Add Option',
|
|
142
|
+
rows: 1
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
148
|
+
|
|
149
|
+
const meta = {
|
|
150
|
+
title: 'Forms/ChoiceInputField',
|
|
151
|
+
component: ChoiceInputField,
|
|
152
|
+
parameters: {
|
|
153
|
+
layout: 'padded',
|
|
154
|
+
docs: {
|
|
155
|
+
description: {
|
|
156
|
+
component: `ChoiceInputField is a dynamic options management component with HTML formatting capabilities and data binding support for creating interactive choice lists.
|
|
157
|
+
|
|
158
|
+
**Key Features:**
|
|
159
|
+
- **Dynamic Options**: Add, edit, and manage multiple option inputs
|
|
160
|
+
- **HTML Formatting**: Each option supports rich HTML formatting through HtmlInputField
|
|
161
|
+
- **Flexible Configuration**: Customizable labels, placeholders, and button text
|
|
162
|
+
- **Data Binding**: Full CMS integration through dataSource prop
|
|
163
|
+
- **Interactive Management**: Built-in "Add Option" functionality for dynamic lists
|
|
164
|
+
- **Theme Integration**: Automatically uses QwickApp theme styling
|
|
165
|
+
- **Base Props**: Supports grid behavior and consistent styling patterns
|
|
166
|
+
- **Accessibility**: Complete ARIA support and keyboard navigation
|
|
167
|
+
|
|
168
|
+
**Perfect For:**
|
|
169
|
+
- Poll and survey question options
|
|
170
|
+
- Quiz and test answer choices
|
|
171
|
+
- Product feature lists and benefits
|
|
172
|
+
- FAQ category management
|
|
173
|
+
- Menu and navigation item creation
|
|
174
|
+
- Any dynamic list of formatted options`,
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
tags: ['autodocs'],
|
|
179
|
+
} satisfies Meta<typeof ChoiceInputField>;
|
|
180
|
+
|
|
181
|
+
export default meta;
|
|
182
|
+
type Story = StoryObj<typeof ChoiceInputField>;
|
|
183
|
+
|
|
184
|
+
// Interactive example component
|
|
185
|
+
function InteractiveChoiceExample({
|
|
186
|
+
initialOptions = ['Option 1', 'Option 2'],
|
|
187
|
+
label = 'Interactive Options',
|
|
188
|
+
optionLabelPrefix = 'Option'
|
|
189
|
+
}: {
|
|
190
|
+
initialOptions?: string[];
|
|
191
|
+
label?: string;
|
|
192
|
+
optionLabelPrefix?: string;
|
|
193
|
+
}) {
|
|
194
|
+
const [options, setOptions] = useState<string[]>(initialOptions);
|
|
195
|
+
|
|
196
|
+
const handleOptionChange = (optionIndex: number, value: string) => {
|
|
197
|
+
const newOptions = [...options];
|
|
198
|
+
newOptions[optionIndex] = value;
|
|
199
|
+
setOptions(newOptions);
|
|
200
|
+
console.log('Option changed:', { optionIndex, value, allOptions: newOptions });
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
const handleAddOption = () => {
|
|
204
|
+
setOptions([...options, '']);
|
|
205
|
+
console.log('Added new option, total:', options.length + 1);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
return (
|
|
209
|
+
<ChoiceInputField
|
|
210
|
+
label={label}
|
|
211
|
+
options={options}
|
|
212
|
+
optionLabelPrefix={optionLabelPrefix}
|
|
213
|
+
onOptionChange={handleOptionChange}
|
|
214
|
+
onAddOption={handleAddOption}
|
|
215
|
+
placeholder="Enter option text. HTML formatting supported."
|
|
216
|
+
/>
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Traditional Usage Examples
|
|
221
|
+
export const BasicChoices: Story = {
|
|
222
|
+
render: () => (
|
|
223
|
+
<QwickApp appId="choice-input-basic" appName='Basic Choice Input'>
|
|
224
|
+
<InteractiveChoiceExample
|
|
225
|
+
initialOptions={['First Option', 'Second Option']}
|
|
226
|
+
label="Basic Options List"
|
|
227
|
+
/>
|
|
228
|
+
</QwickApp>
|
|
229
|
+
),
|
|
230
|
+
parameters: {
|
|
231
|
+
docs: {
|
|
232
|
+
description: {
|
|
233
|
+
story: 'Basic choice input field with editable options and add functionality.',
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
export const PollOptions: Story = {
|
|
240
|
+
render: () => (
|
|
241
|
+
<QwickApp appId="choice-input-poll" appName='Poll Options'>
|
|
242
|
+
<InteractiveChoiceExample
|
|
243
|
+
initialOptions={[
|
|
244
|
+
'Strongly Agree',
|
|
245
|
+
'Agree',
|
|
246
|
+
'Neutral',
|
|
247
|
+
'Disagree',
|
|
248
|
+
'Strongly Disagree'
|
|
249
|
+
]}
|
|
250
|
+
label="Poll Question Options"
|
|
251
|
+
optionLabelPrefix="Choice"
|
|
252
|
+
/>
|
|
253
|
+
</QwickApp>
|
|
254
|
+
),
|
|
255
|
+
parameters: {
|
|
256
|
+
docs: {
|
|
257
|
+
description: {
|
|
258
|
+
story: 'Choice input configured for poll question options with standard survey responses.',
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export const HtmlFormattedOptions: Story = {
|
|
265
|
+
render: () => (
|
|
266
|
+
<QwickApp appId="choice-input-html" appName='HTML Formatted Options'>
|
|
267
|
+
<InteractiveChoiceExample
|
|
268
|
+
initialOptions={[
|
|
269
|
+
'<b>JavaScript</b> - A programming language',
|
|
270
|
+
'<i>Python</i> - Another programming language',
|
|
271
|
+
'<code>HTML</code> - Markup language'
|
|
272
|
+
]}
|
|
273
|
+
label="Quiz Answer Options"
|
|
274
|
+
optionLabelPrefix="Answer"
|
|
275
|
+
/>
|
|
276
|
+
</QwickApp>
|
|
277
|
+
),
|
|
278
|
+
parameters: {
|
|
279
|
+
docs: {
|
|
280
|
+
description: {
|
|
281
|
+
story: 'Choice input with HTML-formatted options for rich content like quiz answers.',
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
export const ProductFeatures: Story = {
|
|
288
|
+
render: () => (
|
|
289
|
+
<QwickApp appId="choice-input-features" appName='Product Features'>
|
|
290
|
+
<InteractiveChoiceExample
|
|
291
|
+
initialOptions={[
|
|
292
|
+
'⚡ <b>Lightning Fast</b> - Optimized for speed',
|
|
293
|
+
'🔒 <i>Secure by Design</i> - Built with security first',
|
|
294
|
+
'📱 <u>Mobile Responsive</u> - Works on all devices'
|
|
295
|
+
]}
|
|
296
|
+
label="Product Benefits"
|
|
297
|
+
optionLabelPrefix="Benefit"
|
|
298
|
+
/>
|
|
299
|
+
</QwickApp>
|
|
300
|
+
),
|
|
301
|
+
parameters: {
|
|
302
|
+
docs: {
|
|
303
|
+
description: {
|
|
304
|
+
story: 'Choice input for managing product features and benefits with icons and formatting.',
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
export const StaticDisplay: Story = {
|
|
311
|
+
render: () => (
|
|
312
|
+
<QwickApp appId="choice-input-static" appName='Static Choice Display'>
|
|
313
|
+
<ChoiceInputField
|
|
314
|
+
label="Read-only Options"
|
|
315
|
+
options={[
|
|
316
|
+
'Option 1 (read-only)',
|
|
317
|
+
'Option 2 (read-only)',
|
|
318
|
+
'Option 3 (read-only)'
|
|
319
|
+
]}
|
|
320
|
+
optionLabelPrefix="Item"
|
|
321
|
+
disabled={true}
|
|
322
|
+
// No onAddOption or onOptionChange = static display
|
|
323
|
+
/>
|
|
324
|
+
</QwickApp>
|
|
325
|
+
),
|
|
326
|
+
parameters: {
|
|
327
|
+
docs: {
|
|
328
|
+
description: {
|
|
329
|
+
story: 'Static choice input display without edit functionality for read-only scenarios.',
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
// Data Binding Examples
|
|
336
|
+
export const DataBindingBasic: Story = {
|
|
337
|
+
render: () => (
|
|
338
|
+
<QwickApp appId="choice-input-data-binding" appName='ChoiceInputField Data Binding' dataSource={{ dataProvider }}>
|
|
339
|
+
<Box>
|
|
340
|
+
|
|
341
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
342
|
+
<Typography variant="h5" gutterBottom>📊 Data-Driven Choice Options</Typography>
|
|
343
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
344
|
+
ChoiceInputField components can be completely driven by CMS data, loading options and configuration from your data source.
|
|
345
|
+
</Typography>
|
|
346
|
+
|
|
347
|
+
<Code title="Usage" language="tsx">{`<ChoiceInputField dataSource="choiceInputFields.poll-question" />`}</Code>
|
|
348
|
+
|
|
349
|
+
<Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.choiceInputFields['poll-question'], null, 2)}</Code>
|
|
350
|
+
</Box>
|
|
351
|
+
|
|
352
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
353
|
+
|
|
354
|
+
</Box>
|
|
355
|
+
</QwickApp>
|
|
356
|
+
),
|
|
357
|
+
parameters: {
|
|
358
|
+
docs: {
|
|
359
|
+
description: {
|
|
360
|
+
story: 'ChoiceInputField with data binding - options and configuration resolved from CMS data through dataSource.',
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
export const DataBindingAdvanced: Story = {
|
|
367
|
+
render: () => (
|
|
368
|
+
<QwickApp appId="choice-input-data-advanced" appName='Advanced ChoiceInputField Data Binding' dataSource={{ dataProvider }}>
|
|
369
|
+
<Box>
|
|
370
|
+
|
|
371
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
372
|
+
<Typography variant="h5" gutterBottom>🎯 Multiple Choice Types</Typography>
|
|
373
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
374
|
+
Different ChoiceInputField instances can load different option sets and configurations from separate data sources.
|
|
375
|
+
</Typography>
|
|
376
|
+
</Box>
|
|
377
|
+
|
|
378
|
+
{/* Survey & Polls */}
|
|
379
|
+
<Box sx={{ mb: 4 }}>
|
|
380
|
+
<Typography variant="h4" gutterBottom>Surveys & Polls</Typography>
|
|
381
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
382
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
383
|
+
<ChoiceInputField dataSource="choiceInputFields.survey-responses" />
|
|
384
|
+
</Box>
|
|
385
|
+
</Box>
|
|
386
|
+
|
|
387
|
+
{/* Content Management */}
|
|
388
|
+
<Box sx={{ mb: 4 }}>
|
|
389
|
+
<Typography variant="h4" gutterBottom>Content & Learning</Typography>
|
|
390
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
391
|
+
<ChoiceInputField dataSource="choiceInputFields.quiz-answers" />
|
|
392
|
+
<ChoiceInputField dataSource="choiceInputFields.faq-categories" />
|
|
393
|
+
</Box>
|
|
394
|
+
</Box>
|
|
395
|
+
|
|
396
|
+
{/* Business Configuration */}
|
|
397
|
+
<Box sx={{ mb: 4 }}>
|
|
398
|
+
<Typography variant="h4" gutterBottom>Business & Product</Typography>
|
|
399
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
400
|
+
<ChoiceInputField dataSource="choiceInputFields.feature-requests" />
|
|
401
|
+
<ChoiceInputField dataSource="choiceInputFields.pricing-tiers" />
|
|
402
|
+
</Box>
|
|
403
|
+
</Box>
|
|
404
|
+
|
|
405
|
+
</Box>
|
|
406
|
+
</QwickApp>
|
|
407
|
+
),
|
|
408
|
+
parameters: {
|
|
409
|
+
docs: {
|
|
410
|
+
description: {
|
|
411
|
+
story: 'Advanced data binding with multiple choice types showcasing different configurations and use cases.',
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
},
|
|
415
|
+
};
|
|
416
|
+
|
|
417
|
+
export const DataBindingWithFallback: Story = {
|
|
418
|
+
render: () => (
|
|
419
|
+
<QwickApp appId="choice-input-fallback" appName='ChoiceInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
|
|
420
|
+
<Box>
|
|
421
|
+
|
|
422
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
423
|
+
<Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
|
|
424
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
425
|
+
ChoiceInputField components gracefully handle missing data sources with fallback configurations.
|
|
426
|
+
</Typography>
|
|
427
|
+
|
|
428
|
+
<Code title="Fallback Usage" language="tsx">{`<ChoiceInputField
|
|
429
|
+
dataSource="nonexistent.field"
|
|
430
|
+
label="Fallback Options"
|
|
431
|
+
options={['Fallback 1', 'Fallback 2']}
|
|
432
|
+
optionLabelPrefix="Option"
|
|
433
|
+
/>`}</Code>
|
|
434
|
+
</Box>
|
|
435
|
+
|
|
436
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
|
|
437
|
+
<Box>
|
|
438
|
+
<Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
|
|
439
|
+
<ChoiceInputField
|
|
440
|
+
dataSource="nonexistent.field"
|
|
441
|
+
label="Fallback Options"
|
|
442
|
+
options={['Fallback Option 1', 'Fallback Option 2']}
|
|
443
|
+
optionLabelPrefix="Option"
|
|
444
|
+
/>
|
|
445
|
+
</Box>
|
|
446
|
+
<Box>
|
|
447
|
+
<Typography variant="h6" gutterBottom>Valid Data Source</Typography>
|
|
448
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
449
|
+
</Box>
|
|
450
|
+
</Box>
|
|
451
|
+
|
|
452
|
+
</Box>
|
|
453
|
+
</QwickApp>
|
|
454
|
+
),
|
|
455
|
+
parameters: {
|
|
456
|
+
docs: {
|
|
457
|
+
description: {
|
|
458
|
+
story: 'ChoiceInputField with fallback options when dataSource is missing or unavailable.',
|
|
459
|
+
},
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
export const RealWorldExample: Story = {
|
|
465
|
+
render: () => (
|
|
466
|
+
<QwickApp appId="choice-input-real-world" appName='Real World ChoiceInputField Example' dataSource={{ dataProvider }}>
|
|
467
|
+
<Box>
|
|
468
|
+
|
|
469
|
+
{/* Survey Platform */}
|
|
470
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
|
|
471
|
+
<Typography variant="h3" gutterBottom>Survey & Polling Platform</Typography>
|
|
472
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
473
|
+
Create comprehensive surveys and polls with customizable response options
|
|
474
|
+
</Typography>
|
|
475
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
|
|
476
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
477
|
+
<ChoiceInputField dataSource="choiceInputFields.survey-responses" />
|
|
478
|
+
</Box>
|
|
479
|
+
</Box>
|
|
480
|
+
|
|
481
|
+
{/* E-Learning System */}
|
|
482
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
|
|
483
|
+
<Typography variant="h3" gutterBottom>E-Learning & Assessment</Typography>
|
|
484
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
|
|
485
|
+
Build interactive quizzes and organize educational content effectively
|
|
486
|
+
</Typography>
|
|
487
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
|
|
488
|
+
<ChoiceInputField dataSource="choiceInputFields.quiz-answers" />
|
|
489
|
+
<ChoiceInputField dataSource="choiceInputFields.faq-categories" />
|
|
490
|
+
</Box>
|
|
491
|
+
</Box>
|
|
492
|
+
|
|
493
|
+
{/* Business Management */}
|
|
494
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
|
|
495
|
+
<Typography variant="h3" gutterBottom>Business Configuration</Typography>
|
|
496
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
497
|
+
Manage business features, pricing, and team structures dynamically
|
|
498
|
+
</Typography>
|
|
499
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
|
|
500
|
+
<ChoiceInputField dataSource="choiceInputFields.feature-requests" />
|
|
501
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
|
|
502
|
+
<ChoiceInputField dataSource="choiceInputFields.pricing-tiers" />
|
|
503
|
+
<ChoiceInputField dataSource="choiceInputFields.team-roles" />
|
|
504
|
+
</Box>
|
|
505
|
+
</Box>
|
|
506
|
+
</Box>
|
|
507
|
+
|
|
508
|
+
{/* Website Management */}
|
|
509
|
+
<Box sx={{ p: 4, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 2 }}>
|
|
510
|
+
<Typography variant="h3" gutterBottom>Website & Content Management</Typography>
|
|
511
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
|
|
512
|
+
Manage website navigation, product features, and content categories
|
|
513
|
+
</Typography>
|
|
514
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4, maxWidth: 1000 }}>
|
|
515
|
+
<ChoiceInputField dataSource="choiceInputFields.menu-items" />
|
|
516
|
+
<ChoiceInputField dataSource="choiceInputFields.product-benefits" />
|
|
517
|
+
</Box>
|
|
518
|
+
</Box>
|
|
519
|
+
|
|
520
|
+
</Box>
|
|
521
|
+
</QwickApp>
|
|
522
|
+
),
|
|
523
|
+
parameters: {
|
|
524
|
+
docs: {
|
|
525
|
+
description: {
|
|
526
|
+
story: 'Real-world example showing ChoiceInputField in various contexts: surveys, e-learning, business management, and website administration.',
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
},
|
|
530
|
+
};
|
|
531
|
+
|
|
532
|
+
export const InteractiveDemo: Story = {
|
|
533
|
+
render: () => (
|
|
534
|
+
<QwickApp appId="choice-input-interactive" appName='Interactive ChoiceInputField Demo'>
|
|
535
|
+
<Box>
|
|
536
|
+
|
|
537
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
538
|
+
<Typography variant="h5" gutterBottom>🎮 Interactive Demo</Typography>
|
|
539
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
540
|
+
Try editing the options below. You can modify existing options or add new ones using the "Add Option" button.
|
|
541
|
+
</Typography>
|
|
542
|
+
|
|
543
|
+
<Alert severity="info" sx={{ mb: 3 }}>
|
|
544
|
+
<Typography variant="body2">
|
|
545
|
+
Each option supports HTML formatting. Try using <code><b></code>, <code><i></code>, <code><u></code>, or <code><code></code> tags!
|
|
546
|
+
</Typography>
|
|
547
|
+
</Alert>
|
|
548
|
+
</Box>
|
|
549
|
+
|
|
550
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
551
|
+
<InteractiveChoiceExample
|
|
552
|
+
initialOptions={[
|
|
553
|
+
'<b>Excellent</b> - Outstanding quality',
|
|
554
|
+
'<i>Very Good</i> - Above expectations',
|
|
555
|
+
'Good - Meets expectations'
|
|
556
|
+
]}
|
|
557
|
+
label="Customer Satisfaction Survey"
|
|
558
|
+
optionLabelPrefix="Rating"
|
|
559
|
+
/>
|
|
560
|
+
|
|
561
|
+
<InteractiveChoiceExample
|
|
562
|
+
initialOptions={[
|
|
563
|
+
'🎯 <b>Marketing</b>',
|
|
564
|
+
'💻 <b>Development</b>',
|
|
565
|
+
'🎨 <b>Design</b>'
|
|
566
|
+
]}
|
|
567
|
+
label="Department Selection"
|
|
568
|
+
optionLabelPrefix="Department"
|
|
569
|
+
/>
|
|
570
|
+
|
|
571
|
+
<InteractiveChoiceExample
|
|
572
|
+
initialOptions={[
|
|
573
|
+
'<code>React</code> - UI Library',
|
|
574
|
+
'<code>TypeScript</code> - Type Safety'
|
|
575
|
+
]}
|
|
576
|
+
label="Technology Stack"
|
|
577
|
+
optionLabelPrefix="Technology"
|
|
578
|
+
/>
|
|
579
|
+
</Box>
|
|
580
|
+
|
|
581
|
+
</Box>
|
|
582
|
+
</QwickApp>
|
|
583
|
+
),
|
|
584
|
+
parameters: {
|
|
585
|
+
docs: {
|
|
586
|
+
description: {
|
|
587
|
+
story: 'Interactive demonstration of ChoiceInputField functionality with real-time editing and HTML formatting.',
|
|
588
|
+
},
|
|
589
|
+
},
|
|
590
|
+
},
|
|
591
|
+
};
|