@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
|
@@ -17,13 +17,13 @@ import Scaffold from '../components/Scaffold';
|
|
|
17
17
|
import ThemeSwitcher from '../components/buttons/ThemeSwitcher';
|
|
18
18
|
|
|
19
19
|
const meta = {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
title: 'Framework/QwickApp',
|
|
21
|
+
component: QwickApp,
|
|
22
|
+
parameters: {
|
|
23
|
+
layout: 'fullscreen',
|
|
24
|
+
docs: {
|
|
25
|
+
description: {
|
|
26
|
+
component: `QwickApp is the easiest way to set up the QwickApps React Framework with complete theme system and component library integration.
|
|
27
27
|
|
|
28
28
|
**Key Features:**
|
|
29
29
|
- **CSS Loading**: Imports all necessary theme system styles
|
|
@@ -42,66 +42,66 @@ const meta = {
|
|
|
42
42
|
- Multi-tenant applications with dynamic branding
|
|
43
43
|
- Teams needing standardized UI components
|
|
44
44
|
- Projects requiring dark/light mode switching`,
|
|
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
|
-
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
tags: ['autodocs'],
|
|
49
|
+
argTypes: {
|
|
50
|
+
appId: {
|
|
51
|
+
description: 'Unique app identifier for localStorage keys',
|
|
52
|
+
control: false, // Disable control since it cannot be changed dynamically
|
|
53
|
+
},
|
|
54
|
+
appName: {
|
|
55
|
+
description: 'Application name for display purposes',
|
|
56
|
+
control: { type: 'text' },
|
|
57
|
+
},
|
|
58
|
+
logo: {
|
|
59
|
+
description: 'Logo component to display',
|
|
60
|
+
control: false,
|
|
61
|
+
},
|
|
62
|
+
children: {
|
|
63
|
+
description: 'Child components to render',
|
|
64
|
+
control: false,
|
|
65
|
+
},
|
|
66
|
+
className: {
|
|
67
|
+
description: 'Additional CSS class name',
|
|
68
|
+
control: false,
|
|
69
|
+
},
|
|
70
|
+
style: {
|
|
71
|
+
description: 'Additional inline styles',
|
|
72
|
+
control: { type: 'object' },
|
|
73
|
+
},
|
|
74
|
+
defaultTheme: {
|
|
75
|
+
description: 'Default theme to use when no user preference exists',
|
|
76
|
+
control: false,
|
|
77
|
+
},
|
|
78
|
+
defaultPalette: {
|
|
79
|
+
description: 'Default palette to use when no user preference exists',
|
|
80
|
+
control: false,
|
|
81
|
+
},
|
|
82
|
+
enableScaffolding: {
|
|
83
|
+
description: 'Enable scaffolding features',
|
|
84
|
+
control: false,
|
|
85
|
+
},
|
|
86
|
+
showAppBar: {
|
|
87
|
+
description: 'Whether to show the app bar',
|
|
88
|
+
control: { type: 'boolean' },
|
|
89
|
+
defaultValue: false,
|
|
90
|
+
},
|
|
91
|
+
appBar: {
|
|
92
|
+
description: 'App bar configuration for scaffolding',
|
|
93
|
+
control: false, // Disable control since it's an object
|
|
94
|
+
},
|
|
95
|
+
navigationItems: {
|
|
96
|
+
description: 'Navigation items for scaffolding',
|
|
97
|
+
control: false, // Disable control since it's an array of objects
|
|
98
|
+
},
|
|
99
|
+
appBarHeight: {
|
|
100
|
+
description: 'Height of the app bar',
|
|
101
|
+
control: { type: 'text' },
|
|
102
|
+
defaultValue: '64px',
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
105
|
} satisfies Meta<typeof QwickApp>;
|
|
106
106
|
|
|
107
107
|
export default meta;
|
|
@@ -109,169 +109,169 @@ type Story = StoryObj<typeof meta>;
|
|
|
109
109
|
|
|
110
110
|
// Demo component that shows theme system integration
|
|
111
111
|
function ThemeSystemDemo() {
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
const { currentTheme, actualThemeMode, setPreferredTheme } = useTheme();
|
|
113
|
+
const { currentPalette, setPreferredPalette, availablePalettes } = usePalette();
|
|
114
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
|
-
|
|
115
|
+
return (
|
|
116
|
+
<Scaffold
|
|
117
|
+
navigationItems={[]}
|
|
118
|
+
showAppBar={true}
|
|
119
|
+
appBar={{
|
|
120
|
+
title: "QwickApp Demo",
|
|
121
|
+
logo: <Logo name="My App" variant={'on-primary'} size="small" badge="none" />,
|
|
122
|
+
actions: (
|
|
123
|
+
<div style={{ display: 'flex', gap: '8px' }}>
|
|
124
|
+
<ThemeSwitcher />
|
|
125
|
+
<PaletteSwitcher />
|
|
126
|
+
</div>
|
|
127
|
+
),
|
|
128
|
+
}}
|
|
129
|
+
>
|
|
130
|
+
<Section spacing="spacious">
|
|
131
|
+
<Content
|
|
132
|
+
title=" Welcome to QwickApp!"
|
|
133
|
+
centered
|
|
134
|
+
maxWidth="lg"
|
|
135
|
+
>
|
|
136
|
+
<Typography variant="body1" color="text.secondary">
|
|
137
|
+
This entire demo is wrapped in a single <code><QwickApp></code> component.
|
|
138
|
+
No manual provider setup required - everything just works!
|
|
139
|
+
</Typography>
|
|
140
|
+
</Content>
|
|
141
|
+
</Section>
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
143
|
+
<Section background="alternate" spacing="comfortable">
|
|
144
|
+
<Content title=" Current Theme System State" centered maxWidth="lg">
|
|
145
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: 2, mb: 2 }}>
|
|
146
|
+
<Box>
|
|
147
|
+
<Typography variant="subtitle2" color="text.secondary">
|
|
148
|
+
Theme Mode
|
|
149
|
+
</Typography>
|
|
150
|
+
<Typography variant="body1" color="text.primary">
|
|
151
|
+
{currentTheme} → {actualThemeMode}
|
|
152
|
+
</Typography>
|
|
153
|
+
</Box>
|
|
154
|
+
<Box>
|
|
155
|
+
<Typography variant="subtitle2" color="text.secondary">
|
|
156
|
+
Current Palette
|
|
157
|
+
</Typography>
|
|
158
|
+
<Typography variant="body1" color="text.primary">
|
|
159
|
+
{currentPalette}
|
|
160
|
+
</Typography>
|
|
161
|
+
</Box>
|
|
162
|
+
<Box>
|
|
163
|
+
<Typography variant="subtitle2" color="text.secondary">
|
|
164
|
+
Available Palettes
|
|
165
|
+
</Typography>
|
|
166
|
+
<Typography variant="body1" color="text.primary">
|
|
167
|
+
{availablePalettes.length} palettes
|
|
168
|
+
</Typography>
|
|
169
|
+
</Box>
|
|
170
|
+
</Box>
|
|
171
|
+
</Content>
|
|
172
|
+
</Section>
|
|
173
173
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
174
|
+
<Section spacing="comfortable">
|
|
175
|
+
<Content
|
|
176
|
+
title="🎮 Interactive Demo"
|
|
177
|
+
centered
|
|
178
|
+
maxWidth="lg"
|
|
179
|
+
actions={[
|
|
180
|
+
{ label: "☀ Light Mode", onClick: () => setPreferredTheme('light'), disabled: actualThemeMode === 'light' },
|
|
181
|
+
{ label: "🌙 Dark Mode", onClick: () => setPreferredTheme('dark'), disabled: actualThemeMode === 'dark' },
|
|
182
|
+
{ label: "🖥 System Mode", onClick: () => setPreferredTheme('system'), disabled: currentTheme === 'system' },
|
|
183
|
+
]}
|
|
184
|
+
>
|
|
185
|
+
<Typography variant="body2" color="text.secondary">
|
|
186
|
+
Try these buttons to see the theme system in action:
|
|
187
|
+
</Typography>
|
|
188
|
+
|
|
189
|
+
<Typography variant="body2" color="text.secondary" sx={{ mt: 2 }}>
|
|
190
|
+
Available palettes:
|
|
191
|
+
</Typography>
|
|
192
|
+
<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, justifyContent: 'center', mt: 1 }}>
|
|
193
|
+
{availablePalettes.map((palette) => (
|
|
194
|
+
<Button
|
|
195
|
+
key={palette.id}
|
|
196
|
+
variant={currentPalette === palette.id ? 'contained' : 'outlined'}
|
|
197
|
+
size="small"
|
|
198
|
+
onClick={() => setPreferredPalette(palette.id)}
|
|
199
|
+
>
|
|
200
|
+
{palette.name}
|
|
201
|
+
</Button>
|
|
202
|
+
))}
|
|
203
|
+
</Box>
|
|
204
|
+
</Content>
|
|
205
|
+
</Section>
|
|
206
206
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
207
|
+
<Section background="alternate" spacing="comfortable">
|
|
208
|
+
<Content title=" Current Color Palette" centered maxWidth="lg">
|
|
209
|
+
<Box sx={{
|
|
210
|
+
display: 'grid',
|
|
211
|
+
gridTemplateColumns: 'repeat(auto-fit, minmax(120px, 1fr))',
|
|
212
|
+
gap: 2
|
|
213
|
+
}}>
|
|
214
|
+
{[
|
|
215
|
+
{ name: 'Primary', color: 'primary.main' },
|
|
216
|
+
{ name: 'Secondary', color: 'secondary.main' },
|
|
217
|
+
{ name: 'Background', color: 'background.default' },
|
|
218
|
+
{ name: 'Surface', color: 'background.paper' },
|
|
219
|
+
{ name: 'Success', color: 'success.main' },
|
|
220
|
+
{ name: 'Warning', color: 'warning.main' },
|
|
221
|
+
{ name: 'Error', color: 'error.main' },
|
|
222
|
+
{ name: 'Info', color: 'info.main' },
|
|
223
|
+
].map(({ name, color }) => (
|
|
224
|
+
<Box key={name} sx={{ textAlign: 'center' }}>
|
|
225
|
+
<Box sx={{
|
|
226
|
+
width: '100%',
|
|
227
|
+
height: 60,
|
|
228
|
+
backgroundColor: color,
|
|
229
|
+
border: color.includes('background') ? '1px solid' : 'none',
|
|
230
|
+
borderColor: 'divider',
|
|
231
|
+
borderRadius: 1,
|
|
232
|
+
mb: 1,
|
|
233
|
+
boxShadow: 1
|
|
234
|
+
}} />
|
|
235
|
+
<Typography variant="caption" color="text.secondary">
|
|
236
|
+
{name}
|
|
237
|
+
</Typography>
|
|
238
|
+
</Box>
|
|
239
|
+
))}
|
|
240
|
+
</Box>
|
|
241
|
+
</Content>
|
|
242
|
+
</Section>
|
|
243
243
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
244
|
+
<Section spacing="comfortable">
|
|
245
|
+
<Content title="♿ Accessibility Monitoring" centered maxWidth="lg">
|
|
246
|
+
<Typography variant="body2" sx={{ mb: 2 }} color="text.secondary">
|
|
247
|
+
QwickApp includes automatic accessibility monitoring via the AccessibilityChecker component:
|
|
248
|
+
</Typography>
|
|
249
|
+
<AccessibilityChecker />
|
|
250
|
+
</Content>
|
|
251
|
+
</Section>
|
|
252
|
+
</Scaffold>
|
|
253
|
+
);
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
-
// Complete App Example Story
|
|
256
|
+
// Complete App Example Story
|
|
257
257
|
export const CompleteExample: Story = {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
258
|
+
args: {
|
|
259
|
+
appId: 'com.example.qwickapp-demo',
|
|
260
|
+
children: undefined, // Will be overridden by render function
|
|
261
|
+
},
|
|
262
|
+
render: (args) => (
|
|
263
|
+
<Scaffold navigationItems={[]} {...args}>
|
|
264
|
+
<ThemeSystemDemo />
|
|
265
|
+
</Scaffold>
|
|
266
|
+
),
|
|
267
|
+
parameters: {
|
|
268
|
+
docs: {
|
|
269
|
+
description: {
|
|
270
|
+
story: `This story demonstrates a complete application setup using QwickApp.
|
|
271
|
+
|
|
272
272
|
**Key Features Demonstrated:**
|
|
273
273
|
- Single component setup with automatic provider configuration
|
|
274
|
-
- Theme and palette switching with real-time updates
|
|
274
|
+
- Theme and palette switching with real-time updates
|
|
275
275
|
- MUI integration with automatic theme synchronization
|
|
276
276
|
- Accessibility monitoring and compliance checking
|
|
277
277
|
- Storage isolation with unique appId
|
|
@@ -281,181 +281,181 @@ export const CompleteExample: Story = {
|
|
|
281
281
|
import { QwickApp } from '@qwickapps/react-framework';
|
|
282
282
|
|
|
283
283
|
function App() {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
284
|
+
return (
|
|
285
|
+
<QwickApp appId="com.mycompany.myapp">
|
|
286
|
+
{/* Your entire app goes here */}
|
|
287
|
+
</QwickApp>
|
|
288
|
+
);
|
|
289
289
|
}
|
|
290
290
|
\`\`\``,
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
294
|
};
|
|
295
295
|
|
|
296
296
|
// Simple Example Story
|
|
297
297
|
export const SimpleExample: Story = {
|
|
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
|
-
|
|
298
|
+
args: {
|
|
299
|
+
appId: 'com.example.simple-demo',
|
|
300
|
+
children: undefined, // Will be overridden by render function
|
|
301
|
+
},
|
|
302
|
+
render: (args) => (
|
|
303
|
+
<Scaffold navigationItems={[]} {...args}>
|
|
304
|
+
<Box sx={{ p: 3, textAlign: 'center' }}>
|
|
305
|
+
<Logo name="Simple App" size="large" />
|
|
306
|
+
<Typography variant="h4" sx={{ mt: 2, mb: 3 }}>
|
|
307
|
+
Hello QwickApp! 👋
|
|
308
|
+
</Typography>
|
|
309
|
+
<Typography variant="body1" sx={{ mb: 2 }} color="text.secondary">
|
|
310
|
+
This simple example shows how easy it is to get started.
|
|
311
|
+
Just wrap your content with QwickApp and you're ready to go!
|
|
312
|
+
</Typography>
|
|
313
|
+
<Box sx={{ display: 'flex', gap: 2, justifyContent: 'center', flexWrap: 'wrap' }}>
|
|
314
|
+
<ThemeSwitcher />
|
|
315
|
+
<PaletteSwitcher />
|
|
316
|
+
</Box>
|
|
317
|
+
</Box>
|
|
318
|
+
</Scaffold>
|
|
319
|
+
),
|
|
320
|
+
parameters: {
|
|
321
|
+
docs: {
|
|
322
|
+
description: {
|
|
323
|
+
story: `The simplest possible QwickApp setup. Perfect for getting started quickly!
|
|
324
|
+
|
|
325
325
|
**This example shows:**
|
|
326
326
|
- Minimal QwickApp setup
|
|
327
|
-
- Automatic theme system initialization
|
|
327
|
+
- Automatic theme system initialization
|
|
328
328
|
- Theme and palette switchers working out of the box
|
|
329
329
|
- Clean, semantic HTML structure`,
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
333
|
};
|
|
334
334
|
|
|
335
335
|
// Storage Isolation Example
|
|
336
336
|
export const StorageIsolation: Story = {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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
|
-
|
|
337
|
+
args: {
|
|
338
|
+
appId: 'com.example.isolated-storage',
|
|
339
|
+
children: undefined, // Will be overridden by render function
|
|
340
|
+
},
|
|
341
|
+
render: (args) => (
|
|
342
|
+
<Scaffold navigationItems={[]} {...args}>
|
|
343
|
+
<Box sx={{ p: 3 }}>
|
|
344
|
+
<Typography variant="h5" gutterBottom>
|
|
345
|
+
🔒 Storage Isolation Demo
|
|
346
|
+
</Typography>
|
|
347
|
+
<Typography variant="body1" sx={{ mb: 2 }} color="text.secondary">
|
|
348
|
+
This instance uses appId: <code>"{args.appId}"</code>
|
|
349
|
+
</Typography>
|
|
350
|
+
<Typography variant="body2" sx={{ mb: 2 }} color="text.secondary">
|
|
351
|
+
Theme preferences are stored in localStorage with unique keys:
|
|
352
|
+
</Typography>
|
|
353
|
+
<Box sx={{
|
|
354
|
+
p: 2,
|
|
355
|
+
backgroundColor: 'background.paper',
|
|
356
|
+
borderRadius: 1,
|
|
357
|
+
fontFamily: 'monospace',
|
|
358
|
+
fontSize: '0.875rem',
|
|
359
|
+
border: '1px solid',
|
|
360
|
+
borderColor: 'divider'
|
|
361
|
+
}}>
|
|
362
|
+
<div>Theme: {args.appId}.theme</div>
|
|
363
|
+
<div>Palette: {args.appId}.palette</div>
|
|
364
|
+
</Box>
|
|
365
|
+
<Box sx={{ mt: 3, display: 'flex', gap: 2 }}>
|
|
366
|
+
<ThemeSwitcher />
|
|
367
|
+
<PaletteSwitcher />
|
|
368
|
+
</Box>
|
|
369
|
+
</Box>
|
|
370
|
+
</Scaffold>
|
|
371
|
+
),
|
|
372
|
+
parameters: {
|
|
373
|
+
docs: {
|
|
374
|
+
description: {
|
|
375
|
+
story: `Demonstrates how QwickApp uses the appId to create isolated storage keys.
|
|
376
|
+
|
|
377
377
|
**Benefits:**
|
|
378
378
|
- No conflicts between different applications
|
|
379
|
-
- Clean separation of theme preferences
|
|
379
|
+
- Clean separation of theme preferences
|
|
380
380
|
- Easy to identify which app stored which preferences
|
|
381
381
|
- Supports multiple QwickApps on the same domain`,
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
},
|
|
385
385
|
};
|
|
386
386
|
|
|
387
387
|
// Complete Framework Integration Example
|
|
388
388
|
export const CompleteFrameworkExample: Story = {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
389
|
+
args: {
|
|
390
|
+
appId: 'com.example.complete-framework',
|
|
391
|
+
appName: 'QwickApp Demo',
|
|
392
|
+
enableScaffolding: true,
|
|
393
|
+
showThemeSwitcher: true,
|
|
394
|
+
showPaletteSwitcher: true,
|
|
395
|
+
},
|
|
396
|
+
render: (args) => (
|
|
397
|
+
<QwickApp {...args}>
|
|
398
|
+
<HeroBlock
|
|
399
|
+
title="Complete QwickApp Framework"
|
|
400
|
+
subtitle="Theme system, components, and layout working together seamlessly"
|
|
401
|
+
backgroundGradient="linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
|
|
402
|
+
blockHeight="medium"
|
|
403
|
+
textAlign="center"
|
|
404
|
+
/>
|
|
405
405
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
406
|
+
<Section>
|
|
407
|
+
<Content title="Framework Benefits" centered>
|
|
408
|
+
<FeatureGrid
|
|
409
|
+
columns={2}
|
|
410
|
+
gap="large"
|
|
411
|
+
features={[
|
|
412
|
+
{
|
|
413
|
+
id: 'theme-system',
|
|
414
|
+
title: ' Complete Theme System',
|
|
415
|
+
description: 'Automatic theme and palette management with localStorage persistence and MUI integration.',
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
id: 'component-library',
|
|
419
|
+
title: '🧩 Rich Component Library',
|
|
420
|
+
description: '50+ production-ready components with consistent styling and data binding support.',
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
id: 'developer-experience',
|
|
424
|
+
title: '🛠 Great Developer Experience',
|
|
425
|
+
description: 'Simple setup with TypeScript support, comprehensive documentation, and live examples.',
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
id: 'responsive-design',
|
|
429
|
+
title: ' Mobile-First Design',
|
|
430
|
+
description: 'All components are responsive and work perfectly across all device sizes.',
|
|
431
|
+
},
|
|
432
|
+
]}
|
|
433
|
+
/>
|
|
434
|
+
</Content>
|
|
435
|
+
</Section>
|
|
436
436
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
437
|
+
<Section background="alternate">
|
|
438
|
+
<Content title="Theme System Demo" centered>
|
|
439
|
+
<Typography variant="body1">
|
|
440
|
+
Try switching themes and palettes using the controls above. All components automatically adapt to your selected theme and color scheme.
|
|
441
|
+
</Typography>
|
|
442
|
+
</Content>
|
|
443
|
+
</Section>
|
|
444
|
+
</QwickApp>
|
|
445
|
+
),
|
|
446
|
+
decorators: [],
|
|
447
|
+
parameters: {
|
|
448
|
+
docs: {
|
|
449
|
+
description: {
|
|
450
|
+
story: `Demonstrates QwickApp and Scaffold integration - the two core components working together.
|
|
451
|
+
|
|
452
452
|
**Integration Highlights:**
|
|
453
453
|
- QwickApp manages theme system and storage isolation
|
|
454
|
-
- Scaffold provides responsive navigation and app layout
|
|
454
|
+
- Scaffold provides responsive navigation and app layout
|
|
455
455
|
- Theme switchers in app bar demonstrate real-time updates
|
|
456
456
|
- All layout components automatically inherit theme colors
|
|
457
457
|
- Clean component separation with clear responsibilities`,
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
},
|
|
461
461
|
};
|