@qwickapps/react-framework 1.3.4 โ 1.4.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/README.md +1688 -2
- package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts +66 -0
- package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +7 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/Html.d.ts +28 -18
- package/dist/components/Html.d.ts.map +1 -1
- package/dist/components/Logo.d.ts +12 -35
- package/dist/components/Logo.d.ts.map +1 -1
- package/dist/components/Markdown.d.ts +18 -13
- package/dist/components/Markdown.d.ts.map +1 -1
- package/dist/components/QwickApp.d.ts +16 -3
- package/dist/components/QwickApp.d.ts.map +1 -1
- package/dist/components/QwickIcon.d.ts +23 -0
- package/dist/components/QwickIcon.d.ts.map +1 -0
- package/dist/components/SafeSpan.d.ts +12 -5
- package/dist/components/SafeSpan.d.ts.map +1 -1
- package/dist/components/Scaffold.d.ts.map +1 -1
- package/dist/components/base/ModelView.d.ts +101 -0
- package/dist/components/base/ModelView.d.ts.map +1 -0
- package/dist/components/base/index.d.ts +11 -0
- package/dist/components/base/index.d.ts.map +1 -0
- package/dist/components/blocks/Article.d.ts +12 -2
- package/dist/components/blocks/Article.d.ts.map +1 -1
- package/dist/components/blocks/Code.d.ts +13 -2
- package/dist/components/blocks/Code.d.ts.map +1 -1
- package/dist/components/blocks/Content.d.ts.map +1 -1
- package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -1
- package/dist/components/blocks/FeatureCard.d.ts.map +1 -1
- package/dist/components/blocks/FeatureGrid.d.ts.map +1 -1
- package/dist/components/blocks/Footer.d.ts.map +1 -1
- package/dist/components/blocks/HeroBlock.d.ts +27 -13
- package/dist/components/blocks/HeroBlock.d.ts.map +1 -1
- package/dist/components/blocks/Image.d.ts +41 -0
- package/dist/components/blocks/Image.d.ts.map +1 -0
- package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -1
- package/dist/components/blocks/ProductCard.d.ts.map +1 -1
- package/dist/components/blocks/Section.d.ts +16 -2
- package/dist/components/blocks/Section.d.ts.map +1 -1
- package/dist/components/blocks/Text.d.ts +41 -0
- package/dist/components/blocks/Text.d.ts.map +1 -0
- package/dist/components/blocks/index.d.ts +4 -0
- package/dist/components/blocks/index.d.ts.map +1 -1
- package/dist/components/buttons/Button.d.ts +23 -7
- package/dist/components/buttons/Button.d.ts.map +1 -1
- package/dist/components/forms/FormBlock.d.ts +19 -13
- package/dist/components/forms/FormBlock.d.ts.map +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/input/ChoiceInputField.d.ts +17 -11
- package/dist/components/input/ChoiceInputField.d.ts.map +1 -1
- package/dist/components/input/HtmlInputField.d.ts +17 -11
- package/dist/components/input/HtmlInputField.d.ts.map +1 -1
- package/dist/components/input/SelectInputField.d.ts +16 -10
- package/dist/components/input/SelectInputField.d.ts.map +1 -1
- package/dist/components/input/SwitchInputField.d.ts +16 -10
- package/dist/components/input/SwitchInputField.d.ts.map +1 -1
- package/dist/components/input/TextField.d.ts.map +1 -1
- package/dist/components/input/TextInputField.d.ts +16 -11
- package/dist/components/input/TextInputField.d.ts.map +1 -1
- package/dist/components/layout/GridCell.d.ts +23 -6
- package/dist/components/layout/GridCell.d.ts.map +1 -1
- package/dist/components/layout/GridLayout.d.ts +24 -23
- package/dist/components/layout/GridLayout.d.ts.map +1 -1
- package/dist/components/pages/FormPage.d.ts.map +1 -1
- package/dist/components/pages/Page.d.ts +49 -87
- package/dist/components/pages/Page.d.ts.map +1 -1
- package/dist/components/pages/index.d.ts +2 -2
- package/dist/components/pages/index.d.ts.map +1 -1
- package/dist/config/AppConfig.d.ts +49 -0
- package/dist/config/AppConfig.d.ts.map +1 -0
- package/dist/config/AppConfigBuilder.d.ts +75 -0
- package/dist/config/AppConfigBuilder.d.ts.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/types.d.ts +130 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.esm.js +451 -0
- package/dist/config.js +455 -0
- package/dist/contexts/PrintModeContext.d.ts +27 -0
- package/dist/contexts/PrintModeContext.d.ts.map +1 -0
- package/dist/contexts/QwickAppContext.d.ts +2 -2
- package/dist/contexts/QwickAppContext.d.ts.map +1 -1
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/index.d.ts +2 -0
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/usePrintMode.d.ts +39 -0
- package/dist/hooks/usePrintMode.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +20722 -16021
- package/dist/index.js +20725 -16010
- package/dist/schemas/CodeSchema.d.ts +2 -1
- package/dist/schemas/CodeSchema.d.ts.map +1 -1
- package/dist/schemas/CollapsibleLayoutSchema.d.ts +2 -1
- package/dist/schemas/CollapsibleLayoutSchema.d.ts.map +1 -1
- package/dist/schemas/ContentSchema.d.ts +2 -1
- package/dist/schemas/ContentSchema.d.ts.map +1 -1
- package/dist/schemas/GridCellSchema.d.ts +25 -0
- package/dist/schemas/GridCellSchema.d.ts.map +1 -0
- package/dist/schemas/GridLayoutSchema.d.ts +23 -0
- package/dist/schemas/GridLayoutSchema.d.ts.map +1 -0
- package/dist/schemas/HtmlSchema.d.ts +14 -0
- package/dist/schemas/HtmlSchema.d.ts.map +1 -0
- package/dist/schemas/ImageSchema.d.ts +32 -0
- package/dist/schemas/ImageSchema.d.ts.map +1 -0
- package/dist/schemas/LogoSchema.d.ts +35 -0
- package/dist/schemas/LogoSchema.d.ts.map +1 -0
- package/dist/schemas/MarkdownSchema.d.ts +14 -0
- package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
- package/dist/schemas/PageTemplateSchema.d.ts +31 -0
- package/dist/schemas/PageTemplateSchema.d.ts.map +1 -0
- package/dist/schemas/PrintConfigSchema.d.ts +31 -0
- package/dist/schemas/PrintConfigSchema.d.ts.map +1 -0
- package/dist/schemas/SectionSchema.d.ts +2 -1
- package/dist/schemas/SectionSchema.d.ts.map +1 -1
- package/dist/schemas/TextSchema.d.ts +37 -0
- package/dist/schemas/TextSchema.d.ts.map +1 -0
- package/dist/schemas/ViewModelSchema.d.ts +23 -0
- package/dist/schemas/ViewModelSchema.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +15 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/transformers/ComponentTransformer.d.ts +116 -0
- package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -0
- package/dist/schemas/transformers/ReactNodeTransformer.d.ts +53 -0
- package/dist/schemas/transformers/ReactNodeTransformer.d.ts.map +1 -0
- package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts +66 -0
- package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts.map +1 -0
- package/dist/schemas/transformers/registry.d.ts +15 -0
- package/dist/schemas/transformers/registry.d.ts.map +1 -0
- package/dist/schemas/types/Serializable.d.ts +46 -0
- package/dist/schemas/types/Serializable.d.ts.map +1 -0
- package/dist/utils/htmlTransform.d.ts.map +1 -1
- package/dist/utils/reactUtils.d.ts +12 -3
- package/dist/utils/reactUtils.d.ts.map +1 -1
- package/package.json +17 -3
- package/src/{components/__tests__ โ __tests__/components}/AccessibilityProvider.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Article.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Breadcrumbs.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Button.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/CardListGrid.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/ChoiceInputField.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Code.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Content.integration.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Content.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/CoverImageHeader.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/ErrorBoundary.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/FeatureCard.integration.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/FeatureGrid.integration.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/FeatureGrid.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/Footer.test.tsx +4 -4
- package/src/{components/__tests__ โ __tests__/components}/FormBlock.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/HeroBlock.integration.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/HeroBlock.test.tsx +233 -7
- package/src/{components/__tests__ โ __tests__/components}/Html.test.tsx +11 -2
- package/src/{components/__tests__ โ __tests__/components}/HtmlInputField.test.tsx +3 -3
- package/src/__tests__/components/Logo.test.js +3 -3
- package/src/{components/__tests__ โ __tests__/components}/Markdown.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/PageBannerHeader.test.tsx +3 -3
- package/src/{components/__tests__ โ __tests__/components}/PaletteSwitcher.test.tsx +3 -3
- package/src/{components/__tests__ โ __tests__/components}/ProductCard.test.tsx +4 -4
- package/src/{components/__tests__ โ __tests__/components}/SafeSpan.integration.test.tsx +2 -2
- package/src/{components/__tests__ โ __tests__/components}/SafeSpan.simple.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/SafeSpan.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Section.integration.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/Section.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/SelectInputField.test.tsx +1 -1
- package/src/{components/__tests__ โ __tests__/components}/TextInputField.test.tsx +3 -3
- package/src/{components/__tests__ โ __tests__/components}/ThemeSwitcher.test.tsx +3 -3
- package/src/__tests__/components/base/ModelView.test.tsx +220 -0
- package/src/__tests__/components/blocks/Code.performance.test.tsx +625 -0
- package/src/__tests__/components/blocks/Code.serialization.test.tsx +507 -0
- package/src/__tests__/components/blocks/HeroBlock.serialization.test.tsx +414 -0
- package/src/__tests__/components/blocks/Image.serialization.test.tsx +257 -0
- package/src/__tests__/components/blocks/Section.serialization.test.tsx +553 -0
- package/src/__tests__/components/blocks/Text.performance.test.tsx +442 -0
- package/src/__tests__/components/blocks/Text.serialization.test.tsx +491 -0
- package/src/__tests__/components/buttons/Button.serialization.test.tsx +443 -0
- package/src/__tests__/components/input/FormComponents.serialization.test.tsx +482 -0
- package/src/__tests__/components/input/SelectInputField.serialization.test.tsx +439 -0
- package/src/__tests__/components/input/TextInputField.serialization.test.tsx +359 -0
- package/src/{components/layout/CollapsibleLayout/__tests__ โ __tests__/components/layout}/CollapsibleLayout.test.tsx +4 -4
- package/src/__tests__/components/layout/GridCell.serialization.test.tsx +403 -0
- package/src/__tests__/components/layout/GridLayout.serialization.test.tsx +311 -0
- package/src/__tests__/hooks/usePrintMode.test.ts +89 -0
- package/src/__tests__/schemas/PageTemplateSchema.test.ts +161 -0
- package/src/__tests__/schemas/PrintConfigSchema.test.ts +127 -0
- package/src/__tests__/schemas/ViewModelSchema.test.ts +80 -0
- package/src/__tests__/schemas/transformers/ComponentSerializationPatterns.test.tsx +602 -0
- package/src/__tests__/schemas/transformers/ComponentTransformer.htmlPatterns.test.ts +301 -0
- package/src/__tests__/schemas/transformers/ComponentTransformer.test.ts +521 -0
- package/src/__tests__/schemas/transformers/CrossBrowserCompatibility.test.ts +586 -0
- package/src/__tests__/schemas/transformers/MockSerializableComponent.ts +103 -0
- package/src/__tests__/schemas/transformers/RealWorldScenarios.test.tsx +1165 -0
- package/src/__tests__/schemas/transformers/SerializationErrorHandling.test.ts +602 -0
- package/src/__tests__/schemas/transformers/SerializationIntegration.test.tsx +691 -0
- package/src/__tests__/schemas/transformers/SerializationPerformance.test.ts +460 -0
- package/src/__tests__/schemas/transformers/TestAutomation.test.ts +597 -0
- package/src/{utils/__tests__ โ __tests__/utils}/nested-dom-fix.test.tsx +1 -1
- package/src/components/ErrorBoundary.tsx +8 -8
- package/src/components/Html.tsx +147 -44
- package/src/components/Logo.tsx +198 -100
- package/src/components/Markdown.tsx +125 -16
- package/src/components/QwickApp.tsx +64 -31
- package/src/components/QwickIcon.tsx +59 -0
- package/src/components/SafeSpan.tsx +65 -10
- package/src/components/Scaffold.tsx +2 -8
- package/src/components/base/ModelView.tsx +199 -0
- package/src/components/base/index.ts +11 -0
- package/src/components/blocks/Article.tsx +57 -18
- package/src/components/blocks/Code.md +529 -0
- package/src/components/blocks/Code.tsx +102 -15
- package/src/components/blocks/Content.tsx +25 -77
- package/src/components/blocks/CoverImageHeader.tsx +9 -4
- package/src/components/blocks/FeatureCard.tsx +1 -2
- package/src/components/blocks/FeatureGrid.tsx +19 -1
- package/src/components/blocks/Footer.tsx +13 -1
- package/src/components/blocks/HeroBlock.tsx +87 -20
- package/src/components/blocks/Image.tsx +395 -0
- package/src/components/blocks/PageBannerHeader.tsx +14 -12
- package/src/components/blocks/ProductCard.tsx +51 -52
- package/src/components/blocks/Section.tsx +113 -8
- package/src/components/blocks/Text.tsx +285 -0
- package/src/components/blocks/index.ts +4 -0
- package/src/components/buttons/Button.tsx +184 -15
- package/src/components/forms/FormBlock.tsx +70 -17
- package/src/components/index.ts +5 -0
- package/src/components/input/ChoiceInputField.tsx +48 -18
- package/src/components/input/HtmlInputField.tsx +48 -18
- package/src/components/input/SelectInputField.tsx +48 -16
- package/src/components/input/SwitchInputField.tsx +48 -17
- package/src/components/input/TextField.tsx +41 -1
- package/src/components/input/TextInputField.tsx +52 -18
- package/src/components/layout/GridCell.tsx +118 -9
- package/src/components/layout/GridLayout.tsx +125 -24
- package/src/components/pages/FormPage.tsx +0 -1
- package/src/components/pages/Page.css +304 -332
- package/src/components/pages/Page.tsx +307 -255
- package/src/components/pages/index.ts +2 -2
- package/src/config/AppConfig.ts +133 -0
- package/src/config/AppConfigBuilder.ts +421 -0
- package/src/config/__tests__/AppConfig.test.ts +385 -0
- package/src/config/__tests__/AppConfigBuilder.test.ts +432 -0
- package/src/config/index.ts +24 -0
- package/src/config/types.ts +170 -0
- package/src/config.ts +25 -0
- package/src/contexts/PrintModeContext.tsx +332 -0
- package/src/contexts/QwickAppContext.tsx +2 -2
- package/src/contexts/ThemeContext.tsx +1 -2
- package/src/contexts/index.ts +2 -0
- package/src/hooks/index.ts +5 -1
- package/src/hooks/usePrintMode.ts +73 -0
- package/src/index.ts +3 -0
- package/src/schemas/CodeSchema.ts +3 -3
- package/src/schemas/CollapsibleLayoutSchema.ts +2 -1
- package/src/schemas/ContentSchema.ts +2 -1
- package/src/schemas/GridCellSchema.ts +164 -0
- package/src/schemas/GridLayoutSchema.ts +133 -0
- package/src/schemas/HtmlSchema.ts +47 -0
- package/src/schemas/ImageSchema.ts +235 -0
- package/src/schemas/LogoSchema.ts +241 -0
- package/src/schemas/MarkdownSchema.ts +47 -0
- package/src/schemas/PageTemplateSchema.ts +186 -0
- package/src/schemas/PrintConfigSchema.ts +207 -0
- package/src/schemas/README.md +661 -0
- package/src/schemas/SectionSchema.ts +2 -1
- package/src/schemas/TextSchema.ts +329 -0
- package/src/schemas/ViewModelSchema.ts +115 -0
- package/src/schemas/index.ts +21 -2
- package/src/schemas/transformers/ComponentTransformer.ts +403 -0
- package/src/schemas/transformers/ReactNodeTransformer.ts +236 -0
- package/src/schemas/transformers/registry.ts +72 -0
- package/src/schemas/types/Serializable.ts +51 -0
- package/src/stories/AccessibilityProvider.stories.tsx +253 -253
- package/src/stories/Article.stories.tsx +433 -433
- package/src/stories/Button.stories.tsx +1 -1
- package/src/stories/CardListGrid.stories.tsx +451 -451
- package/src/stories/ChoiceInputField.stories.tsx +503 -503
- package/src/stories/Code.stories.tsx +1 -1
- package/src/stories/CollapsibleLayout.stories.tsx +1414 -1414
- package/src/stories/Content.stories.tsx +393 -393
- package/src/stories/CoverImageHeader.stories.tsx +701 -701
- package/src/stories/DataBinding.advanced.stories.tsx +432 -432
- package/src/stories/DataProvider.stories.tsx +1192 -1192
- package/src/stories/FeatureCard.stories.tsx +557 -557
- package/src/stories/FeatureGrid.stories.tsx +594 -594
- package/src/stories/Footer.stories.tsx +640 -640
- package/src/stories/FormBlock.stories.tsx +760 -760
- package/src/stories/FormComponents.stories.tsx +349 -541
- package/src/stories/GridCell.stories.tsx +417 -0
- package/src/stories/GridLayout.stories.tsx +353 -0
- package/src/stories/HeroBlock.stories.tsx +862 -373
- package/src/stories/HtmlInputField.stories.tsx +474 -474
- package/src/stories/Image.stories.tsx +819 -0
- package/src/stories/Introduction.stories.tsx +667 -667
- package/src/stories/LayoutBlocks.stories.tsx +324 -324
- package/src/stories/Logo.stories.tsx +165 -6
- package/src/stories/Markdown.stories.tsx +137 -137
- package/src/stories/ModelView.stories.tsx +477 -0
- package/src/stories/Page.stories.tsx +688 -688
- package/src/stories/PageBannerHeader.stories.tsx +864 -864
- package/src/stories/PaletteSwitcher.stories.tsx +119 -119
- package/src/stories/ProductCard.stories.tsx +424 -424
- package/src/stories/QwickApp.stories.tsx +368 -368
- package/src/stories/ResponsiveMenu.stories.tsx +249 -249
- package/src/stories/SafeSpan.stories.tsx +531 -531
- package/src/stories/Section.stories.tsx +90 -2
- package/src/stories/SelectInputField.stories.tsx +524 -524
- package/src/stories/Text.stories.tsx +560 -0
- package/src/stories/TextInputField.stories.tsx +443 -443
- package/src/stories/ThemeSwitcher.stories.tsx +123 -123
- package/src/utils/htmlTransform.tsx +74 -53
- package/src/utils/reactUtils.tsx +57 -6
- package/dist/index.bundled.css +0 -12
- /package/src/{hooks/__tests__ โ __tests__/hooks}/useDataBinding.test.tsx.disabled +0 -0
- /package/src/{schemas/__tests__ โ __tests__/schemas}/builders.test.ts +0 -0
- /package/src/{utils/__tests__ โ __tests__/utils}/createDataDrivenComponent.test.tsx.disabled +0 -0
- /package/src/{utils/__tests__ โ __tests__/utils}/htmlTransform.test.tsx +0 -0
- /package/src/{utils/__tests__ โ __tests__/utils}/optional-logging.test.ts +0 -0
|
@@ -14,154 +14,154 @@ import { DataProvider } from '../contexts/DataContext';
|
|
|
14
14
|
|
|
15
15
|
// Sample CMS data for data binding stories
|
|
16
16
|
const sampleCmsData = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
17
|
+
'pages.home.features': {
|
|
18
|
+
features: [
|
|
19
|
+
{
|
|
20
|
+
id: 'fast',
|
|
21
|
+
title: ' Lightning Fast',
|
|
22
|
+
description: 'Optimized performance for instant loading and smooth user experiences',
|
|
23
|
+
icon: ''
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'beautiful',
|
|
27
|
+
title: ' Beautiful UI',
|
|
28
|
+
description: 'Professional components and layouts that work perfectly out of the box',
|
|
29
|
+
icon: ''
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'mobile',
|
|
33
|
+
title: ' Mobile First',
|
|
34
|
+
description: 'Responsive design principles built into every component and layout',
|
|
35
|
+
icon: ''
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
columns: 3,
|
|
39
|
+
gap: 'medium',
|
|
40
|
+
equalHeight: true
|
|
41
|
+
},
|
|
42
|
+
'product.key-features': {
|
|
43
|
+
features: JSON.stringify([
|
|
44
|
+
{
|
|
45
|
+
id: 'integration',
|
|
46
|
+
title: 'Easy Integration',
|
|
47
|
+
description: 'Simple setup and configuration with minimal boilerplate code required',
|
|
48
|
+
icon: '๐'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'typescript',
|
|
52
|
+
title: 'Type Safe',
|
|
53
|
+
description: 'Full TypeScript support with comprehensive type definitions and IntelliSense',
|
|
54
|
+
icon: ''
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'extensible',
|
|
58
|
+
title: 'Highly Extensible',
|
|
59
|
+
description: 'Modular architecture allows for easy customization and feature extension',
|
|
60
|
+
icon: '๐งฉ'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'documented',
|
|
64
|
+
title: 'Well Documented',
|
|
65
|
+
description: 'Comprehensive documentation with live examples and best practice guides',
|
|
66
|
+
icon: '๐'
|
|
67
|
+
}
|
|
68
|
+
]),
|
|
69
|
+
columns: 2,
|
|
70
|
+
gap: 'large',
|
|
71
|
+
equalHeight: false
|
|
72
|
+
},
|
|
73
|
+
'marketing.benefits-grid': {
|
|
74
|
+
features: [
|
|
75
|
+
{
|
|
76
|
+
id: 'save-time',
|
|
77
|
+
title: 'Save Development Time',
|
|
78
|
+
description: 'Pre-built components reduce development time by up to 70%',
|
|
79
|
+
icon: 'โฐ'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: 'reduce-costs',
|
|
83
|
+
title: 'Reduce Costs',
|
|
84
|
+
description: 'Less development time means lower project costs and faster ROI',
|
|
85
|
+
icon: '๐ฐ'
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'scale-easily',
|
|
89
|
+
title: 'Scale with Confidence',
|
|
90
|
+
description: 'Built-in best practices ensure your application scales smoothly',
|
|
91
|
+
icon: '๐'
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'team-productivity',
|
|
95
|
+
title: 'Boost Team Productivity',
|
|
96
|
+
description: 'Consistent patterns and components improve team collaboration',
|
|
97
|
+
icon: '๐ฅ'
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'user-experience',
|
|
101
|
+
title: 'Enhanced User Experience',
|
|
102
|
+
description: 'Professional design system ensures consistent and delightful UX',
|
|
103
|
+
icon: ''
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: 'future-proof',
|
|
107
|
+
title: 'Future Proof Architecture',
|
|
108
|
+
description: 'Regular updates and modern architecture keep your app current',
|
|
109
|
+
icon: ''
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
columns: 3,
|
|
113
|
+
gap: 'medium',
|
|
114
|
+
equalHeight: true
|
|
115
|
+
},
|
|
116
|
+
'company.tech-stack': {
|
|
117
|
+
features: [
|
|
118
|
+
{
|
|
119
|
+
id: 'react',
|
|
120
|
+
title: 'React 18',
|
|
121
|
+
description: 'Built on the latest React with Concurrent Features',
|
|
122
|
+
icon: 'โ'
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: 'typescript',
|
|
126
|
+
title: 'TypeScript',
|
|
127
|
+
description: 'Type-safe development with excellent IDE support',
|
|
128
|
+
icon: '๐'
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'mui',
|
|
132
|
+
title: 'Material-UI',
|
|
133
|
+
description: 'Professional component library with customizable theming',
|
|
134
|
+
icon: ''
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: 'storybook',
|
|
138
|
+
title: 'Storybook',
|
|
139
|
+
description: 'Interactive component documentation and testing',
|
|
140
|
+
icon: '๐'
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: 'testing',
|
|
144
|
+
title: 'Testing Suite',
|
|
145
|
+
description: 'Comprehensive testing with Jest and React Testing Library',
|
|
146
|
+
icon: '๐งช'
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
columns: 4,
|
|
150
|
+
gap: 'small',
|
|
151
|
+
equalHeight: true
|
|
152
|
+
}
|
|
153
153
|
};
|
|
154
154
|
|
|
155
155
|
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
156
156
|
|
|
157
157
|
const meta = {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
158
|
+
title: 'Blocks/FeatureGrid',
|
|
159
|
+
component: FeatureGrid,
|
|
160
|
+
parameters: {
|
|
161
|
+
layout: 'fullscreen',
|
|
162
|
+
docs: {
|
|
163
|
+
description: {
|
|
164
|
+
component: `FeatureGrid is a powerful responsive grid component for showcasing multiple features with support for both traditional props and data binding through dataSource.
|
|
165
165
|
|
|
166
166
|
**Key Features:**
|
|
167
167
|
- **Responsive Grid Layout**: Customizable column count with automatic responsive behavior
|
|
@@ -177,10 +177,10 @@ const meta = {
|
|
|
177
177
|
- Technology stack presentations
|
|
178
178
|
- Marketing benefit grids and value propositions
|
|
179
179
|
- Feature comparison and highlight sections`,
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
tags: ['autodocs'],
|
|
184
184
|
} satisfies Meta<typeof FeatureGrid>;
|
|
185
185
|
|
|
186
186
|
export default meta;
|
|
@@ -188,482 +188,482 @@ type Story = StoryObj<typeof meta>;
|
|
|
188
188
|
|
|
189
189
|
// Sample features for traditional examples
|
|
190
190
|
const sampleFeatures = [
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
191
|
+
{
|
|
192
|
+
id: 'traditional-1',
|
|
193
|
+
title: ' Fast Performance',
|
|
194
|
+
description: 'Optimized for speed and efficiency with minimal bundle size',
|
|
195
|
+
icon: ''
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
id: 'traditional-2',
|
|
199
|
+
title: ' Developer Friendly',
|
|
200
|
+
description: 'Intuitive APIs and comprehensive TypeScript support',
|
|
201
|
+
icon: ''
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: 'traditional-3',
|
|
205
|
+
title: ' Highly Customizable',
|
|
206
|
+
description: 'Flexible theming and component customization options',
|
|
207
|
+
icon: ''
|
|
208
|
+
}
|
|
209
209
|
];
|
|
210
210
|
|
|
211
211
|
// Traditional Usage Examples
|
|
212
212
|
export const BasicFeatureGrid: Story = {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
213
|
+
render: () => (
|
|
214
|
+
<QwickApp appId="featuregrid-basic" appName='Basic FeatureGrid'>
|
|
215
|
+
<FeatureGrid
|
|
216
|
+
features={sampleFeatures}
|
|
217
|
+
columns={3}
|
|
218
|
+
gap="medium"
|
|
219
|
+
equalHeight={true}
|
|
220
|
+
/>
|
|
221
|
+
</QwickApp>
|
|
222
|
+
),
|
|
223
|
+
parameters: {
|
|
224
|
+
docs: {
|
|
225
|
+
description: {
|
|
226
|
+
story: 'Basic FeatureGrid with traditional props - features array, columns, gap, and equal height.',
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
230
|
};
|
|
231
231
|
|
|
232
232
|
export const ColumnVariants: Story = {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
233
|
+
render: () => (
|
|
234
|
+
<QwickApp appId="featuregrid-columns" appName='FeatureGrid Column Variants'>
|
|
235
|
+
<Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
|
|
236
|
+
|
|
237
|
+
<Box>
|
|
238
|
+
<Typography variant="h6" gutterBottom>Single Column Layout</Typography>
|
|
239
|
+
<FeatureGrid
|
|
240
|
+
features={sampleFeatures.slice(0, 1)}
|
|
241
|
+
columns={1}
|
|
242
|
+
gap="medium"
|
|
243
|
+
equalHeight={true}
|
|
244
|
+
/>
|
|
245
|
+
</Box>
|
|
246
|
+
|
|
247
|
+
<Box>
|
|
248
|
+
<Typography variant="h6" gutterBottom>Two Column Layout</Typography>
|
|
249
|
+
<FeatureGrid
|
|
250
|
+
features={sampleFeatures.slice(0, 2)}
|
|
251
|
+
columns={2}
|
|
252
|
+
gap="medium"
|
|
253
|
+
equalHeight={true}
|
|
254
|
+
/>
|
|
255
|
+
</Box>
|
|
256
|
+
|
|
257
|
+
<Box>
|
|
258
|
+
<Typography variant="h6" gutterBottom>Three Column Layout (Default)</Typography>
|
|
259
|
+
<FeatureGrid
|
|
260
|
+
features={sampleFeatures}
|
|
261
|
+
columns={3}
|
|
262
|
+
gap="medium"
|
|
263
|
+
equalHeight={true}
|
|
264
|
+
/>
|
|
265
|
+
</Box>
|
|
266
|
+
|
|
267
|
+
<Box>
|
|
268
|
+
<Typography variant="h6" gutterBottom>Four Column Layout</Typography>
|
|
269
|
+
<FeatureGrid
|
|
270
|
+
features={[...sampleFeatures, {
|
|
271
|
+
id: 'additional-feature',
|
|
272
|
+
title: ' Analytics',
|
|
273
|
+
description: 'Built-in analytics and performance monitoring',
|
|
274
|
+
icon: ''
|
|
275
|
+
}]}
|
|
276
|
+
columns={4}
|
|
277
|
+
gap="medium"
|
|
278
|
+
equalHeight={true}
|
|
279
|
+
/>
|
|
280
|
+
</Box>
|
|
281
|
+
|
|
282
|
+
</Box>
|
|
283
|
+
</QwickApp>
|
|
284
|
+
),
|
|
285
|
+
parameters: {
|
|
286
|
+
docs: {
|
|
287
|
+
description: {
|
|
288
|
+
story: 'Different column configurations: 1, 2, 3 (default), and 4 columns.',
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
292
|
};
|
|
293
293
|
|
|
294
294
|
export const GapVariants: Story = {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
295
|
+
render: () => (
|
|
296
|
+
<QwickApp appId="featuregrid-gaps" appName='FeatureGrid Gap Variants'>
|
|
297
|
+
<Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
|
|
298
|
+
|
|
299
|
+
<Box>
|
|
300
|
+
<Typography variant="h6" gutterBottom>Small Gap</Typography>
|
|
301
|
+
<FeatureGrid
|
|
302
|
+
features={sampleFeatures}
|
|
303
|
+
columns={3}
|
|
304
|
+
gap="small"
|
|
305
|
+
equalHeight={true}
|
|
306
|
+
/>
|
|
307
|
+
</Box>
|
|
308
|
+
|
|
309
|
+
<Box>
|
|
310
|
+
<Typography variant="h6" gutterBottom>Medium Gap (Default)</Typography>
|
|
311
|
+
<FeatureGrid
|
|
312
|
+
features={sampleFeatures}
|
|
313
|
+
columns={3}
|
|
314
|
+
gap="medium"
|
|
315
|
+
equalHeight={true}
|
|
316
|
+
/>
|
|
317
|
+
</Box>
|
|
318
|
+
|
|
319
|
+
<Box>
|
|
320
|
+
<Typography variant="h6" gutterBottom>Large Gap</Typography>
|
|
321
|
+
<FeatureGrid
|
|
322
|
+
features={sampleFeatures}
|
|
323
|
+
columns={3}
|
|
324
|
+
gap="large"
|
|
325
|
+
equalHeight={true}
|
|
326
|
+
/>
|
|
327
|
+
</Box>
|
|
328
|
+
|
|
329
|
+
</Box>
|
|
330
|
+
</QwickApp>
|
|
331
|
+
),
|
|
332
|
+
parameters: {
|
|
333
|
+
docs: {
|
|
334
|
+
description: {
|
|
335
|
+
story: 'Gap spacing options: small (compact), medium (standard), large (spacious).',
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
339
|
};
|
|
340
340
|
|
|
341
341
|
export const EqualHeightComparison: Story = {
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
342
|
+
render: () => (
|
|
343
|
+
<QwickApp appId="featuregrid-height" appName='FeatureGrid Equal Height'>
|
|
344
|
+
<Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
|
|
345
|
+
|
|
346
|
+
<Box>
|
|
347
|
+
<Typography variant="h6" gutterBottom>Equal Height: True (Default)</Typography>
|
|
348
|
+
<Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
|
|
349
|
+
All cards have the same height regardless of content length
|
|
350
|
+
</Typography>
|
|
351
|
+
<FeatureGrid
|
|
352
|
+
features={[
|
|
353
|
+
{
|
|
354
|
+
id: 'short',
|
|
355
|
+
title: 'Short Feature',
|
|
356
|
+
description: 'Brief description.',
|
|
357
|
+
icon: ''
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
id: 'medium',
|
|
361
|
+
title: 'Medium Length Feature',
|
|
362
|
+
description: 'This feature has a moderately long description that spans multiple lines.',
|
|
363
|
+
icon: ''
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
id: 'long',
|
|
367
|
+
title: 'Very Long Feature Description',
|
|
368
|
+
description: 'This feature has an extensively long description that demonstrates how the equal height feature works by ensuring all cards maintain the same height regardless of content length, creating a consistent and professional grid appearance.',
|
|
369
|
+
icon: '๐'
|
|
370
|
+
}
|
|
371
|
+
]}
|
|
372
|
+
columns={3}
|
|
373
|
+
gap="medium"
|
|
374
|
+
equalHeight={true}
|
|
375
|
+
/>
|
|
376
|
+
</Box>
|
|
377
|
+
|
|
378
|
+
<Box>
|
|
379
|
+
<Typography variant="h6" gutterBottom>Equal Height: False</Typography>
|
|
380
|
+
<Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
|
|
381
|
+
Cards adjust to their natural content height
|
|
382
|
+
</Typography>
|
|
383
|
+
<FeatureGrid
|
|
384
|
+
features={[
|
|
385
|
+
{
|
|
386
|
+
id: 'short-2',
|
|
387
|
+
title: 'Short Feature',
|
|
388
|
+
description: 'Brief description.',
|
|
389
|
+
icon: ''
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
id: 'medium-2',
|
|
393
|
+
title: 'Medium Length Feature',
|
|
394
|
+
description: 'This feature has a moderately long description that spans multiple lines.',
|
|
395
|
+
icon: ''
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
id: 'long-2',
|
|
399
|
+
title: 'Very Long Feature Description',
|
|
400
|
+
description: 'This feature has an extensively long description that demonstrates how the equal height feature works by ensuring all cards maintain the same height regardless of content length, creating a consistent and professional grid appearance.',
|
|
401
|
+
icon: '๐'
|
|
402
|
+
}
|
|
403
|
+
]}
|
|
404
|
+
columns={3}
|
|
405
|
+
gap="medium"
|
|
406
|
+
equalHeight={false}
|
|
407
|
+
/>
|
|
408
|
+
</Box>
|
|
409
|
+
|
|
410
|
+
</Box>
|
|
411
|
+
</QwickApp>
|
|
412
|
+
),
|
|
413
|
+
parameters: {
|
|
414
|
+
docs: {
|
|
415
|
+
description: {
|
|
416
|
+
story: 'Comparison between equal height (consistent appearance) and natural height (content-driven).',
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
420
|
};
|
|
421
421
|
|
|
422
422
|
// Data Binding Examples
|
|
423
423
|
export const DataBindingBasic: Story = {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
424
|
+
render: () => (
|
|
425
|
+
<QwickApp appId="featuregrid-data-binding" appName='FeatureGrid Data Binding' dataSource={{ dataProvider }}>
|
|
426
|
+
<Box>
|
|
427
|
+
|
|
428
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
429
|
+
<Typography variant="h5" gutterBottom> Data-Driven FeatureGrid</Typography>
|
|
430
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
431
|
+
FeatureGrid components can be driven entirely by CMS data using the dataSource prop.
|
|
432
|
+
</Typography>
|
|
433
|
+
|
|
434
|
+
<Code title="Usage" language="tsx">{`<FeatureGrid dataSource="pages.home.features" />`}</Code>
|
|
435
|
+
|
|
436
|
+
<Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData['pages.home.features'], null, 2)}</Code>
|
|
437
|
+
</Box>
|
|
438
|
+
|
|
439
|
+
<FeatureGrid dataSource="pages.home.features" />
|
|
440
|
+
|
|
441
|
+
</Box>
|
|
442
|
+
</QwickApp>
|
|
443
|
+
),
|
|
444
|
+
parameters: {
|
|
445
|
+
docs: {
|
|
446
|
+
description: {
|
|
447
|
+
story: 'FeatureGrid with data binding - all props resolved from CMS data through dataSource.',
|
|
448
|
+
},
|
|
449
|
+
},
|
|
450
|
+
},
|
|
451
451
|
};
|
|
452
452
|
|
|
453
453
|
export const DataBindingAdvanced: Story = {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
454
|
+
render: () => (
|
|
455
|
+
<QwickApp appId="featuregrid-data-advanced" appName='Advanced FeatureGrid Data Binding' dataSource={{ dataProvider }}>
|
|
456
|
+
<Box>
|
|
457
|
+
|
|
458
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
459
|
+
<Typography variant="h5" gutterBottom> Multiple Data Sources</Typography>
|
|
460
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
461
|
+
Different FeatureGrid components can pull from different data sources with varying configurations.
|
|
462
|
+
</Typography>
|
|
463
|
+
</Box>
|
|
464
|
+
|
|
465
|
+
{/* Product Features */}
|
|
466
|
+
<Box sx={{ mb: 4 }}>
|
|
467
|
+
<Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 1 }}>
|
|
468
|
+
Product Features
|
|
469
|
+
</Typography>
|
|
470
|
+
<FeatureGrid dataSource="product.key-features" />
|
|
471
|
+
</Box>
|
|
472
|
+
|
|
473
|
+
{/* Marketing Benefits */}
|
|
474
|
+
<Box sx={{ mb: 4 }}>
|
|
475
|
+
<Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 1 }}>
|
|
476
|
+
Why Choose QwickApps?
|
|
477
|
+
</Typography>
|
|
478
|
+
<FeatureGrid dataSource="marketing.benefits-grid" />
|
|
479
|
+
</Box>
|
|
480
|
+
|
|
481
|
+
{/* Tech Stack */}
|
|
482
|
+
<Box>
|
|
483
|
+
<Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'success.main', color: 'success.contrastText', borderRadius: 1 }}>
|
|
484
|
+
Technology Stack
|
|
485
|
+
</Typography>
|
|
486
|
+
<FeatureGrid dataSource="company.tech-stack" />
|
|
487
|
+
</Box>
|
|
488
|
+
|
|
489
|
+
</Box>
|
|
490
|
+
</QwickApp>
|
|
491
|
+
),
|
|
492
|
+
parameters: {
|
|
493
|
+
docs: {
|
|
494
|
+
description: {
|
|
495
|
+
story: 'Advanced data binding with multiple data sources showcasing different feature grid configurations.',
|
|
496
|
+
},
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
499
|
};
|
|
500
500
|
|
|
501
501
|
export const DataBindingWithFallback: Story = {
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
502
|
+
render: () => (
|
|
503
|
+
<QwickApp appId="featuregrid-fallback" appName='FeatureGrid Data Binding with Fallback' dataSource={{ dataProvider }}>
|
|
504
|
+
<Box>
|
|
505
|
+
|
|
506
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
507
|
+
<Typography variant="h5" gutterBottom> Fallback Support</Typography>
|
|
508
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
509
|
+
FeatureGrid components gracefully handle missing data sources with fallback props.
|
|
510
|
+
</Typography>
|
|
511
|
+
|
|
512
|
+
<Code title="Fallback Usage" language="tsx">{`<FeatureGrid
|
|
513
|
+
dataSource="nonexistent.features"
|
|
514
|
+
features={fallbackFeatures}
|
|
515
|
+
columns={2}
|
|
516
|
+
gap="large"
|
|
517
517
|
/>`}</Code>
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
518
|
+
</Box>
|
|
519
|
+
|
|
520
|
+
<FeatureGrid
|
|
521
|
+
dataSource="nonexistent.features"
|
|
522
|
+
features={[
|
|
523
|
+
{
|
|
524
|
+
id: 'fallback-1',
|
|
525
|
+
title: ' Reliable Fallbacks',
|
|
526
|
+
description: 'Components gracefully handle missing data with fallback content',
|
|
527
|
+
icon: ''
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
id: 'fallback-2',
|
|
531
|
+
title: ' Error Recovery',
|
|
532
|
+
description: 'Robust error handling ensures your application never breaks',
|
|
533
|
+
icon: ''
|
|
534
|
+
}
|
|
535
|
+
]}
|
|
536
|
+
columns={2}
|
|
537
|
+
gap="large"
|
|
538
|
+
equalHeight={true}
|
|
539
|
+
/>
|
|
540
|
+
|
|
541
|
+
</Box>
|
|
542
|
+
</QwickApp>
|
|
543
|
+
),
|
|
544
|
+
parameters: {
|
|
545
|
+
docs: {
|
|
546
|
+
description: {
|
|
547
|
+
story: 'FeatureGrid with fallback props when dataSource is missing or unavailable.',
|
|
548
|
+
},
|
|
549
|
+
},
|
|
550
|
+
},
|
|
551
551
|
};
|
|
552
552
|
|
|
553
553
|
export const JsonStringParsing: Story = {
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
554
|
+
render: () => (
|
|
555
|
+
<QwickApp appId="featuregrid-json" appName='FeatureGrid JSON String Parsing' dataSource={{ dataProvider }}>
|
|
556
|
+
<Box>
|
|
557
|
+
|
|
558
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
559
|
+
<Typography variant="h5" gutterBottom> JSON String Processing</Typography>
|
|
560
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
561
|
+
FeatureGrid automatically parses JSON strings for features data, perfect for CMS integration.
|
|
562
|
+
</Typography>
|
|
563
|
+
|
|
564
|
+
<Code title="JSON String Data" language="json">{`{
|
|
565
|
+
"features": ${JSON.stringify([
|
|
566
|
+
{ id: 'example', title: 'Example Feature', description: 'Parsed from JSON string' }
|
|
567
|
+
], null, 2)}
|
|
568
568
|
}`}</Code>
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
569
|
+
</Box>
|
|
570
|
+
|
|
571
|
+
<FeatureGrid dataSource="product.key-features" />
|
|
572
|
+
|
|
573
|
+
</Box>
|
|
574
|
+
</QwickApp>
|
|
575
|
+
),
|
|
576
|
+
parameters: {
|
|
577
|
+
docs: {
|
|
578
|
+
description: {
|
|
579
|
+
story: 'FeatureGrid with automatic JSON string parsing for CMS-friendly data formats.',
|
|
580
|
+
},
|
|
581
|
+
},
|
|
582
|
+
},
|
|
583
583
|
};
|
|
584
584
|
|
|
585
585
|
export const RealWorldExample: Story = {
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
586
|
+
render: () => (
|
|
587
|
+
<QwickApp appId="featuregrid-real-world" appName='Real World FeatureGrid Example' dataSource={{ dataProvider }}>
|
|
588
|
+
<Box>
|
|
589
|
+
|
|
590
|
+
{/* Main Features - Data Driven */}
|
|
591
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
|
|
592
|
+
<Typography variant="h2" gutterBottom sx={{ textAlign: 'center', fontWeight: 'bold', mb: 1 }}>
|
|
593
|
+
Why Developers Love QwickApps
|
|
594
|
+
</Typography>
|
|
595
|
+
<Typography variant="h6" sx={{ textAlign: 'center', opacity: 0.9, mb: 4, maxWidth: '600px', mx: 'auto' }}>
|
|
596
|
+
Discover the features that make QwickApps the preferred choice for modern React development
|
|
597
|
+
</Typography>
|
|
598
|
+
<FeatureGrid dataSource="pages.home.features" />
|
|
599
|
+
</Box>
|
|
600
|
+
|
|
601
|
+
{/* Benefits Grid - Data Driven */}
|
|
602
|
+
<Box sx={{ mb: 6 }}>
|
|
603
|
+
<Typography variant="h3" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
|
|
604
|
+
Business Benefits
|
|
605
|
+
</Typography>
|
|
606
|
+
<FeatureGrid dataSource="marketing.benefits-grid" />
|
|
607
|
+
</Box>
|
|
608
|
+
|
|
609
|
+
{/* Technical Features - Traditional Props */}
|
|
610
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
|
|
611
|
+
<Typography variant="h3" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
|
|
612
|
+
Technical Excellence
|
|
613
|
+
</Typography>
|
|
614
|
+
<FeatureGrid
|
|
615
|
+
features={[
|
|
616
|
+
{
|
|
617
|
+
id: 'performance',
|
|
618
|
+
title: '๐ Optimized Performance',
|
|
619
|
+
description: 'Tree shaking, code splitting, and optimized bundle sizes for lightning-fast applications',
|
|
620
|
+
icon: '๐'
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
id: 'accessibility',
|
|
624
|
+
title: 'โฟ Accessibility First',
|
|
625
|
+
description: 'WCAG 2.1 compliant components with screen reader support and keyboard navigation',
|
|
626
|
+
icon: 'โฟ'
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
id: 'testing',
|
|
630
|
+
title: '๐งช Testing Ready',
|
|
631
|
+
description: 'Pre-configured testing setup with comprehensive test utilities and examples',
|
|
632
|
+
icon: '๐งช'
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
id: 'documentation',
|
|
636
|
+
title: '๐ Living Documentation',
|
|
637
|
+
description: 'Interactive Storybook documentation with live examples and API references',
|
|
638
|
+
icon: '๐'
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
id: 'theming',
|
|
642
|
+
title: ' Advanced Theming',
|
|
643
|
+
description: 'Powerful theming system with design tokens and consistent visual language',
|
|
644
|
+
icon: ''
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
id: 'community',
|
|
648
|
+
title: '๐ฅ Active Community',
|
|
649
|
+
description: 'Growing community of developers with active support and regular contributions',
|
|
650
|
+
icon: '๐ฅ'
|
|
651
|
+
}
|
|
652
|
+
]}
|
|
653
|
+
columns={3}
|
|
654
|
+
gap="large"
|
|
655
|
+
equalHeight={true}
|
|
656
|
+
/>
|
|
657
|
+
</Box>
|
|
658
|
+
|
|
659
|
+
</Box>
|
|
660
|
+
</QwickApp>
|
|
661
|
+
),
|
|
662
|
+
parameters: {
|
|
663
|
+
docs: {
|
|
664
|
+
description: {
|
|
665
|
+
story: 'Real-world example combining data-driven FeatureGrids with traditional usage for comprehensive feature showcases.',
|
|
666
|
+
},
|
|
667
|
+
},
|
|
668
|
+
},
|
|
669
669
|
};
|