@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
@@ -14,154 +14,154 @@ import { DataProvider } from '../contexts/DataContext';
14
14
 
15
15
  // Sample CMS data for data binding stories
16
16
  const sampleCmsData = {
17
- 'pages.home.features': {
18
- features: [
19
- {
20
- id: 'fast',
21
- title: 'โšก Lightning Fast',
22
- description: 'Optimized performance for instant loading and smooth user experiences',
23
- icon: 'โšก'
24
- },
25
- {
26
- id: 'beautiful',
27
- title: '๐ŸŽจ Beautiful UI',
28
- description: 'Professional components and layouts that work perfectly out of the box',
29
- icon: '๐ŸŽจ'
30
- },
31
- {
32
- id: 'mobile',
33
- title: '๐Ÿ“ฑ Mobile First',
34
- description: 'Responsive design principles built into every component and layout',
35
- icon: '๐Ÿ“ฑ'
36
- }
37
- ],
38
- columns: 3,
39
- gap: 'medium',
40
- equalHeight: true
41
- },
42
- 'product.key-features': {
43
- features: JSON.stringify([
44
- {
45
- id: 'integration',
46
- title: 'Easy Integration',
47
- description: 'Simple setup and configuration with minimal boilerplate code required',
48
- icon: '๐Ÿ”Œ'
49
- },
50
- {
51
- id: 'typescript',
52
- title: 'Type Safe',
53
- description: 'Full TypeScript support with comprehensive type definitions and IntelliSense',
54
- icon: '๐Ÿ›ก๏ธ'
55
- },
56
- {
57
- id: 'extensible',
58
- title: 'Highly Extensible',
59
- description: 'Modular architecture allows for easy customization and feature extension',
60
- icon: '๐Ÿงฉ'
61
- },
62
- {
63
- id: 'documented',
64
- title: 'Well Documented',
65
- description: 'Comprehensive documentation with live examples and best practice guides',
66
- icon: '๐Ÿ“š'
67
- }
68
- ]),
69
- columns: 2,
70
- gap: 'large',
71
- equalHeight: false
72
- },
73
- 'marketing.benefits-grid': {
74
- features: [
75
- {
76
- id: 'save-time',
77
- title: 'Save Development Time',
78
- description: 'Pre-built components reduce development time by up to 70%',
79
- icon: 'โฐ'
80
- },
81
- {
82
- id: 'reduce-costs',
83
- title: 'Reduce Costs',
84
- description: 'Less development time means lower project costs and faster ROI',
85
- icon: '๐Ÿ’ฐ'
86
- },
87
- {
88
- id: 'scale-easily',
89
- title: 'Scale with Confidence',
90
- description: 'Built-in best practices ensure your application scales smoothly',
91
- icon: '๐Ÿ“ˆ'
92
- },
93
- {
94
- id: 'team-productivity',
95
- title: 'Boost Team Productivity',
96
- description: 'Consistent patterns and components improve team collaboration',
97
- icon: '๐Ÿ‘ฅ'
98
- },
99
- {
100
- id: 'user-experience',
101
- title: 'Enhanced User Experience',
102
- description: 'Professional design system ensures consistent and delightful UX',
103
- icon: 'โœจ'
104
- },
105
- {
106
- id: 'future-proof',
107
- title: 'Future Proof Architecture',
108
- description: 'Regular updates and modern architecture keep your app current',
109
- icon: '๐Ÿš€'
110
- }
111
- ],
112
- columns: 3,
113
- gap: 'medium',
114
- equalHeight: true
115
- },
116
- 'company.tech-stack': {
117
- features: [
118
- {
119
- id: 'react',
120
- title: 'React 18',
121
- description: 'Built on the latest React with Concurrent Features',
122
- icon: 'โš›๏ธ'
123
- },
124
- {
125
- id: 'typescript',
126
- title: 'TypeScript',
127
- description: 'Type-safe development with excellent IDE support',
128
- icon: '๐Ÿ“˜'
129
- },
130
- {
131
- id: 'mui',
132
- title: 'Material-UI',
133
- description: 'Professional component library with customizable theming',
134
- icon: '๐ŸŽจ'
135
- },
136
- {
137
- id: 'storybook',
138
- title: 'Storybook',
139
- description: 'Interactive component documentation and testing',
140
- icon: '๐Ÿ“–'
141
- },
142
- {
143
- id: 'testing',
144
- title: 'Testing Suite',
145
- description: 'Comprehensive testing with Jest and React Testing Library',
146
- icon: '๐Ÿงช'
147
- }
148
- ],
149
- columns: 4,
150
- gap: 'small',
151
- equalHeight: true
152
- }
17
+ 'pages.home.features': {
18
+ features: [
19
+ {
20
+ id: 'fast',
21
+ title: ' Lightning Fast',
22
+ description: 'Optimized performance for instant loading and smooth user experiences',
23
+ icon: ''
24
+ },
25
+ {
26
+ id: 'beautiful',
27
+ title: ' Beautiful UI',
28
+ description: 'Professional components and layouts that work perfectly out of the box',
29
+ icon: ''
30
+ },
31
+ {
32
+ id: 'mobile',
33
+ title: ' Mobile First',
34
+ description: 'Responsive design principles built into every component and layout',
35
+ icon: ''
36
+ }
37
+ ],
38
+ columns: 3,
39
+ gap: 'medium',
40
+ equalHeight: true
41
+ },
42
+ 'product.key-features': {
43
+ features: JSON.stringify([
44
+ {
45
+ id: 'integration',
46
+ title: 'Easy Integration',
47
+ description: 'Simple setup and configuration with minimal boilerplate code required',
48
+ icon: '๐Ÿ”Œ'
49
+ },
50
+ {
51
+ id: 'typescript',
52
+ title: 'Type Safe',
53
+ description: 'Full TypeScript support with comprehensive type definitions and IntelliSense',
54
+ icon: ''
55
+ },
56
+ {
57
+ id: 'extensible',
58
+ title: 'Highly Extensible',
59
+ description: 'Modular architecture allows for easy customization and feature extension',
60
+ icon: '๐Ÿงฉ'
61
+ },
62
+ {
63
+ id: 'documented',
64
+ title: 'Well Documented',
65
+ description: 'Comprehensive documentation with live examples and best practice guides',
66
+ icon: '๐Ÿ“š'
67
+ }
68
+ ]),
69
+ columns: 2,
70
+ gap: 'large',
71
+ equalHeight: false
72
+ },
73
+ 'marketing.benefits-grid': {
74
+ features: [
75
+ {
76
+ id: 'save-time',
77
+ title: 'Save Development Time',
78
+ description: 'Pre-built components reduce development time by up to 70%',
79
+ icon: 'โฐ'
80
+ },
81
+ {
82
+ id: 'reduce-costs',
83
+ title: 'Reduce Costs',
84
+ description: 'Less development time means lower project costs and faster ROI',
85
+ icon: '๐Ÿ’ฐ'
86
+ },
87
+ {
88
+ id: 'scale-easily',
89
+ title: 'Scale with Confidence',
90
+ description: 'Built-in best practices ensure your application scales smoothly',
91
+ icon: '๐Ÿ“ˆ'
92
+ },
93
+ {
94
+ id: 'team-productivity',
95
+ title: 'Boost Team Productivity',
96
+ description: 'Consistent patterns and components improve team collaboration',
97
+ icon: '๐Ÿ‘ฅ'
98
+ },
99
+ {
100
+ id: 'user-experience',
101
+ title: 'Enhanced User Experience',
102
+ description: 'Professional design system ensures consistent and delightful UX',
103
+ icon: ''
104
+ },
105
+ {
106
+ id: 'future-proof',
107
+ title: 'Future Proof Architecture',
108
+ description: 'Regular updates and modern architecture keep your app current',
109
+ icon: ''
110
+ }
111
+ ],
112
+ columns: 3,
113
+ gap: 'medium',
114
+ equalHeight: true
115
+ },
116
+ 'company.tech-stack': {
117
+ features: [
118
+ {
119
+ id: 'react',
120
+ title: 'React 18',
121
+ description: 'Built on the latest React with Concurrent Features',
122
+ icon: 'โš›'
123
+ },
124
+ {
125
+ id: 'typescript',
126
+ title: 'TypeScript',
127
+ description: 'Type-safe development with excellent IDE support',
128
+ icon: '๐Ÿ“˜'
129
+ },
130
+ {
131
+ id: 'mui',
132
+ title: 'Material-UI',
133
+ description: 'Professional component library with customizable theming',
134
+ icon: ''
135
+ },
136
+ {
137
+ id: 'storybook',
138
+ title: 'Storybook',
139
+ description: 'Interactive component documentation and testing',
140
+ icon: '๐Ÿ“–'
141
+ },
142
+ {
143
+ id: 'testing',
144
+ title: 'Testing Suite',
145
+ description: 'Comprehensive testing with Jest and React Testing Library',
146
+ icon: '๐Ÿงช'
147
+ }
148
+ ],
149
+ columns: 4,
150
+ gap: 'small',
151
+ equalHeight: true
152
+ }
153
153
  };
