@qwickapps/react-framework 1.3.4 → 1.4.0

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