@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,642 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeatureCard Component Stories - Individual feature display cards with data binding support
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Box, Typography } from '@mui/material';
|
|
8
|
+
import { JsonDataProvider } from '@qwickapps/schema';
|
|
9
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
10
|
+
import QwickApp from '../components/QwickApp';
|
|
11
|
+
import { Code } from '../components/blocks';
|
|
12
|
+
import FeatureCard from '../components/blocks/FeatureCard';
|
|
13
|
+
import { DataProvider } from '../contexts/DataContext';
|
|
14
|
+
|
|
15
|
+
// Sample CMS data for data binding stories
|
|
16
|
+
const sampleCmsData = {
|
|
17
|
+
'features': {
|
|
18
|
+
'lightning-fast': {
|
|
19
|
+
feature: {
|
|
20
|
+
id: 'lightning-fast',
|
|
21
|
+
title: '⚡ Lightning Fast Performance',
|
|
22
|
+
description: 'Optimized for speed with sub-millisecond response times and efficient memory usage for smooth user experiences',
|
|
23
|
+
icon: '⚡'
|
|
24
|
+
},
|
|
25
|
+
variant: 'standard',
|
|
26
|
+
elevation: 3
|
|
27
|
+
},
|
|
28
|
+
'benefits-list': {
|
|
29
|
+
features: [
|
|
30
|
+
'Zero configuration setup required',
|
|
31
|
+
'Full TypeScript support included',
|
|
32
|
+
'Hot module reloading for development',
|
|
33
|
+
'Built-in testing framework integration',
|
|
34
|
+
'Production-ready build optimization',
|
|
35
|
+
'Comprehensive documentation and examples'
|
|
36
|
+
],
|
|
37
|
+
variant: 'list',
|
|
38
|
+
title: 'Key Benefits',
|
|
39
|
+
elevation: 1
|
|
40
|
+
},
|
|
41
|
+
'developer-experience': {
|
|
42
|
+
feature: {
|
|
43
|
+
id: 'developer-experience',
|
|
44
|
+
title: '🎯 Exceptional Developer Experience',
|
|
45
|
+
description: 'Intuitive APIs, comprehensive documentation, and powerful tooling make development efficient and enjoyable',
|
|
46
|
+
icon: '🎯'
|
|
47
|
+
},
|
|
48
|
+
actions: [
|
|
49
|
+
{
|
|
50
|
+
id: 'learn-more',
|
|
51
|
+
label: 'Learn More',
|
|
52
|
+
variant: 'contained',
|
|
53
|
+
color: 'primary'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'try-demo',
|
|
57
|
+
label: 'Try Demo',
|
|
58
|
+
variant: 'outlined',
|
|
59
|
+
color: 'secondary'
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
variant: 'standard',
|
|
63
|
+
elevation: 4
|
|
64
|
+
},
|
|
65
|
+
'enterprise-benefits': {
|
|
66
|
+
features: [
|
|
67
|
+
'Enterprise-grade security and compliance',
|
|
68
|
+
'Scalable architecture for high-traffic applications',
|
|
69
|
+
'Modern React patterns and best practices',
|
|
70
|
+
'Comprehensive testing and quality assurance',
|
|
71
|
+
'24/7 professional support and maintenance'
|
|
72
|
+
],
|
|
73
|
+
variant: 'list',
|
|
74
|
+
title: 'Enterprise Features',
|
|
75
|
+
elevation: 0
|
|
76
|
+
},
|
|
77
|
+
'cutting-edge': {
|
|
78
|
+
feature: {
|
|
79
|
+
id: 'cutting-edge',
|
|
80
|
+
title: '🚀 Cutting-Edge Technology',
|
|
81
|
+
description: 'Built with the latest React features, modern tooling, and industry best practices to ensure your application stays current',
|
|
82
|
+
icon: '🚀'
|
|
83
|
+
},
|
|
84
|
+
variant: 'standard',
|
|
85
|
+
elevation: 6
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
91
|
+
|
|
92
|
+
const meta = {
|
|
93
|
+
title: 'Blocks/FeatureCard',
|
|
94
|
+
component: FeatureCard,
|
|
95
|
+
parameters: {
|
|
96
|
+
layout: 'padded',
|
|
97
|
+
docs: {
|
|
98
|
+
description: {
|
|
99
|
+
component: `FeatureCard is a flexible card component supporting both individual feature display and simple feature lists with data binding through dataSource.
|
|
100
|
+
|
|
101
|
+
**Key Features:**
|
|
102
|
+
- **Dual Variants**: Standard cards with rich content or simple list format
|
|
103
|
+
- **Interactive Elements**: Hover effects, click handlers, and custom actions
|
|
104
|
+
- **Flexible Content**: Icons, titles, descriptions, and action buttons
|
|
105
|
+
- **Elevation Control**: Material-UI Paper elevation for visual hierarchy
|
|
106
|
+
- **Data Binding**: Full CMS integration with JSON parsing support
|
|
107
|
+
- **Theme Integration**: Consistent styling with Material-UI theme system
|
|
108
|
+
|
|
109
|
+
**Perfect For:**
|
|
110
|
+
- Individual feature highlights and benefit showcases
|
|
111
|
+
- Feature comparison cards and capability displays
|
|
112
|
+
- Simple feature lists and bullet point summaries
|
|
113
|
+
- Interactive elements with call-to-action buttons
|
|
114
|
+
- Product cards and service offerings`,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
tags: ['autodocs'],
|
|
119
|
+
} satisfies Meta<typeof FeatureCard>;
|
|
120
|
+
|
|
121
|
+
export default meta;
|
|
122
|
+
type Story = StoryObj<typeof meta>;
|
|
123
|
+
|
|
124
|
+
// Sample features for traditional examples
|
|
125
|
+
const sampleFeature = {
|
|
126
|
+
id: 'sample-feature',
|
|
127
|
+
title: '🔧 Advanced Tooling',
|
|
128
|
+
description: 'Professional development tools and utilities that streamline your workflow and boost productivity',
|
|
129
|
+
icon: '🔧'
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const sampleFeatures = [
|
|
133
|
+
'Comprehensive component library',
|
|
134
|
+
'Advanced theming capabilities',
|
|
135
|
+
'Built-in accessibility support',
|
|
136
|
+
'Performance optimization tools',
|
|
137
|
+
'Responsive design system'
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
// Traditional Usage Examples
|
|
141
|
+
export const StandardFeatureCard: Story = {
|
|
142
|
+
render: () => (
|
|
143
|
+
<QwickApp appId="featurecard-standard" appName='Standard FeatureCard'>
|
|
144
|
+
<FeatureCard
|
|
145
|
+
feature={sampleFeature}
|
|
146
|
+
variant="standard"
|
|
147
|
+
elevation={2}
|
|
148
|
+
/>
|
|
149
|
+
</QwickApp>
|
|
150
|
+
),
|
|
151
|
+
parameters: {
|
|
152
|
+
docs: {
|
|
153
|
+
description: {
|
|
154
|
+
story: 'Standard FeatureCard with traditional props - feature object, variant, and elevation.',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export const ListFeatureCard: Story = {
|
|
161
|
+
render: () => (
|
|
162
|
+
<QwickApp appId="featurecard-list" appName='List FeatureCard'>
|
|
163
|
+
<FeatureCard
|
|
164
|
+
features={sampleFeatures}
|
|
165
|
+
variant="list"
|
|
166
|
+
title="Framework Features"
|
|
167
|
+
elevation={1}
|
|
168
|
+
/>
|
|
169
|
+
</QwickApp>
|
|
170
|
+
),
|
|
171
|
+
parameters: {
|
|
172
|
+
docs: {
|
|
173
|
+
description: {
|
|
174
|
+
story: 'List FeatureCard variant showing simple bullet-point features.',
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export const ElevationVariants: Story = {
|
|
181
|
+
render: () => (
|
|
182
|
+
<QwickApp appId="featurecard-elevation" appName='FeatureCard Elevation Variants'>
|
|
183
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 3, mb: 4 }}>
|
|
184
|
+
|
|
185
|
+
<Box>
|
|
186
|
+
<Typography variant="h6" gutterBottom>Elevation 0 (Flat)</Typography>
|
|
187
|
+
<FeatureCard
|
|
188
|
+
feature={{
|
|
189
|
+
id: 'flat-feature',
|
|
190
|
+
title: '📋 Flat Design',
|
|
191
|
+
description: 'Clean, minimal appearance with no shadow depth',
|
|
192
|
+
icon: '📋'
|
|
193
|
+
}}
|
|
194
|
+
elevation={0}
|
|
195
|
+
/>
|
|
196
|
+
</Box>
|
|
197
|
+
|
|
198
|
+
<Box>
|
|
199
|
+
<Typography variant="h6" gutterBottom>Elevation 2 (Default)</Typography>
|
|
200
|
+
<FeatureCard
|
|
201
|
+
feature={{
|
|
202
|
+
id: 'default-feature',
|
|
203
|
+
title: '📄 Standard Card',
|
|
204
|
+
description: 'Balanced elevation for most use cases',
|
|
205
|
+
icon: '📄'
|
|
206
|
+
}}
|
|
207
|
+
elevation={2}
|
|
208
|
+
/>
|
|
209
|
+
</Box>
|
|
210
|
+
|
|
211
|
+
<Box>
|
|
212
|
+
<Typography variant="h6" gutterBottom>Elevation 4 (Raised)</Typography>
|
|
213
|
+
<FeatureCard
|
|
214
|
+
feature={{
|
|
215
|
+
id: 'raised-feature',
|
|
216
|
+
title: '📈 Emphasized Card',
|
|
217
|
+
description: 'Higher elevation for visual prominence',
|
|
218
|
+
icon: '📈'
|
|
219
|
+
}}
|
|
220
|
+
elevation={4}
|
|
221
|
+
/>
|
|
222
|
+
</Box>
|
|
223
|
+
|
|
224
|
+
<Box>
|
|
225
|
+
<Typography variant="h6" gutterBottom>Elevation 8 (High)</Typography>
|
|
226
|
+
<FeatureCard
|
|
227
|
+
feature={{
|
|
228
|
+
id: 'high-feature',
|
|
229
|
+
title: '⭐ Premium Feature',
|
|
230
|
+
description: 'Maximum elevation for special highlights',
|
|
231
|
+
icon: '⭐'
|
|
232
|
+
}}
|
|
233
|
+
elevation={8}
|
|
234
|
+
/>
|
|
235
|
+
</Box>
|
|
236
|
+
|
|
237
|
+
</Box>
|
|
238
|
+
</QwickApp>
|
|
239
|
+
),
|
|
240
|
+
parameters: {
|
|
241
|
+
docs: {
|
|
242
|
+
description: {
|
|
243
|
+
story: 'Different elevation options showing visual depth and hierarchy.',
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export const VariantComparison: Story = {
|
|
250
|
+
render: () => (
|
|
251
|
+
<QwickApp appId="featurecard-variants" appName='FeatureCard Variant Comparison'>
|
|
252
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
|
|
253
|
+
|
|
254
|
+
<Box>
|
|
255
|
+
<Typography variant="h5" gutterBottom>Standard Variant</Typography>
|
|
256
|
+
<Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
|
|
257
|
+
Rich cards with icons, titles, descriptions, and actions
|
|
258
|
+
</Typography>
|
|
259
|
+
<FeatureCard
|
|
260
|
+
feature={{
|
|
261
|
+
id: 'rich-feature',
|
|
262
|
+
title: '✨ Rich Feature Display',
|
|
263
|
+
description: 'Comprehensive feature showcase with icon, detailed description, and interactive elements for maximum engagement',
|
|
264
|
+
icon: '✨'
|
|
265
|
+
}}
|
|
266
|
+
actions={[
|
|
267
|
+
{
|
|
268
|
+
id: 'explore',
|
|
269
|
+
label: 'Explore',
|
|
270
|
+
variant: 'contained',
|
|
271
|
+
color: 'primary',
|
|
272
|
+
onClick: () => console.log('Explore clicked')
|
|
273
|
+
}
|
|
274
|
+
]}
|
|
275
|
+
elevation={3}
|
|
276
|
+
/>
|
|
277
|
+
</Box>
|
|
278
|
+
|
|
279
|
+
<Box>
|
|
280
|
+
<Typography variant="h5" gutterBottom>List Variant</Typography>
|
|
281
|
+
<Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
|
|
282
|
+
Simple bullet-point lists for concise information
|
|
283
|
+
</Typography>
|
|
284
|
+
<FeatureCard
|
|
285
|
+
features={[
|
|
286
|
+
'Clean, minimal design approach',
|
|
287
|
+
'Quick information scanning',
|
|
288
|
+
'Space-efficient layout',
|
|
289
|
+
'Perfect for feature summaries',
|
|
290
|
+
'Easy to digest content'
|
|
291
|
+
]}
|
|
292
|
+
variant="list"
|
|
293
|
+
title="List Benefits"
|
|
294
|
+
elevation={1}
|
|
295
|
+
/>
|
|
296
|
+
</Box>
|
|
297
|
+
|
|
298
|
+
</Box>
|
|
299
|
+
</QwickApp>
|
|
300
|
+
),
|
|
301
|
+
parameters: {
|
|
302
|
+
docs: {
|
|
303
|
+
description: {
|
|
304
|
+
story: 'Side-by-side comparison of standard vs list variants.',
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
// Data Binding Examples
|
|
311
|
+
export const DataBindingBasic: Story = {
|
|
312
|
+
render: () => (
|
|
313
|
+
<QwickApp appId="featurecard-data-binding" appName='FeatureCard Data Binding'>
|
|
314
|
+
<DataProvider dataSource={{ dataProvider }}>
|
|
315
|
+
<Box>
|
|
316
|
+
|
|
317
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
|
|
318
|
+
<Typography variant="h5" gutterBottom>📊 Data-Driven FeatureCard</Typography>
|
|
319
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
320
|
+
FeatureCard components can be driven entirely by CMS data using the dataSource prop.
|
|
321
|
+
</Typography>
|
|
322
|
+
|
|
323
|
+
<Code title="Usage" language="tsx">{`<FeatureCard dataSource="features.lightning-fast" />`}</Code>
|
|
324
|
+
|
|
325
|
+
<Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.features['lightning-fast'], null, 2)}</Code>
|
|
326
|
+
</Box>
|
|
327
|
+
|
|
328
|
+
<FeatureCard dataSource="features.lightning-fast" />
|
|
329
|
+
|
|
330
|
+
</Box>
|
|
331
|
+
</DataProvider>
|
|
332
|
+
</QwickApp>
|
|
333
|
+
),
|
|
334
|
+
parameters: {
|
|
335
|
+
docs: {
|
|
336
|
+
description: {
|
|
337
|
+
story: 'FeatureCard with data binding - all props resolved from CMS data through dataSource.',
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
export const DataBindingAdvanced: Story = {
|
|
344
|
+
render: () => (
|
|
345
|
+
<QwickApp appId="featurecard-data-advanced" appName='Advanced FeatureCard Data Binding'>
|
|
346
|
+
<DataProvider dataSource={{ dataProvider }}>
|
|
347
|
+
<Box>
|
|
348
|
+
|
|
349
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
|
|
350
|
+
<Typography variant="h5" gutterBottom>🎯 Multiple Data Sources</Typography>
|
|
351
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
352
|
+
Different FeatureCard components can pull from different data sources with varying configurations.
|
|
353
|
+
</Typography>
|
|
354
|
+
</Box>
|
|
355
|
+
|
|
356
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))', gap: 4 }}>
|
|
357
|
+
|
|
358
|
+
{/* Standard Feature Card */}
|
|
359
|
+
<Box>
|
|
360
|
+
<Typography variant="h6" gutterBottom>Performance Feature</Typography>
|
|
361
|
+
<FeatureCard dataSource="features.lightning-fast" />
|
|
362
|
+
</Box>
|
|
363
|
+
|
|
364
|
+
{/* Innovation Card with Higher Elevation */}
|
|
365
|
+
<Box>
|
|
366
|
+
<Typography variant="h6" gutterBottom>Innovation Highlight</Typography>
|
|
367
|
+
<FeatureCard dataSource="features.cutting-edge" />
|
|
368
|
+
</Box>
|
|
369
|
+
|
|
370
|
+
{/* Feature List */}
|
|
371
|
+
<Box>
|
|
372
|
+
<Typography variant="h6" gutterBottom>Benefits List</Typography>
|
|
373
|
+
<FeatureCard dataSource="features.benefits-list" />
|
|
374
|
+
</Box>
|
|
375
|
+
|
|
376
|
+
</Box>
|
|
377
|
+
|
|
378
|
+
</Box>
|
|
379
|
+
</DataProvider>
|
|
380
|
+
</QwickApp>
|
|
381
|
+
),
|
|
382
|
+
parameters: {
|
|
383
|
+
docs: {
|
|
384
|
+
description: {
|
|
385
|
+
story: 'Advanced data binding with multiple data sources showcasing different card configurations.',
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
export const JsonStringParsing: Story = {
|
|
392
|
+
render: () => (
|
|
393
|
+
<QwickApp appId="featurecard-json" appName='FeatureCard JSON String Parsing'>
|
|
394
|
+
<DataProvider dataSource={{ dataProvider }}>
|
|
395
|
+
<Box>
|
|
396
|
+
|
|
397
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
|
|
398
|
+
<Typography variant="h5" gutterBottom>🔧 JSON String Processing</Typography>
|
|
399
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
400
|
+
FeatureCard automatically parses JSON strings for feature data and actions, perfect for CMS integration.
|
|
401
|
+
</Typography>
|
|
402
|
+
|
|
403
|
+
<Code title="JSON Feature Data" language="json">{`{
|
|
404
|
+
"feature": ${JSON.stringify({ id: 'example', title: 'Example Feature', description: 'Parsed from JSON string' }, null, 2)},
|
|
405
|
+
"actions": ${JSON.stringify([{ id: 'action', label: 'Learn More', variant: 'contained' }], null, 2)}
|
|
406
|
+
}`}</Code>
|
|
407
|
+
</Box>
|
|
408
|
+
|
|
409
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
|
|
410
|
+
|
|
411
|
+
<Box>
|
|
412
|
+
<Typography variant="h6" gutterBottom>JSON Feature + Actions</Typography>
|
|
413
|
+
<FeatureCard dataSource="features.developer-experience" />
|
|
414
|
+
</Box>
|
|
415
|
+
|
|
416
|
+
<Box>
|
|
417
|
+
<Typography variant="h6" gutterBottom>JSON Features List</Typography>
|
|
418
|
+
<FeatureCard dataSource="features.enterprise-benefits" />
|
|
419
|
+
</Box>
|
|
420
|
+
|
|
421
|
+
</Box>
|
|
422
|
+
|
|
423
|
+
</Box>
|
|
424
|
+
</DataProvider>
|
|
425
|
+
</QwickApp>
|
|
426
|
+
),
|
|
427
|
+
parameters: {
|
|
428
|
+
docs: {
|
|
429
|
+
description: {
|
|
430
|
+
story: 'FeatureCard with automatic JSON string parsing for CMS-friendly data formats.',
|
|
431
|
+
},
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
|
|
436
|
+
export const DataBindingWithFallback: Story = {
|
|
437
|
+
render: () => (
|
|
438
|
+
<QwickApp appId="featurecard-fallback" appName='FeatureCard Data Binding with Fallback'>
|
|
439
|
+
<DataProvider dataSource={{ dataProvider }}>
|
|
440
|
+
<Box>
|
|
441
|
+
|
|
442
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
|
|
443
|
+
<Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
|
|
444
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
445
|
+
FeatureCard components gracefully handle missing data sources with fallback props.
|
|
446
|
+
</Typography>
|
|
447
|
+
|
|
448
|
+
<Code title="Fallback Usage" language="tsx">{`<FeatureCard
|
|
449
|
+
dataSource="nonexistent.feature"
|
|
450
|
+
feature={fallbackFeature}
|
|
451
|
+
variant="standard"
|
|
452
|
+
elevation={3}
|
|
453
|
+
/>`}</Code>
|
|
454
|
+
</Box>
|
|
455
|
+
|
|
456
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
|
|
457
|
+
|
|
458
|
+
<Box>
|
|
459
|
+
<Typography variant="h6" gutterBottom>Standard Fallback</Typography>
|
|
460
|
+
<FeatureCard
|
|
461
|
+
dataSource="nonexistent.feature"
|
|
462
|
+
feature={{
|
|
463
|
+
id: 'fallback-standard',
|
|
464
|
+
title: '🛡️ Reliable Fallbacks',
|
|
465
|
+
description: 'Components gracefully handle missing data with fallback content to ensure your application never breaks',
|
|
466
|
+
icon: '🛡️'
|
|
467
|
+
}}
|
|
468
|
+
variant="standard"
|
|
469
|
+
elevation={3}
|
|
470
|
+
/>
|
|
471
|
+
</Box>
|
|
472
|
+
|
|
473
|
+
<Box>
|
|
474
|
+
<Typography variant="h6" gutterBottom>List Fallback</Typography>
|
|
475
|
+
<FeatureCard
|
|
476
|
+
dataSource="nonexistent.features"
|
|
477
|
+
features={[
|
|
478
|
+
'Graceful error handling',
|
|
479
|
+
'Fallback content support',
|
|
480
|
+
'Robust data binding',
|
|
481
|
+
'Never breaks your layout'
|
|
482
|
+
]}
|
|
483
|
+
variant="list"
|
|
484
|
+
title="Fallback Features"
|
|
485
|
+
elevation={1}
|
|
486
|
+
/>
|
|
487
|
+
</Box>
|
|
488
|
+
|
|
489
|
+
</Box>
|
|
490
|
+
|
|
491
|
+
</Box>
|
|
492
|
+
</DataProvider>
|
|
493
|
+
</QwickApp>
|
|
494
|
+
),
|
|
495
|
+
parameters: {
|
|
496
|
+
docs: {
|
|
497
|
+
description: {
|
|
498
|
+
story: 'FeatureCard with fallback props when dataSource is missing or unavailable.',
|
|
499
|
+
},
|
|
500
|
+
},
|
|
501
|
+
},
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
export const InteractiveFeatures: Story = {
|
|
505
|
+
render: () => (
|
|
506
|
+
<QwickApp appId="featurecard-interactive" appName='Interactive FeatureCard Features'>
|
|
507
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 4 }}>
|
|
508
|
+
|
|
509
|
+
<FeatureCard
|
|
510
|
+
feature={{
|
|
511
|
+
id: 'clickable-card',
|
|
512
|
+
title: '👆 Clickable Card',
|
|
513
|
+
description: 'Entire card is clickable with hover effects and cursor feedback',
|
|
514
|
+
icon: '👆'
|
|
515
|
+
}}
|
|
516
|
+
onClick={() => alert('Card clicked!')}
|
|
517
|
+
elevation={2}
|
|
518
|
+
/>
|
|
519
|
+
|
|
520
|
+
<FeatureCard
|
|
521
|
+
feature={{
|
|
522
|
+
id: 'action-buttons',
|
|
523
|
+
title: '🎯 Action Buttons',
|
|
524
|
+
description: 'Multiple call-to-action buttons with different variants and colors',
|
|
525
|
+
icon: '🎯'
|
|
526
|
+
}}
|
|
527
|
+
actions={[
|
|
528
|
+
{
|
|
529
|
+
id: 'primary-action',
|
|
530
|
+
label: 'Primary',
|
|
531
|
+
variant: 'contained',
|
|
532
|
+
color: 'primary',
|
|
533
|
+
onClick: () => alert('Primary action!')
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
id: 'secondary-action',
|
|
537
|
+
label: 'Secondary',
|
|
538
|
+
variant: 'outlined',
|
|
539
|
+
color: 'secondary',
|
|
540
|
+
onClick: () => alert('Secondary action!')
|
|
541
|
+
}
|
|
542
|
+
]}
|
|
543
|
+
elevation={3}
|
|
544
|
+
/>
|
|
545
|
+
|
|
546
|
+
<FeatureCard
|
|
547
|
+
feature={{
|
|
548
|
+
id: 'high-elevation',
|
|
549
|
+
title: '📈 High Impact',
|
|
550
|
+
description: 'Higher elevation creates visual prominence and draws attention',
|
|
551
|
+
icon: '📈'
|
|
552
|
+
}}
|
|
553
|
+
elevation={6}
|
|
554
|
+
/>
|
|
555
|
+
|
|
556
|
+
<FeatureCard
|
|
557
|
+
features={[
|
|
558
|
+
'Interactive hover states',
|
|
559
|
+
'Smooth transitions',
|
|
560
|
+
'Accessibility support',
|
|
561
|
+
'Keyboard navigation',
|
|
562
|
+
'Focus indicators'
|
|
563
|
+
]}
|
|
564
|
+
variant="list"
|
|
565
|
+
title="Interactive Features"
|
|
566
|
+
elevation={1}
|
|
567
|
+
/>
|
|
568
|
+
|
|
569
|
+
</Box>
|
|
570
|
+
</QwickApp>
|
|
571
|
+
),
|
|
572
|
+
parameters: {
|
|
573
|
+
docs: {
|
|
574
|
+
description: {
|
|
575
|
+
story: 'Interactive features including click handlers, action buttons, hover effects, and visual emphasis.',
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
},
|
|
579
|
+
};
|
|
580
|
+
|
|
581
|
+
export const RealWorldExample: Story = {
|
|
582
|
+
render: () => (
|
|
583
|
+
<QwickApp appId="featurecard-real-world" appName='Real World FeatureCard Example'>
|
|
584
|
+
<DataProvider dataSource={{ dataProvider }}>
|
|
585
|
+
<Box>
|
|
586
|
+
|
|
587
|
+
{/* Hero Feature Card */}
|
|
588
|
+
<Box sx={{ mb: 6, textAlign: 'center' }}>
|
|
589
|
+
<Typography variant="h3" gutterBottom sx={{ fontWeight: 'bold', mb: 4 }}>
|
|
590
|
+
Why Choose QwickApps React Framework?
|
|
591
|
+
</Typography>
|
|
592
|
+
<Box sx={{ maxWidth: '400px', mx: 'auto' }}>
|
|
593
|
+
<FeatureCard dataSource="features.lightning-fast" />
|
|
594
|
+
</Box>
|
|
595
|
+
</Box>
|
|
596
|
+
|
|
597
|
+
{/* Feature Grid with Mixed Variants */}
|
|
598
|
+
<Box sx={{ mb: 6 }}>
|
|
599
|
+
<Typography variant="h4" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
|
|
600
|
+
Complete Development Solution
|
|
601
|
+
</Typography>
|
|
602
|
+
|
|
603
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '2fr 1fr' }, gap: 4 }}>
|
|
604
|
+
|
|
605
|
+
{/* Main Feature Highlight */}
|
|
606
|
+
<FeatureCard dataSource="features.developer-experience" />
|
|
607
|
+
|
|
608
|
+
{/* Benefits List */}
|
|
609
|
+
<FeatureCard dataSource="features.benefits-list" />
|
|
610
|
+
|
|
611
|
+
</Box>
|
|
612
|
+
</Box>
|
|
613
|
+
|
|
614
|
+
{/* Bottom Feature Grid */}
|
|
615
|
+
<Box>
|
|
616
|
+
<Typography variant="h4" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
|
|
617
|
+
Enterprise Ready
|
|
618
|
+
</Typography>
|
|
619
|
+
|
|
620
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
|
|
621
|
+
|
|
622
|
+
{/* Innovation Card */}
|
|
623
|
+
<FeatureCard dataSource="features.cutting-edge" />
|
|
624
|
+
|
|
625
|
+
{/* Enterprise Features */}
|
|
626
|
+
<FeatureCard dataSource="features.enterprise-benefits" />
|
|
627
|
+
|
|
628
|
+
</Box>
|
|
629
|
+
</Box>
|
|
630
|
+
|
|
631
|
+
</Box>
|
|
632
|
+
</DataProvider>
|
|
633
|
+
</QwickApp>
|
|
634
|
+
),
|
|
635
|
+
parameters: {
|
|
636
|
+
docs: {
|
|
637
|
+
description: {
|
|
638
|
+
story: 'Real-world example combining data-driven FeatureCards with different variants and configurations for a complete marketing page.',
|
|
639
|
+
},
|
|
640
|
+
},
|
|
641
|
+
},
|
|
642
|
+
};
|