154
154
 
155
155
  const dataProvider = new JsonDataProvider({ data: sampleCmsData });
156
156
 
157
157
  const meta = {
158
- title: 'Blocks/FeatureGrid',
159
- component: FeatureGrid,
160
- parameters: {
161
- layout: 'fullscreen',
162
- docs: {
163
- description: {
164
- component: `FeatureGrid is a powerful responsive grid component for showcasing multiple features with support for both traditional props and data binding through dataSource.
158
+ title: 'Blocks/FeatureGrid',
159
+ component: FeatureGrid,
160
+ parameters: {
161
+ layout: 'fullscreen',
162
+ docs: {
163
+ description: {
164
+ component: `FeatureGrid is a powerful responsive grid component for showcasing multiple features with support for both traditional props and data binding through dataSource.
165
165
 
166
166
  **Key Features:**
167
167
  - **Responsive Grid Layout**: Customizable column count with automatic responsive behavior
@@ -177,10 +177,10 @@ const meta = {
177
177
  - Technology stack presentations
178
178
  - Marketing benefit grids and value propositions
179
179
  - Feature comparison and highlight sections`,
180
- },
181
- },
182
- },
183
- tags: ['autodocs'],
180
+ },
181
+ },
182
+ },
183
+ tags: ['autodocs'],
184
184
  } satisfies Meta<typeof FeatureGrid>;
185
185
 
186
186
  export default meta;
@@ -188,482 +188,482 @@ type Story = StoryObj<typeof meta>;
188
188
 
189
189
  // Sample features for traditional examples
190
190
  const sampleFeatures = [
191
- {
192
- id: 'traditional-1',
193
- title: '๐Ÿš€ Fast Performance',
194
- description: 'Optimized for speed and efficiency with minimal bundle size',
195
- icon: '๐Ÿš€'
196
- },
197
- {
198
- id: 'traditional-2',
199
- title: '๐ŸŽฏ Developer Friendly',
200
- description: 'Intuitive APIs and comprehensive TypeScript support',
201
- icon: '๐ŸŽฏ'
202
- },
203
- {
204
- id: 'traditional-3',
205
- title: '๐Ÿ”ง Highly Customizable',
206
- description: 'Flexible theming and component customization options',
207
- icon: '๐Ÿ”ง'
208
- }
191
+ {
192
+ id: 'traditional-1',
193
+ title: ' Fast Performance',
194
+ description: 'Optimized for speed and efficiency with minimal bundle size',
195
+ icon: ''
196
+ },
197
+ {
198
+ id: 'traditional-2',
199
+ title: ' Developer Friendly',
200
+ description: 'Intuitive APIs and comprehensive TypeScript support',
201
+ icon: ''
202
+ },
203
+ {
204
+ id: 'traditional-3',
205
+ title: ' Highly Customizable',
206
+ description: 'Flexible theming and component customization options',
207
+ icon: ''
208
+ }
209
209
  ];
210
210
 
211
211
  // Traditional Usage Examples
212
212
  export const BasicFeatureGrid: Story = {
213
- render: () => (
214
- <QwickApp appId="featuregrid-basic" appName='Basic FeatureGrid'>
215
- <FeatureGrid
216
- features={sampleFeatures}
217
- columns={3}
218
- gap="medium"
219
- equalHeight={true}
220
- />
221
- </QwickApp>
222
- ),
223
- parameters: {
224
- docs: {
225
- description: {
226
- story: 'Basic FeatureGrid with traditional props - features array, columns, gap, and equal height.',
227
- },
228
- },
229
- },
213
+ render: () => (
214
+ <QwickApp appId="featuregrid-basic" appName='Basic FeatureGrid'>
215
+ <FeatureGrid
216
+ features={sampleFeatures}
217
+ columns={3}
218
+ gap="medium"
219
+ equalHeight={true}
220
+ />
221
+ </QwickApp>
222
+ ),
223
+ parameters: {
224
+ docs: {
225
+ description: {
226
+ story: 'Basic FeatureGrid with traditional props - features array, columns, gap, and equal height.',
227
+ },
228
+ },
229
+ },
230
230
  };
231
231
 
232
232
  export const ColumnVariants: Story = {
233
- render: () => (
234
- <QwickApp appId="featuregrid-columns" appName='FeatureGrid Column Variants'>
235
- <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
236
-
237
- <Box>
238
- <Typography variant="h6" gutterBottom>Single Column Layout</Typography>
239
- <FeatureGrid
240
- features={sampleFeatures.slice(0, 1)}
241
- columns={1}
242
- gap="medium"
243
- equalHeight={true}
244
- />
245
- </Box>
246
-
247
- <Box>
248
- <Typography variant="h6" gutterBottom>Two Column Layout</Typography>
249
- <FeatureGrid
250
- features={sampleFeatures.slice(0, 2)}
251
- columns={2}
252
- gap="medium"
253
- equalHeight={true}
254
- />
255
- </Box>
256
-
257
- <Box>
258
- <Typography variant="h6" gutterBottom>Three Column Layout (Default)</Typography>
259
- <FeatureGrid
260
- features={sampleFeatures}
261
- columns={3}
262
- gap="medium"
263
- equalHeight={true}
264
- />
265
- </Box>
266
-
267
- <Box>
268
- <Typography variant="h6" gutterBottom>Four Column Layout</Typography>
269
- <FeatureGrid
270
- features={[...sampleFeatures, {
271
- id: 'additional-feature',
272
- title: '๐Ÿ“Š Analytics',
273
- description: 'Built-in analytics and performance monitoring',
274
- icon: '๐Ÿ“Š'
275
- }]}
276
- columns={4}
277
- gap="medium"
278
- equalHeight={true}
279
- />
280
- </Box>
281
-
282
- </Box>
283
- </QwickApp>
284
- ),
285
- parameters: {
286
- docs: {
287
- description: {
288
- story: 'Different column configurations: 1, 2, 3 (default), and 4 columns.',
289
- },
290
- },
291
- },
233
+ render: () => (
234
+ <QwickApp appId="featuregrid-columns" appName='FeatureGrid Column Variants'>
235
+ <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
236
+
237
+ <Box>
238
+ <Typography variant="h6" gutterBottom>Single Column Layout</Typography>
239
+ <FeatureGrid
240
+ features={sampleFeatures.slice(0, 1)}
241
+ columns={1}
242
+ gap="medium"
243
+ equalHeight={true}
244
+ />
245
+ </Box>
246
+
247
+ <Box>
248
+ <Typography variant="h6" gutterBottom>Two Column Layout</Typography>
249
+ <FeatureGrid
250
+ features={sampleFeatures.slice(0, 2)}
251
+ columns={2}
252
+ gap="medium"
253
+ equalHeight={true}
254
+ />
255
+ </Box>
256
+
257
+ <Box>
258
+ <Typography variant="h6" gutterBottom>Three Column Layout (Default)</Typography>
259
+ <FeatureGrid
260
+ features={sampleFeatures}
261
+ columns={3}
262
+ gap="medium"
263
+ equalHeight={true}
264
+ />
265
+ </Box>
266
+
267
+ <Box>
268
+ <Typography variant="h6" gutterBottom>Four Column Layout</Typography>
269
+ <FeatureGrid
270
+ features={[...sampleFeatures, {
271
+ id: 'additional-feature',
272
+ title: ' Analytics',
273
+ description: 'Built-in analytics and performance monitoring',
274
+ icon: ''
275
+ }]}
276
+ columns={4}
277
+ gap="medium"
278
+ equalHeight={true}
279
+ />
280
+ </Box>
281
+
282
+ </Box>
283
+ </QwickApp>
284
+ ),
285
+ parameters: {
286
+ docs: {
287
+ description: {
288
+ story: 'Different column configurations: 1, 2, 3 (default), and 4 columns.',
289
+ },
290
+ },
291
+ },
292
292
  };
293
293
 
294
294
  export const GapVariants: Story = {
295
- render: () => (
296
- <QwickApp appId="featuregrid-gaps" appName='FeatureGrid Gap Variants'>
297
- <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
298
-
299
- <Box>
300
- <Typography variant="h6" gutterBottom>Small Gap</Typography>
301
- <FeatureGrid
302
- features={sampleFeatures}
303
- columns={3}
304
- gap="small"
305
- equalHeight={true}
306
- />
307
- </Box>
308
-
309
- <Box>
310
- <Typography variant="h6" gutterBottom>Medium Gap (Default)</Typography>
311
- <FeatureGrid
312
- features={sampleFeatures}
313
- columns={3}
314
- gap="medium"
315
- equalHeight={true}
316
- />
317
- </Box>
318
-
319
- <Box>
320
- <Typography variant="h6" gutterBottom>Large Gap</Typography>
321
- <FeatureGrid
322
- features={sampleFeatures}
323
- columns={3}
324
- gap="large"
325
- equalHeight={true}
326
- />
327
- </Box>
328
-
329
- </Box>
330
- </QwickApp>
331
- ),
332
- parameters: {
333
- docs: {
334
- description: {
335
- story: 'Gap spacing options: small (compact), medium (standard), large (spacious).',
336
- },
337
- },
338
- },
295
+ render: () => (
296
+ <QwickApp appId="featuregrid-gaps" appName='FeatureGrid Gap Variants'>
297
+ <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
298
+
299
+ <Box>
300
+ <Typography variant="h6" gutterBottom>Small Gap</Typography>
301
+ <FeatureGrid
302
+ features={sampleFeatures}
303
+ columns={3}
304
+ gap="small"
305
+ equalHeight={true}
306
+ />
307
+ </Box>
308
+
309
+ <Box>
310
+ <Typography variant="h6" gutterBottom>Medium Gap (Default)</Typography>
311
+ <FeatureGrid
312
+ features={sampleFeatures}
313
+ columns={3}
314
+ gap="medium"
315
+ equalHeight={true}
316
+ />
317
+ </Box>
318
+
319
+ <Box>
320
+ <Typography variant="h6" gutterBottom>Large Gap</Typography>
321
+ <FeatureGrid
322
+ features={sampleFeatures}
323
+ columns={3}
324
+ gap="large"
325
+ equalHeight={true}
326
+ />
327
+ </Box>
328
+
329
+ </Box>
330
+ </QwickApp>
331
+ ),
332
+ parameters: {
333
+ docs: {
334
+ description: {
335
+ story: 'Gap spacing options: small (compact), medium (standard), large (spacious).',
336
+ },
337
+ },
338
+ },
339
339
  };
340
340
 
341
341
  export const EqualHeightComparison: Story = {
342
- render: () => (
343
- <QwickApp appId="featuregrid-height" appName='FeatureGrid Equal Height'>
344
- <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
345
-
346
- <Box>
347
- <Typography variant="h6" gutterBottom>Equal Height: True (Default)</Typography>
348
- <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
349
- All cards have the same height regardless of content length
350
- </Typography>
351
- <FeatureGrid
352
- features={[
353
- {
354
- id: 'short',
355
- title: 'Short Feature',
356
- description: 'Brief description.',
357
- icon: '๐Ÿ“'
358
- },
359
- {
360
- id: 'medium',
361
- title: 'Medium Length Feature',
362
- description: 'This feature has a moderately long description that spans multiple lines.',
363
- icon: '๐Ÿ“„'
364
- },
365
- {
366
- id: 'long',
367
- title: 'Very Long Feature Description',
368
- description: 'This feature has an extensively long description that demonstrates how the equal height feature works by ensuring all cards maintain the same height regardless of content length, creating a consistent and professional grid appearance.',
369
- icon: '๐Ÿ“œ'
370
- }
371
- ]}
372
- columns={3}
373
- gap="medium"
374
- equalHeight={true}
375
- />
376
- </Box>
377
-
378
- <Box>
379
- <Typography variant="h6" gutterBottom>Equal Height: False</Typography>
380
- <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
381
- Cards adjust to their natural content height
382
- </Typography>
383
- <FeatureGrid
384
- features={[
385
- {
386
- id: 'short-2',
387
- title: 'Short Feature',
388
- description: 'Brief description.',
389
- icon: '๐Ÿ“'
390
- },
391
- {
392
- id: 'medium-2',
393
- title: 'Medium Length Feature',
394
- description: 'This feature has a moderately long description that spans multiple lines.',
395
- icon: '๐Ÿ“„'
396
- },
397
- {
398
- id: 'long-2',
399
- title: 'Very Long Feature Description',
400
- description: 'This feature has an extensively long description that demonstrates how the equal height feature works by ensuring all cards maintain the same height regardless of content length, creating a consistent and professional grid appearance.',
401
- icon: '๐Ÿ“œ'
402
- }
403
- ]}
404
- columns={3}
405
- gap="medium"
406
- equalHeight={false}
407
- />
408
- </Box>
409
-
410
- </Box>
411
- </QwickApp>
412
- ),
413
- parameters: {
414
- docs: {
415
- description: {
416
- story: 'Comparison between equal height (consistent appearance) and natural height (content-driven).',
417
- },
418
- },
419
- },
342
+ render: () => (
343
+ <QwickApp appId="featuregrid-height" appName='FeatureGrid Equal Height'>
344
+ <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
345
+
346
+ <Box>
347
+ <Typography variant="h6" gutterBottom>Equal Height: True (Default)</Typography>
348
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
349
+ All cards have the same height regardless of content length
350
+ </Typography>
351
+ <FeatureGrid
352
+ features={[
353
+ {
354
+ id: 'short',
355
+ title: 'Short Feature',
356
+ description: 'Brief description.',
357
+ icon: ''
358
+ },
359
+ {
360
+ id: 'medium',
361
+ title: 'Medium Length Feature',
362
+ description: 'This feature has a moderately long description that spans multiple lines.',
363
+ icon: ''
364
+ },
365
+ {
366
+ id: 'long',
367
+ title: 'Very Long Feature Description',
368
+ description: 'This feature has an extensively long description that demonstrates how the equal height feature works by ensuring all cards maintain the same height regardless of content length, creating a consistent and professional grid appearance.',
369
+ icon: '๐Ÿ“œ'
370
+ }
371
+ ]}
372
+ columns={3}
373
+ gap="medium"
374
+ equalHeight={true}
375
+ />
376
+ </Box>
377
+
378
+ <Box>
379
+ <Typography variant="h6" gutterBottom>Equal Height: False</Typography>
380
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
381
+ Cards adjust to their natural content height
382
+ </Typography>
383
+ <FeatureGrid
384
+ features={[
385
+ {
386
+ id: 'short-2',
387
+ title: 'Short Feature',
388
+ description: 'Brief description.',
389
+ icon: ''
390
+ },
391
+ {
392
+ id: 'medium-2',
393
+ title: 'Medium Length Feature',
394
+ description: 'This feature has a moderately long description that spans multiple lines.',
395
+ icon: ''
396
+ },
397
+ {
398
+ id: 'long-2',
399
+ title: 'Very Long Feature Description',
400
+ description: 'This feature has an extensively long description that demonstrates how the equal height feature works by ensuring all cards maintain the same height regardless of content length, creating a consistent and professional grid appearance.',
401
+ icon: '๐Ÿ“œ'
402
+ }
403
+ ]}
404
+ columns={3}
405
+ gap="medium"
406
+ equalHeight={false}
407
+ />
408
+ </Box>
409
+
410
+ </Box>
411
+ </QwickApp>
412
+ ),
413
+ parameters: {
414
+ docs: {
415
+ description: {
416
+ story: 'Comparison between equal height (consistent appearance) and natural height (content-driven).',
417
+ },
418
+ },
419
+ },
420
420
  };
421
421
 
422
422
  // Data Binding Examples
423
423
  export const DataBindingBasic: Story = {
424
- render: () => (
425
- <QwickApp appId="featuregrid-data-binding" appName='FeatureGrid Data Binding' dataSource={{ dataProvider }}>
426
- <Box>
427
-
428
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
429
- <Typography variant="h5" gutterBottom>๐Ÿ“Š Data-Driven FeatureGrid</Typography>
430
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
431
- FeatureGrid components can be driven entirely by CMS data using the dataSource prop.
432
- </Typography>
433
-
434
- <Code title="Usage" language="tsx">{`<FeatureGrid dataSource="pages.home.features" />`}</Code>
435
-
436
- <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData['pages.home.features'], null, 2)}</Code>
437
- </Box>
438
-
439
- <FeatureGrid dataSource="pages.home.features" />
440
-
441
- </Box>
442
- </QwickApp>
443
- ),
444
- parameters: {
445
- docs: {
446
- description: {
447
- story: 'FeatureGrid with data binding - all props resolved from CMS data through dataSource.',
448
- },
449
- },
450
- },
424
+ render: () => (
425
+ <QwickApp appId="featuregrid-data-binding" appName='FeatureGrid Data Binding' dataSource={{ dataProvider }}>
426
+ <Box>
427
+
428
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
429
+ <Typography variant="h5" gutterBottom> Data-Driven FeatureGrid</Typography>
430
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
431
+ FeatureGrid components can be driven entirely by CMS data using the dataSource prop.
432
+ </Typography>
433
+
434
+ <Code title="Usage" language="tsx">{`<FeatureGrid dataSource="pages.home.features" />`}</Code>
435
+
436
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData['pages.home.features'], null, 2)}</Code>
437
+ </Box>
438
+
439
+ <FeatureGrid dataSource="pages.home.features" />
440
+
441
+ </Box>
442
+ </QwickApp>
443
+ ),
444
+ parameters: {
445
+ docs: {
446
+ description: {
447
+ story: 'FeatureGrid with data binding - all props resolved from CMS data through dataSource.',
448
+ },
449
+ },
450
+ },
451
451
  };
452
452
 
453
453
  export const DataBindingAdvanced: Story = {
454
- render: () => (
455
- <QwickApp appId="featuregrid-data-advanced" appName='Advanced FeatureGrid Data Binding' dataSource={{ dataProvider }}>
456
- <Box>
457
-
458
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
459
- <Typography variant="h5" gutterBottom>๐ŸŽฏ Multiple Data Sources</Typography>
460
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
461
- Different FeatureGrid components can pull from different data sources with varying configurations.
462
- </Typography>
463
- </Box>
464
-
465
- {/* Product Features */}
466
- <Box sx={{ mb: 4 }}>
467
- <Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 1 }}>
468
- Product Features
469
- </Typography>
470
- <FeatureGrid dataSource="product.key-features" />
471
- </Box>
472
-
473
- {/* Marketing Benefits */}
474
- <Box sx={{ mb: 4 }}>
475
- <Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 1 }}>
476
- Why Choose QwickApps?
477
- </Typography>
478
- <FeatureGrid dataSource="marketing.benefits-grid" />
479
- </Box>
480
-
481
- {/* Tech Stack */}
482
- <Box>
483
- <Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'success.main', color: 'success.contrastText', borderRadius: 1 }}>
484
- Technology Stack
485
- </Typography>
486
- <FeatureGrid dataSource="company.tech-stack" />
487
- </Box>
488
-
489
- </Box>
490
- </QwickApp>
491
- ),
492
- parameters: {
493
- docs: {
494
- description: {
495
- story: 'Advanced data binding with multiple data sources showcasing different feature grid configurations.',
496
- },
497
- },
498
- },
454
+ render: () => (
455
+ <QwickApp appId="featuregrid-data-advanced" appName='Advanced FeatureGrid Data Binding' dataSource={{ dataProvider }}>
456
+ <Box>
457
+
458
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
459
+ <Typography variant="h5" gutterBottom> Multiple Data Sources</Typography>
460
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
461
+ Different FeatureGrid components can pull from different data sources with varying configurations.
462
+ </Typography>
463
+ </Box>
464
+
465
+ {/* Product Features */}
466
+ <Box sx={{ mb: 4 }}>
467
+ <Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 1 }}>
468
+ Product Features
469
+ </Typography>
470
+ <FeatureGrid dataSource="product.key-features" />
471
+ </Box>
472
+
473
+ {/* Marketing Benefits */}
474
+ <Box sx={{ mb: 4 }}>
475
+ <Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 1 }}>
476
+ Why Choose QwickApps?
477
+ </Typography>
478
+ <FeatureGrid dataSource="marketing.benefits-grid" />
479
+ </Box>
480
+
481
+ {/* Tech Stack */}
482
+ <Box>
483
+ <Typography variant="h4" gutterBottom sx={{ p: 2, backgroundColor: 'success.main', color: 'success.contrastText', borderRadius: 1 }}>
484
+ Technology Stack
485
+ </Typography>
486
+ <FeatureGrid dataSource="company.tech-stack" />
487
+ </Box>
488
+
489
+ </Box>
490
+ </QwickApp>
491
+ ),
492
+ parameters: {
493
+ docs: {
494
+ description: {
495
+ story: 'Advanced data binding with multiple data sources showcasing different feature grid configurations.',
496
+ },
497
+ },
498
+ },
499
499
  };
500
500
 
501
501
  export const DataBindingWithFallback: Story = {
502
- render: () => (
503
- <QwickApp appId="featuregrid-fallback" appName='FeatureGrid Data Binding with Fallback' dataSource={{ dataProvider }}>
504
- <Box>
505
-
506
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
507
- <Typography variant="h5" gutterBottom>๐Ÿ›ก๏ธ Fallback Support</Typography>
508
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
509
- FeatureGrid components gracefully handle missing data sources with fallback props.
510
- </Typography>
511
-
512
- <Code title="Fallback Usage" language="tsx">{`<FeatureGrid
513
- dataSource="nonexistent.features"
514
- features={fallbackFeatures}
515
- columns={2}
516
- gap="large"
502
+ render: () => (
503
+ <QwickApp appId="featuregrid-fallback" appName='FeatureGrid Data Binding with Fallback' dataSource={{ dataProvider }}>
504
+ <Box>
505
+
506
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
507
+ <Typography variant="h5" gutterBottom> Fallback Support</Typography>
508
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
509
+ FeatureGrid components gracefully handle missing data sources with fallback props.
510
+ </Typography>
511
+
512
+ <Code title="Fallback Usage" language="tsx">{`<FeatureGrid
513
+ dataSource="nonexistent.features"
514
+ features={fallbackFeatures}
515
+ columns={2}
516
+ gap="large"
517
517
  />`}</Code>
518
- </Box>
519
-
520
- <FeatureGrid
521
- dataSource="nonexistent.features"
522
- features={[
523
- {
524
- id: 'fallback-1',
525
- title: '๐Ÿ›ก๏ธ Reliable Fallbacks',
526
- description: 'Components gracefully handle missing data with fallback content',
527
- icon: '๐Ÿ›ก๏ธ'
528
- },
529
- {
530
- id: 'fallback-2',
531
- title: '๐Ÿ”„ Error Recovery',
532
- description: 'Robust error handling ensures your application never breaks',
533
- icon: '๐Ÿ”„'
534
- }
535
- ]}
536
- columns={2}
537
- gap="large"
538
- equalHeight={true}
539
- />
540
-
541
- </Box>
542
- </QwickApp>
543
- ),
544
- parameters: {
545
- docs: {
546
- description: {
547
- story: 'FeatureGrid with fallback props when dataSource is missing or unavailable.',
548
- },
549
- },
550
- },
518
+ </Box>
519
+
520
+ <FeatureGrid
521
+ dataSource="nonexistent.features"
522
+ features={[
523
+ {
524
+ id: 'fallback-1',
525
+ title: ' Reliable Fallbacks',
526
+ description: 'Components gracefully handle missing data with fallback content',
527
+ icon: ''
528
+ },
529
+ {
530
+ id: 'fallback-2',
531
+ title: ' Error Recovery',
532
+ description: 'Robust error handling ensures your application never breaks',
533
+ icon: ''
534
+ }
535
+ ]}
536
+ columns={2}
537
+ gap="large"
538
+ equalHeight={true}
539
+ />
540
+
541
+ </Box>
542
+ </QwickApp>
543
+ ),
544
+ parameters: {
545
+ docs: {
546
+ description: {
547
+ story: 'FeatureGrid with fallback props when dataSource is missing or unavailable.',
548
+ },
549
+ },
550
+ },
551
551
  };
552
552
 
553
553
  export const JsonStringParsing: Story = {
554
- render: () => (
555
- <QwickApp appId="featuregrid-json" appName='FeatureGrid JSON String Parsing' dataSource={{ dataProvider }}>
556
- <Box>
557
-
558
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
559
- <Typography variant="h5" gutterBottom>๐Ÿ”ง JSON String Processing</Typography>
560
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
561
- FeatureGrid automatically parses JSON strings for features data, perfect for CMS integration.
562
- </Typography>
563
-
564
- <Code title="JSON String Data" language="json">{`{
565
- "features": ${JSON.stringify([
566
- { id: 'example', title: 'Example Feature', description: 'Parsed from JSON string' }
567
- ], null, 2)}
554
+ render: () => (
555
+ <QwickApp appId="featuregrid-json" appName='FeatureGrid JSON String Parsing' dataSource={{ dataProvider }}>
556
+ <Box>
557
+
558
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
559
+ <Typography variant="h5" gutterBottom> JSON String Processing</Typography>
560
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
561
+ FeatureGrid automatically parses JSON strings for features data, perfect for CMS integration.
562
+ </Typography>
563
+
564
+ <Code title="JSON String Data" language="json">{`{
565
+ "features": ${JSON.stringify([
566
+ { id: 'example', title: 'Example Feature', description: 'Parsed from JSON string' }
567
+ ], null, 2)}
568
568
  }`}</Code>
569
- </Box>
570
-
571
- <FeatureGrid dataSource="product.key-features" />
572
-
573
- </Box>
574
- </QwickApp>
575
- ),
576
- parameters: {
577
- docs: {
578
- description: {
579
- story: 'FeatureGrid with automatic JSON string parsing for CMS-friendly data formats.',
580
- },
581
- },
582
- },
569
+ </Box>
570
+
571
+ <FeatureGrid dataSource="product.key-features" />
572
+
573
+ </Box>
574
+ </QwickApp>
575
+ ),
576
+ parameters: {
577
+ docs: {
578
+ description: {
579
+ story: 'FeatureGrid with automatic JSON string parsing for CMS-friendly data formats.',
580
+ },
581
+ },
582
+ },
583
583
  };
584
584
 
585
585
  export const RealWorldExample: Story = {
586
- render: () => (
587
- <QwickApp appId="featuregrid-real-world" appName='Real World FeatureGrid Example' dataSource={{ dataProvider }}>
588
- <Box>
589
-
590
- {/* Main Features - Data Driven */}
591
- <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
592
- <Typography variant="h2" gutterBottom sx={{ textAlign: 'center', fontWeight: 'bold', mb: 1 }}>
593
- Why Developers Love QwickApps
594
- </Typography>
595
- <Typography variant="h6" sx={{ textAlign: 'center', opacity: 0.9, mb: 4, maxWidth: '600px', mx: 'auto' }}>
596
- Discover the features that make QwickApps the preferred choice for modern React development
597
- </Typography>
598
- <FeatureGrid dataSource="pages.home.features" />
599
- </Box>
600
-
601
- {/* Benefits Grid - Data Driven */}
602
- <Box sx={{ mb: 6 }}>
603
- <Typography variant="h3" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
604
- Business Benefits
605
- </Typography>
606
- <FeatureGrid dataSource="marketing.benefits-grid" />
607
- </Box>
608
-
609
- {/* Technical Features - Traditional Props */}
610
- <Box sx={{ p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
611
- <Typography variant="h3" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
612
- Technical Excellence
613
- </Typography>
614
- <FeatureGrid
615
- features={[
616
- {
617
- id: 'performance',
618
- title: '๐ŸŽ๏ธ Optimized Performance',
619
- description: 'Tree shaking, code splitting, and optimized bundle sizes for lightning-fast applications',
620
- icon: '๐ŸŽ๏ธ'
621
- },
622
- {
623
- id: 'accessibility',
624
- title: 'โ™ฟ Accessibility First',
625
- description: 'WCAG 2.1 compliant components with screen reader support and keyboard navigation',
626
- icon: 'โ™ฟ'
627
- },
628
- {
629
- id: 'testing',
630
- title: '๐Ÿงช Testing Ready',
631
- description: 'Pre-configured testing setup with comprehensive test utilities and examples',
632
- icon: '๐Ÿงช'
633
- },
634
- {
635
- id: 'documentation',
636
- title: '๐Ÿ“– Living Documentation',
637
- description: 'Interactive Storybook documentation with live examples and API references',
638
- icon: '๐Ÿ“–'
639
- },
640
- {
641
- id: 'theming',
642
- title: '๐ŸŽจ Advanced Theming',
643
- description: 'Powerful theming system with design tokens and consistent visual language',
644
- icon: '๐ŸŽจ'
645
- },
646
- {
647
- id: 'community',
648
- title: '๐Ÿ‘ฅ Active Community',
649
- description: 'Growing community of developers with active support and regular contributions',
650
- icon: '๐Ÿ‘ฅ'
651
- }
652
- ]}
653
- columns={3}
654
- gap="large"
655
- equalHeight={true}
656
- />
657
- </Box>
658
-
659
- </Box>
660
- </QwickApp>
661
- ),
662
- parameters: {
663
- docs: {
664
- description: {
665
- story: 'Real-world example combining data-driven FeatureGrids with traditional usage for comprehensive feature showcases.',
666
- },
667
- },
668
- },
586
+ render: () => (
587
+ <QwickApp appId="featuregrid-real-world" appName='Real World FeatureGrid Example' dataSource={{ dataProvider }}>
588
+ <Box>
589
+
590
+ {/* Main Features - Data Driven */}
591
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
592
+ <Typography variant="h2" gutterBottom sx={{ textAlign: 'center', fontWeight: 'bold', mb: 1 }}>
593
+ Why Developers Love QwickApps
594
+ </Typography>
595
+ <Typography variant="h6" sx={{ textAlign: 'center', opacity: 0.9, mb: 4, maxWidth: '600px', mx: 'auto' }}>
596
+ Discover the features that make QwickApps the preferred choice for modern React development
597
+ </Typography>
598
+ <FeatureGrid dataSource="pages.home.features" />
599
+ </Box>
600
+
601
+ {/* Benefits Grid - Data Driven */}
602
+ <Box sx={{ mb: 6 }}>
603
+ <Typography variant="h3" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
604
+ Business Benefits
605
+ </Typography>
606
+ <FeatureGrid dataSource="marketing.benefits-grid" />
607
+ </Box>
608
+
609
+ {/* Technical Features - Traditional Props */}
610
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
611
+ <Typography variant="h3" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
612
+ Technical Excellence
613
+ </Typography>
614
+ <FeatureGrid
615
+ features={[
616
+ {
617
+ id: 'performance',
618
+ title: '๐ŸŽ Optimized Performance',
619
+ description: 'Tree shaking, code splitting, and optimized bundle sizes for lightning-fast applications',
620
+ icon: '๐ŸŽ'
621
+ },
622
+ {
623
+ id: 'accessibility',
624
+ title: 'โ™ฟ Accessibility First',
625
+ description: 'WCAG 2.1 compliant components with screen reader support and keyboard navigation',
626
+ icon: 'โ™ฟ'
627
+ },
628
+ {
629
+ id: 'testing',
630
+ title: '๐Ÿงช Testing Ready',
631
+ description: 'Pre-configured testing setup with comprehensive test utilities and examples',
632
+ icon: '๐Ÿงช'
633
+ },
634
+ {
635
+ id: 'documentation',
636
+ title: '๐Ÿ“– Living Documentation',
637
+ description: 'Interactive Storybook documentation with live examples and API references',
638
+ icon: '๐Ÿ“–'
639
+ },
640
+ {
641
+ id: 'theming',
642
+ title: ' Advanced Theming',
643
+ description: 'Powerful theming system with design tokens and consistent visual language',
644
+ icon: ''
645
+ },
646
+ {
647
+ id: 'community',
648
+ title: '๐Ÿ‘ฅ Active Community',
649
+ description: 'Growing community of developers with active support and regular contributions',
650
+ icon: '๐Ÿ‘ฅ'
651
+ }
652
+ ]}
653
+ columns={3}
654
+ gap="large"
655
+ equalHeight={true}
656
+ />
657
+ </Box>
658
+
659
+ </Box>
660
+ </QwickApp>
661
+ ),
662
+ parameters: {
663
+ docs: {
664
+ description: {
665
+ story: 'Real-world example combining data-driven FeatureGrids with traditional usage for comprehensive feature showcases.',
666
+ },
667
+ },
668
+ },
669
669
  };