@qwickapps/react-framework 1.3.4 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1688 -2
- package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts +66 -0
- package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +7 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/Html.d.ts +28 -18
- package/dist/components/Html.d.ts.map +1 -1
- package/dist/components/Logo.d.ts +12 -35
- package/dist/components/Logo.d.ts.map +1 -1
- package/dist/components/Markdown.d.ts +18 -13
- package/dist/components/Markdown.d.ts.map +1 -1
- package/dist/components/QwickApp.d.ts +16 -3
- package/dist/components/QwickApp.d.ts.map +1 -1
- package/dist/components/QwickIcon.d.ts +23 -0
- package/dist/components/QwickIcon.d.ts.map +1 -0
- package/dist/components/SafeSpan.d.ts +12 -5
- package/dist/components/SafeSpan.d.ts.map +1 -1
- package/dist/components/Scaffold.d.ts.map +1 -1
- package/dist/components/base/ModelView.d.ts +101 -0
- package/dist/components/base/ModelView.d.ts.map +1 -0
- package/dist/components/base/index.d.ts +11 -0
- package/dist/components/base/index.d.ts.map +1 -0
- package/dist/components/blocks/Article.d.ts +12 -2
- package/dist/components/blocks/Article.d.ts.map +1 -1
- package/dist/components/blocks/Code.d.ts +13 -2
- package/dist/components/blocks/Code.d.ts.map +1 -1
- package/dist/components/blocks/Content.d.ts.map +1 -1
- package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -1
- package/dist/components/blocks/FeatureCard.d.ts.map +1 -1
- package/dist/components/blocks/FeatureGrid.d.ts.map +1 -1
- package/dist/components/blocks/Footer.d.ts.map +1 -1
- package/dist/components/blocks/HeroBlock.d.ts +27 -13
- package/dist/components/blocks/HeroBlock.d.ts.map +1 -1
- package/dist/components/blocks/Image.d.ts +41 -0
- package/dist/components/blocks/Image.d.ts.map +1 -0
- package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -1
- package/dist/components/blocks/ProductCard.d.ts.map +1 -1
- package/dist/components/blocks/Section.d.ts +16 -2
- package/dist/components/blocks/Section.d.ts.map +1 -1
- package/dist/components/blocks/Text.d.ts +41 -0
- package/dist/components/blocks/Text.d.ts.map +1 -0
- package/dist/components/blocks/index.d.ts +4 -0
- package/dist/components/blocks/index.d.ts.map +1 -1
- package/dist/components/buttons/Button.d.ts +23 -7
- package/dist/components/buttons/Button.d.ts.map +1 -1
- package/dist/components/forms/FormBlock.d.ts +19 -13
- package/dist/components/forms/FormBlock.d.ts.map +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/input/ChoiceInputField.d.ts +17 -11
- package/dist/components/input/ChoiceInputField.d.ts.map +1 -1
- package/dist/components/input/HtmlInputField.d.ts +17 -11
- package/dist/components/input/HtmlInputField.d.ts.map +1 -1
- package/dist/components/input/SelectInputField.d.ts +16 -10
- package/dist/components/input/SelectInputField.d.ts.map +1 -1
- package/dist/components/input/SwitchInputField.d.ts +16 -10
- package/dist/components/input/SwitchInputField.d.ts.map +1 -1
- package/dist/components/input/TextField.d.ts.map +1 -1
- package/dist/components/input/TextInputField.d.ts +16 -11
- package/dist/components/input/TextInputField.d.ts.map +1 -1
- package/dist/components/layout/GridCell.d.ts +23 -6
- package/dist/components/layout/GridCell.d.ts.map +1 -1
- package/dist/components/layout/GridLayout.d.ts +24 -23
- package/dist/components/layout/GridLayout.d.ts.map +1 -1
- package/dist/components/pages/FormPage.d.ts.map +1 -1
- package/dist/components/pages/Page.d.ts +49 -87
- package/dist/components/pages/Page.d.ts.map +1 -1
- package/dist/components/pages/index.d.ts +2 -2
- package/dist/components/pages/index.d.ts.map +1 -1
- package/dist/config/AppConfig.d.ts +49 -0
- package/dist/config/AppConfig.d.ts.map +1 -0
- package/dist/config/AppConfigBuilder.d.ts +75 -0
- package/dist/config/AppConfigBuilder.d.ts.map +1 -0
- package/dist/config/index.d.ts +13 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/types.d.ts +130 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.esm.js +451 -0
- package/dist/config.js +455 -0
- package/dist/contexts/PrintModeContext.d.ts +27 -0
- package/dist/contexts/PrintModeContext.d.ts.map +1 -0
- package/dist/contexts/QwickAppContext.d.ts +2 -2
- package/dist/contexts/QwickAppContext.d.ts.map +1 -1
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/index.d.ts +2 -0
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/usePrintMode.d.ts +39 -0
- package/dist/hooks/usePrintMode.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.css +1 -1
- package/dist/index.esm.js +20722 -16021
- package/dist/index.js +20725 -16010
- package/dist/schemas/CodeSchema.d.ts +2 -1
- package/dist/schemas/CodeSchema.d.ts.map +1 -1
- package/dist/schemas/CollapsibleLayoutSchema.d.ts +2 -1
- package/dist/schemas/CollapsibleLayoutSchema.d.ts.map +1 -1
- package/dist/schemas/ContentSchema.d.ts +2 -1
- package/dist/schemas/ContentSchema.d.ts.map +1 -1
- package/dist/schemas/GridCellSchema.d.ts +25 -0
- package/dist/schemas/GridCellSchema.d.ts.map +1 -0
- package/dist/schemas/GridLayoutSchema.d.ts +23 -0
- package/dist/schemas/GridLayoutSchema.d.ts.map +1 -0
- package/dist/schemas/HtmlSchema.d.ts +14 -0
- package/dist/schemas/HtmlSchema.d.ts.map +1 -0
- package/dist/schemas/ImageSchema.d.ts +32 -0
- package/dist/schemas/ImageSchema.d.ts.map +1 -0
- package/dist/schemas/LogoSchema.d.ts +35 -0
- package/dist/schemas/LogoSchema.d.ts.map +1 -0
- package/dist/schemas/MarkdownSchema.d.ts +14 -0
- package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
- package/dist/schemas/PageTemplateSchema.d.ts +31 -0
- package/dist/schemas/PageTemplateSchema.d.ts.map +1 -0
- package/dist/schemas/PrintConfigSchema.d.ts +31 -0
- package/dist/schemas/PrintConfigSchema.d.ts.map +1 -0
- package/dist/schemas/SectionSchema.d.ts +2 -1
- package/dist/schemas/SectionSchema.d.ts.map +1 -1
- package/dist/schemas/TextSchema.d.ts +37 -0
- package/dist/schemas/TextSchema.d.ts.map +1 -0
- package/dist/schemas/ViewModelSchema.d.ts +23 -0
- package/dist/schemas/ViewModelSchema.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +15 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/transformers/ComponentTransformer.d.ts +116 -0
- package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -0
- package/dist/schemas/transformers/ReactNodeTransformer.d.ts +53 -0
- package/dist/schemas/transformers/ReactNodeTransformer.d.ts.map +1 -0
- package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts +66 -0
- package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts.map +1 -0
- package/dist/schemas/transformers/registry.d.ts +15 -0
- package/dist/schemas/transformers/registry.d.ts.map +1 -0
- package/dist/schemas/types/Serializable.d.ts +46 -0
- package/dist/schemas/types/Serializable.d.ts.map +1 -0
- package/dist/utils/htmlTransform.d.ts.map +1 -1
- package/dist/utils/reactUtils.d.ts +12 -3
- package/dist/utils/reactUtils.d.ts.map +1 -1
- package/package.json +17 -3
- package/src/{components/__tests__ → __tests__/components}/AccessibilityProvider.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Article.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Breadcrumbs.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Button.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/CardListGrid.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/ChoiceInputField.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Code.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Content.integration.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Content.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/CoverImageHeader.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/ErrorBoundary.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/FeatureCard.integration.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/FeatureGrid.integration.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/FeatureGrid.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/Footer.test.tsx +4 -4
- package/src/{components/__tests__ → __tests__/components}/FormBlock.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/HeroBlock.integration.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/HeroBlock.test.tsx +233 -7
- package/src/{components/__tests__ → __tests__/components}/Html.test.tsx +11 -2
- package/src/{components/__tests__ → __tests__/components}/HtmlInputField.test.tsx +3 -3
- package/src/__tests__/components/Logo.test.js +3 -3
- package/src/{components/__tests__ → __tests__/components}/Markdown.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/PageBannerHeader.test.tsx +3 -3
- package/src/{components/__tests__ → __tests__/components}/PaletteSwitcher.test.tsx +3 -3
- package/src/{components/__tests__ → __tests__/components}/ProductCard.test.tsx +4 -4
- package/src/{components/__tests__ → __tests__/components}/SafeSpan.integration.test.tsx +2 -2
- package/src/{components/__tests__ → __tests__/components}/SafeSpan.simple.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/SafeSpan.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Section.integration.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/Section.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/SelectInputField.test.tsx +1 -1
- package/src/{components/__tests__ → __tests__/components}/TextInputField.test.tsx +3 -3
- package/src/{components/__tests__ → __tests__/components}/ThemeSwitcher.test.tsx +3 -3
- package/src/__tests__/components/base/ModelView.test.tsx +220 -0
- package/src/__tests__/components/blocks/Code.performance.test.tsx +625 -0
- package/src/__tests__/components/blocks/Code.serialization.test.tsx +507 -0
- package/src/__tests__/components/blocks/HeroBlock.serialization.test.tsx +414 -0
- package/src/__tests__/components/blocks/Image.serialization.test.tsx +257 -0
- package/src/__tests__/components/blocks/Section.serialization.test.tsx +553 -0
- package/src/__tests__/components/blocks/Text.performance.test.tsx +442 -0
- package/src/__tests__/components/blocks/Text.serialization.test.tsx +491 -0
- package/src/__tests__/components/buttons/Button.serialization.test.tsx +443 -0
- package/src/__tests__/components/input/FormComponents.serialization.test.tsx +482 -0
- package/src/__tests__/components/input/SelectInputField.serialization.test.tsx +439 -0
- package/src/__tests__/components/input/TextInputField.serialization.test.tsx +359 -0
- package/src/{components/layout/CollapsibleLayout/__tests__ → __tests__/components/layout}/CollapsibleLayout.test.tsx +4 -4
- package/src/__tests__/components/layout/GridCell.serialization.test.tsx +403 -0
- package/src/__tests__/components/layout/GridLayout.serialization.test.tsx +311 -0
- package/src/__tests__/hooks/usePrintMode.test.ts +89 -0
- package/src/__tests__/schemas/PageTemplateSchema.test.ts +161 -0
- package/src/__tests__/schemas/PrintConfigSchema.test.ts +127 -0
- package/src/__tests__/schemas/ViewModelSchema.test.ts +80 -0
- package/src/__tests__/schemas/transformers/ComponentSerializationPatterns.test.tsx +602 -0
- package/src/__tests__/schemas/transformers/ComponentTransformer.htmlPatterns.test.ts +301 -0
- package/src/__tests__/schemas/transformers/ComponentTransformer.test.ts +521 -0
- package/src/__tests__/schemas/transformers/CrossBrowserCompatibility.test.ts +586 -0
- package/src/__tests__/schemas/transformers/MockSerializableComponent.ts +103 -0
- package/src/__tests__/schemas/transformers/RealWorldScenarios.test.tsx +1165 -0
- package/src/__tests__/schemas/transformers/SerializationErrorHandling.test.ts +602 -0
- package/src/__tests__/schemas/transformers/SerializationIntegration.test.tsx +691 -0
- package/src/__tests__/schemas/transformers/SerializationPerformance.test.ts +460 -0
- package/src/__tests__/schemas/transformers/TestAutomation.test.ts +597 -0
- package/src/{utils/__tests__ → __tests__/utils}/nested-dom-fix.test.tsx +1 -1
- package/src/components/ErrorBoundary.tsx +8 -8
- package/src/components/Html.tsx +147 -44
- package/src/components/Logo.tsx +198 -100
- package/src/components/Markdown.tsx +125 -16
- package/src/components/QwickApp.tsx +64 -31
- package/src/components/QwickIcon.tsx +59 -0
- package/src/components/SafeSpan.tsx +65 -10
- package/src/components/Scaffold.tsx +2 -8
- package/src/components/base/ModelView.tsx +199 -0
- package/src/components/base/index.ts +11 -0
- package/src/components/blocks/Article.tsx +57 -18
- package/src/components/blocks/Code.md +529 -0
- package/src/components/blocks/Code.tsx +102 -15
- package/src/components/blocks/Content.tsx +25 -77
- package/src/components/blocks/CoverImageHeader.tsx +9 -4
- package/src/components/blocks/FeatureCard.tsx +1 -2
- package/src/components/blocks/FeatureGrid.tsx +19 -1
- package/src/components/blocks/Footer.tsx +13 -1
- package/src/components/blocks/HeroBlock.tsx +87 -20
- package/src/components/blocks/Image.tsx +395 -0
- package/src/components/blocks/PageBannerHeader.tsx +14 -12
- package/src/components/blocks/ProductCard.tsx +51 -52
- package/src/components/blocks/Section.tsx +113 -8
- package/src/components/blocks/Text.tsx +285 -0
- package/src/components/blocks/index.ts +4 -0
- package/src/components/buttons/Button.tsx +184 -15
- package/src/components/forms/FormBlock.tsx +70 -17
- package/src/components/index.ts +5 -0
- package/src/components/input/ChoiceInputField.tsx +48 -18
- package/src/components/input/HtmlInputField.tsx +48 -18
- package/src/components/input/SelectInputField.tsx +48 -16
- package/src/components/input/SwitchInputField.tsx +48 -17
- package/src/components/input/TextField.tsx +41 -1
- package/src/components/input/TextInputField.tsx +52 -18
- package/src/components/layout/GridCell.tsx +118 -9
- package/src/components/layout/GridLayout.tsx +125 -24
- package/src/components/pages/FormPage.tsx +0 -1
- package/src/components/pages/Page.css +304 -332
- package/src/components/pages/Page.tsx +307 -255
- package/src/components/pages/index.ts +2 -2
- package/src/config/AppConfig.ts +133 -0
- package/src/config/AppConfigBuilder.ts +421 -0
- package/src/config/__tests__/AppConfig.test.ts +385 -0
- package/src/config/__tests__/AppConfigBuilder.test.ts +432 -0
- package/src/config/index.ts +24 -0
- package/src/config/types.ts +170 -0
- package/src/config.ts +25 -0
- package/src/contexts/PrintModeContext.tsx +332 -0
- package/src/contexts/QwickAppContext.tsx +2 -2
- package/src/contexts/ThemeContext.tsx +1 -2
- package/src/contexts/index.ts +2 -0
- package/src/hooks/index.ts +5 -1
- package/src/hooks/usePrintMode.ts +73 -0
- package/src/index.ts +3 -0
- package/src/schemas/CodeSchema.ts +3 -3
- package/src/schemas/CollapsibleLayoutSchema.ts +2 -1
- package/src/schemas/ContentSchema.ts +2 -1
- package/src/schemas/GridCellSchema.ts +164 -0
- package/src/schemas/GridLayoutSchema.ts +133 -0
- package/src/schemas/HtmlSchema.ts +47 -0
- package/src/schemas/ImageSchema.ts +235 -0
- package/src/schemas/LogoSchema.ts +241 -0
- package/src/schemas/MarkdownSchema.ts +47 -0
- package/src/schemas/PageTemplateSchema.ts +186 -0
- package/src/schemas/PrintConfigSchema.ts +207 -0
- package/src/schemas/README.md +661 -0
- package/src/schemas/SectionSchema.ts +2 -1
- package/src/schemas/TextSchema.ts +329 -0
- package/src/schemas/ViewModelSchema.ts +115 -0
- package/src/schemas/index.ts +21 -2
- package/src/schemas/transformers/ComponentTransformer.ts +403 -0
- package/src/schemas/transformers/ReactNodeTransformer.ts +236 -0
- package/src/schemas/transformers/registry.ts +72 -0
- package/src/schemas/types/Serializable.ts +51 -0
- package/src/stories/AccessibilityProvider.stories.tsx +253 -253
- package/src/stories/Article.stories.tsx +433 -433
- package/src/stories/Button.stories.tsx +1 -1
- package/src/stories/CardListGrid.stories.tsx +451 -451
- package/src/stories/ChoiceInputField.stories.tsx +503 -503
- package/src/stories/Code.stories.tsx +1 -1
- package/src/stories/CollapsibleLayout.stories.tsx +1414 -1414
- package/src/stories/Content.stories.tsx +393 -393
- package/src/stories/CoverImageHeader.stories.tsx +701 -701
- package/src/stories/DataBinding.advanced.stories.tsx +432 -432
- package/src/stories/DataProvider.stories.tsx +1192 -1192
- package/src/stories/FeatureCard.stories.tsx +557 -557
- package/src/stories/FeatureGrid.stories.tsx +594 -594
- package/src/stories/Footer.stories.tsx +640 -640
- package/src/stories/FormBlock.stories.tsx +760 -760
- package/src/stories/FormComponents.stories.tsx +349 -541
- package/src/stories/GridCell.stories.tsx +417 -0
- package/src/stories/GridLayout.stories.tsx +353 -0
- package/src/stories/HeroBlock.stories.tsx +862 -373
- package/src/stories/HtmlInputField.stories.tsx +474 -474
- package/src/stories/Image.stories.tsx +819 -0
- package/src/stories/Introduction.stories.tsx +667 -667
- package/src/stories/LayoutBlocks.stories.tsx +324 -324
- package/src/stories/Logo.stories.tsx +165 -6
- package/src/stories/Markdown.stories.tsx +137 -137
- package/src/stories/ModelView.stories.tsx +477 -0
- package/src/stories/Page.stories.tsx +688 -688
- package/src/stories/PageBannerHeader.stories.tsx +864 -864
- package/src/stories/PaletteSwitcher.stories.tsx +119 -119
- package/src/stories/ProductCard.stories.tsx +424 -424
- package/src/stories/QwickApp.stories.tsx +368 -368
- package/src/stories/ResponsiveMenu.stories.tsx +249 -249
- package/src/stories/SafeSpan.stories.tsx +531 -531
- package/src/stories/Section.stories.tsx +90 -2
- package/src/stories/SelectInputField.stories.tsx +524 -524
- package/src/stories/Text.stories.tsx +560 -0
- package/src/stories/TextInputField.stories.tsx +443 -443
- package/src/stories/ThemeSwitcher.stories.tsx +123 -123
- package/src/utils/htmlTransform.tsx +74 -53
- package/src/utils/reactUtils.tsx +57 -6
- package/dist/index.bundled.css +0 -12
- /package/src/{hooks/__tests__ → __tests__/hooks}/useDataBinding.test.tsx.disabled +0 -0
- /package/src/{schemas/__tests__ → __tests__/schemas}/builders.test.ts +0 -0
- /package/src/{utils/__tests__ → __tests__/utils}/createDataDrivenComponent.test.tsx.disabled +0 -0
- /package/src/{utils/__tests__ → __tests__/utils}/htmlTransform.test.tsx +0 -0
- /package/src/{utils/__tests__ → __tests__/utils}/optional-logging.test.ts +0 -0
|
@@ -13,85 +13,85 @@ import QwickApp from '../components/QwickApp';
|
|
|
13
13
|
|
|
14
14
|
// Sample text input field data for different use cases
|
|
15
15
|
const sampleCmsData = {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
16
|
+
'textInputFields': {
|
|
17
|
+
'basic-text': {
|
|
18
|
+
label: 'Full Name',
|
|
19
|
+
placeholder: 'Enter your full name',
|
|
20
|
+
required: true,
|
|
21
|
+
type: 'text'
|
|
22
|
+
},
|
|
23
|
+
'email-field': {
|
|
24
|
+
label: 'Email Address',
|
|
25
|
+
placeholder: 'your.email@example.com',
|
|
26
|
+
type: 'email',
|
|
27
|
+
required: true,
|
|
28
|
+
helperText: 'We will never share your email address'
|
|
29
|
+
},
|
|
30
|
+
'password-field': {
|
|
31
|
+
label: 'Password',
|
|
32
|
+
placeholder: 'Enter a strong password',
|
|
33
|
+
type: 'password',
|
|
34
|
+
required: true,
|
|
35
|
+
helperText: 'Minimum 8 characters with mixed case and numbers'
|
|
36
|
+
},
|
|
37
|
+
'phone-field': {
|
|
38
|
+
label: 'Phone Number',
|
|
39
|
+
placeholder: '+1 (555) 123-4567',
|
|
40
|
+
type: 'tel',
|
|
41
|
+
helperText: 'Include country code for international numbers'
|
|
42
|
+
},
|
|
43
|
+
'number-field': {
|
|
44
|
+
label: 'Age',
|
|
45
|
+
placeholder: '25',
|
|
46
|
+
type: 'number',
|
|
47
|
+
required: false
|
|
48
|
+
},
|
|
49
|
+
'search-field': {
|
|
50
|
+
label: 'Search',
|
|
51
|
+
placeholder: 'Search products, articles, or help...',
|
|
52
|
+
type: 'search',
|
|
53
|
+
helperText: 'Use keywords to find what you need'
|
|
54
|
+
},
|
|
55
|
+
'multiline-field': {
|
|
56
|
+
label: 'Description',
|
|
57
|
+
placeholder: 'Tell us more about yourself...',
|
|
58
|
+
multiline: true,
|
|
59
|
+
rows: 4,
|
|
60
|
+
helperText: 'Provide a brief description (optional)'
|
|
61
|
+
},
|
|
62
|
+
'large-textarea': {
|
|
63
|
+
label: 'Comments',
|
|
64
|
+
placeholder: 'Share your thoughts, feedback, or questions...',
|
|
65
|
+
multiline: true,
|
|
66
|
+
rows: 6,
|
|
67
|
+
maxRows: 10,
|
|
68
|
+
required: true
|
|
69
|
+
},
|
|
70
|
+
'disabled-field': {
|
|
71
|
+
label: 'Account ID',
|
|
72
|
+
value: 'USR-12345',
|
|
73
|
+
disabled: true,
|
|
74
|
+
helperText: 'This field cannot be modified'
|
|
75
|
+
},
|
|
76
|
+
'error-field': {
|
|
77
|
+
label: 'Username',
|
|
78
|
+
placeholder: 'Choose a unique username',
|
|
79
|
+
error: 'This username is already taken',
|
|
80
|
+
required: true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
86
86
|
|
|
87
87
|
const meta = {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
title: 'Forms/TextInputField',
|
|
89
|
+
component: TextInputField,
|
|
90
|
+
parameters: {
|
|
91
|
+
layout: 'padded',
|
|
92
|
+
docs: {
|
|
93
|
+
description: {
|
|
94
|
+
component: `TextInputField is a reusable text input component with consistent styling and comprehensive features for form building.
|
|
95
95
|
|
|
96
96
|
**Key Features:**
|
|
97
97
|
- **Multiple Input Types**: Support for text, email, password, number, tel, search, and more
|
|
@@ -109,10 +109,10 @@ const meta = {
|
|
|
109
109
|
- Search and filter interfaces
|
|
110
110
|
- Profile and settings forms
|
|
111
111
|
- Any text input requirement with consistent styling`,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
tags: ['autodocs'],
|
|
116
116
|
} satisfies Meta<typeof TextInputField>;
|
|
117
117
|
|
|
118
118
|
export default meta;
|
|
@@ -120,407 +120,407 @@ type Story = StoryObj<typeof TextInputField>;
|
|
|
120
120
|
|
|
121
121
|
// Traditional Usage Examples
|
|
122
122
|
export const BasicText: Story = {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
render: () => (
|
|
124
|
+
<QwickApp appId="text-input-basic" appName='Basic Text Input'>
|
|
125
|
+
<TextInputField
|
|
126
|
+
label="Full Name"
|
|
127
|
+
placeholder="Enter your full name"
|
|
128
|
+
onChange={(value) => console.log('Name changed:', value)}
|
|
129
|
+
/>
|
|
130
|
+
</QwickApp>
|
|
131
|
+
),
|
|
132
|
+
parameters: {
|
|
133
|
+
docs: {
|
|
134
|
+
description: {
|
|
135
|
+
story: 'Basic text input field with label and placeholder.',
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
139
|
};
|
|
140
140
|
|
|
141
141
|
export const EmailField: Story = {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
142
|
+
render: () => (
|
|
143
|
+
<QwickApp appId="text-input-email" appName='Email Text Input'>
|
|
144
|
+
<TextInputField
|
|
145
|
+
label="Email Address"
|
|
146
|
+
type="email"
|
|
147
|
+
placeholder="your.email@example.com"
|
|
148
|
+
required={true}
|
|
149
|
+
helperText="We will never share your email address"
|
|
150
|
+
onChange={(value) => console.log('Email changed:', value)}
|
|
151
|
+
/>
|
|
152
|
+
</QwickApp>
|
|
153
|
+
),
|
|
154
|
+
parameters: {
|
|
155
|
+
docs: {
|
|
156
|
+
description: {
|
|
157
|
+
story: 'Email input field with validation type and helper text.',
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
161
|
};
|
|
162
162
|
|
|
163
163
|
export const PasswordField: Story = {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
164
|
+
render: () => (
|
|
165
|
+
<QwickApp appId="text-input-password" appName='Password Text Input'>
|
|
166
|
+
<TextInputField
|
|
167
|
+
label="Password"
|
|
168
|
+
type="password"
|
|
169
|
+
placeholder="Enter a strong password"
|
|
170
|
+
required={true}
|
|
171
|
+
helperText="Minimum 8 characters with mixed case and numbers"
|
|
172
|
+
onChange={(value) => console.log('Password changed:', value.length > 0 ? '***' : '')}
|
|
173
|
+
/>
|
|
174
|
+
</QwickApp>
|
|
175
|
+
),
|
|
176
|
+
parameters: {
|
|
177
|
+
docs: {
|
|
178
|
+
description: {
|
|
179
|
+
story: 'Password input field with masked text and security guidance.',
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
183
|
};
|
|
184
184
|
|
|
185
185
|
export const MultilineField: Story = {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
186
|
+
render: () => (
|
|
187
|
+
<QwickApp appId="text-input-multiline" appName='Multiline Text Input'>
|
|
188
|
+
<TextInputField
|
|
189
|
+
label="Description"
|
|
190
|
+
placeholder="Tell us more about yourself..."
|
|
191
|
+
multiline={true}
|
|
192
|
+
rows={4}
|
|
193
|
+
helperText="Provide a brief description (optional)"
|
|
194
|
+
onChange={(value) => console.log('Description changed:', value)}
|
|
195
|
+
/>
|
|
196
|
+
</QwickApp>
|
|
197
|
+
),
|
|
198
|
+
parameters: {
|
|
199
|
+
docs: {
|
|
200
|
+
description: {
|
|
201
|
+
story: 'Multiline textarea input with configurable rows.',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
205
|
};
|
|
206
206
|
|
|
207
207
|
export const InputTypes: Story = {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
208
|
+
render: () => (
|
|
209
|
+
<QwickApp appId="text-input-types" appName='Input Types'>
|
|
210
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
|
|
211
|
+
<TextInputField
|
|
212
|
+
label="Number Input"
|
|
213
|
+
type="number"
|
|
214
|
+
placeholder="25"
|
|
215
|
+
onChange={(value) => console.log('Number:', value)}
|
|
216
|
+
/>
|
|
217
|
+
<TextInputField
|
|
218
|
+
label="Phone Number"
|
|
219
|
+
type="tel"
|
|
220
|
+
placeholder="+1 (555) 123-4567"
|
|
221
|
+
onChange={(value) => console.log('Phone:', value)}
|
|
222
|
+
/>
|
|
223
|
+
<TextInputField
|
|
224
|
+
label="Search Field"
|
|
225
|
+
type="search"
|
|
226
|
+
placeholder="Search products, articles, or help..."
|
|
227
|
+
onChange={(value) => console.log('Search:', value)}
|
|
228
|
+
/>
|
|
229
|
+
<TextInputField
|
|
230
|
+
label="URL Input"
|
|
231
|
+
type="url"
|
|
232
|
+
placeholder="https://example.com"
|
|
233
|
+
onChange={(value) => console.log('URL:', value)}
|
|
234
|
+
/>
|
|
235
|
+
</Box>
|
|
236
|
+
</QwickApp>
|
|
237
|
+
),
|
|
238
|
+
parameters: {
|
|
239
|
+
docs: {
|
|
240
|
+
description: {
|
|
241
|
+
story: 'Various input types with appropriate placeholders and validation.',
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
245
|
};
|
|
246
246
|
|
|
247
247
|
export const States: Story = {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
248
|
+
render: () => (
|
|
249
|
+
<QwickApp appId="text-input-states" appName='Input Field States'>
|
|
250
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
|
|
251
|
+
<TextInputField
|
|
252
|
+
label="Normal State"
|
|
253
|
+
placeholder="Enter text here"
|
|
254
|
+
onChange={(value) => console.log('Normal:', value)}
|
|
255
|
+
/>
|
|
256
|
+
<TextInputField
|
|
257
|
+
label="Required Field"
|
|
258
|
+
placeholder="This field is required"
|
|
259
|
+
required={true}
|
|
260
|
+
onChange={(value) => console.log('Required:', value)}
|
|
261
|
+
/>
|
|
262
|
+
<TextInputField
|
|
263
|
+
label="Disabled Field"
|
|
264
|
+
value="This field is disabled"
|
|
265
|
+
disabled={true}
|
|
266
|
+
/>
|
|
267
|
+
<TextInputField
|
|
268
|
+
label="Error State"
|
|
269
|
+
placeholder="Enter a valid value"
|
|
270
|
+
error="This field contains an error"
|
|
271
|
+
onChange={(value) => console.log('Error field:', value)}
|
|
272
|
+
/>
|
|
273
|
+
<TextInputField
|
|
274
|
+
label="With Helper Text"
|
|
275
|
+
placeholder="Enter your information"
|
|
276
|
+
helperText="This is helpful information about this field"
|
|
277
|
+
onChange={(value) => console.log('With helper:', value)}
|
|
278
|
+
/>
|
|
279
|
+
</Box>
|
|
280
|
+
</QwickApp>
|
|
281
|
+
),
|
|
282
|
+
parameters: {
|
|
283
|
+
docs: {
|
|
284
|
+
description: {
|
|
285
|
+
story: 'Different input field states including normal, required, disabled, error, and helper text.',
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
289
|
};
|
|
290
290
|
|
|
291
291
|
// Data Binding Examples
|
|
292
292
|
export const DataBindingBasic: Story = {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
293
|
+
render: () => (
|
|
294
|
+
<QwickApp appId="text-input-data-binding" appName='TextInputField Data Binding' dataSource={{ dataProvider }}>
|
|
295
|
+
<Box>
|
|
296
|
+
|
|
297
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
298
|
+
<Typography variant="h5" gutterBottom> Data-Driven Text Input</Typography>
|
|
299
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
300
|
+
TextInputField components can be completely driven by CMS data, loading configuration and behavior from your data source.
|
|
301
|
+
</Typography>
|
|
302
|
+
|
|
303
|
+
<Code title="Usage" language="tsx">{`<TextInputField dataSource="textInputFields.basic-text" />`}</Code>
|
|
304
|
+
|
|
305
|
+
<Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.textInputFields['basic-text'], null, 2)}</Code>
|
|
306
|
+
</Box>
|
|
307
307
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
308
|
+
<TextInputField dataSource="textInputFields.basic-text" />
|
|
309
|
+
|
|
310
|
+
</Box>
|
|
311
|
+
</QwickApp>
|
|
312
|
+
),
|
|
313
|
+
parameters: {
|
|
314
|
+
docs: {
|
|
315
|
+
description: {
|
|
316
|
+
story: 'TextInputField with data binding - configuration resolved from CMS data through dataSource.',
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
},
|
|
320
320
|
};
|
|
321
321
|
|
|
322
322
|
export const DataBindingAdvanced: Story = {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
323
|
+
render: () => (
|
|
324
|
+
<QwickApp appId="text-input-data-advanced" appName='Advanced TextInputField Data Binding' dataSource={{ dataProvider }}>
|
|
325
|
+
<Box>
|
|
326
|
+
|
|
327
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
328
|
+
<Typography variant="h5" gutterBottom> Multiple Input Types</Typography>
|
|
329
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
330
|
+
Different TextInputField instances can load different configurations from separate data sources.
|
|
331
|
+
</Typography>
|
|
332
|
+
</Box>
|
|
333
333
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
334
|
+
{/* Basic Contact Form */}
|
|
335
|
+
<Box sx={{ mb: 4 }}>
|
|
336
|
+
<Typography variant="h4" gutterBottom>Contact Information</Typography>
|
|
337
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
|
|
338
|
+
<TextInputField dataSource="textInputFields.basic-text" />
|
|
339
|
+
<TextInputField dataSource="textInputFields.email-field" />
|
|
340
|
+
<TextInputField dataSource="textInputFields.phone-field" />
|
|
341
|
+
</Box>
|
|
342
|
+
</Box>
|
|
343
343
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
344
|
+
{/* Account Setup */}
|
|
345
|
+
<Box sx={{ mb: 4 }}>
|
|
346
|
+
<Typography variant="h4" gutterBottom>Account Setup</Typography>
|
|
347
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
|
|
348
|
+
<TextInputField dataSource="textInputFields.email-field" />
|
|
349
|
+
<TextInputField dataSource="textInputFields.password-field" />
|
|
350
|
+
<TextInputField dataSource="textInputFields.number-field" />
|
|
351
|
+
</Box>
|
|
352
|
+
</Box>
|
|
353
353
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
354
|
+
{/* Text Areas */}
|
|
355
|
+
<Box sx={{ mb: 4 }}>
|
|
356
|
+
<Typography variant="h4" gutterBottom>Extended Information</Typography>
|
|
357
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 600 }}>
|
|
358
|
+
<TextInputField dataSource="textInputFields.multiline-field" />
|
|
359
|
+
<TextInputField dataSource="textInputFields.large-textarea" />
|
|
360
|
+
</Box>
|
|
361
|
+
</Box>
|
|
362
|
+
|
|
363
|
+
</Box>
|
|
364
|
+
</QwickApp>
|
|
365
|
+
),
|
|
366
|
+
parameters: {
|
|
367
|
+
docs: {
|
|
368
|
+
description: {
|
|
369
|
+
story: 'Advanced data binding with multiple text input types showcasing different configurations and field types.',
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
373
|
};
|
|
374
374
|
|
|
375
375
|
export const DataBindingWithFallback: Story = {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
376
|
+
render: () => (
|
|
377
|
+
<QwickApp appId="text-input-fallback" appName='TextInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
|
|
378
|
+
<Box>
|
|
379
|
+
|
|
380
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
381
|
+
<Typography variant="h5" gutterBottom> Fallback Support</Typography>
|
|
382
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
383
|
+
TextInputField components gracefully handle missing data sources with fallback configurations.
|
|
384
|
+
</Typography>
|
|
385
|
+
|
|
386
|
+
<Code title="Fallback Usage" language="tsx">{`<TextInputField
|
|
387
|
+
dataSource="nonexistent.field"
|
|
388
|
+
label="Fallback Input"
|
|
389
|
+
placeholder="This is fallback content"
|
|
390
390
|
/>`}</Code>
|
|
391
|
-
|
|
391
|
+
</Box>
|
|
392
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
|
-
|
|
393
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
|
|
394
|
+
<Box>
|
|
395
|
+
<Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
|
|
396
|
+
<TextInputField
|
|
397
|
+
dataSource="nonexistent.field"
|
|
398
|
+
label="Fallback Input"
|
|
399
|
+
placeholder="This is fallback content"
|
|
400
|
+
/>
|
|
401
|
+
</Box>
|
|
402
|
+
<Box>
|
|
403
|
+
<Typography variant="h6" gutterBottom>Valid Data Source</Typography>
|
|
404
|
+
<TextInputField dataSource="textInputFields.basic-text" />
|
|
405
|
+
</Box>
|
|
406
|
+
</Box>
|
|
407
|
+
|
|
408
|
+
</Box>
|
|
409
|
+
</QwickApp>
|
|
410
|
+
),
|
|
411
|
+
parameters: {
|
|
412
|
+
docs: {
|
|
413
|
+
description: {
|
|
414
|
+
story: 'TextInputField with fallback configuration when dataSource is missing or unavailable.',
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
},
|
|
418
418
|
};
|
|
419
419
|
|
|
420
420
|
export const RealWorldExample: Story = {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
421
|
+
render: () => (
|
|
422
|
+
<QwickApp appId="text-input-real-world" appName='Real World TextInputField Example' dataSource={{ dataProvider }}>
|
|
423
|
+
<Box>
|
|
424
|
+
|
|
425
|
+
{/* Registration Form */}
|
|
426
|
+
<Paper sx={{ p: 4, mb: 4 }}>
|
|
427
|
+
<Typography variant="h3" gutterBottom>Create Your Account</Typography>
|
|
428
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
429
|
+
Join thousands of developers building with QwickApps React Framework
|
|
430
|
+
</Typography>
|
|
431
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
|
|
432
|
+
<TextInputField dataSource="textInputFields.basic-text" />
|
|
433
|
+
<TextInputField dataSource="textInputFields.email-field" />
|
|
434
|
+
<TextInputField dataSource="textInputFields.password-field" />
|
|
435
|
+
</Box>
|
|
436
|
+
</Paper>
|
|
437
|
+
|
|
438
|
+
{/* Contact Form */}
|
|
439
|
+
<Paper sx={{ p: 4, mb: 4 }}>
|
|
440
|
+
<Typography variant="h3" gutterBottom>Get In Touch</Typography>
|
|
441
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
442
|
+
Have questions? We'd love to hear from you.
|
|
443
|
+
</Typography>
|
|
444
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 600 }}>
|
|
445
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 3 }}>
|
|
446
|
+
<TextInputField dataSource="textInputFields.basic-text" />
|
|
447
|
+
<TextInputField dataSource="textInputFields.email-field" />
|
|
448
|
+
</Box>
|
|
449
|
+
<TextInputField dataSource="textInputFields.phone-field" />
|
|
450
|
+
<TextInputField dataSource="textInputFields.large-textarea" />
|
|
451
|
+
</Box>
|
|
452
|
+
</Paper>
|
|
453
|
+
|
|
454
|
+
{/* Search Interface */}
|
|
455
|
+
<Paper sx={{ p: 4 }}>
|
|
456
|
+
<Typography variant="h3" gutterBottom>Search & Discovery</Typography>
|
|
457
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
458
|
+
Find exactly what you need with our powerful search
|
|
459
|
+
</Typography>
|
|
460
|
+
<Box sx={{ maxWidth: 500 }}>
|
|
461
|
+
<TextInputField dataSource="textInputFields.search-field" />
|
|
462
|
+
</Box>
|
|
463
|
+
</Paper>
|
|
464
|
+
|
|
465
|
+
</Box>
|
|
466
|
+
</QwickApp>
|
|
467
|
+
),
|
|
468
|
+
parameters: {
|
|
469
|
+
docs: {
|
|
470
|
+
description: {
|
|
471
|
+
story: 'Real-world example showing TextInputField in various contexts: registration forms, contact forms, and search interfaces.',
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
},
|
|
475
475
|
};
|
|
476
476
|
|
|
477
477
|
export const FieldStatesShowcase: Story = {
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
478
|
+
render: () => (
|
|
479
|
+
<QwickApp appId="text-input-showcase" appName='TextInputField States Showcase' dataSource={{ dataProvider }}>
|
|
480
|
+
<Box>
|
|
481
|
+
|
|
482
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
483
|
+
<Typography variant="h5" gutterBottom> State Management</Typography>
|
|
484
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
485
|
+
TextInputField handles various states including error, disabled, and different field types gracefully.
|
|
486
|
+
</Typography>
|
|
487
|
+
</Box>
|
|
488
488
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
489
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 4 }}>
|
|
490
|
+
<Box>
|
|
491
|
+
<Typography variant="h6" gutterBottom>Normal State</Typography>
|
|
492
|
+
<TextInputField dataSource="textInputFields.basic-text" />
|
|
493
|
+
</Box>
|
|
494
|
+
<Box>
|
|
495
|
+
<Typography variant="h6" gutterBottom>Error State</Typography>
|
|
496
|
+
<TextInputField dataSource="textInputFields.error-field" />
|
|
497
|
+
</Box>
|
|
498
|
+
<Box>
|
|
499
|
+
<Typography variant="h6" gutterBottom>Disabled State</Typography>
|
|
500
|
+
<TextInputField dataSource="textInputFields.disabled-field" />
|
|
501
|
+
</Box>
|
|
502
|
+
<Box>
|
|
503
|
+
<Typography variant="h6" gutterBottom>Multiline Field</Typography>
|
|
504
|
+
<TextInputField dataSource="textInputFields.multiline-field" />
|
|
505
|
+
</Box>
|
|
506
|
+
<Box>
|
|
507
|
+
<Typography variant="h6" gutterBottom>Email Field</Typography>
|
|
508
|
+
<TextInputField dataSource="textInputFields.email-field" />
|
|
509
|
+
</Box>
|
|
510
|
+
<Box>
|
|
511
|
+
<Typography variant="h6" gutterBottom>Password Field</Typography>
|
|
512
|
+
<TextInputField dataSource="textInputFields.password-field" />
|
|
513
|
+
</Box>
|
|
514
|
+
</Box>
|
|
515
|
+
|
|
516
|
+
</Box>
|
|
517
|
+
</QwickApp>
|
|
518
|
+
),
|
|
519
|
+
parameters: {
|
|
520
|
+
docs: {
|
|
521
|
+
description: {
|
|
522
|
+
story: 'Comprehensive showcase of different TextInputField states and configurations.',
|
|
523
|
+
},
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
526
|
};
|