@qwickapps/react-framework 1.3.5 → 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 +1681 -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
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Component Stories - Comprehensive typography with data binding support
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Box, Divider, Typography, Alert, Paper, Grid } from '@mui/material';
|
|
8
|
+
import { JsonDataProvider } from '@qwickapps/schema';
|
|
9
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
10
|
+
import { Text } from '../components/blocks';
|
|
11
|
+
import { ComponentTransformer } from '../schemas/transformers/ComponentTransformer';
|
|
12
|
+
import { ModelView } from '../components/base/ModelView';
|
|
13
|
+
import QwickApp from '../components/QwickApp';
|
|
14
|
+
import React from 'react';
|
|
15
|
+
|
|
16
|
+
// Sample text content for different use cases
|
|
17
|
+
const sampleContent = {
|
|
18
|
+
headings: {
|
|
19
|
+
hero: 'Transform Your Ideas Into Reality',
|
|
20
|
+
section: 'Why Choose QwickApps?',
|
|
21
|
+
subsection: 'Built for Modern Development'
|
|
22
|
+
},
|
|
23
|
+
body: {
|
|
24
|
+
introduction: 'QwickApps provides a comprehensive React framework with advanced serialization capabilities, making it easy to build dynamic, data-driven applications.',
|
|
25
|
+
description: 'Our components are designed with accessibility, performance, and developer experience in mind. Each component supports full serialization for "WebView for React" functionality.',
|
|
26
|
+
conclusion: 'Get started today and see how QwickApps can accelerate your development workflow.'
|
|
27
|
+
},
|
|
28
|
+
ui: {
|
|
29
|
+
buttonText: 'Get Started Now',
|
|
30
|
+
linkText: 'Learn More',
|
|
31
|
+
caption: 'Photo by John Doe on Unsplash'
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// Sample CMS data for data binding examples
|
|
36
|
+
const sampleCmsData = {
|
|
37
|
+
content: {
|
|
38
|
+
heroTitle: {
|
|
39
|
+
content: sampleContent.headings.hero,
|
|
40
|
+
variant: 'h1',
|
|
41
|
+
color: 'primary',
|
|
42
|
+
align: 'center',
|
|
43
|
+
gutterBottom: true,
|
|
44
|
+
fontWeight: 'bold'
|
|
45
|
+
},
|
|
46
|
+
sectionHeading: {
|
|
47
|
+
content: sampleContent.headings.section,
|
|
48
|
+
variant: 'h2',
|
|
49
|
+
color: 'textPrimary',
|
|
50
|
+
align: 'left',
|
|
51
|
+
gutterBottom: true,
|
|
52
|
+
textTransform: 'uppercase',
|
|
53
|
+
letterSpacing: '0.1em'
|
|
54
|
+
},
|
|
55
|
+
bodyText: {
|
|
56
|
+
content: sampleContent.body.introduction,
|
|
57
|
+
variant: 'body1',
|
|
58
|
+
color: 'textSecondary',
|
|
59
|
+
align: 'left',
|
|
60
|
+
paragraph: true,
|
|
61
|
+
lineHeight: '1.6'
|
|
62
|
+
},
|
|
63
|
+
callToAction: {
|
|
64
|
+
content: sampleContent.ui.buttonText,
|
|
65
|
+
variant: 'button',
|
|
66
|
+
color: 'primary',
|
|
67
|
+
align: 'center',
|
|
68
|
+
fontWeight: 'bold',
|
|
69
|
+
textTransform: 'uppercase'
|
|
70
|
+
},
|
|
71
|
+
caption: {
|
|
72
|
+
content: sampleContent.ui.caption,
|
|
73
|
+
variant: 'caption',
|
|
74
|
+
color: 'textSecondary',
|
|
75
|
+
align: 'right',
|
|
76
|
+
fontStyle: 'italic'
|
|
77
|
+
},
|
|
78
|
+
customStyled: {
|
|
79
|
+
content: 'Custom Typography Styling',
|
|
80
|
+
variant: 'h3',
|
|
81
|
+
customColor: '#ff6b35',
|
|
82
|
+
fontSize: '2.5rem',
|
|
83
|
+
fontFamily: '"Roboto Condensed", sans-serif',
|
|
84
|
+
textDecoration: 'underline',
|
|
85
|
+
maxWidth: '600px'
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
91
|
+
|
|
92
|
+
const meta = {
|
|
93
|
+
title: 'Components/Text',
|
|
94
|
+
component: Text,
|
|
95
|
+
parameters: {
|
|
96
|
+
layout: 'padded',
|
|
97
|
+
docs: {
|
|
98
|
+
description: {
|
|
99
|
+
component: `Text is a comprehensive typography component with advanced styling options and full serialization support.
|
|
100
|
+
|
|
101
|
+
**Key Features:**
|
|
102
|
+
- **Typography Variants**: Complete Material-UI variant support (h1-h6, body1/2, subtitle, etc.)
|
|
103
|
+
- **Rich Styling**: Color variants, alignment, font properties, and text formatting
|
|
104
|
+
- **Custom Typography**: Override fontSize, fontFamily, lineHeight, letterSpacing
|
|
105
|
+
- **Text Formatting**: Support for bold, italic, underline, and text transformation
|
|
106
|
+
- **Semantic HTML**: Proper HTML element rendering for accessibility (h1-h6, p, span, etc.)
|
|
107
|
+
- **Responsive Design**: MaxWidth control and responsive text sizing
|
|
108
|
+
- **Data Binding**: Full CMS integration through dataSource prop
|
|
109
|
+
- **Performance**: Optimized rendering with lazy evaluation
|
|
110
|
+
- **Accessibility**: Proper semantic markup and ARIA support
|
|
111
|
+
- **Customization**: Extensive styling options and theme integration
|
|
112
|
+
|
|
113
|
+
**Perfect For:**
|
|
114
|
+
- Headings and titles across all levels
|
|
115
|
+
- Body text and paragraphs
|
|
116
|
+
- UI labels and captions
|
|
117
|
+
- Call-to-action text
|
|
118
|
+
- Rich typography layouts
|
|
119
|
+
- Content management systems
|
|
120
|
+
- Dynamic text rendering
|
|
121
|
+
|
|
122
|
+
**Serialization Support:**
|
|
123
|
+
The Text component extends ModelView and supports full JSON serialization/deserialization for "WebView for React" functionality, making it perfect for dynamic content management and data-driven applications.`
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
argTypes: {
|
|
128
|
+
content: {
|
|
129
|
+
control: 'text',
|
|
130
|
+
description: 'The text content to display'
|
|
131
|
+
},
|
|
132
|
+
variant: {
|
|
133
|
+
control: 'select',
|
|
134
|
+
options: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'button', 'caption', 'overline'],
|
|
135
|
+
description: 'Typography variant that determines font size, weight, and line height'
|
|
136
|
+
},
|
|
137
|
+
color: {
|
|
138
|
+
control: 'select',
|
|
139
|
+
options: ['primary', 'secondary', 'textPrimary', 'textSecondary', 'error', 'warning', 'info', 'success', 'inherit'],
|
|
140
|
+
description: 'Color variant for the text'
|
|
141
|
+
},
|
|
142
|
+
align: {
|
|
143
|
+
control: 'select',
|
|
144
|
+
options: ['left', 'center', 'right', 'justify', 'inherit'],
|
|
145
|
+
description: 'Text alignment'
|
|
146
|
+
},
|
|
147
|
+
component: {
|
|
148
|
+
control: 'select',
|
|
149
|
+
options: ['p', 'span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'label', 'legend'],
|
|
150
|
+
description: 'HTML element to render'
|
|
151
|
+
},
|
|
152
|
+
fontWeight: {
|
|
153
|
+
control: 'select',
|
|
154
|
+
options: ['inherit', 'lighter', 'normal', 'bold', 'bolder', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
|
|
155
|
+
description: 'Font weight'
|
|
156
|
+
},
|
|
157
|
+
noWrap: {
|
|
158
|
+
control: 'boolean',
|
|
159
|
+
description: 'Prevent text wrapping'
|
|
160
|
+
},
|
|
161
|
+
paragraph: {
|
|
162
|
+
control: 'boolean',
|
|
163
|
+
description: 'Apply paragraph spacing'
|
|
164
|
+
},
|
|
165
|
+
gutterBottom: {
|
|
166
|
+
control: 'boolean',
|
|
167
|
+
description: 'Add bottom margin'
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
} satisfies Meta<typeof Text>;
|
|
171
|
+
|
|
172
|
+
export default meta;
|
|
173
|
+
type Story = StoryObj<typeof meta>;
|
|
174
|
+
|
|
175
|
+
// Basic examples
|
|
176
|
+
export const Default: Story = {
|
|
177
|
+
args: {
|
|
178
|
+
content: 'This is the default text component with body1 variant.',
|
|
179
|
+
variant: 'body1'
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
export const Heading1: Story = {
|
|
184
|
+
args: {
|
|
185
|
+
content: 'Main Page Heading',
|
|
186
|
+
variant: 'h1',
|
|
187
|
+
color: 'primary',
|
|
188
|
+
gutterBottom: true
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export const Heading2: Story = {
|
|
193
|
+
args: {
|
|
194
|
+
content: 'Section Heading',
|
|
195
|
+
variant: 'h2',
|
|
196
|
+
color: 'textPrimary',
|
|
197
|
+
gutterBottom: true
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
export const BodyText: Story = {
|
|
202
|
+
args: {
|
|
203
|
+
content: 'This is body text that provides detailed information about a topic. It uses the body1 variant which is optimized for readability and comfortable reading.',
|
|
204
|
+
variant: 'body1',
|
|
205
|
+
paragraph: true
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
export const Caption: Story = {
|
|
210
|
+
args: {
|
|
211
|
+
content: 'This is a caption with smaller text',
|
|
212
|
+
variant: 'caption',
|
|
213
|
+
color: 'textSecondary'
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
// Typography variants showcase
|
|
218
|
+
export const TypographyVariants: Story = {
|
|
219
|
+
render: () => (
|
|
220
|
+
<Box sx={{ '& > *': { mb: 2 } }}>
|
|
221
|
+
<Text content="Heading 1 - Main titles" variant="h1" />
|
|
222
|
+
<Text content="Heading 2 - Section titles" variant="h2" />
|
|
223
|
+
<Text content="Heading 3 - Subsection titles" variant="h3" />
|
|
224
|
+
<Text content="Heading 4 - Card titles" variant="h4" />
|
|
225
|
+
<Text content="Heading 5 - Component titles" variant="h5" />
|
|
226
|
+
<Text content="Heading 6 - Small headings" variant="h6" />
|
|
227
|
+
<Text content="Subtitle 1 - Primary subtitles" variant="subtitle1" />
|
|
228
|
+
<Text content="Subtitle 2 - Secondary subtitles" variant="subtitle2" />
|
|
229
|
+
<Text content="Body 1 - Primary body text for comfortable reading" variant="body1" />
|
|
230
|
+
<Text content="Body 2 - Secondary body text, slightly smaller" variant="body2" />
|
|
231
|
+
<Text content="BUTTON TEXT" variant="button" />
|
|
232
|
+
<Text content="Caption text for images and small labels" variant="caption" />
|
|
233
|
+
<Text content="OVERLINE TEXT FOR CATEGORIES" variant="overline" />
|
|
234
|
+
</Box>
|
|
235
|
+
)
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
// Color variants
|
|
239
|
+
export const ColorVariants: Story = {
|
|
240
|
+
render: () => (
|
|
241
|
+
<Box sx={{ '& > *': { mb: 1 } }}>
|
|
242
|
+
<Text content="Primary color text" color="primary" />
|
|
243
|
+
<Text content="Secondary color text" color="secondary" />
|
|
244
|
+
<Text content="Primary text color" color="textPrimary" />
|
|
245
|
+
<Text content="Secondary text color" color="textSecondary" />
|
|
246
|
+
<Text content="Error color text" color="error" />
|
|
247
|
+
<Text content="Warning color text" color="warning" />
|
|
248
|
+
<Text content="Info color text" color="info" />
|
|
249
|
+
<Text content="Success color text" color="success" />
|
|
250
|
+
<Text content="Inherit color text" color="inherit" />
|
|
251
|
+
</Box>
|
|
252
|
+
)
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// Text alignment
|
|
256
|
+
export const TextAlignment: Story = {
|
|
257
|
+
render: () => (
|
|
258
|
+
<Box sx={{ width: '400px', border: '1px solid #e0e0e0', p: 2, '& > *': { mb: 1 } }}>
|
|
259
|
+
<Text content="Left aligned text (default)" align="left" />
|
|
260
|
+
<Text content="Center aligned text" align="center" />
|
|
261
|
+
<Text content="Right aligned text" align="right" />
|
|
262
|
+
<Text content="Justified text that spans multiple lines to demonstrate how justify alignment works with longer content." align="justify" />
|
|
263
|
+
</Box>
|
|
264
|
+
)
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
// Font weights
|
|
268
|
+
export const FontWeights: Story = {
|
|
269
|
+
render: () => (
|
|
270
|
+
<Box sx={{ '& > *': { mb: 1 } }}>
|
|
271
|
+
<Text content="Light weight (300)" fontWeight="300" />
|
|
272
|
+
<Text content="Normal weight (400)" fontWeight="normal" />
|
|
273
|
+
<Text content="Medium weight (500)" fontWeight="500" />
|
|
274
|
+
<Text content="Bold weight (700)" fontWeight="bold" />
|
|
275
|
+
<Text content="Extra bold weight (800)" fontWeight="800" />
|
|
276
|
+
</Box>
|
|
277
|
+
)
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
// Text decorations and transforms
|
|
281
|
+
export const TextFormatting: Story = {
|
|
282
|
+
render: () => (
|
|
283
|
+
<Box sx={{ '& > *': { mb: 2 } }}>
|
|
284
|
+
<Typography variant="h6">Text Decorations:</Typography>
|
|
285
|
+
<Text content="Normal text" />
|
|
286
|
+
<Text content="Underlined text" textDecoration="underline" />
|
|
287
|
+
<Text content="Overlined text" textDecoration="overline" />
|
|
288
|
+
<Text content="Line-through text" textDecoration="line-through" />
|
|
289
|
+
|
|
290
|
+
<Typography variant="h6" sx={{ mt: 3 }}>Text Transforms:</Typography>
|
|
291
|
+
<Text content="normal text case" textTransform="none" />
|
|
292
|
+
<Text content="capitalized text" textTransform="capitalize" />
|
|
293
|
+
<Text content="uppercase text" textTransform="uppercase" />
|
|
294
|
+
<Text content="LOWERCASE TEXT" textTransform="lowercase" />
|
|
295
|
+
</Box>
|
|
296
|
+
)
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
// Custom styling
|
|
300
|
+
export const CustomStyling: Story = {
|
|
301
|
+
render: () => (
|
|
302
|
+
<Box sx={{ '& > *': { mb: 3 } }}>
|
|
303
|
+
<Text
|
|
304
|
+
content="Custom Font Size"
|
|
305
|
+
variant="h4"
|
|
306
|
+
fontSize="3rem"
|
|
307
|
+
color="primary"
|
|
308
|
+
/>
|
|
309
|
+
<Text
|
|
310
|
+
content="Custom Color and Font Family"
|
|
311
|
+
variant="h5"
|
|
312
|
+
customColor="#ff6b35"
|
|
313
|
+
fontFamily='"Roboto Condensed", sans-serif'
|
|
314
|
+
/>
|
|
315
|
+
<Text
|
|
316
|
+
content="Custom Line Height and Letter Spacing"
|
|
317
|
+
variant="body1"
|
|
318
|
+
lineHeight="2"
|
|
319
|
+
letterSpacing="0.2em"
|
|
320
|
+
maxWidth="400px"
|
|
321
|
+
/>
|
|
322
|
+
</Box>
|
|
323
|
+
)
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
// Semantic HTML elements
|
|
327
|
+
export const SemanticElements: Story = {
|
|
328
|
+
render: () => (
|
|
329
|
+
<Box sx={{ '& > *': { mb: 1 } }}>
|
|
330
|
+
<Text content="Paragraph element" component="p" variant="body1" />
|
|
331
|
+
<Text content="Span element" component="span" variant="body2" />
|
|
332
|
+
<Text content="Div element" component="div" variant="subtitle1" />
|
|
333
|
+
<Text content="H1 semantic element" component="h1" variant="h4" />
|
|
334
|
+
<Text content="H2 semantic element" component="h2" variant="h5" />
|
|
335
|
+
<Text content="Label element" component="label" variant="body1" />
|
|
336
|
+
</Box>
|
|
337
|
+
)
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
// Responsive text
|
|
341
|
+
export const ResponsiveText: Story = {
|
|
342
|
+
render: () => (
|
|
343
|
+
<Box sx={{ '& > *': { mb: 2 } }}>
|
|
344
|
+
<Text
|
|
345
|
+
content="Responsive heading that adapts to screen size"
|
|
346
|
+
variant="h2"
|
|
347
|
+
sx={{
|
|
348
|
+
fontSize: { xs: '1.5rem', sm: '2rem', md: '2.5rem', lg: '3rem' }
|
|
349
|
+
}}
|
|
350
|
+
/>
|
|
351
|
+
<Text
|
|
352
|
+
content="This text has a maximum width and will wrap appropriately"
|
|
353
|
+
variant="body1"
|
|
354
|
+
maxWidth="300px"
|
|
355
|
+
paragraph
|
|
356
|
+
/>
|
|
357
|
+
</Box>
|
|
358
|
+
)
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
// Data binding example
|
|
362
|
+
export const DataBinding: Story = {
|
|
363
|
+
render: () => (
|
|
364
|
+
<QwickApp dataProvider={dataProvider}>
|
|
365
|
+
<Box sx={{ '& > *': { mb: 3 } }}>
|
|
366
|
+
<Alert severity="info" sx={{ mb: 3 }}>
|
|
367
|
+
<Typography variant="body2">
|
|
368
|
+
These Text components are populated from CMS data using the dataSource prop.
|
|
369
|
+
Content, styling, and formatting are all managed through the data provider.
|
|
370
|
+
</Typography>
|
|
371
|
+
</Alert>
|
|
372
|
+
|
|
373
|
+
<Text
|
|
374
|
+
dataSource="content.heroTitle"
|
|
375
|
+
dataBinding={{
|
|
376
|
+
content: 'content',
|
|
377
|
+
variant: 'variant',
|
|
378
|
+
color: 'color',
|
|
379
|
+
align: 'align',
|
|
380
|
+
gutterBottom: 'gutterBottom',
|
|
381
|
+
fontWeight: 'fontWeight'
|
|
382
|
+
}}
|
|
383
|
+
/>
|
|
384
|
+
|
|
385
|
+
<Text
|
|
386
|
+
dataSource="content.sectionHeading"
|
|
387
|
+
dataBinding={{
|
|
388
|
+
content: 'content',
|
|
389
|
+
variant: 'variant',
|
|
390
|
+
color: 'color',
|
|
391
|
+
textTransform: 'textTransform',
|
|
392
|
+
letterSpacing: 'letterSpacing'
|
|
393
|
+
}}
|
|
394
|
+
/>
|
|
395
|
+
|
|
396
|
+
<Text
|
|
397
|
+
dataSource="content.bodyText"
|
|
398
|
+
dataBinding={{
|
|
399
|
+
content: 'content',
|
|
400
|
+
variant: 'variant',
|
|
401
|
+
color: 'color',
|
|
402
|
+
paragraph: 'paragraph',
|
|
403
|
+
lineHeight: 'lineHeight'
|
|
404
|
+
}}
|
|
405
|
+
/>
|
|
406
|
+
|
|
407
|
+
<Text
|
|
408
|
+
dataSource="content.callToAction"
|
|
409
|
+
dataBinding={{
|
|
410
|
+
content: 'content',
|
|
411
|
+
variant: 'variant',
|
|
412
|
+
color: 'color',
|
|
413
|
+
fontWeight: 'fontWeight',
|
|
414
|
+
textTransform: 'textTransform'
|
|
415
|
+
}}
|
|
416
|
+
/>
|
|
417
|
+
</Box>
|
|
418
|
+
</QwickApp>
|
|
419
|
+
)
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
// Serialization example
|
|
423
|
+
export const SerializationExample: Story = {
|
|
424
|
+
render: () => {
|
|
425
|
+
// Create Text component instances
|
|
426
|
+
const originalText = new Text({
|
|
427
|
+
content: 'Serializable Typography Component',
|
|
428
|
+
variant: 'h3',
|
|
429
|
+
color: 'primary',
|
|
430
|
+
align: 'center',
|
|
431
|
+
fontWeight: 'bold',
|
|
432
|
+
gutterBottom: true,
|
|
433
|
+
customColor: '#1976d2',
|
|
434
|
+
fontSize: '2rem'
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
// Serialize to JSON
|
|
438
|
+
const serializedJson = ComponentTransformer.serialize(originalText.render());
|
|
439
|
+
|
|
440
|
+
// Deserialize back to component
|
|
441
|
+
const deserializedComponent = ComponentTransformer.deserialize(serializedJson);
|
|
442
|
+
|
|
443
|
+
return (
|
|
444
|
+
<Paper elevation={2} sx={{ p: 3 }}>
|
|
445
|
+
<Typography variant="h5" gutterBottom>
|
|
446
|
+
Text Component Serialization Demo
|
|
447
|
+
</Typography>
|
|
448
|
+
|
|
449
|
+
<Alert severity="success" sx={{ mb: 3 }}>
|
|
450
|
+
<Typography variant="body2">
|
|
451
|
+
This demonstrates full JSON serialization/deserialization of Text components.
|
|
452
|
+
The component below was serialized to JSON and then reconstructed.
|
|
453
|
+
</Typography>
|
|
454
|
+
</Alert>
|
|
455
|
+
|
|
456
|
+
<Box sx={{ mb: 3 }}>
|
|
457
|
+
<Typography variant="h6" gutterBottom>Original Component:</Typography>
|
|
458
|
+
{originalText.render()}
|
|
459
|
+
</Box>
|
|
460
|
+
|
|
461
|
+
<Box sx={{ mb: 3 }}>
|
|
462
|
+
<Typography variant="h6" gutterBottom>Serialized JSON:</Typography>
|
|
463
|
+
<Paper variant="outlined" sx={{ p: 2, bgcolor: 'grey.50' }}>
|
|
464
|
+
<pre style={{ margin: 0, fontSize: '12px', wordWrap: 'break-word', whiteSpace: 'pre-wrap' }}>
|
|
465
|
+
{JSON.stringify(JSON.parse(serializedJson), null, 2)}
|
|
466
|
+
</pre>
|
|
467
|
+
</Paper>
|
|
468
|
+
</Box>
|
|
469
|
+
|
|
470
|
+
<Box>
|
|
471
|
+
<Typography variant="h6" gutterBottom>Deserialized Component:</Typography>
|
|
472
|
+
{deserializedComponent}
|
|
473
|
+
</Box>
|
|
474
|
+
</Paper>
|
|
475
|
+
);
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
// Advanced layout example
|
|
480
|
+
export const AdvancedLayout: Story = {
|
|
481
|
+
render: () => (
|
|
482
|
+
<Grid container spacing={3}>
|
|
483
|
+
<Grid item xs={12}>
|
|
484
|
+
<Text
|
|
485
|
+
content="Advanced Typography Layout"
|
|
486
|
+
variant="h2"
|
|
487
|
+
align="center"
|
|
488
|
+
color="primary"
|
|
489
|
+
gutterBottom
|
|
490
|
+
/>
|
|
491
|
+
</Grid>
|
|
492
|
+
|
|
493
|
+
<Grid item xs={12} md={4}>
|
|
494
|
+
<Paper elevation={1} sx={{ p: 3, height: '100%' }}>
|
|
495
|
+
<Text
|
|
496
|
+
content="Feature One"
|
|
497
|
+
variant="h4"
|
|
498
|
+
color="primary"
|
|
499
|
+
gutterBottom
|
|
500
|
+
/>
|
|
501
|
+
<Text
|
|
502
|
+
content="This is a detailed description of the first feature, showcasing how typography can be used effectively in card layouts."
|
|
503
|
+
variant="body1"
|
|
504
|
+
paragraph
|
|
505
|
+
/>
|
|
506
|
+
<Text
|
|
507
|
+
content="Learn More"
|
|
508
|
+
variant="button"
|
|
509
|
+
color="primary"
|
|
510
|
+
fontWeight="bold"
|
|
511
|
+
/>
|
|
512
|
+
</Paper>
|
|
513
|
+
</Grid>
|
|
514
|
+
|
|
515
|
+
<Grid item xs={12} md={4}>
|
|
516
|
+
<Paper elevation={1} sx={{ p: 3, height: '100%' }}>
|
|
517
|
+
<Text
|
|
518
|
+
content="Feature Two"
|
|
519
|
+
variant="h4"
|
|
520
|
+
color="secondary"
|
|
521
|
+
gutterBottom
|
|
522
|
+
/>
|
|
523
|
+
<Text
|
|
524
|
+
content="Another feature description with different styling to show the flexibility of the Text component in various contexts."
|
|
525
|
+
variant="body1"
|
|
526
|
+
paragraph
|
|
527
|
+
/>
|
|
528
|
+
<Text
|
|
529
|
+
content="Get Started"
|
|
530
|
+
variant="button"
|
|
531
|
+
color="secondary"
|
|
532
|
+
fontWeight="bold"
|
|
533
|
+
/>
|
|
534
|
+
</Paper>
|
|
535
|
+
</Grid>
|
|
536
|
+
|
|
537
|
+
<Grid item xs={12} md={4}>
|
|
538
|
+
<Paper elevation={1} sx={{ p: 3, height: '100%' }}>
|
|
539
|
+
<Text
|
|
540
|
+
content="Feature Three"
|
|
541
|
+
variant="h4"
|
|
542
|
+
color="success"
|
|
543
|
+
gutterBottom
|
|
544
|
+
/>
|
|
545
|
+
<Text
|
|
546
|
+
content="The final feature showcase, demonstrating consistent typography patterns across multiple content areas."
|
|
547
|
+
variant="body1"
|
|
548
|
+
paragraph
|
|
549
|
+
/>
|
|
550
|
+
<Text
|
|
551
|
+
content="Try Now"
|
|
552
|
+
variant="button"
|
|
553
|
+
color="success"
|
|
554
|
+
fontWeight="bold"
|
|
555
|
+
/>
|
|
556
|
+
</Paper>
|
|
557
|
+
</Grid>
|
|
558
|
+
</Grid>
|
|
559
|
+
)
|
|
560
|
+
};
|