@qwickapps/react-framework 1.3.5 → 1.4.1
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 +1691 -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/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/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/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 +10951 -6238
- package/dist/index.js +11014 -6287
- 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/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 +1 -1
- 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/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
|
@@ -11,19 +11,19 @@ import Logo from '../components/Logo';
|
|
|
11
11
|
import QwickApp from '../components/QwickApp';
|
|
12
12
|
|
|
13
13
|
const meta: Meta<typeof Footer> = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
title: 'Blocks/Footer',
|
|
15
|
+
component: Footer,
|
|
16
|
+
parameters: {
|
|
17
|
+
layout: 'fullscreen',
|
|
18
|
+
docs: {
|
|
19
|
+
description: {
|
|
20
|
+
component: `The Footer component provides a flexible and responsive footer layout with multiple sections, legal information, and branding options.
|
|
21
21
|
|
|
22
22
|
**Key Features:**
|
|
23
23
|
- **Flexible Sections**: Organize links and content into logical groups with titles
|
|
24
24
|
- **Responsive Layout**: Automatically adapts between vertical/horizontal orientations based on screen size
|
|
25
25
|
- **Legal Information**: Built-in support for copyright notices and legal text
|
|
26
|
-
- **Multiple Variants**: Default, contained, and outlined styling options
|
|
26
|
+
- **Multiple Variants**: Default, contained, and outlined styling options
|
|
27
27
|
- **Logo/Branding**: Optional logo or custom branding element
|
|
28
28
|
- **Link Management**: Support for internal and external links with proper accessibility
|
|
29
29
|
|
|
@@ -34,42 +34,42 @@ const meta: Meta<typeof Footer> = {
|
|
|
34
34
|
- Company information and contact details
|
|
35
35
|
- Site navigation and resource links
|
|
36
36
|
- Brand reinforcement and social links`,
|
|
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
|
-
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
tags: ['autodocs'],
|
|
41
|
+
argTypes: {
|
|
42
|
+
sections: {
|
|
43
|
+
description: 'Footer sections with titles and links',
|
|
44
|
+
control: { type: 'object' },
|
|
45
|
+
},
|
|
46
|
+
logo: {
|
|
47
|
+
description: 'Optional logo or branding element',
|
|
48
|
+
control: false,
|
|
49
|
+
},
|
|
50
|
+
copyright: {
|
|
51
|
+
description: 'Copyright text',
|
|
52
|
+
control: { type: 'text' },
|
|
53
|
+
},
|
|
54
|
+
legalText: {
|
|
55
|
+
description: 'Additional legal or info text',
|
|
56
|
+
control: { type: 'text' },
|
|
57
|
+
},
|
|
58
|
+
orientation: {
|
|
59
|
+
description: 'Layout orientation',
|
|
60
|
+
control: { type: 'select' },
|
|
61
|
+
options: ['vertical', 'horizontal'],
|
|
62
|
+
},
|
|
63
|
+
variant: {
|
|
64
|
+
description: 'Background variant',
|
|
65
|
+
control: { type: 'select' },
|
|
66
|
+
options: ['default', 'contained', 'outlined'],
|
|
67
|
+
},
|
|
68
|
+
showDivider: {
|
|
69
|
+
description: 'Whether to show divider above footer',
|
|
70
|
+
control: { type: 'boolean' },
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
73
|
} satisfies Meta<typeof Footer>;
|
|
74
74
|
|
|
75
75
|
export default meta;
|
|
@@ -77,648 +77,648 @@ type Story = StoryObj<typeof meta>;
|
|
|
77
77
|
|
|
78
78
|
// Sample footer sections for demos
|
|
79
79
|
const sampleSections = [
|
|
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
|
-
|
|
80
|
+
{
|
|
81
|
+
id: 'product',
|
|
82
|
+
title: 'Product',
|
|
83
|
+
items: [
|
|
84
|
+
{ id: 'features', label: 'Features', href: '#features' },
|
|
85
|
+
{ id: 'pricing', label: 'Pricing', href: '#pricing' },
|
|
86
|
+
{ id: 'documentation', label: 'Documentation', href: '#docs' },
|
|
87
|
+
{ id: 'api', label: 'API Reference', href: '#api' },
|
|
88
|
+
{ id: 'changelog', label: 'Changelog', href: '#changelog' },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'company',
|
|
93
|
+
title: 'Company',
|
|
94
|
+
items: [
|
|
95
|
+
{ id: 'about', label: 'About Us', href: '#about' },
|
|
96
|
+
{ id: 'careers', label: 'Careers', href: '#careers' },
|
|
97
|
+
{ id: 'blog', label: 'Blog', href: '#blog' },
|
|
98
|
+
{ id: 'press', label: 'Press Kit', href: '#press' },
|
|
99
|
+
{ id: 'contact', label: 'Contact', href: '#contact' },
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
id: 'resources',
|
|
104
|
+
title: 'Resources',
|
|
105
|
+
items: [
|
|
106
|
+
{ id: 'help', label: 'Help Center', href: '#help' },
|
|
107
|
+
{ id: 'community', label: 'Community', href: '#community' },
|
|
108
|
+
{ id: 'tutorials', label: 'Tutorials', href: '#tutorials' },
|
|
109
|
+
{ id: 'webinars', label: 'Webinars', href: '#webinars' },
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'legal',
|
|
114
|
+
title: 'Legal',
|
|
115
|
+
items: [
|
|
116
|
+
{ id: 'privacy', label: 'Privacy Policy', href: '#privacy' },
|
|
117
|
+
{ id: 'terms', label: 'Terms of Service', href: '#terms' },
|
|
118
|
+
{ id: 'cookies', label: 'Cookie Policy', href: '#cookies' },
|
|
119
|
+
{ id: 'gdpr', label: 'GDPR Compliance', href: '#gdpr' },
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
122
|
];
|
|
123
123
|
|
|
124
124
|
const socialSections = [
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
{
|
|
126
|
+
id: 'social',
|
|
127
|
+
title: 'Follow Us',
|
|
128
|
+
items: [
|
|
129
|
+
{ id: 'twitter', label: 'Twitter', href: 'https://twitter.com/qwickapps', external: true },
|
|
130
|
+
{ id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/company/qwickapps', external: true },
|
|
131
|
+
{ id: 'github', label: 'GitHub', href: 'https://github.com/qwickapps', external: true },
|
|
132
|
+
{ id: 'youtube', label: 'YouTube', href: 'https://youtube.com/@qwickapps', external: true },
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
135
|
];
|
|
136
136
|
|
|
137
137
|
// Sample CMS data for data binding stories
|
|
138
138
|
const sampleCmsData = {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
+
'footers': {
|
|
140
|
+
'main': {
|
|
141
|
+
sections: [
|
|
142
|
+
{
|
|
143
|
+
id: 'products',
|
|
144
|
+
title: 'Products',
|
|
145
|
+
items: [
|
|
146
|
+
{ id: 'framework', label: 'QwickApps React Framework', href: '/framework' },
|
|
147
|
+
{ id: 'builder', label: 'QwickApp Builder', href: '/builder' },
|
|
148
|
+
{ id: 'cms', label: 'QwickCMS', href: '/cms' },
|
|
149
|
+
{ id: 'templates', label: 'Templates', href: '/templates' }
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
id: 'developers',
|
|
154
|
+
title: 'Developers',
|
|
155
|
+
items: [
|
|
156
|
+
{ id: 'docs', label: 'Documentation', href: '/docs' },
|
|
157
|
+
{ id: 'api', label: 'API Reference', href: '/api' },
|
|
158
|
+
{ id: 'guides', label: 'Guides', href: '/guides' },
|
|
159
|
+
{ id: 'community', label: 'Community', href: '/community' }
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: 'company',
|
|
164
|
+
title: 'Company',
|
|
165
|
+
items: [
|
|
166
|
+
{ id: 'about', label: 'About Us', href: '/about' },
|
|
167
|
+
{ id: 'careers', label: 'Careers', href: '/careers' },
|
|
168
|
+
{ id: 'contact', label: 'Contact', href: '/contact' },
|
|
169
|
+
{ id: 'blog', label: 'Blog', href: '/blog' }
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
id: 'social',
|
|
174
|
+
title: 'Connect',
|
|
175
|
+
items: [
|
|
176
|
+
{ id: 'twitter', label: 'Twitter', href: 'https://twitter.com/qwickapps', external: true },
|
|
177
|
+
{ id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/company/qwickapps', external: true },
|
|
178
|
+
{ id: 'github', label: 'GitHub', href: 'https://github.com/qwickapps', external: true }
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
logo: '<strong style="font-size: 1.5rem; color: #1976d2;">QwickApps</strong>',
|
|
183
|
+
copyright: '© 2025 QwickApps. All rights reserved.',
|
|
184
|
+
legalText: 'Privacy Policy | Terms of Service | Cookie Policy',
|
|
185
|
+
orientation: 'vertical',
|
|
186
|
+
variant: 'default',
|
|
187
|
+
showDivider: true
|
|
188
|
+
},
|
|
189
|
+
'startup': {
|
|
190
|
+
sections: [
|
|
191
|
+
{
|
|
192
|
+
id: 'links',
|
|
193
|
+
items: [
|
|
194
|
+
{ id: 'home', label: 'Home', href: '/' },
|
|
195
|
+
{ id: 'about', label: 'About', href: '/about' },
|
|
196
|
+
{ id: 'services', label: 'Services', href: '/services' },
|
|
197
|
+
{ id: 'contact', label: 'Contact', href: '/contact' }
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
copyright: '© 2025 Startup Inc.',
|
|
202
|
+
orientation: 'horizontal',
|
|
203
|
+
variant: 'contained',
|
|
204
|
+
showDivider: false
|
|
205
|
+
},
|
|
206
|
+
'ecommerce': {
|
|
207
|
+
sections: [
|
|
208
|
+
{
|
|
209
|
+
id: 'shop',
|
|
210
|
+
title: 'Shop',
|
|
211
|
+
items: [
|
|
212
|
+
{ id: 'products', label: 'All Products', href: '/products' },
|
|
213
|
+
{ id: 'sale', label: 'Sale', href: '/sale' },
|
|
214
|
+
{ id: 'new', label: 'New Arrivals', href: '/new' }
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
id: 'support',
|
|
219
|
+
title: 'Customer Support',
|
|
220
|
+
items: [
|
|
221
|
+
{ id: 'help', label: 'Help Center', href: '/help' },
|
|
222
|
+
{ id: 'returns', label: 'Returns', href: '/returns' },
|
|
223
|
+
{ id: 'shipping', label: 'Shipping Info', href: '/shipping' }
|
|
224
|
+
]
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
copyright: '© 2025 E-Store. All rights reserved.',
|
|
228
|
+
legalText: 'Privacy | Terms | Returns Policy',
|
|
229
|
+
orientation: 'vertical',
|
|
230
|
+
variant: 'outlined',
|
|
231
|
+
showDivider: true
|
|
232
|
+
},
|
|
233
|
+
'minimal': {
|
|
234
|
+
copyright: '© 2025 Minimal Site',
|
|
235
|
+
variant: 'default',
|
|
236
|
+
showDivider: false
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
239
|
};
|
|
240
240
|
|
|
241
241
|
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
242
242
|
|
|
243
243
|
export const BasicFooter: Story = {
|
|
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
|
-
|
|
244
|
+
args: {
|
|
245
|
+
sections: sampleSections.slice(0, 2),
|
|
246
|
+
copyright: '© 2025 QwickApps. All rights reserved.',
|
|
247
|
+
orientation: 'horizontal',
|
|
248
|
+
variant: 'default',
|
|
249
|
+
showDivider: true,
|
|
250
|
+
},
|
|
251
|
+
render: (args) => (
|
|
252
|
+
<QwickApp appId="footer-basic" appName='Footer Basic'>
|
|
253
|
+
<div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
254
|
+
<div style={{ textAlign: 'center', maxWidth: '600px' }}>
|
|
255
|
+
<h2>Page Content</h2>
|
|
256
|
+
<p>This is the main page content. Scroll down to see the footer.</p>
|
|
257
|
+
<p>The footer will appear below this content with organized sections and copyright information.</p>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
<Footer {...args} />
|
|
261
|
+
</QwickApp>
|
|
262
|
+
),
|
|
263
|
+
parameters: {
|
|
264
|
+
docs: {
|
|
265
|
+
description: {
|
|
266
|
+
story: 'Basic footer with two sections and copyright information. Clean and minimal design.',
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
270
|
};
|
|
271
271
|
|
|
272
272
|
export const ComprehensiveFooter: Story = {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
273
|
+
args: {
|
|
274
|
+
logo: <Logo name="Qwick Apps" size="small" />,
|
|
275
|
+
sections: sampleSections,
|
|
276
|
+
copyright: '© 2025 QwickApps Inc. All rights reserved.',
|
|
277
|
+
legalText: 'Privacy Policy • Terms of Service • Cookie Settings',
|
|
278
|
+
orientation: 'horizontal',
|
|
279
|
+
variant: 'contained',
|
|
280
|
+
showDivider: true,
|
|
281
|
+
},
|
|
282
|
+
render: (args) => (
|
|
283
|
+
<QwickApp appId="footer-comprehensive" appName='Footer Comprehensive'>
|
|
284
|
+
<div style={{ minHeight: '60vh', padding: '2rem' }}>
|
|
285
|
+
<div style={{ maxWidth: '800px', margin: '0 auto' }}>
|
|
286
|
+
<h1>QwickApps Platform</h1>
|
|
287
|
+
<p>
|
|
288
|
+
Build amazing React applications with our comprehensive component library and development tools.
|
|
289
|
+
Our platform provides everything you need to create modern, accessible, and performant web applications.
|
|
290
|
+
</p>
|
|
291
291
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
292
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: '2rem', margin: '3rem 0' }}>
|
|
293
|
+
<div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
|
|
294
|
+
<h3> Components</h3>
|
|
295
|
+
<p>Over 50+ production-ready components with TypeScript support.</p>
|
|
296
|
+
</div>
|
|
297
|
+
<div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
|
|
298
|
+
<h3> Theming</h3>
|
|
299
|
+
<p>Flexible theming system with dark mode and custom palettes.</p>
|
|
300
|
+
</div>
|
|
301
|
+
<div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
|
|
302
|
+
<h3> Responsive</h3>
|
|
303
|
+
<p>Mobile-first design with comprehensive responsive breakpoints.</p>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
<Footer {...args} />
|
|
309
|
+
</QwickApp>
|
|
310
|
+
),
|
|
311
|
+
parameters: {
|
|
312
|
+
docs: {
|
|
313
|
+
description: {
|
|
314
|
+
story: 'Comprehensive footer with logo, multiple sections, and legal information. Perfect for business websites and applications.',
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
318
|
};
|
|
319
319
|
|
|
320
320
|
export const VerticalLayout: Story = {
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
321
|
+
args: {
|
|
322
|
+
logo: (
|
|
323
|
+
<div style={{
|
|
324
|
+
fontWeight: 'bold',
|
|
325
|
+
fontSize: '1.5rem',
|
|
326
|
+
background: 'linear-gradient(45deg, #2196F3, #21CBF3)',
|
|
327
|
+
WebkitBackgroundClip: 'text',
|
|
328
|
+
WebkitTextFillColor: 'transparent',
|
|
329
|
+
backgroundClip: 'text'
|
|
330
|
+
}}>
|
|
331
|
+
BRAND
|
|
332
|
+
</div>
|
|
333
|
+
),
|
|
334
|
+
sections: sampleSections.slice(0, 3),
|
|
335
|
+
copyright: '© 2025 Brand Corp.',
|
|
336
|
+
legalText: 'Privacy • Terms • Cookies',
|
|
337
|
+
orientation: 'vertical',
|
|
338
|
+
variant: 'outlined',
|
|
339
|
+
showDivider: true,
|
|
340
|
+
},
|
|
341
|
+
render: (args) => (
|
|
342
|
+
<QwickApp appId="footer-vertical" appName='Footer Vertical'>
|
|
343
|
+
<div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
344
|
+
<div style={{ textAlign: 'center', maxWidth: '600px' }}>
|
|
345
|
+
<h2>Vertical Footer Layout</h2>
|
|
346
|
+
<p>This demonstrates the vertical orientation where sections are stacked on top of each other.</p>
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
<Footer {...args} />
|
|
350
|
+
</QwickApp>
|
|
351
|
+
),
|
|
352
|
+
parameters: {
|
|
353
|
+
docs: {
|
|
354
|
+
description: {
|
|
355
|
+
story: 'Vertical footer layout with sections stacked on top of each other. Automatically switches to horizontal on larger screens for better usability.',
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
359
|
};
|
|
360
360
|
|
|
361
361
|
export const SocialMediaFooter: Story = {
|
|
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
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
362
|
+
args: {
|
|
363
|
+
logo: (
|
|
364
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
|
|
365
|
+
<div style={{
|
|
366
|
+
width: '32px',
|
|
367
|
+
height: '32px',
|
|
368
|
+
background: 'linear-gradient(45deg, #FF6B6B, #4ECDC4)',
|
|
369
|
+
borderRadius: '8px',
|
|
370
|
+
display: 'flex',
|
|
371
|
+
alignItems: 'center',
|
|
372
|
+
justifyContent: 'center',
|
|
373
|
+
fontSize: '1.2rem',
|
|
374
|
+
}}>
|
|
375
|
+
|
|
376
|
+
</div>
|
|
377
|
+
<span style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>SocialApp</span>
|
|
378
|
+
</div>
|
|
379
|
+
),
|
|
380
|
+
sections: [
|
|
381
|
+
...sampleSections.slice(0, 2),
|
|
382
|
+
...socialSections,
|
|
383
|
+
],
|
|
384
|
+
copyright: '© 2025 SocialApp. Made with ❤ in San Francisco.',
|
|
385
|
+
legalText: 'Privacy Policy • Community Guidelines • Terms of Use',
|
|
386
|
+
orientation: 'horizontal',
|
|
387
|
+
variant: 'contained',
|
|
388
|
+
showDivider: false,
|
|
389
|
+
},
|
|
390
|
+
render: (args) => (
|
|
391
|
+
<QwickApp appId="footer-social" appName='Footer Social'>
|
|
392
|
+
<div style={{
|
|
393
|
+
minHeight: '60vh',
|
|
394
|
+
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
395
|
+
padding: '3rem 2rem',
|
|
396
|
+
display: 'flex',
|
|
397
|
+
alignItems: 'center',
|
|
398
|
+
justifyContent: 'center',
|
|
399
|
+
color: 'white'
|
|
400
|
+
}}>
|
|
401
|
+
<div style={{ textAlign: 'center', maxWidth: '700px' }}>
|
|
402
|
+
<h1 style={{ fontSize: '3rem', marginBottom: '1rem' }}>Connect & Share</h1>
|
|
403
|
+
<p style={{ fontSize: '1.2rem', opacity: 0.9 }}>
|
|
404
|
+
Join millions of users sharing their stories, connecting with friends, and discovering amazing content every day.
|
|
405
|
+
</p>
|
|
406
|
+
<button style={{
|
|
407
|
+
marginTop: '2rem',
|
|
408
|
+
padding: '1rem 2rem',
|
|
409
|
+
fontSize: '1.1rem',
|
|
410
|
+
backgroundColor: 'white',
|
|
411
|
+
color: '#667eea',
|
|
412
|
+
border: 'none',
|
|
413
|
+
borderRadius: '8px',
|
|
414
|
+
fontWeight: 'bold',
|
|
415
|
+
cursor: 'pointer'
|
|
416
|
+
}}>
|
|
417
|
+
Get Started Today
|
|
418
|
+
</button>
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
<Footer {...args} />
|
|
422
|
+
</QwickApp>
|
|
423
|
+
),
|
|
424
|
+
parameters: {
|
|
425
|
+
docs: {
|
|
426
|
+
description: {
|
|
427
|
+
story: 'Social media style footer with custom logo, social links, and community-focused content.',
|
|
428
|
+
},
|
|
429
|
+
},
|
|
430
|
+
},
|
|
431
431
|
};
|
|
432
432
|
|
|
433
433
|
export const MinimalFooter: Story = {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
434
|
+
args: {
|
|
435
|
+
copyright: '© 2025 Minimal Co.',
|
|
436
|
+
legalText: 'Privacy • Terms',
|
|
437
|
+
orientation: 'horizontal',
|
|
438
|
+
variant: 'default',
|
|
439
|
+
showDivider: false,
|
|
440
|
+
},
|
|
441
|
+
render: (args) => (
|
|
442
|
+
<QwickApp appId="footer-minimal" appName='Footer Minimal'>
|
|
443
|
+
<div style={{ minHeight: '70vh', padding: '3rem 2rem' }}>
|
|
444
|
+
<div style={{ maxWidth: '600px', margin: '0 auto', textAlign: 'center' }}>
|
|
445
|
+
<h1>Less is More</h1>
|
|
446
|
+
<p style={{ fontSize: '1.1rem', lineHeight: 1.6, margin: '2rem 0' }}>
|
|
447
|
+
Sometimes the most elegant solution is the simplest one. This minimal footer
|
|
448
|
+
contains only the essential legal information without any additional sections or navigation.
|
|
449
|
+
</p>
|
|
450
|
+
<p>
|
|
451
|
+
Perfect for landing pages, portfolios, or applications where you want to keep
|
|
452
|
+
the focus on your main content while still providing necessary legal compliance.
|
|
453
|
+
</p>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
<Footer {...args} />
|
|
457
|
+
</QwickApp>
|
|
458
|
+
),
|
|
459
|
+
parameters: {
|
|
460
|
+
docs: {
|
|
461
|
+
description: {
|
|
462
|
+
story: 'Minimal footer with only copyright and legal text. Perfect for simple pages and focused designs.',
|
|
463
|
+
},
|
|
464
|
+
},
|
|
465
|
+
},
|
|
466
466
|
};
|
|
467
467
|
|
|
468
468
|
export const VariantComparison: Story = {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
469
|
+
render: () => (
|
|
470
|
+
<QwickApp appId="footer-variants" appName='Footer Variants'>
|
|
471
|
+
<div style={{ display: 'flex', flexDirection: 'column' }}>
|
|
472
|
+
{/* Default Variant */}
|
|
473
|
+
<div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#f5f5f5' }}>
|
|
474
|
+
<div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
|
|
475
|
+
<h2>Default Variant</h2>
|
|
476
|
+
<p>Transparent background, blends with page content.</p>
|
|
477
|
+
</div>
|
|
478
|
+
</div>
|
|
479
|
+
<Footer
|
|
480
|
+
sections={sampleSections.slice(0, 2)}
|
|
481
|
+
copyright="© 2025 Default Footer"
|
|
482
|
+
variant="default"
|
|
483
|
+
/>
|
|
484
484
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
485
|
+
{/* Contained Variant */}
|
|
486
|
+
<div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#e3f2fd' }}>
|
|
487
|
+
<div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
|
|
488
|
+
<h2>Contained Variant</h2>
|
|
489
|
+
<p>Solid background color for clear separation from content.</p>
|
|
490
|
+
</div>
|
|
491
|
+
</div>
|
|
492
|
+
<Footer
|
|
493
|
+
sections={sampleSections.slice(0, 2)}
|
|
494
|
+
copyright="© 2025 Contained Footer"
|
|
495
|
+
variant="contained"
|
|
496
|
+
/>
|
|
497
497
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
498
|
+
{/* Outlined Variant */}
|
|
499
|
+
<div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#fff3e0' }}>
|
|
500
|
+
<div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
|
|
501
|
+
<h2>Outlined Variant</h2>
|
|
502
|
+
<p>Border outline for subtle definition without heavy background.</p>
|
|
503
|
+
</div>
|
|
504
|
+
</div>
|
|
505
|
+
<Footer
|
|
506
|
+
sections={sampleSections.slice(0, 2)}
|
|
507
|
+
copyright="© 2025 Outlined Footer"
|
|
508
|
+
variant="outlined"
|
|
509
|
+
/>
|
|
510
|
+
</div>
|
|
511
|
+
</QwickApp>
|
|
512
|
+
),
|
|
513
|
+
parameters: {
|
|
514
|
+
docs: {
|
|
515
|
+
description: {
|
|
516
|
+
story: 'Comparison of footer variants: default (transparent), contained (solid background), and outlined (border).',
|
|
517
|
+
},
|
|
518
|
+
},
|
|
519
|
+
},
|
|
520
520
|
};
|
|
521
521
|
|
|
522
522
|
export const DeveloperFooter: Story = {
|
|
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
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
523
|
+
args: {
|
|
524
|
+
logo: (
|
|
525
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
|
|
526
|
+
<span style={{ fontSize: '1.5rem' }}>👩</span>
|
|
527
|
+
<span style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>DevPortfolio</span>
|
|
528
|
+
</div>
|
|
529
|
+
),
|
|
530
|
+
sections: [
|
|
531
|
+
{
|
|
532
|
+
id: 'projects',
|
|
533
|
+
title: 'Projects',
|
|
534
|
+
items: [
|
|
535
|
+
{ id: 'web-apps', label: 'Web Applications', href: '#web-apps' },
|
|
536
|
+
{ id: 'mobile-apps', label: 'Mobile Apps', href: '#mobile-apps' },
|
|
537
|
+
{ id: 'open-source', label: 'Open Source', href: '#open-source' },
|
|
538
|
+
{ id: 'experiments', label: 'Experiments', href: '#experiments' },
|
|
539
|
+
],
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
id: 'skills',
|
|
543
|
+
title: 'Skills',
|
|
544
|
+
items: [
|
|
545
|
+
{ id: 'frontend', label: 'Frontend Development', onClick: () => alert('Frontend skills') },
|
|
546
|
+
{ id: 'backend', label: 'Backend Development', onClick: () => alert('Backend skills') },
|
|
547
|
+
{ id: 'devops', label: 'DevOps & Cloud', onClick: () => alert('DevOps skills') },
|
|
548
|
+
{ id: 'design', label: 'UI/UX Design', onClick: () => alert('Design skills') },
|
|
549
|
+
],
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
id: 'connect',
|
|
553
|
+
title: 'Connect',
|
|
554
|
+
items: [
|
|
555
|
+
{ id: 'email', label: 'Email', href: 'mailto:hello@devportfolio.com' },
|
|
556
|
+
{ id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/in/developer', external: true },
|
|
557
|
+
{ id: 'github', label: 'GitHub', href: 'https://github.com/developer', external: true },
|
|
558
|
+
{ id: 'resume', label: 'Download Resume', href: '/resume.pdf', external: true },
|
|
559
|
+
],
|
|
560
|
+
},
|
|
561
|
+
],
|
|
562
|
+
copyright: '© 2025 Jane Developer. Built with React and TypeScript.',
|
|
563
|
+
legalText: 'Available for hire • Open to opportunities',
|
|
564
|
+
orientation: 'horizontal',
|
|
565
|
+
variant: 'default',
|
|
566
|
+
showDivider: true,
|
|
567
|
+
},
|
|
568
|
+
render: (args) => (
|
|
569
|
+
<QwickApp appId="footer-developer" appName='Footer Developer'>
|
|
570
|
+
<div style={{ padding: '2rem' }}>
|
|
571
|
+
<div style={{ maxWidth: '800px', margin: '0 auto' }}>
|
|
572
|
+
<h1>Jane Developer</h1>
|
|
573
|
+
<p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8 }}>
|
|
574
|
+
Full-Stack Developer & UI/UX Designer
|
|
575
|
+
</p>
|
|
576
576
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
577
|
+
<div style={{ margin: '3rem 0' }}>
|
|
578
|
+
<h2>Featured Projects</h2>
|
|
579
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: '2rem', marginTop: '2rem' }}>
|
|
580
|
+
<div style={{ padding: '2rem', border: '1px solid var(--theme-outline)', borderRadius: '12px' }}>
|
|
581
|
+
<h3> Task Management App</h3>
|
|
582
|
+
<p>React, TypeScript, Node.js, PostgreSQL</p>
|
|
583
|
+
<div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
|
|
584
|
+
<button style={{ padding: '0.5rem 1rem', backgroundColor: 'var(--theme-primary)', color: 'white', border: 'none', borderRadius: '4px' }}>
|
|
585
|
+
View Project
|
|
586
|
+
</button>
|
|
587
|
+
<button style={{ padding: '0.5rem 1rem', border: '1px solid var(--theme-outline)', backgroundColor: 'transparent', borderRadius: '4px' }}>
|
|
588
|
+
GitHub
|
|
589
|
+
</button>
|
|
590
|
+
</div>
|
|
591
|
+
</div>
|
|
592
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
|
-
|
|
593
|
+
<div style={{ padding: '2rem', border: '1px solid var(--theme-outline)', borderRadius: '12px' }}>
|
|
594
|
+
<h3> Design System</h3>
|
|
595
|
+
<p>React, Storybook, Figma, Design Tokens</p>
|
|
596
|
+
<div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
|
|
597
|
+
<button style={{ padding: '0.5rem 1rem', backgroundColor: 'var(--theme-primary)', color: 'white', border: 'none', borderRadius: '4px' }}>
|
|
598
|
+
View Project
|
|
599
|
+
</button>
|
|
600
|
+
<button style={{ padding: '0.5rem 1rem', border: '1px solid var(--theme-outline)', backgroundColor: 'transparent', borderRadius: '4px' }}>
|
|
601
|
+
GitHub
|
|
602
|
+
</button>
|
|
603
|
+
</div>
|
|
604
|
+
</div>
|
|
605
|
+
</div>
|
|
606
|
+
</div>
|
|
607
|
+
</div>
|
|
608
|
+
</div>
|
|
609
|
+
<Footer {...args} />
|
|
610
|
+
</QwickApp>
|
|
611
|
+
),
|
|
612
|
+
parameters: {
|
|
613
|
+
docs: {
|
|
614
|
+
description: {
|
|
615
|
+
story: 'Developer portfolio footer with projects, skills, and professional contact information. Perfect for personal websites and portfolios.',
|
|
616
|
+
},
|
|
617
|
+
},
|
|
618
|
+
},
|
|
619
619
|
};
|
|
620
620
|
|
|
621
621
|
// Data Binding Stories
|
|
622
622
|
export const DataBindingMain: Story = {
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
623
|
+
args: {
|
|
624
|
+
dataSource: 'footers.main',
|
|
625
|
+
},
|
|
626
|
+
render: (args) => (
|
|
627
|
+
<QwickApp appId="footer-data-main" appName='Footer Data Binding Main' dataSource={{ dataProvider }}>
|
|
628
|
+
<div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
629
|
+
<div style={{ textAlign: 'center', maxWidth: '600px' }}>
|
|
630
|
+
<h1>Company Website</h1>
|
|
631
|
+
<p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
|
|
632
|
+
Complete footer loaded from CMS with multiple sections, logo, copyright, and legal information.
|
|
633
|
+
</p>
|
|
634
|
+
</div>
|
|
635
|
+
</div>
|
|
636
|
+
<Footer {...args} />
|
|
637
|
+
</QwickApp>
|
|
638
|
+
),
|
|
639
|
+
parameters: {
|
|
640
|
+
docs: {
|
|
641
|
+
description: {
|
|
642
|
+
story: 'Footer content loaded from CMS data source. Shows comprehensive footer with multiple navigation sections, social links, and legal information.',
|
|
643
|
+
},
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
646
|
};
|
|
647
647
|
|
|
648
648
|
export const DataBindingStartup: Story = {
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
649
|
+
args: {
|
|
650
|
+
dataSource: 'footers.startup',
|
|
651
|
+
},
|
|
652
|
+
render: (args) => (
|
|
653
|
+
<QwickApp appId="footer-data-startup" appName='Footer Data Binding Startup' dataSource={{ dataProvider }}>
|
|
654
|
+
<div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
655
|
+
<div style={{ textAlign: 'center', maxWidth: '600px' }}>
|
|
656
|
+
<h1>Startup Landing</h1>
|
|
657
|
+
<p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
|
|
658
|
+
Simple horizontal footer layout perfect for startup landing pages.
|
|
659
|
+
</p>
|
|
660
|
+
</div>
|
|
661
|
+
</div>
|
|
662
|
+
<Footer {...args} />
|
|
663
|
+
</QwickApp>
|
|
664
|
+
),
|
|
665
|
+
parameters: {
|
|
666
|
+
docs: {
|
|
667
|
+
description: {
|
|
668
|
+
story: 'Startup-style footer loaded from CMS. Features horizontal layout with contained variant and minimal links.',
|
|
669
|
+
},
|
|
670
|
+
},
|
|
671
|
+
},
|
|
672
672
|
};
|
|
673
673
|
|
|
674
674
|
export const DataBindingEcommerce: Story = {
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
675
|
+
args: {
|
|
676
|
+
dataSource: 'footers.ecommerce',
|
|
677
|
+
},
|
|
678
|
+
render: (args) => (
|
|
679
|
+
<QwickApp appId="footer-data-ecommerce" appName='Footer Data Binding Ecommerce' dataSource={{ dataProvider }}>
|
|
680
|
+
<div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
681
|
+
<div style={{ textAlign: 'center', maxWidth: '600px' }}>
|
|
682
|
+
<h1>E-Commerce Store</h1>
|
|
683
|
+
<p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
|
|
684
|
+
E-commerce footer with shopping categories and customer support sections.
|
|
685
|
+
</p>
|
|
686
|
+
</div>
|
|
687
|
+
</div>
|
|
688
|
+
<Footer {...args} />
|
|
689
|
+
</QwickApp>
|
|
690
|
+
),
|
|
691
|
+
parameters: {
|
|
692
|
+
docs: {
|
|
693
|
+
description: {
|
|
694
|
+
story: 'E-commerce footer loaded from CMS. Features outlined variant with shopping and support sections.',
|
|
695
|
+
},
|
|
696
|
+
},
|
|
697
|
+
},
|
|
698
698
|
};
|
|
699
699
|
|
|
700
700
|
export const DataBindingMinimal: Story = {
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
701
|
+
args: {
|
|
702
|
+
dataSource: 'footers.minimal',
|
|
703
|
+
},
|
|
704
|
+
render: (args) => (
|
|
705
|
+
<QwickApp appId="footer-data-minimal" appName='Footer Data Binding Minimal' dataSource={{ dataProvider }}>
|
|
706
|
+
<div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
|
|
707
|
+
<div style={{ textAlign: 'center', maxWidth: '600px' }}>
|
|
708
|
+
<h1>Minimal Site</h1>
|
|
709
|
+
<p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
|
|
710
|
+
Ultra-minimal footer with just copyright information.
|
|
711
|
+
</p>
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
714
|
+
<Footer {...args} />
|
|
715
|
+
</QwickApp>
|
|
716
|
+
),
|
|
717
|
+
parameters: {
|
|
718
|
+
docs: {
|
|
719
|
+
description: {
|
|
720
|
+
story: 'Minimal footer loaded from CMS. Shows the simplest possible footer with just copyright text.',
|
|
721
|
+
},
|
|
722
|
+
},
|
|
723
|
+
},
|
|
724
724
|
};
|