@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
|
@@ -14,146 +14,146 @@ import { useState } from 'react';
|
|
|
14
14
|
|
|
15
15
|
// Sample choice input field data for different use cases
|
|
16
16
|
const sampleCmsData = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
17
|
+
'choiceInputFields': {
|
|
18
|
+
'poll-question': {
|
|
19
|
+
label: 'Poll Options',
|
|
20
|
+
options: [
|
|
21
|
+
'Strongly Agree',
|
|
22
|
+
'Agree',
|
|
23
|
+
'Neutral',
|
|
24
|
+
'Disagree',
|
|
25
|
+
'Strongly Disagree'
|
|
26
|
+
],
|
|
27
|
+
optionLabelPrefix: 'Choice',
|
|
28
|
+
placeholder: 'Enter poll option...',
|
|
29
|
+
addButtonText: 'Add Poll Option',
|
|
30
|
+
rows: 1
|
|
31
|
+
},
|
|
32
|
+
'quiz-answers': {
|
|
33
|
+
label: 'Quiz Answer Options',
|
|
34
|
+
options: [
|
|
35
|
+
'<b>JavaScript</b> - A programming language',
|
|
36
|
+
'<i>Python</i> - Another programming language',
|
|
37
|
+
'<code>HTML</code> - Markup language',
|
|
38
|
+
'<u>CSS</u> - Styling language'
|
|
39
|
+
],
|
|
40
|
+
optionLabelPrefix: 'Answer',
|
|
41
|
+
placeholder: 'Enter quiz answer with HTML formatting...',
|
|
42
|
+
addButtonText: 'Add Answer',
|
|
43
|
+
rows: 2
|
|
44
|
+
},
|
|
45
|
+
'feature-requests': {
|
|
46
|
+
label: 'Feature Request Categories',
|
|
47
|
+
options: [
|
|
48
|
+
'<b> Performance</b><br/>Speed and optimization improvements',
|
|
49
|
+
'<b> UI/UX</b><br/>Interface and experience enhancements',
|
|
50
|
+
'<b>⚙ Functionality</b><br/>New features and capabilities',
|
|
51
|
+
'<b> Bug Fixes</b><br/>Issues and error corrections'
|
|
52
|
+
],
|
|
53
|
+
optionLabelPrefix: 'Category',
|
|
54
|
+
placeholder: 'Describe feature category with HTML...',
|
|
55
|
+
addButtonText: 'Add Category',
|
|
56
|
+
rows: 3
|
|
57
|
+
},
|
|
58
|
+
'product-benefits': {
|
|
59
|
+
label: 'Product Benefits',
|
|
60
|
+
options: [
|
|
61
|
+
' <b>Lightning Fast</b> - Optimized for speed',
|
|
62
|
+
'🔒 <i>Secure by Design</i> - Built with security first',
|
|
63
|
+
' <u>Mobile Responsive</u> - Works on all devices'
|
|
64
|
+
],
|
|
65
|
+
optionLabelPrefix: 'Benefit',
|
|
66
|
+
placeholder: 'Describe product benefit...',
|
|
67
|
+
addButtonText: 'Add Benefit',
|
|
68
|
+
rows: 2
|
|
69
|
+
},
|
|
70
|
+
'survey-responses': {
|
|
71
|
+
label: 'Survey Response Options',
|
|
72
|
+
options: [
|
|
73
|
+
'Excellent',
|
|
74
|
+
'Very Good',
|
|
75
|
+
'Good',
|
|
76
|
+
'Fair',
|
|
77
|
+
'Poor'
|
|
78
|
+
],
|
|
79
|
+
optionLabelPrefix: 'Response',
|
|
80
|
+
placeholder: 'Enter response option...',
|
|
81
|
+
addButtonText: 'Add Response',
|
|
82
|
+
rows: 1
|
|
83
|
+
},
|
|
84
|
+
'faq-categories': {
|
|
85
|
+
label: 'FAQ Categories',
|
|
86
|
+
options: [
|
|
87
|
+
'<b>Getting Started</b><br/>Basic setup and onboarding questions',
|
|
88
|
+
'<b>Account Management</b><br/>Profile, billing, and subscription questions',
|
|
89
|
+
'<b>Technical Support</b><br/>Technical issues and troubleshooting',
|
|
90
|
+
'<b>Features & Usage</b><br/>How to use specific features'
|
|
91
|
+
],
|
|
92
|
+
optionLabelPrefix: 'Category',
|
|
93
|
+
placeholder: 'Define FAQ category with description...',
|
|
94
|
+
addButtonText: 'Add FAQ Category',
|
|
95
|
+
rows: 3
|
|
96
|
+
},
|
|
97
|
+
'menu-items': {
|
|
98
|
+
label: 'Navigation Menu Items',
|
|
99
|
+
options: [
|
|
100
|
+
'Home',
|
|
101
|
+
'About Us',
|
|
102
|
+
'Services',
|
|
103
|
+
'Contact'
|
|
104
|
+
],
|
|
105
|
+
optionLabelPrefix: 'Menu Item',
|
|
106
|
+
placeholder: 'Enter menu item name...',
|
|
107
|
+
addButtonText: 'Add Menu Item',
|
|
108
|
+
rows: 1
|
|
109
|
+
},
|
|
110
|
+
'pricing-tiers': {
|
|
111
|
+
label: 'Pricing Tier Options',
|
|
112
|
+
options: [
|
|
113
|
+
'<b>💎 Premium</b> - $99/month<br/><i>All features included</i>',
|
|
114
|
+
'<b> Pro</b> - $49/month<br/><i>Most popular plan</i>',
|
|
115
|
+
'<b> Starter</b> - $19/month<br/><i>Perfect for beginners</i>'
|
|
116
|
+
],
|
|
117
|
+
optionLabelPrefix: 'Tier',
|
|
118
|
+
placeholder: 'Define pricing tier with details...',
|
|
119
|
+
addButtonText: 'Add Pricing Tier',
|
|
120
|
+
rows: 3
|
|
121
|
+
},
|
|
122
|
+
'team-roles': {
|
|
123
|
+
label: 'Team Role Definitions',
|
|
124
|
+
options: [
|
|
125
|
+
'<b>👑 Project Manager</b><br/>Oversees project execution and team coordination',
|
|
126
|
+
'<b> Senior Developer</b><br/>Leads technical development and code reviews'
|
|
127
|
+
],
|
|
128
|
+
optionLabelPrefix: 'Role',
|
|
129
|
+
placeholder: 'Define team role and responsibilities...',
|
|
130
|
+
addButtonText: 'Add Team Role',
|
|
131
|
+
rows: 3
|
|
132
|
+
},
|
|
133
|
+
'basic-options': {
|
|
134
|
+
label: 'Basic Options List',
|
|
135
|
+
options: [
|
|
136
|
+
'Option A',
|
|
137
|
+
'Option B'
|
|
138
|
+
],
|
|
139
|
+
optionLabelPrefix: 'Option',
|
|
140
|
+
placeholder: 'Enter option...',
|
|
141
|
+
addButtonText: 'Add Option',
|
|
142
|
+
rows: 1
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
145
|
};
|
|
146
146
|
|
|
147
147
|
const dataProvider = new JsonDataProvider({ data: sampleCmsData });
|
|
148
148
|
|
|
149
149
|
const meta = {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
150
|
+
title: 'Forms/ChoiceInputField',
|
|
151
|
+
component: ChoiceInputField,
|
|
152
|
+
parameters: {
|
|
153
|
+
layout: 'padded',
|
|
154
|
+
docs: {
|
|
155
|
+
description: {
|
|
156
|
+
component: `ChoiceInputField is a dynamic options management component with HTML formatting capabilities and data binding support for creating interactive choice lists.
|
|
157
157
|
|
|
158
158
|
**Key Features:**
|
|
159
159
|
- **Dynamic Options**: Add, edit, and manage multiple option inputs
|
|
@@ -172,10 +172,10 @@ const meta = {
|
|
|
172
172
|
- FAQ category management
|
|
173
173
|
- Menu and navigation item creation
|
|
174
174
|
- Any dynamic list of formatted options`,
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
tags: ['autodocs'],
|
|
179
179
|
} satisfies Meta<typeof ChoiceInputField>;
|
|
180
180
|
|
|
181
181
|
export default meta;
|
|
@@ -183,409 +183,409 @@ type Story = StoryObj<typeof ChoiceInputField>;
|
|
|
183
183
|
|
|
184
184
|
// Interactive example component
|
|
185
185
|
function InteractiveChoiceExample({
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
initialOptions = ['Option 1', 'Option 2'],
|
|
187
|
+
label = 'Interactive Options',
|
|
188
|
+
optionLabelPrefix = 'Option'
|
|
189
189
|
}: {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
initialOptions?: string[];
|
|
191
|
+
label?: string;
|
|
192
|
+
optionLabelPrefix?: string;
|
|
193
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
|
-
|
|
194
|
+
const [options, setOptions] = useState<string[]>(initialOptions);
|
|
195
|
+
|
|
196
|
+
const handleOptionChange = (optionIndex: number, value: string) => {
|
|
197
|
+
const newOptions = [...options];
|
|
198
|
+
newOptions[optionIndex] = value;
|
|
199
|
+
setOptions(newOptions);
|
|
200
|
+
console.log('Option changed:', { optionIndex, value, allOptions: newOptions });
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
const handleAddOption = () => {
|
|
204
|
+
setOptions([...options, '']);
|
|
205
|
+
console.log('Added new option, total:', options.length + 1);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
return (
|
|
209
|
+
<ChoiceInputField
|
|
210
|
+
label={label}
|
|
211
|
+
options={options}
|
|
212
|
+
optionLabelPrefix={optionLabelPrefix}
|
|
213
|
+
onOptionChange={handleOptionChange}
|
|
214
|
+
onAddOption={handleAddOption}
|
|
215
|
+
placeholder="Enter option text. HTML formatting supported."
|
|
216
|
+
/>
|
|
217
|
+
);
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
// Traditional Usage Examples
|
|
221
221
|
export const BasicChoices: Story = {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
222
|
+
render: () => (
|
|
223
|
+
<QwickApp appId="choice-input-basic" appName='Basic Choice Input'>
|
|
224
|
+
<InteractiveChoiceExample
|
|
225
|
+
initialOptions={['First Option', 'Second Option']}
|
|
226
|
+
label="Basic Options List"
|
|
227
|
+
/>
|
|
228
|
+
</QwickApp>
|
|
229
|
+
),
|
|
230
|
+
parameters: {
|
|
231
|
+
docs: {
|
|
232
|
+
description: {
|
|
233
|
+
story: 'Basic choice input field with editable options and add functionality.',
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
237
|
};
|
|
238
238
|
|
|
239
239
|
export const PollOptions: Story = {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
240
|
+
render: () => (
|
|
241
|
+
<QwickApp appId="choice-input-poll" appName='Poll Options'>
|
|
242
|
+
<InteractiveChoiceExample
|
|
243
|
+
initialOptions={[
|
|
244
|
+
'Strongly Agree',
|
|
245
|
+
'Agree',
|
|
246
|
+
'Neutral',
|
|
247
|
+
'Disagree',
|
|
248
|
+
'Strongly Disagree'
|
|
249
|
+
]}
|
|
250
|
+
label="Poll Question Options"
|
|
251
|
+
optionLabelPrefix="Choice"
|
|
252
|
+
/>
|
|
253
|
+
</QwickApp>
|
|
254
|
+
),
|
|
255
|
+
parameters: {
|
|
256
|
+
docs: {
|
|
257
|
+
description: {
|
|
258
|
+
story: 'Choice input configured for poll question options with standard survey responses.',
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
262
|
};
|
|
263
263
|
|
|
264
264
|
export const HtmlFormattedOptions: Story = {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
265
|
+
render: () => (
|
|
266
|
+
<QwickApp appId="choice-input-html" appName='HTML Formatted Options'>
|
|
267
|
+
<InteractiveChoiceExample
|
|
268
|
+
initialOptions={[
|
|
269
|
+
'<b>JavaScript</b> - A programming language',
|
|
270
|
+
'<i>Python</i> - Another programming language',
|
|
271
|
+
'<code>HTML</code> - Markup language'
|
|
272
|
+
]}
|
|
273
|
+
label="Quiz Answer Options"
|
|
274
|
+
optionLabelPrefix="Answer"
|
|
275
|
+
/>
|
|
276
|
+
</QwickApp>
|
|
277
|
+
),
|
|
278
|
+
parameters: {
|
|
279
|
+
docs: {
|
|
280
|
+
description: {
|
|
281
|
+
story: 'Choice input with HTML-formatted options for rich content like quiz answers.',
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
285
|
};
|
|
286
286
|
|
|
287
287
|
export const ProductFeatures: Story = {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
288
|
+
render: () => (
|
|
289
|
+
<QwickApp appId="choice-input-features" appName='Product Features'>
|
|
290
|
+
<InteractiveChoiceExample
|
|
291
|
+
initialOptions={[
|
|
292
|
+
' <b>Lightning Fast</b> - Optimized for speed',
|
|
293
|
+
'🔒 <i>Secure by Design</i> - Built with security first',
|
|
294
|
+
' <u>Mobile Responsive</u> - Works on all devices'
|
|
295
|
+
]}
|
|
296
|
+
label="Product Benefits"
|
|
297
|
+
optionLabelPrefix="Benefit"
|
|
298
|
+
/>
|
|
299
|
+
</QwickApp>
|
|
300
|
+
),
|
|
301
|
+
parameters: {
|
|
302
|
+
docs: {
|
|
303
|
+
description: {
|
|
304
|
+
story: 'Choice input for managing product features and benefits with icons and formatting.',
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
308
|
};
|
|
309
309
|
|
|
310
310
|
export const StaticDisplay: Story = {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
311
|
+
render: () => (
|
|
312
|
+
<QwickApp appId="choice-input-static" appName='Static Choice Display'>
|
|
313
|
+
<ChoiceInputField
|
|
314
|
+
label="Read-only Options"
|
|
315
|
+
options={[
|
|
316
|
+
'Option 1 (read-only)',
|
|
317
|
+
'Option 2 (read-only)',
|
|
318
|
+
'Option 3 (read-only)'
|
|
319
|
+
]}
|
|
320
|
+
optionLabelPrefix="Item"
|
|
321
|
+
disabled={true}
|
|
322
|
+
// No onAddOption or onOptionChange = static display
|
|
323
|
+
/>
|
|
324
|
+
</QwickApp>
|
|
325
|
+
),
|
|
326
|
+
parameters: {
|
|
327
|
+
docs: {
|
|
328
|
+
description: {
|
|
329
|
+
story: 'Static choice input display without edit functionality for read-only scenarios.',
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
333
|
};
|
|
334
334
|
|
|
335
335
|
// Data Binding Examples
|
|
336
336
|
export const DataBindingBasic: Story = {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
337
|
+
render: () => (
|
|
338
|
+
<QwickApp appId="choice-input-data-binding" appName='ChoiceInputField Data Binding' dataSource={{ dataProvider }}>
|
|
339
|
+
<Box>
|
|
340
|
+
|
|
341
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
342
|
+
<Typography variant="h5" gutterBottom> Data-Driven Choice Options</Typography>
|
|
343
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
344
|
+
ChoiceInputField components can be completely driven by CMS data, loading options and configuration from your data source.
|
|
345
|
+
</Typography>
|
|
346
|
+
|
|
347
|
+
<Code title="Usage" language="tsx">{`<ChoiceInputField dataSource="choiceInputFields.poll-question" />`}</Code>
|
|
348
|
+
|
|
349
|
+
<Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.choiceInputFields['poll-question'], null, 2)}</Code>
|
|
350
|
+
</Box>
|
|
351
351
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
352
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
353
|
+
|
|
354
|
+
</Box>
|
|
355
|
+
</QwickApp>
|
|
356
|
+
),
|
|
357
|
+
parameters: {
|
|
358
|
+
docs: {
|
|
359
|
+
description: {
|
|
360
|
+
story: 'ChoiceInputField with data binding - options and configuration resolved from CMS data through dataSource.',
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
364
|
};
|
|
365
365
|
|
|
366
366
|
export const DataBindingAdvanced: Story = {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
367
|
+
render: () => (
|
|
368
|
+
<QwickApp appId="choice-input-data-advanced" appName='Advanced ChoiceInputField Data Binding' dataSource={{ dataProvider }}>
|
|
369
|
+
<Box>
|
|
370
|
+
|
|
371
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
372
|
+
<Typography variant="h5" gutterBottom> Multiple Choice Types</Typography>
|
|
373
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
374
|
+
Different ChoiceInputField instances can load different option sets and configurations from separate data sources.
|
|
375
|
+
</Typography>
|
|
376
|
+
</Box>
|
|
377
377
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
378
|
+
{/* Survey & Polls */}
|
|
379
|
+
<Box sx={{ mb: 4 }}>
|
|
380
|
+
<Typography variant="h4" gutterBottom>Surveys & Polls</Typography>
|
|
381
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
382
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
383
|
+
<ChoiceInputField dataSource="choiceInputFields.survey-responses" />
|
|
384
|
+
</Box>
|
|
385
|
+
</Box>
|
|
386
386
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
387
|
+
{/* Content Management */}
|
|
388
|
+
<Box sx={{ mb: 4 }}>
|
|
389
|
+
<Typography variant="h4" gutterBottom>Content & Learning</Typography>
|
|
390
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
391
|
+
<ChoiceInputField dataSource="choiceInputFields.quiz-answers" />
|
|
392
|
+
<ChoiceInputField dataSource="choiceInputFields.faq-categories" />
|
|
393
|
+
</Box>
|
|
394
|
+
</Box>
|
|
395
395
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
396
|
+
{/* Business Configuration */}
|
|
397
|
+
<Box sx={{ mb: 4 }}>
|
|
398
|
+
<Typography variant="h4" gutterBottom>Business & Product</Typography>
|
|
399
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
400
|
+
<ChoiceInputField dataSource="choiceInputFields.feature-requests" />
|
|
401
|
+
<ChoiceInputField dataSource="choiceInputFields.pricing-tiers" />
|
|
402
|
+
</Box>
|
|
403
|
+
</Box>
|
|
404
|
+
|
|
405
|
+
</Box>
|
|
406
|
+
</QwickApp>
|
|
407
|
+
),
|
|
408
|
+
parameters: {
|
|
409
|
+
docs: {
|
|
410
|
+
description: {
|
|
411
|
+
story: 'Advanced data binding with multiple choice types showcasing different configurations and use cases.',
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
},
|
|
415
415
|
};
|
|
416
416
|
|
|
417
417
|
export const DataBindingWithFallback: Story = {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
418
|
+
render: () => (
|
|
419
|
+
<QwickApp appId="choice-input-fallback" appName='ChoiceInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
|
|
420
|
+
<Box>
|
|
421
|
+
|
|
422
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
423
|
+
<Typography variant="h5" gutterBottom> Fallback Support</Typography>
|
|
424
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
425
|
+
ChoiceInputField components gracefully handle missing data sources with fallback configurations.
|
|
426
|
+
</Typography>
|
|
427
|
+
|
|
428
|
+
<Code title="Fallback Usage" language="tsx">{`<ChoiceInputField
|
|
429
|
+
dataSource="nonexistent.field"
|
|
430
|
+
label="Fallback Options"
|
|
431
|
+
options={['Fallback 1', 'Fallback 2']}
|
|
432
|
+
optionLabelPrefix="Option"
|
|
433
433
|
/>`}</Code>
|
|
434
|
-
|
|
434
|
+
</Box>
|
|
435
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
|
-
|
|
436
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
|
|
437
|
+
<Box>
|
|
438
|
+
<Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
|
|
439
|
+
<ChoiceInputField
|
|
440
|
+
dataSource="nonexistent.field"
|
|
441
|
+
label="Fallback Options"
|
|
442
|
+
options={['Fallback Option 1', 'Fallback Option 2']}
|
|
443
|
+
optionLabelPrefix="Option"
|
|
444
|
+
/>
|
|
445
|
+
</Box>
|
|
446
|
+
<Box>
|
|
447
|
+
<Typography variant="h6" gutterBottom>Valid Data Source</Typography>
|
|
448
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
449
|
+
</Box>
|
|
450
|
+
</Box>
|
|
451
|
+
|
|
452
|
+
</Box>
|
|
453
|
+
</QwickApp>
|
|
454
|
+
),
|
|
455
|
+
parameters: {
|
|
456
|
+
docs: {
|
|
457
|
+
description: {
|
|
458
|
+
story: 'ChoiceInputField with fallback options when dataSource is missing or unavailable.',
|
|
459
|
+
},
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
462
|
};
|
|
463
463
|
|
|
464
464
|
export const RealWorldExample: Story = {
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
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
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
465
|
+
render: () => (
|
|
466
|
+
<QwickApp appId="choice-input-real-world" appName='Real World ChoiceInputField Example' dataSource={{ dataProvider }}>
|
|
467
|
+
<Box>
|
|
468
|
+
|
|
469
|
+
{/* Survey Platform */}
|
|
470
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
|
|
471
|
+
<Typography variant="h3" gutterBottom>Survey & Polling Platform</Typography>
|
|
472
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
473
|
+
Create comprehensive surveys and polls with customizable response options
|
|
474
|
+
</Typography>
|
|
475
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
|
|
476
|
+
<ChoiceInputField dataSource="choiceInputFields.poll-question" />
|
|
477
|
+
<ChoiceInputField dataSource="choiceInputFields.survey-responses" />
|
|
478
|
+
</Box>
|
|
479
|
+
</Box>
|
|
480
|
+
|
|
481
|
+
{/* E-Learning System */}
|
|
482
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
|
|
483
|
+
<Typography variant="h3" gutterBottom>E-Learning & Assessment</Typography>
|
|
484
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
|
|
485
|
+
Build interactive quizzes and organize educational content effectively
|
|
486
|
+
</Typography>
|
|
487
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
|
|
488
|
+
<ChoiceInputField dataSource="choiceInputFields.quiz-answers" />
|
|
489
|
+
<ChoiceInputField dataSource="choiceInputFields.faq-categories" />
|
|
490
|
+
</Box>
|
|
491
|
+
</Box>
|
|
492
|
+
|
|
493
|
+
{/* Business Management */}
|
|
494
|
+
<Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
|
|
495
|
+
<Typography variant="h3" gutterBottom>Business Configuration</Typography>
|
|
496
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
|
|
497
|
+
Manage business features, pricing, and team structures dynamically
|
|
498
|
+
</Typography>
|
|
499
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
|
|
500
|
+
<ChoiceInputField dataSource="choiceInputFields.feature-requests" />
|
|
501
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
|
|
502
|
+
<ChoiceInputField dataSource="choiceInputFields.pricing-tiers" />
|
|
503
|
+
<ChoiceInputField dataSource="choiceInputFields.team-roles" />
|
|
504
|
+
</Box>
|
|
505
|
+
</Box>
|
|
506
|
+
</Box>
|
|
507
|
+
|
|
508
|
+
{/* Website Management */}
|
|
509
|
+
<Box sx={{ p: 4, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 2 }}>
|
|
510
|
+
<Typography variant="h3" gutterBottom>Website & Content Management</Typography>
|
|
511
|
+
<Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
|
|
512
|
+
Manage website navigation, product features, and content categories
|
|
513
|
+
</Typography>
|
|
514
|
+
<Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4, maxWidth: 1000 }}>
|
|
515
|
+
<ChoiceInputField dataSource="choiceInputFields.menu-items" />
|
|
516
|
+
<ChoiceInputField dataSource="choiceInputFields.product-benefits" />
|
|
517
|
+
</Box>
|
|
518
|
+
</Box>
|
|
519
|
+
|
|
520
|
+
</Box>
|
|
521
|
+
</QwickApp>
|
|
522
|
+
),
|
|
523
|
+
parameters: {
|
|
524
|
+
docs: {
|
|
525
|
+
description: {
|
|
526
|
+
story: 'Real-world example showing ChoiceInputField in various contexts: surveys, e-learning, business management, and website administration.',
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
},
|
|
530
530
|
};
|
|
531
531
|
|
|
532
532
|
export const InteractiveDemo: Story = {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
533
|
+
render: () => (
|
|
534
|
+
<QwickApp appId="choice-input-interactive" appName='Interactive ChoiceInputField Demo'>
|
|
535
|
+
<Box>
|
|
536
|
+
|
|
537
|
+
<Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
|
|
538
|
+
<Typography variant="h5" gutterBottom>🎮 Interactive Demo</Typography>
|
|
539
|
+
<Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
|
|
540
|
+
Try editing the options below. You can modify existing options or add new ones using the "Add Option" button.
|
|
541
|
+
</Typography>
|
|
542
|
+
|
|
543
|
+
<Alert severity="info" sx={{ mb: 3 }}>
|
|
544
|
+
<Typography variant="body2">
|
|
545
|
+
Each option supports HTML formatting. Try using <code><b></code>, <code><i></code>, <code><u></code>, or <code><code></code> tags!
|
|
546
|
+
</Typography>
|
|
547
|
+
</Alert>
|
|
548
|
+
</Box>
|
|
549
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
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
550
|
+
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
|
|
551
|
+
<InteractiveChoiceExample
|
|
552
|
+
initialOptions={[
|
|
553
|
+
'<b>Excellent</b> - Outstanding quality',
|
|
554
|
+
'<i>Very Good</i> - Above expectations',
|
|
555
|
+
'Good - Meets expectations'
|
|
556
|
+
]}
|
|
557
|
+
label="Customer Satisfaction Survey"
|
|
558
|
+
optionLabelPrefix="Rating"
|
|
559
|
+
/>
|
|
560
|
+
|
|
561
|
+
<InteractiveChoiceExample
|
|
562
|
+
initialOptions={[
|
|
563
|
+
' <b>Marketing</b>',
|
|
564
|
+
' <b>Development</b>',
|
|
565
|
+
' <b>Design</b>'
|
|
566
|
+
]}
|
|
567
|
+
label="Department Selection"
|
|
568
|
+
optionLabelPrefix="Department"
|
|
569
|
+
/>
|
|
570
|
+
|
|
571
|
+
<InteractiveChoiceExample
|
|
572
|
+
initialOptions={[
|
|
573
|
+
'<code>React</code> - UI Library',
|
|
574
|
+
'<code>TypeScript</code> - Type Safety'
|
|
575
|
+
]}
|
|
576
|
+
label="Technology Stack"
|
|
577
|
+
optionLabelPrefix="Technology"
|
|
578
|
+
/>
|
|
579
|
+
</Box>
|
|
580
|
+
|
|
581
|
+
</Box>
|
|
582
|
+
</QwickApp>
|
|
583
|
+
),
|
|
584
|
+
parameters: {
|
|
585
|
+
docs: {
|
|
586
|
+
description: {
|
|
587
|
+
story: 'Interactive demonstration of ChoiceInputField functionality with real-time editing and HTML formatting.',
|
|
588
|
+
},
|
|
589
|
+
},
|
|
590
|
+
},
|
|
591
591
|
};
|