@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.
Files changed (320) hide show
  1. package/README.md +1691 -2
  2. package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts +66 -0
  3. package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +1 -0
  4. package/dist/components/ErrorBoundary.d.ts +7 -0
  5. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  6. package/dist/components/Html.d.ts +28 -18
  7. package/dist/components/Html.d.ts.map +1 -1
  8. package/dist/components/Logo.d.ts +12 -35
  9. package/dist/components/Logo.d.ts.map +1 -1
  10. package/dist/components/Markdown.d.ts +18 -13
  11. package/dist/components/Markdown.d.ts.map +1 -1
  12. package/dist/components/QwickApp.d.ts +16 -3
  13. package/dist/components/QwickApp.d.ts.map +1 -1
  14. package/dist/components/QwickIcon.d.ts +23 -0
  15. package/dist/components/QwickIcon.d.ts.map +1 -0
  16. package/dist/components/SafeSpan.d.ts +12 -5
  17. package/dist/components/SafeSpan.d.ts.map +1 -1
  18. package/dist/components/Scaffold.d.ts.map +1 -1
  19. package/dist/components/base/ModelView.d.ts +101 -0
  20. package/dist/components/base/ModelView.d.ts.map +1 -0
  21. package/dist/components/base/index.d.ts +11 -0
  22. package/dist/components/base/index.d.ts.map +1 -0
  23. package/dist/components/blocks/Article.d.ts +12 -2
  24. package/dist/components/blocks/Article.d.ts.map +1 -1
  25. package/dist/components/blocks/Code.d.ts +13 -2
  26. package/dist/components/blocks/Code.d.ts.map +1 -1
  27. package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -1
  28. package/dist/components/blocks/FeatureCard.d.ts.map +1 -1
  29. package/dist/components/blocks/FeatureGrid.d.ts.map +1 -1
  30. package/dist/components/blocks/Footer.d.ts.map +1 -1
  31. package/dist/components/blocks/HeroBlock.d.ts +27 -13
  32. package/dist/components/blocks/HeroBlock.d.ts.map +1 -1
  33. package/dist/components/blocks/Image.d.ts +41 -0
  34. package/dist/components/blocks/Image.d.ts.map +1 -0
  35. package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -1
  36. package/dist/components/blocks/Section.d.ts +16 -2
  37. package/dist/components/blocks/Section.d.ts.map +1 -1
  38. package/dist/components/blocks/Text.d.ts +41 -0
  39. package/dist/components/blocks/Text.d.ts.map +1 -0
  40. package/dist/components/blocks/index.d.ts +4 -0
  41. package/dist/components/blocks/index.d.ts.map +1 -1
  42. package/dist/components/buttons/Button.d.ts +23 -7
  43. package/dist/components/buttons/Button.d.ts.map +1 -1
  44. package/dist/components/forms/FormBlock.d.ts +19 -13
  45. package/dist/components/forms/FormBlock.d.ts.map +1 -1
  46. package/dist/components/index.d.ts +4 -0
  47. package/dist/components/index.d.ts.map +1 -1
  48. package/dist/components/input/ChoiceInputField.d.ts +17 -11
  49. package/dist/components/input/ChoiceInputField.d.ts.map +1 -1
  50. package/dist/components/input/HtmlInputField.d.ts +17 -11
  51. package/dist/components/input/HtmlInputField.d.ts.map +1 -1
  52. package/dist/components/input/SelectInputField.d.ts +16 -10
  53. package/dist/components/input/SelectInputField.d.ts.map +1 -1
  54. package/dist/components/input/SwitchInputField.d.ts +16 -10
  55. package/dist/components/input/SwitchInputField.d.ts.map +1 -1
  56. package/dist/components/input/TextField.d.ts.map +1 -1
  57. package/dist/components/input/TextInputField.d.ts +16 -11
  58. package/dist/components/input/TextInputField.d.ts.map +1 -1
  59. package/dist/components/layout/GridCell.d.ts +23 -6
  60. package/dist/components/layout/GridCell.d.ts.map +1 -1
  61. package/dist/components/layout/GridLayout.d.ts +24 -23
  62. package/dist/components/layout/GridLayout.d.ts.map +1 -1
  63. package/dist/components/pages/FormPage.d.ts.map +1 -1
  64. package/dist/components/pages/Page.d.ts +49 -87
  65. package/dist/components/pages/Page.d.ts.map +1 -1
  66. package/dist/components/pages/index.d.ts +2 -2
  67. package/dist/components/pages/index.d.ts.map +1 -1
  68. package/dist/config/AppConfig.d.ts +49 -0
  69. package/dist/config/AppConfig.d.ts.map +1 -0
  70. package/dist/config/AppConfigBuilder.d.ts +75 -0
  71. package/dist/config/AppConfigBuilder.d.ts.map +1 -0
  72. package/dist/config/index.d.ts +13 -0
  73. package/dist/config/index.d.ts.map +1 -0
  74. package/dist/config/types.d.ts +130 -0
  75. package/dist/config/types.d.ts.map +1 -0
  76. package/dist/config.d.ts +15 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.esm.js +451 -0
  79. package/dist/config.js +455 -0
  80. package/dist/contexts/PrintModeContext.d.ts +27 -0
  81. package/dist/contexts/PrintModeContext.d.ts.map +1 -0
  82. package/dist/contexts/QwickAppContext.d.ts +2 -2
  83. package/dist/contexts/QwickAppContext.d.ts.map +1 -1
  84. package/dist/contexts/index.d.ts +2 -0
  85. package/dist/contexts/index.d.ts.map +1 -1
  86. package/dist/hooks/index.d.ts +2 -0
  87. package/dist/hooks/index.d.ts.map +1 -1
  88. package/dist/hooks/usePrintMode.d.ts +39 -0
  89. package/dist/hooks/usePrintMode.d.ts.map +1 -0
  90. package/dist/index.css +1 -1
  91. package/dist/index.d.ts +1 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.esm.css +1 -1
  94. package/dist/index.esm.js +10951 -6238
  95. package/dist/index.js +11014 -6287
  96. package/dist/schemas/CodeSchema.d.ts +2 -1
  97. package/dist/schemas/CodeSchema.d.ts.map +1 -1
  98. package/dist/schemas/CollapsibleLayoutSchema.d.ts +2 -1
  99. package/dist/schemas/CollapsibleLayoutSchema.d.ts.map +1 -1
  100. package/dist/schemas/ContentSchema.d.ts +2 -1
  101. package/dist/schemas/ContentSchema.d.ts.map +1 -1
  102. package/dist/schemas/GridCellSchema.d.ts +25 -0
  103. package/dist/schemas/GridCellSchema.d.ts.map +1 -0
  104. package/dist/schemas/GridLayoutSchema.d.ts +23 -0
  105. package/dist/schemas/GridLayoutSchema.d.ts.map +1 -0
  106. package/dist/schemas/HtmlSchema.d.ts +14 -0
  107. package/dist/schemas/HtmlSchema.d.ts.map +1 -0
  108. package/dist/schemas/ImageSchema.d.ts +32 -0
  109. package/dist/schemas/ImageSchema.d.ts.map +1 -0
  110. package/dist/schemas/LogoSchema.d.ts +35 -0
  111. package/dist/schemas/LogoSchema.d.ts.map +1 -0
  112. package/dist/schemas/MarkdownSchema.d.ts +14 -0
  113. package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
  114. package/dist/schemas/PageTemplateSchema.d.ts +31 -0
  115. package/dist/schemas/PageTemplateSchema.d.ts.map +1 -0
  116. package/dist/schemas/PrintConfigSchema.d.ts +31 -0
  117. package/dist/schemas/PrintConfigSchema.d.ts.map +1 -0
  118. package/dist/schemas/SectionSchema.d.ts +2 -1
  119. package/dist/schemas/SectionSchema.d.ts.map +1 -1
  120. package/dist/schemas/TextSchema.d.ts +37 -0
  121. package/dist/schemas/TextSchema.d.ts.map +1 -0
  122. package/dist/schemas/ViewModelSchema.d.ts +23 -0
  123. package/dist/schemas/ViewModelSchema.d.ts.map +1 -0
  124. package/dist/schemas/index.d.ts +15 -1
  125. package/dist/schemas/index.d.ts.map +1 -1
  126. package/dist/schemas/transformers/ComponentTransformer.d.ts +116 -0
  127. package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -0
  128. package/dist/schemas/transformers/ReactNodeTransformer.d.ts +53 -0
  129. package/dist/schemas/transformers/ReactNodeTransformer.d.ts.map +1 -0
  130. package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts +66 -0
  131. package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts.map +1 -0
  132. package/dist/schemas/transformers/registry.d.ts +15 -0
  133. package/dist/schemas/transformers/registry.d.ts.map +1 -0
  134. package/dist/schemas/types/Serializable.d.ts +46 -0
  135. package/dist/schemas/types/Serializable.d.ts.map +1 -0
  136. package/dist/utils/htmlTransform.d.ts.map +1 -1
  137. package/dist/utils/reactUtils.d.ts +12 -3
  138. package/dist/utils/reactUtils.d.ts.map +1 -1
  139. package/package.json +17 -3
  140. package/src/{components/__tests__ → __tests__/components}/AccessibilityProvider.test.tsx +1 -1
  141. package/src/{components/__tests__ → __tests__/components}/Article.test.tsx +1 -1
  142. package/src/{components/__tests__ → __tests__/components}/Breadcrumbs.test.tsx +1 -1
  143. package/src/{components/__tests__ → __tests__/components}/Button.test.tsx +1 -1
  144. package/src/{components/__tests__ → __tests__/components}/CardListGrid.test.tsx +2 -2
  145. package/src/{components/__tests__ → __tests__/components}/ChoiceInputField.test.tsx +1 -1
  146. package/src/{components/__tests__ → __tests__/components}/Code.test.tsx +1 -1
  147. package/src/{components/__tests__ → __tests__/components}/Content.integration.test.tsx +1 -1
  148. package/src/{components/__tests__ → __tests__/components}/Content.test.tsx +1 -1
  149. package/src/{components/__tests__ → __tests__/components}/CoverImageHeader.test.tsx +2 -2
  150. package/src/{components/__tests__ → __tests__/components}/ErrorBoundary.test.tsx +1 -1
  151. package/src/{components/__tests__ → __tests__/components}/FeatureCard.integration.test.tsx +2 -2
  152. package/src/{components/__tests__ → __tests__/components}/FeatureGrid.integration.test.tsx +2 -2
  153. package/src/{components/__tests__ → __tests__/components}/FeatureGrid.test.tsx +2 -2
  154. package/src/{components/__tests__ → __tests__/components}/Footer.test.tsx +4 -4
  155. package/src/{components/__tests__ → __tests__/components}/FormBlock.test.tsx +1 -1
  156. package/src/{components/__tests__ → __tests__/components}/HeroBlock.integration.test.tsx +2 -2
  157. package/src/{components/__tests__ → __tests__/components}/HeroBlock.test.tsx +233 -7
  158. package/src/{components/__tests__ → __tests__/components}/Html.test.tsx +11 -2
  159. package/src/{components/__tests__ → __tests__/components}/HtmlInputField.test.tsx +3 -3
  160. package/src/__tests__/components/Logo.test.js +3 -3
  161. package/src/{components/__tests__ → __tests__/components}/Markdown.test.tsx +1 -1
  162. package/src/{components/__tests__ → __tests__/components}/PageBannerHeader.test.tsx +3 -3
  163. package/src/{components/__tests__ → __tests__/components}/PaletteSwitcher.test.tsx +3 -3
  164. package/src/{components/__tests__ → __tests__/components}/ProductCard.test.tsx +4 -4
  165. package/src/{components/__tests__ → __tests__/components}/SafeSpan.integration.test.tsx +2 -2
  166. package/src/{components/__tests__ → __tests__/components}/SafeSpan.simple.test.tsx +1 -1
  167. package/src/{components/__tests__ → __tests__/components}/SafeSpan.test.tsx +1 -1
  168. package/src/{components/__tests__ → __tests__/components}/Section.integration.test.tsx +1 -1
  169. package/src/{components/__tests__ → __tests__/components}/Section.test.tsx +1 -1
  170. package/src/{components/__tests__ → __tests__/components}/SelectInputField.test.tsx +1 -1
  171. package/src/{components/__tests__ → __tests__/components}/TextInputField.test.tsx +3 -3
  172. package/src/{components/__tests__ → __tests__/components}/ThemeSwitcher.test.tsx +3 -3
  173. package/src/__tests__/components/base/ModelView.test.tsx +220 -0
  174. package/src/__tests__/components/blocks/Code.performance.test.tsx +625 -0
  175. package/src/__tests__/components/blocks/Code.serialization.test.tsx +507 -0
  176. package/src/__tests__/components/blocks/HeroBlock.serialization.test.tsx +414 -0
  177. package/src/__tests__/components/blocks/Image.serialization.test.tsx +257 -0
  178. package/src/__tests__/components/blocks/Section.serialization.test.tsx +553 -0
  179. package/src/__tests__/components/blocks/Text.performance.test.tsx +442 -0
  180. package/src/__tests__/components/blocks/Text.serialization.test.tsx +491 -0
  181. package/src/__tests__/components/buttons/Button.serialization.test.tsx +443 -0
  182. package/src/__tests__/components/input/FormComponents.serialization.test.tsx +482 -0
  183. package/src/__tests__/components/input/SelectInputField.serialization.test.tsx +439 -0
  184. package/src/__tests__/components/input/TextInputField.serialization.test.tsx +359 -0
  185. package/src/{components/layout/CollapsibleLayout/__tests__ → __tests__/components/layout}/CollapsibleLayout.test.tsx +4 -4
  186. package/src/__tests__/components/layout/GridCell.serialization.test.tsx +403 -0
  187. package/src/__tests__/components/layout/GridLayout.serialization.test.tsx +311 -0
  188. package/src/__tests__/hooks/usePrintMode.test.ts +89 -0
  189. package/src/__tests__/schemas/PageTemplateSchema.test.ts +161 -0
  190. package/src/__tests__/schemas/PrintConfigSchema.test.ts +127 -0
  191. package/src/__tests__/schemas/ViewModelSchema.test.ts +80 -0
  192. package/src/__tests__/schemas/transformers/ComponentSerializationPatterns.test.tsx +602 -0
  193. package/src/__tests__/schemas/transformers/ComponentTransformer.htmlPatterns.test.ts +301 -0
  194. package/src/__tests__/schemas/transformers/ComponentTransformer.test.ts +521 -0
  195. package/src/__tests__/schemas/transformers/CrossBrowserCompatibility.test.ts +586 -0
  196. package/src/__tests__/schemas/transformers/MockSerializableComponent.ts +103 -0
  197. package/src/__tests__/schemas/transformers/RealWorldScenarios.test.tsx +1165 -0
  198. package/src/__tests__/schemas/transformers/SerializationErrorHandling.test.ts +602 -0
  199. package/src/__tests__/schemas/transformers/SerializationIntegration.test.tsx +691 -0
  200. package/src/__tests__/schemas/transformers/SerializationPerformance.test.ts +460 -0
  201. package/src/__tests__/schemas/transformers/TestAutomation.test.ts +597 -0
  202. package/src/{utils/__tests__ → __tests__/utils}/nested-dom-fix.test.tsx +1 -1
  203. package/src/components/ErrorBoundary.tsx +8 -8
  204. package/src/components/Html.tsx +147 -44
  205. package/src/components/Logo.tsx +198 -100
  206. package/src/components/Markdown.tsx +125 -16
  207. package/src/components/QwickApp.tsx +64 -31
  208. package/src/components/QwickIcon.tsx +59 -0
  209. package/src/components/SafeSpan.tsx +65 -10
  210. package/src/components/Scaffold.tsx +2 -8
  211. package/src/components/base/ModelView.tsx +199 -0
  212. package/src/components/base/index.ts +11 -0
  213. package/src/components/blocks/Article.tsx +57 -18
  214. package/src/components/blocks/Code.md +529 -0
  215. package/src/components/blocks/Code.tsx +102 -15
  216. package/src/components/blocks/CoverImageHeader.tsx +9 -4
  217. package/src/components/blocks/FeatureCard.tsx +1 -2
  218. package/src/components/blocks/FeatureGrid.tsx +19 -1
  219. package/src/components/blocks/Footer.tsx +13 -1
  220. package/src/components/blocks/HeroBlock.tsx +87 -20
  221. package/src/components/blocks/Image.tsx +395 -0
  222. package/src/components/blocks/PageBannerHeader.tsx +14 -12
  223. package/src/components/blocks/ProductCard.tsx +1 -1
  224. package/src/components/blocks/Section.tsx +113 -8
  225. package/src/components/blocks/Text.tsx +285 -0
  226. package/src/components/blocks/index.ts +4 -0
  227. package/src/components/buttons/Button.tsx +184 -15
  228. package/src/components/forms/FormBlock.tsx +70 -17
  229. package/src/components/index.ts +5 -0
  230. package/src/components/input/ChoiceInputField.tsx +48 -18
  231. package/src/components/input/HtmlInputField.tsx +48 -18
  232. package/src/components/input/SelectInputField.tsx +48 -16
  233. package/src/components/input/SwitchInputField.tsx +48 -17
  234. package/src/components/input/TextField.tsx +41 -1
  235. package/src/components/input/TextInputField.tsx +52 -18
  236. package/src/components/layout/GridCell.tsx +118 -9
  237. package/src/components/layout/GridLayout.tsx +125 -24
  238. package/src/components/pages/FormPage.tsx +0 -1
  239. package/src/components/pages/Page.css +304 -332
  240. package/src/components/pages/Page.tsx +307 -255
  241. package/src/components/pages/index.ts +2 -2
  242. package/src/config/AppConfig.ts +133 -0
  243. package/src/config/AppConfigBuilder.ts +421 -0
  244. package/src/config/__tests__/AppConfig.test.ts +385 -0
  245. package/src/config/__tests__/AppConfigBuilder.test.ts +432 -0
  246. package/src/config/index.ts +24 -0
  247. package/src/config/types.ts +170 -0
  248. package/src/config.ts +25 -0
  249. package/src/contexts/PrintModeContext.tsx +332 -0
  250. package/src/contexts/QwickAppContext.tsx +2 -2
  251. package/src/contexts/index.ts +2 -0
  252. package/src/hooks/index.ts +5 -1
  253. package/src/hooks/usePrintMode.ts +73 -0
  254. package/src/index.ts +3 -0
  255. package/src/schemas/CodeSchema.ts +3 -3
  256. package/src/schemas/CollapsibleLayoutSchema.ts +2 -1
  257. package/src/schemas/ContentSchema.ts +2 -1
  258. package/src/schemas/GridCellSchema.ts +164 -0
  259. package/src/schemas/GridLayoutSchema.ts +133 -0
  260. package/src/schemas/HtmlSchema.ts +47 -0
  261. package/src/schemas/ImageSchema.ts +235 -0
  262. package/src/schemas/LogoSchema.ts +241 -0
  263. package/src/schemas/MarkdownSchema.ts +47 -0
  264. package/src/schemas/PageTemplateSchema.ts +186 -0
  265. package/src/schemas/PrintConfigSchema.ts +207 -0
  266. package/src/schemas/README.md +661 -0
  267. package/src/schemas/SectionSchema.ts +2 -1
  268. package/src/schemas/TextSchema.ts +329 -0
  269. package/src/schemas/ViewModelSchema.ts +115 -0
  270. package/src/schemas/index.ts +21 -2
  271. package/src/schemas/transformers/ComponentTransformer.ts +403 -0
  272. package/src/schemas/transformers/ReactNodeTransformer.ts +236 -0
  273. package/src/schemas/transformers/registry.ts +72 -0
  274. package/src/schemas/types/Serializable.ts +51 -0
  275. package/src/stories/AccessibilityProvider.stories.tsx +253 -253
  276. package/src/stories/Article.stories.tsx +433 -433
  277. package/src/stories/Button.stories.tsx +1 -1
  278. package/src/stories/CardListGrid.stories.tsx +451 -451
  279. package/src/stories/ChoiceInputField.stories.tsx +503 -503
  280. package/src/stories/Code.stories.tsx +1 -1
  281. package/src/stories/CollapsibleLayout.stories.tsx +1414 -1414
  282. package/src/stories/Content.stories.tsx +393 -393
  283. package/src/stories/CoverImageHeader.stories.tsx +701 -701
  284. package/src/stories/DataBinding.advanced.stories.tsx +432 -432
  285. package/src/stories/DataProvider.stories.tsx +1192 -1192
  286. package/src/stories/FeatureCard.stories.tsx +557 -557
  287. package/src/stories/FeatureGrid.stories.tsx +594 -594
  288. package/src/stories/Footer.stories.tsx +640 -640
  289. package/src/stories/FormBlock.stories.tsx +760 -760
  290. package/src/stories/FormComponents.stories.tsx +349 -541
  291. package/src/stories/GridCell.stories.tsx +417 -0
  292. package/src/stories/GridLayout.stories.tsx +353 -0
  293. package/src/stories/HeroBlock.stories.tsx +862 -373
  294. package/src/stories/HtmlInputField.stories.tsx +474 -474
  295. package/src/stories/Image.stories.tsx +819 -0
  296. package/src/stories/Introduction.stories.tsx +667 -667
  297. package/src/stories/LayoutBlocks.stories.tsx +324 -324
  298. package/src/stories/Logo.stories.tsx +165 -6
  299. package/src/stories/Markdown.stories.tsx +137 -137
  300. package/src/stories/ModelView.stories.tsx +477 -0
  301. package/src/stories/Page.stories.tsx +688 -688
  302. package/src/stories/PageBannerHeader.stories.tsx +864 -864
  303. package/src/stories/PaletteSwitcher.stories.tsx +119 -119
  304. package/src/stories/ProductCard.stories.tsx +424 -424
  305. package/src/stories/QwickApp.stories.tsx +368 -368
  306. package/src/stories/ResponsiveMenu.stories.tsx +249 -249
  307. package/src/stories/SafeSpan.stories.tsx +531 -531
  308. package/src/stories/Section.stories.tsx +90 -2
  309. package/src/stories/SelectInputField.stories.tsx +524 -524
  310. package/src/stories/Text.stories.tsx +560 -0
  311. package/src/stories/TextInputField.stories.tsx +443 -443
  312. package/src/stories/ThemeSwitcher.stories.tsx +123 -123
  313. package/src/utils/htmlTransform.tsx +74 -53
  314. package/src/utils/reactUtils.tsx +57 -6
  315. package/dist/index.bundled.css +0 -12
  316. /package/src/{hooks/__tests__ → __tests__/hooks}/useDataBinding.test.tsx.disabled +0 -0
  317. /package/src/{schemas/__tests__ → __tests__/schemas}/builders.test.ts +0 -0
  318. /package/src/{utils/__tests__ → __tests__/utils}/createDataDrivenComponent.test.tsx.disabled +0 -0
  319. /package/src/{utils/__tests__ → __tests__/utils}/htmlTransform.test.tsx +0 -0
  320. /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
- '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
- }
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
- 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.
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
- tags: ['autodocs'],
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
- 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
- },
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
- 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
- },
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
- 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
- },
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
- 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
- },
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
- 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
- },
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
- 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
- },
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
- 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>
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
- <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
- },
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
- 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>
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
- {/* 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>
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
- {/* 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>
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
- {/* 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
- },
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
- 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"
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
- </Box>
391
+ </Box>
392
392
 
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
- },
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
- 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
- },
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
- 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>
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
- <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
- },
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
  };