@qwickapps/react-framework 1.3.5 → 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 (320) hide show
  1. package/README.md +1681 -2
  2. package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts +66 -0
  3. package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +1 -0
  4. package/dist/components/ErrorBoundary.d.ts +7 -0
  5. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  6. package/dist/components/Html.d.ts +28 -18
  7. package/dist/components/Html.d.ts.map +1 -1
  8. package/dist/components/Logo.d.ts +12 -35
  9. package/dist/components/Logo.d.ts.map +1 -1
  10. package/dist/components/Markdown.d.ts +18 -13
  11. package/dist/components/Markdown.d.ts.map +1 -1
  12. package/dist/components/QwickApp.d.ts +16 -3
  13. package/dist/components/QwickApp.d.ts.map +1 -1
  14. package/dist/components/QwickIcon.d.ts +23 -0
  15. package/dist/components/QwickIcon.d.ts.map +1 -0
  16. package/dist/components/SafeSpan.d.ts +12 -5
  17. package/dist/components/SafeSpan.d.ts.map +1 -1
  18. package/dist/components/Scaffold.d.ts.map +1 -1
  19. package/dist/components/base/ModelView.d.ts +101 -0
  20. package/dist/components/base/ModelView.d.ts.map +1 -0
  21. package/dist/components/base/index.d.ts +11 -0
  22. package/dist/components/base/index.d.ts.map +1 -0
  23. package/dist/components/blocks/Article.d.ts +12 -2
  24. package/dist/components/blocks/Article.d.ts.map +1 -1
  25. package/dist/components/blocks/Code.d.ts +13 -2
  26. package/dist/components/blocks/Code.d.ts.map +1 -1
  27. package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -1
  28. package/dist/components/blocks/FeatureCard.d.ts.map +1 -1
  29. package/dist/components/blocks/FeatureGrid.d.ts.map +1 -1
  30. package/dist/components/blocks/Footer.d.ts.map +1 -1
  31. package/dist/components/blocks/HeroBlock.d.ts +27 -13
  32. package/dist/components/blocks/HeroBlock.d.ts.map +1 -1
  33. package/dist/components/blocks/Image.d.ts +41 -0
  34. package/dist/components/blocks/Image.d.ts.map +1 -0
  35. package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -1
  36. package/dist/components/blocks/Section.d.ts +16 -2
  37. package/dist/components/blocks/Section.d.ts.map +1 -1
  38. package/dist/components/blocks/Text.d.ts +41 -0
  39. package/dist/components/blocks/Text.d.ts.map +1 -0
  40. package/dist/components/blocks/index.d.ts +4 -0
  41. package/dist/components/blocks/index.d.ts.map +1 -1
  42. package/dist/components/buttons/Button.d.ts +23 -7
  43. package/dist/components/buttons/Button.d.ts.map +1 -1
  44. package/dist/components/forms/FormBlock.d.ts +19 -13
  45. package/dist/components/forms/FormBlock.d.ts.map +1 -1
  46. package/dist/components/index.d.ts +4 -0
  47. package/dist/components/index.d.ts.map +1 -1
  48. package/dist/components/input/ChoiceInputField.d.ts +17 -11
  49. package/dist/components/input/ChoiceInputField.d.ts.map +1 -1
  50. package/dist/components/input/HtmlInputField.d.ts +17 -11
  51. package/dist/components/input/HtmlInputField.d.ts.map +1 -1
  52. package/dist/components/input/SelectInputField.d.ts +16 -10
  53. package/dist/components/input/SelectInputField.d.ts.map +1 -1
  54. package/dist/components/input/SwitchInputField.d.ts +16 -10
  55. package/dist/components/input/SwitchInputField.d.ts.map +1 -1
  56. package/dist/components/input/TextField.d.ts.map +1 -1
  57. package/dist/components/input/TextInputField.d.ts +16 -11
  58. package/dist/components/input/TextInputField.d.ts.map +1 -1
  59. package/dist/components/layout/GridCell.d.ts +23 -6
  60. package/dist/components/layout/GridCell.d.ts.map +1 -1
  61. package/dist/components/layout/GridLayout.d.ts +24 -23
  62. package/dist/components/layout/GridLayout.d.ts.map +1 -1
  63. package/dist/components/pages/FormPage.d.ts.map +1 -1
  64. package/dist/components/pages/Page.d.ts +49 -87
  65. package/dist/components/pages/Page.d.ts.map +1 -1
  66. package/dist/components/pages/index.d.ts +2 -2
  67. package/dist/components/pages/index.d.ts.map +1 -1
  68. package/dist/config/AppConfig.d.ts +49 -0
  69. package/dist/config/AppConfig.d.ts.map +1 -0
  70. package/dist/config/AppConfigBuilder.d.ts +75 -0
  71. package/dist/config/AppConfigBuilder.d.ts.map +1 -0
  72. package/dist/config/index.d.ts +13 -0
  73. package/dist/config/index.d.ts.map +1 -0
  74. package/dist/config/types.d.ts +130 -0
  75. package/dist/config/types.d.ts.map +1 -0
  76. package/dist/config.d.ts +15 -0
  77. package/dist/config.d.ts.map +1 -0
  78. package/dist/config.esm.js +451 -0
  79. package/dist/config.js +455 -0
  80. package/dist/contexts/PrintModeContext.d.ts +27 -0
  81. package/dist/contexts/PrintModeContext.d.ts.map +1 -0
  82. package/dist/contexts/QwickAppContext.d.ts +2 -2
  83. package/dist/contexts/QwickAppContext.d.ts.map +1 -1
  84. package/dist/contexts/index.d.ts +2 -0
  85. package/dist/contexts/index.d.ts.map +1 -1
  86. package/dist/hooks/index.d.ts +2 -0
  87. package/dist/hooks/index.d.ts.map +1 -1
  88. package/dist/hooks/usePrintMode.d.ts +39 -0
  89. package/dist/hooks/usePrintMode.d.ts.map +1 -0
  90. package/dist/index.css +1 -1
  91. package/dist/index.d.ts +1 -0
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.esm.css +1 -1
  94. package/dist/index.esm.js +10951 -6238
  95. package/dist/index.js +11014 -6287
  96. package/dist/schemas/CodeSchema.d.ts +2 -1
  97. package/dist/schemas/CodeSchema.d.ts.map +1 -1
  98. package/dist/schemas/CollapsibleLayoutSchema.d.ts +2 -1
  99. package/dist/schemas/CollapsibleLayoutSchema.d.ts.map +1 -1
  100. package/dist/schemas/ContentSchema.d.ts +2 -1
  101. package/dist/schemas/ContentSchema.d.ts.map +1 -1
  102. package/dist/schemas/GridCellSchema.d.ts +25 -0
  103. package/dist/schemas/GridCellSchema.d.ts.map +1 -0
  104. package/dist/schemas/GridLayoutSchema.d.ts +23 -0
  105. package/dist/schemas/GridLayoutSchema.d.ts.map +1 -0
  106. package/dist/schemas/HtmlSchema.d.ts +14 -0
  107. package/dist/schemas/HtmlSchema.d.ts.map +1 -0
  108. package/dist/schemas/ImageSchema.d.ts +32 -0
  109. package/dist/schemas/ImageSchema.d.ts.map +1 -0
  110. package/dist/schemas/LogoSchema.d.ts +35 -0
  111. package/dist/schemas/LogoSchema.d.ts.map +1 -0
  112. package/dist/schemas/MarkdownSchema.d.ts +14 -0
  113. package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
  114. package/dist/schemas/PageTemplateSchema.d.ts +31 -0
  115. package/dist/schemas/PageTemplateSchema.d.ts.map +1 -0
  116. package/dist/schemas/PrintConfigSchema.d.ts +31 -0
  117. package/dist/schemas/PrintConfigSchema.d.ts.map +1 -0
  118. package/dist/schemas/SectionSchema.d.ts +2 -1
  119. package/dist/schemas/SectionSchema.d.ts.map +1 -1
  120. package/dist/schemas/TextSchema.d.ts +37 -0
  121. package/dist/schemas/TextSchema.d.ts.map +1 -0
  122. package/dist/schemas/ViewModelSchema.d.ts +23 -0
  123. package/dist/schemas/ViewModelSchema.d.ts.map +1 -0
  124. package/dist/schemas/index.d.ts +15 -1
  125. package/dist/schemas/index.d.ts.map +1 -1
  126. package/dist/schemas/transformers/ComponentTransformer.d.ts +116 -0
  127. package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -0
  128. package/dist/schemas/transformers/ReactNodeTransformer.d.ts +53 -0
  129. package/dist/schemas/transformers/ReactNodeTransformer.d.ts.map +1 -0
  130. package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts +66 -0
  131. package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts.map +1 -0
  132. package/dist/schemas/transformers/registry.d.ts +15 -0
  133. package/dist/schemas/transformers/registry.d.ts.map +1 -0
  134. package/dist/schemas/types/Serializable.d.ts +46 -0
  135. package/dist/schemas/types/Serializable.d.ts.map +1 -0
  136. package/dist/utils/htmlTransform.d.ts.map +1 -1
  137. package/dist/utils/reactUtils.d.ts +12 -3
  138. package/dist/utils/reactUtils.d.ts.map +1 -1
  139. package/package.json +17 -3
  140. package/src/{components/__tests__ → __tests__/components}/AccessibilityProvider.test.tsx +1 -1
  141. package/src/{components/__tests__ → __tests__/components}/Article.test.tsx +1 -1
  142. package/src/{components/__tests__ → __tests__/components}/Breadcrumbs.test.tsx +1 -1
  143. package/src/{components/__tests__ → __tests__/components}/Button.test.tsx +1 -1
  144. package/src/{components/__tests__ → __tests__/components}/CardListGrid.test.tsx +2 -2
  145. package/src/{components/__tests__ → __tests__/components}/ChoiceInputField.test.tsx +1 -1
  146. package/src/{components/__tests__ → __tests__/components}/Code.test.tsx +1 -1
  147. package/src/{components/__tests__ → __tests__/components}/Content.integration.test.tsx +1 -1
  148. package/src/{components/__tests__ → __tests__/components}/Content.test.tsx +1 -1
  149. package/src/{components/__tests__ → __tests__/components}/CoverImageHeader.test.tsx +2 -2
  150. package/src/{components/__tests__ → __tests__/components}/ErrorBoundary.test.tsx +1 -1
  151. package/src/{components/__tests__ → __tests__/components}/FeatureCard.integration.test.tsx +2 -2
  152. package/src/{components/__tests__ → __tests__/components}/FeatureGrid.integration.test.tsx +2 -2
  153. package/src/{components/__tests__ → __tests__/components}/FeatureGrid.test.tsx +2 -2
  154. package/src/{components/__tests__ → __tests__/components}/Footer.test.tsx +4 -4
  155. package/src/{components/__tests__ → __tests__/components}/FormBlock.test.tsx +1 -1
  156. package/src/{components/__tests__ → __tests__/components}/HeroBlock.integration.test.tsx +2 -2
  157. package/src/{components/__tests__ → __tests__/components}/HeroBlock.test.tsx +233 -7
  158. package/src/{components/__tests__ → __tests__/components}/Html.test.tsx +11 -2
  159. package/src/{components/__tests__ → __tests__/components}/HtmlInputField.test.tsx +3 -3
  160. package/src/__tests__/components/Logo.test.js +3 -3
  161. package/src/{components/__tests__ → __tests__/components}/Markdown.test.tsx +1 -1
  162. package/src/{components/__tests__ → __tests__/components}/PageBannerHeader.test.tsx +3 -3
  163. package/src/{components/__tests__ → __tests__/components}/PaletteSwitcher.test.tsx +3 -3
  164. package/src/{components/__tests__ → __tests__/components}/ProductCard.test.tsx +4 -4
  165. package/src/{components/__tests__ → __tests__/components}/SafeSpan.integration.test.tsx +2 -2
  166. package/src/{components/__tests__ → __tests__/components}/SafeSpan.simple.test.tsx +1 -1
  167. package/src/{components/__tests__ → __tests__/components}/SafeSpan.test.tsx +1 -1
  168. package/src/{components/__tests__ → __tests__/components}/Section.integration.test.tsx +1 -1
  169. package/src/{components/__tests__ → __tests__/components}/Section.test.tsx +1 -1
  170. package/src/{components/__tests__ → __tests__/components}/SelectInputField.test.tsx +1 -1
  171. package/src/{components/__tests__ → __tests__/components}/TextInputField.test.tsx +3 -3
  172. package/src/{components/__tests__ → __tests__/components}/ThemeSwitcher.test.tsx +3 -3
  173. package/src/__tests__/components/base/ModelView.test.tsx +220 -0
  174. package/src/__tests__/components/blocks/Code.performance.test.tsx +625 -0
  175. package/src/__tests__/components/blocks/Code.serialization.test.tsx +507 -0
  176. package/src/__tests__/components/blocks/HeroBlock.serialization.test.tsx +414 -0
  177. package/src/__tests__/components/blocks/Image.serialization.test.tsx +257 -0
  178. package/src/__tests__/components/blocks/Section.serialization.test.tsx +553 -0
  179. package/src/__tests__/components/blocks/Text.performance.test.tsx +442 -0
  180. package/src/__tests__/components/blocks/Text.serialization.test.tsx +491 -0
  181. package/src/__tests__/components/buttons/Button.serialization.test.tsx +443 -0
  182. package/src/__tests__/components/input/FormComponents.serialization.test.tsx +482 -0
  183. package/src/__tests__/components/input/SelectInputField.serialization.test.tsx +439 -0
  184. package/src/__tests__/components/input/TextInputField.serialization.test.tsx +359 -0
  185. package/src/{components/layout/CollapsibleLayout/__tests__ → __tests__/components/layout}/CollapsibleLayout.test.tsx +4 -4
  186. package/src/__tests__/components/layout/GridCell.serialization.test.tsx +403 -0
  187. package/src/__tests__/components/layout/GridLayout.serialization.test.tsx +311 -0
  188. package/src/__tests__/hooks/usePrintMode.test.ts +89 -0
  189. package/src/__tests__/schemas/PageTemplateSchema.test.ts +161 -0
  190. package/src/__tests__/schemas/PrintConfigSchema.test.ts +127 -0
  191. package/src/__tests__/schemas/ViewModelSchema.test.ts +80 -0
  192. package/src/__tests__/schemas/transformers/ComponentSerializationPatterns.test.tsx +602 -0
  193. package/src/__tests__/schemas/transformers/ComponentTransformer.htmlPatterns.test.ts +301 -0
  194. package/src/__tests__/schemas/transformers/ComponentTransformer.test.ts +521 -0
  195. package/src/__tests__/schemas/transformers/CrossBrowserCompatibility.test.ts +586 -0
  196. package/src/__tests__/schemas/transformers/MockSerializableComponent.ts +103 -0
  197. package/src/__tests__/schemas/transformers/RealWorldScenarios.test.tsx +1165 -0
  198. package/src/__tests__/schemas/transformers/SerializationErrorHandling.test.ts +602 -0
  199. package/src/__tests__/schemas/transformers/SerializationIntegration.test.tsx +691 -0
  200. package/src/__tests__/schemas/transformers/SerializationPerformance.test.ts +460 -0
  201. package/src/__tests__/schemas/transformers/TestAutomation.test.ts +597 -0
  202. package/src/{utils/__tests__ → __tests__/utils}/nested-dom-fix.test.tsx +1 -1
  203. package/src/components/ErrorBoundary.tsx +8 -8
  204. package/src/components/Html.tsx +147 -44
  205. package/src/components/Logo.tsx +198 -100
  206. package/src/components/Markdown.tsx +125 -16
  207. package/src/components/QwickApp.tsx +64 -31
  208. package/src/components/QwickIcon.tsx +59 -0
  209. package/src/components/SafeSpan.tsx +65 -10
  210. package/src/components/Scaffold.tsx +2 -8
  211. package/src/components/base/ModelView.tsx +199 -0
  212. package/src/components/base/index.ts +11 -0
  213. package/src/components/blocks/Article.tsx +57 -18
  214. package/src/components/blocks/Code.md +529 -0
  215. package/src/components/blocks/Code.tsx +102 -15
  216. package/src/components/blocks/CoverImageHeader.tsx +9 -4
  217. package/src/components/blocks/FeatureCard.tsx +1 -2
  218. package/src/components/blocks/FeatureGrid.tsx +19 -1
  219. package/src/components/blocks/Footer.tsx +13 -1
  220. package/src/components/blocks/HeroBlock.tsx +87 -20
  221. package/src/components/blocks/Image.tsx +395 -0
  222. package/src/components/blocks/PageBannerHeader.tsx +14 -12
  223. package/src/components/blocks/ProductCard.tsx +1 -1
  224. package/src/components/blocks/Section.tsx +113 -8
  225. package/src/components/blocks/Text.tsx +285 -0
  226. package/src/components/blocks/index.ts +4 -0
  227. package/src/components/buttons/Button.tsx +184 -15
  228. package/src/components/forms/FormBlock.tsx +70 -17
  229. package/src/components/index.ts +5 -0
  230. package/src/components/input/ChoiceInputField.tsx +48 -18
  231. package/src/components/input/HtmlInputField.tsx +48 -18
  232. package/src/components/input/SelectInputField.tsx +48 -16
  233. package/src/components/input/SwitchInputField.tsx +48 -17
  234. package/src/components/input/TextField.tsx +41 -1
  235. package/src/components/input/TextInputField.tsx +52 -18
  236. package/src/components/layout/GridCell.tsx +118 -9
  237. package/src/components/layout/GridLayout.tsx +125 -24
  238. package/src/components/pages/FormPage.tsx +0 -1
  239. package/src/components/pages/Page.css +304 -332
  240. package/src/components/pages/Page.tsx +307 -255
  241. package/src/components/pages/index.ts +2 -2
  242. package/src/config/AppConfig.ts +133 -0
  243. package/src/config/AppConfigBuilder.ts +421 -0
  244. package/src/config/__tests__/AppConfig.test.ts +385 -0
  245. package/src/config/__tests__/AppConfigBuilder.test.ts +432 -0
  246. package/src/config/index.ts +24 -0
  247. package/src/config/types.ts +170 -0
  248. package/src/config.ts +25 -0
  249. package/src/contexts/PrintModeContext.tsx +332 -0
  250. package/src/contexts/QwickAppContext.tsx +2 -2
  251. package/src/contexts/index.ts +2 -0
  252. package/src/hooks/index.ts +5 -1
  253. package/src/hooks/usePrintMode.ts +73 -0
  254. package/src/index.ts +3 -0
  255. package/src/schemas/CodeSchema.ts +3 -3
  256. package/src/schemas/CollapsibleLayoutSchema.ts +2 -1
  257. package/src/schemas/ContentSchema.ts +2 -1
  258. package/src/schemas/GridCellSchema.ts +164 -0
  259. package/src/schemas/GridLayoutSchema.ts +133 -0
  260. package/src/schemas/HtmlSchema.ts +47 -0
  261. package/src/schemas/ImageSchema.ts +235 -0
  262. package/src/schemas/LogoSchema.ts +241 -0
  263. package/src/schemas/MarkdownSchema.ts +47 -0
  264. package/src/schemas/PageTemplateSchema.ts +186 -0
  265. package/src/schemas/PrintConfigSchema.ts +207 -0
  266. package/src/schemas/README.md +661 -0
  267. package/src/schemas/SectionSchema.ts +2 -1
  268. package/src/schemas/TextSchema.ts +329 -0
  269. package/src/schemas/ViewModelSchema.ts +115 -0
  270. package/src/schemas/index.ts +21 -2
  271. package/src/schemas/transformers/ComponentTransformer.ts +403 -0
  272. package/src/schemas/transformers/ReactNodeTransformer.ts +236 -0
  273. package/src/schemas/transformers/registry.ts +72 -0
  274. package/src/schemas/types/Serializable.ts +51 -0
  275. package/src/stories/AccessibilityProvider.stories.tsx +253 -253
  276. package/src/stories/Article.stories.tsx +433 -433
  277. package/src/stories/Button.stories.tsx +1 -1
  278. package/src/stories/CardListGrid.stories.tsx +451 -451
  279. package/src/stories/ChoiceInputField.stories.tsx +503 -503
  280. package/src/stories/Code.stories.tsx +1 -1
  281. package/src/stories/CollapsibleLayout.stories.tsx +1414 -1414
  282. package/src/stories/Content.stories.tsx +393 -393
  283. package/src/stories/CoverImageHeader.stories.tsx +701 -701
  284. package/src/stories/DataBinding.advanced.stories.tsx +432 -432
  285. package/src/stories/DataProvider.stories.tsx +1192 -1192
  286. package/src/stories/FeatureCard.stories.tsx +557 -557
  287. package/src/stories/FeatureGrid.stories.tsx +594 -594
  288. package/src/stories/Footer.stories.tsx +640 -640
  289. package/src/stories/FormBlock.stories.tsx +760 -760
  290. package/src/stories/FormComponents.stories.tsx +349 -541
  291. package/src/stories/GridCell.stories.tsx +417 -0
  292. package/src/stories/GridLayout.stories.tsx +353 -0
  293. package/src/stories/HeroBlock.stories.tsx +862 -373
  294. package/src/stories/HtmlInputField.stories.tsx +474 -474
  295. package/src/stories/Image.stories.tsx +819 -0
  296. package/src/stories/Introduction.stories.tsx +667 -667
  297. package/src/stories/LayoutBlocks.stories.tsx +324 -324
  298. package/src/stories/Logo.stories.tsx +165 -6
  299. package/src/stories/Markdown.stories.tsx +137 -137
  300. package/src/stories/ModelView.stories.tsx +477 -0
  301. package/src/stories/Page.stories.tsx +688 -688
  302. package/src/stories/PageBannerHeader.stories.tsx +864 -864
  303. package/src/stories/PaletteSwitcher.stories.tsx +119 -119
  304. package/src/stories/ProductCard.stories.tsx +424 -424
  305. package/src/stories/QwickApp.stories.tsx +368 -368
  306. package/src/stories/ResponsiveMenu.stories.tsx +249 -249
  307. package/src/stories/SafeSpan.stories.tsx +531 -531
  308. package/src/stories/Section.stories.tsx +90 -2
  309. package/src/stories/SelectInputField.stories.tsx +524 -524
  310. package/src/stories/Text.stories.tsx +560 -0
  311. package/src/stories/TextInputField.stories.tsx +443 -443
  312. package/src/stories/ThemeSwitcher.stories.tsx +123 -123
  313. package/src/utils/htmlTransform.tsx +74 -53
  314. package/src/utils/reactUtils.tsx +57 -6
  315. package/dist/index.bundled.css +0 -12
  316. /package/src/{hooks/__tests__ → __tests__/hooks}/useDataBinding.test.tsx.disabled +0 -0
  317. /package/src/{schemas/__tests__ → __tests__/schemas}/builders.test.ts +0 -0
  318. /package/src/{utils/__tests__ → __tests__/utils}/createDataDrivenComponent.test.tsx.disabled +0 -0
  319. /package/src/{utils/__tests__ → __tests__/utils}/htmlTransform.test.tsx +0 -0
  320. /package/src/{utils/__tests__ → __tests__/utils}/optional-logging.test.ts +0 -0
@@ -14,89 +14,89 @@ import { DataProvider } from '../contexts/DataContext';
14
14
 
15
15
  // Sample CMS data for data binding stories
16
16
  const sampleCmsData = {
17
- 'features': {
18
- 'lightning-fast': {
19
- feature: {
20
- id: 'lightning-fast',
21
- title: ' Lightning Fast Performance',
22
- description: 'Optimized for speed with sub-millisecond response times and efficient memory usage for smooth user experiences',
23
- icon: ''
24
- },
25
- variant: 'standard',
26
- elevation: 3
27
- },
28
- 'benefits-list': {
29
- features: [
30
- 'Zero configuration setup required',
31
- 'Full TypeScript support included',
32
- 'Hot module reloading for development',
33
- 'Built-in testing framework integration',
34
- 'Production-ready build optimization',
35
- 'Comprehensive documentation and examples'
36
- ],
37
- variant: 'list',
38
- title: 'Key Benefits',
39
- elevation: 1
40
- },
41
- 'developer-experience': {
42
- feature: {
43
- id: 'developer-experience',
44
- title: '🎯 Exceptional Developer Experience',
45
- description: 'Intuitive APIs, comprehensive documentation, and powerful tooling make development efficient and enjoyable',
46
- icon: '🎯'
47
- },
48
- actions: [
49
- {
50
- id: 'learn-more',
51
- label: 'Learn More',
52
- variant: 'contained',
53
- color: 'primary'
54
- },
55
- {
56
- id: 'try-demo',
57
- label: 'Try Demo',
58
- variant: 'outlined',
59
- color: 'secondary'
60
- }
61
- ],
62
- variant: 'standard',
63
- elevation: 4
64
- },
65
- 'enterprise-benefits': {
66
- features: [
67
- 'Enterprise-grade security and compliance',
68
- 'Scalable architecture for high-traffic applications',
69
- 'Modern React patterns and best practices',
70
- 'Comprehensive testing and quality assurance',
71
- '24/7 professional support and maintenance'
72
- ],
73
- variant: 'list',
74
- title: 'Enterprise Features',
75
- elevation: 0
76
- },
77
- 'cutting-edge': {
78
- feature: {
79
- id: 'cutting-edge',
80
- title: '🚀 Cutting-Edge Technology',
81
- description: 'Built with the latest React features, modern tooling, and industry best practices to ensure your application stays current',
82
- icon: '🚀'
83
- },
84
- variant: 'standard',
85
- elevation: 6
86
- }
87
- }
17
+ 'features': {
18
+ 'lightning-fast': {
19
+ feature: {
20
+ id: 'lightning-fast',
21
+ title: ' Lightning Fast Performance',
22
+ description: 'Optimized for speed with sub-millisecond response times and efficient memory usage for smooth user experiences',
23
+ icon: ''
24
+ },
25
+ variant: 'standard',
26
+ elevation: 3
27
+ },
28
+ 'benefits-list': {
29
+ features: [
30
+ 'Zero configuration setup required',
31
+ 'Full TypeScript support included',
32
+ 'Hot module reloading for development',
33
+ 'Built-in testing framework integration',
34
+ 'Production-ready build optimization',
35
+ 'Comprehensive documentation and examples'
36
+ ],
37
+ variant: 'list',
38
+ title: 'Key Benefits',
39
+ elevation: 1
40
+ },
41
+ 'developer-experience': {
42
+ feature: {
43
+ id: 'developer-experience',
44
+ title: ' Exceptional Developer Experience',
45
+ description: 'Intuitive APIs, comprehensive documentation, and powerful tooling make development efficient and enjoyable',
46
+ icon: ''
47
+ },
48
+ actions: [
49
+ {
50
+ id: 'learn-more',
51
+ label: 'Learn More',
52
+ variant: 'contained',
53
+ color: 'primary'
54
+ },
55
+ {
56
+ id: 'try-demo',
57
+ label: 'Try Demo',
58
+ variant: 'outlined',
59
+ color: 'secondary'
60
+ }
61
+ ],
62
+ variant: 'standard',
63
+ elevation: 4
64
+ },
65
+ 'enterprise-benefits': {
66
+ features: [
67
+ 'Enterprise-grade security and compliance',
68
+ 'Scalable architecture for high-traffic applications',
69
+ 'Modern React patterns and best practices',
70
+ 'Comprehensive testing and quality assurance',
71
+ '24/7 professional support and maintenance'
72
+ ],
73
+ variant: 'list',
74
+ title: 'Enterprise Features',
75
+ elevation: 0
76
+ },
77
+ 'cutting-edge': {
78
+ feature: {
79
+ id: 'cutting-edge',
80
+ title: ' Cutting-Edge Technology',
81
+ description: 'Built with the latest React features, modern tooling, and industry best practices to ensure your application stays current',
82
+ icon: ''
83
+ },
84
+ variant: 'standard',
85
+ elevation: 6
86
+ }
87
+ }
88
88
  };
89
89
 
90
90
  const dataProvider = new JsonDataProvider({ data: sampleCmsData });
91
91
 
92
92
  const meta = {
93
- title: 'Blocks/FeatureCard',
94
- component: FeatureCard,
95
- parameters: {
96
- layout: 'padded',
97
- docs: {
98
- description: {
99
- component: `FeatureCard is a flexible card component supporting both individual feature display and simple feature lists with data binding through dataSource.
93
+ title: 'Blocks/FeatureCard',
94
+ component: FeatureCard,
95
+ parameters: {
96
+ layout: 'padded',
97
+ docs: {
98
+ description: {
99
+ component: `FeatureCard is a flexible card component supporting both individual feature display and simple feature lists with data binding through dataSource.
100
100
 
101
101
  **Key Features:**
102
102
  - **Dual Variants**: Standard cards with rich content or simple list format
@@ -112,10 +112,10 @@ const meta = {
112
112
  - Simple feature lists and bullet point summaries
113
113
  - Interactive elements with call-to-action buttons
114
114
  - Product cards and service offerings`,
115
- },
116
- },
117
- },
118
- tags: ['autodocs'],
115
+ },
116
+ },
117
+ },
118
+ tags: ['autodocs'],
119
119
  } satisfies Meta<typeof FeatureCard>;
120
120
 
121
121
  export default meta;
@@ -123,520 +123,520 @@ type Story = StoryObj<typeof meta>;
123
123
 
124
124
  // Sample features for traditional examples
125
125
  const sampleFeature = {
126
- id: 'sample-feature',
127
- title: '🔧 Advanced Tooling',
128
- description: 'Professional development tools and utilities that streamline your workflow and boost productivity',
129
- icon: '🔧'
126
+ id: 'sample-feature',
127
+ title: ' Advanced Tooling',
128
+ description: 'Professional development tools and utilities that streamline your workflow and boost productivity',
129
+ icon: ''
130
130
  };
131
131
 
132
132
  const sampleFeatures = [
133
- 'Comprehensive component library',
134
- 'Advanced theming capabilities',
135
- 'Built-in accessibility support',
136
- 'Performance optimization tools',
137
- 'Responsive design system'
133
+ 'Comprehensive component library',
134
+ 'Advanced theming capabilities',
135
+ 'Built-in accessibility support',
136
+ 'Performance optimization tools',
137
+ 'Responsive design system'
138
138
  ];
139
139
 
140
140
  // Traditional Usage Examples
141
141
  export const StandardFeatureCard: Story = {
142
- render: () => (
143
- <QwickApp appId="featurecard-standard" appName='Standard FeatureCard'>
144
- <FeatureCard
145
- feature={sampleFeature}
146
- variant="standard"
147
- elevation={2}
148
- />
149
- </QwickApp>
150
- ),
151
- parameters: {
152
- docs: {
153
- description: {
154
- story: 'Standard FeatureCard with traditional props - feature object, variant, and elevation.',
155
- },
156
- },
157
- },
142
+ render: () => (
143
+ <QwickApp appId="featurecard-standard" appName='Standard FeatureCard'>
144
+ <FeatureCard
145
+ feature={sampleFeature}
146
+ variant="standard"
147
+ elevation={2}
148
+ />
149
+ </QwickApp>
150
+ ),
151
+ parameters: {
152
+ docs: {
153
+ description: {
154
+ story: 'Standard FeatureCard with traditional props - feature object, variant, and elevation.',
155
+ },
156
+ },
157
+ },
158
158
  };
159
159
 
160
160
  export const ListFeatureCard: Story = {
161
- render: () => (
162
- <QwickApp appId="featurecard-list" appName='List FeatureCard'>
163
- <FeatureCard
164
- features={sampleFeatures}
165
- variant="list"
166
- title="Framework Features"
167
- elevation={1}
168
- />
169
- </QwickApp>
170
- ),
171
- parameters: {
172
- docs: {
173
- description: {
174
- story: 'List FeatureCard variant showing simple bullet-point features.',
175
- },
176
- },
177
- },
161
+ render: () => (
162
+ <QwickApp appId="featurecard-list" appName='List FeatureCard'>
163
+ <FeatureCard
164
+ features={sampleFeatures}
165
+ variant="list"
166
+ title="Framework Features"
167
+ elevation={1}
168
+ />
169
+ </QwickApp>
170
+ ),
171
+ parameters: {
172
+ docs: {
173
+ description: {
174
+ story: 'List FeatureCard variant showing simple bullet-point features.',
175
+ },
176
+ },
177
+ },
178
178
  };
179
179
 
180
180
  export const ElevationVariants: Story = {
181
- render: () => (
182
- <QwickApp appId="featurecard-elevation" appName='FeatureCard Elevation Variants'>
183
- <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 3, mb: 4 }}>
184
-
185
- <Box>
186
- <Typography variant="h6" gutterBottom>Elevation 0 (Flat)</Typography>
187
- <FeatureCard
188
- feature={{
189
- id: 'flat-feature',
190
- title: '📋 Flat Design',
191
- description: 'Clean, minimal appearance with no shadow depth',
192
- icon: '📋'
193
- }}
194
- elevation={0}
195
- />
196
- </Box>
197
-
198
- <Box>
199
- <Typography variant="h6" gutterBottom>Elevation 2 (Default)</Typography>
200
- <FeatureCard
201
- feature={{
202
- id: 'default-feature',
203
- title: '📄 Standard Card',
204
- description: 'Balanced elevation for most use cases',
205
- icon: '📄'
206
- }}
207
- elevation={2}
208
- />
209
- </Box>
210
-
211
- <Box>
212
- <Typography variant="h6" gutterBottom>Elevation 4 (Raised)</Typography>
213
- <FeatureCard
214
- feature={{
215
- id: 'raised-feature',
216
- title: '📈 Emphasized Card',
217
- description: 'Higher elevation for visual prominence',
218
- icon: '📈'
219
- }}
220
- elevation={4}
221
- />
222
- </Box>
223
-
224
- <Box>
225
- <Typography variant="h6" gutterBottom>Elevation 8 (High)</Typography>
226
- <FeatureCard
227
- feature={{
228
- id: 'high-feature',
229
- title: ' Premium Feature',
230
- description: 'Maximum elevation for special highlights',
231
- icon: ''
232
- }}
233
- elevation={8}
234
- />
235
- </Box>
236
-
237
- </Box>
238
- </QwickApp>
239
- ),
240
- parameters: {
241
- docs: {
242
- description: {
243
- story: 'Different elevation options showing visual depth and hierarchy.',
244
- },
245
- },
246
- },
181
+ render: () => (
182
+ <QwickApp appId="featurecard-elevation" appName='FeatureCard Elevation Variants'>
183
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 3, mb: 4 }}>
184
+
185
+ <Box>
186
+ <Typography variant="h6" gutterBottom>Elevation 0 (Flat)</Typography>
187
+ <FeatureCard
188
+ feature={{
189
+ id: 'flat-feature',
190
+ title: ' Flat Design',
191
+ description: 'Clean, minimal appearance with no shadow depth',
192
+ icon: ''
193
+ }}
194
+ elevation={0}
195
+ />
196
+ </Box>
197
+
198
+ <Box>
199
+ <Typography variant="h6" gutterBottom>Elevation 2 (Default)</Typography>
200
+ <FeatureCard
201
+ feature={{
202
+ id: 'default-feature',
203
+ title: ' Standard Card',
204
+ description: 'Balanced elevation for most use cases',
205
+ icon: ''
206
+ }}
207
+ elevation={2}
208
+ />
209
+ </Box>
210
+
211
+ <Box>
212
+ <Typography variant="h6" gutterBottom>Elevation 4 (Raised)</Typography>
213
+ <FeatureCard
214
+ feature={{
215
+ id: 'raised-feature',
216
+ title: '📈 Emphasized Card',
217
+ description: 'Higher elevation for visual prominence',
218
+ icon: '📈'
219
+ }}
220
+ elevation={4}
221
+ />
222
+ </Box>
223
+
224
+ <Box>
225
+ <Typography variant="h6" gutterBottom>Elevation 8 (High)</Typography>
226
+ <FeatureCard
227
+ feature={{
228
+ id: 'high-feature',
229
+ title: ' Premium Feature',
230
+ description: 'Maximum elevation for special highlights',
231
+ icon: ''
232
+ }}
233
+ elevation={8}
234
+ />
235
+ </Box>
236
+
237
+ </Box>
238
+ </QwickApp>
239
+ ),
240
+ parameters: {
241
+ docs: {
242
+ description: {
243
+ story: 'Different elevation options showing visual depth and hierarchy.',
244
+ },
245
+ },
246
+ },
247
247
  };
248
248
 
249
249
  export const VariantComparison: Story = {
250
- render: () => (
251
- <QwickApp appId="featurecard-variants" appName='FeatureCard Variant Comparison'>
252
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
253
-
254
- <Box>
255
- <Typography variant="h5" gutterBottom>Standard Variant</Typography>
256
- <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
257
- Rich cards with icons, titles, descriptions, and actions
258
- </Typography>
259
- <FeatureCard
260
- feature={{
261
- id: 'rich-feature',
262
- title: ' Rich Feature Display',
263
- description: 'Comprehensive feature showcase with icon, detailed description, and interactive elements for maximum engagement',
264
- icon: ''
265
- }}
266
- actions={[
267
- {
268
- id: 'explore',
269
- label: 'Explore',
270
- variant: 'contained',
271
- color: 'primary',
272
- onClick: () => console.log('Explore clicked')
273
- }
274
- ]}
275
- elevation={3}
276
- />
277
- </Box>
278
-
279
- <Box>
280
- <Typography variant="h5" gutterBottom>List Variant</Typography>
281
- <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
282
- Simple bullet-point lists for concise information
283
- </Typography>
284
- <FeatureCard
285
- features={[
286
- 'Clean, minimal design approach',
287
- 'Quick information scanning',
288
- 'Space-efficient layout',
289
- 'Perfect for feature summaries',
290
- 'Easy to digest content'
291
- ]}
292
- variant="list"
293
- title="List Benefits"
294
- elevation={1}
295
- />
296
- </Box>
297
-
298
- </Box>
299
- </QwickApp>
300
- ),
301
- parameters: {
302
- docs: {
303
- description: {
304
- story: 'Side-by-side comparison of standard vs list variants.',
305
- },
306
- },
307
- },
250
+ render: () => (
251
+ <QwickApp appId="featurecard-variants" appName='FeatureCard Variant Comparison'>
252
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
253
+
254
+ <Box>
255
+ <Typography variant="h5" gutterBottom>Standard Variant</Typography>
256
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
257
+ Rich cards with icons, titles, descriptions, and actions
258
+ </Typography>
259
+ <FeatureCard
260
+ feature={{
261
+ id: 'rich-feature',
262
+ title: ' Rich Feature Display',
263
+ description: 'Comprehensive feature showcase with icon, detailed description, and interactive elements for maximum engagement',
264
+ icon: ''
265
+ }}
266
+ actions={[
267
+ {
268
+ id: 'explore',
269
+ label: 'Explore',
270
+ variant: 'contained',
271
+ color: 'primary',
272
+ onClick: () => console.log('Explore clicked')
273
+ }
274
+ ]}
275
+ elevation={3}
276
+ />
277
+ </Box>
278
+
279
+ <Box>
280
+ <Typography variant="h5" gutterBottom>List Variant</Typography>
281
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.7 }}>
282
+ Simple bullet-point lists for concise information
283
+ </Typography>
284
+ <FeatureCard
285
+ features={[
286
+ 'Clean, minimal design approach',
287
+ 'Quick information scanning',
288
+ 'Space-efficient layout',
289
+ 'Perfect for feature summaries',
290
+ 'Easy to digest content'
291
+ ]}
292
+ variant="list"
293
+ title="List Benefits"
294
+ elevation={1}
295
+ />
296
+ </Box>
297
+
298
+ </Box>
299
+ </QwickApp>
300
+ ),
301
+ parameters: {
302
+ docs: {
303
+ description: {
304
+ story: 'Side-by-side comparison of standard vs list variants.',
305
+ },
306
+ },
307
+ },
308
308
  };
309
309
 
310
310
  // Data Binding Examples
311
311
  export const DataBindingBasic: Story = {
312
- render: () => (
313
- <QwickApp appId="featurecard-data-binding" appName='FeatureCard Data Binding'>
314
- <DataProvider dataSource={{ dataProvider }}>
315
- <Box>
316
-
317
- <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
318
- <Typography variant="h5" gutterBottom>📊 Data-Driven FeatureCard</Typography>
319
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
320
- FeatureCard components can be driven entirely by CMS data using the dataSource prop.
321
- </Typography>
322
-
323
- <Code title="Usage" language="tsx">{`<FeatureCard dataSource="features.lightning-fast" />`}</Code>
324
-
325
- <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.features['lightning-fast'], null, 2)}</Code>
326
- </Box>
312
+ render: () => (
313
+ <QwickApp appId="featurecard-data-binding" appName='FeatureCard Data Binding'>
314
+ <DataProvider dataSource={{ dataProvider }}>
315
+ <Box>
316
+
317
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
318
+ <Typography variant="h5" gutterBottom> Data-Driven FeatureCard</Typography>
319
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
320
+ FeatureCard components can be driven entirely by CMS data using the dataSource prop.
321
+ </Typography>
322
+
323
+ <Code title="Usage" language="tsx">{`<FeatureCard dataSource="features.lightning-fast" />`}</Code>
324
+
325
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.features['lightning-fast'], null, 2)}</Code>
326
+ </Box>
327
327
 
328
- <FeatureCard dataSource="features.lightning-fast" />
329
-
330
- </Box>
331
- </DataProvider>
332
- </QwickApp>
333
- ),
334
- parameters: {
335
- docs: {
336
- description: {
337
- story: 'FeatureCard with data binding - all props resolved from CMS data through dataSource.',
338
- },
339
- },
340
- },
328
+ <FeatureCard dataSource="features.lightning-fast" />
329
+
330
+ </Box>
331
+ </DataProvider>
332
+ </QwickApp>
333
+ ),
334
+ parameters: {
335
+ docs: {
336
+ description: {
337
+ story: 'FeatureCard with data binding - all props resolved from CMS data through dataSource.',
338
+ },
339
+ },
340
+ },
341
341
  };
342
342
 
343
343
  export const DataBindingAdvanced: Story = {
344
- render: () => (
345
- <QwickApp appId="featurecard-data-advanced" appName='Advanced FeatureCard Data Binding'>
346
- <DataProvider dataSource={{ dataProvider }}>
347
- <Box>
348
-
349
- <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
350
- <Typography variant="h5" gutterBottom>🎯 Multiple Data Sources</Typography>
351
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
352
- Different FeatureCard components can pull from different data sources with varying configurations.
353
- </Typography>
354
- </Box>
344
+ render: () => (
345
+ <QwickApp appId="featurecard-data-advanced" appName='Advanced FeatureCard Data Binding'>
346
+ <DataProvider dataSource={{ dataProvider }}>
347
+ <Box>
348
+
349
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
350
+ <Typography variant="h5" gutterBottom> Multiple Data Sources</Typography>
351
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
352
+ Different FeatureCard components can pull from different data sources with varying configurations.
353
+ </Typography>
354
+ </Box>
355
355
 
356
- <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))', gap: 4 }}>
357
-
358
- {/* Standard Feature Card */}
359
- <Box>
360
- <Typography variant="h6" gutterBottom>Performance Feature</Typography>
361
- <FeatureCard dataSource="features.lightning-fast" />
362
- </Box>
363
-
364
- {/* Innovation Card with Higher Elevation */}
365
- <Box>
366
- <Typography variant="h6" gutterBottom>Innovation Highlight</Typography>
367
- <FeatureCard dataSource="features.cutting-edge" />
368
- </Box>
369
-
370
- {/* Feature List */}
371
- <Box>
372
- <Typography variant="h6" gutterBottom>Benefits List</Typography>
373
- <FeatureCard dataSource="features.benefits-list" />
374
- </Box>
375
-
376
- </Box>
377
-
378
- </Box>
379
- </DataProvider>
380
- </QwickApp>
381
- ),
382
- parameters: {
383
- docs: {
384
- description: {
385
- story: 'Advanced data binding with multiple data sources showcasing different card configurations.',
386
- },
387
- },
388
- },
356
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(320px, 1fr))', gap: 4 }}>
357
+
358
+ {/* Standard Feature Card */}
359
+ <Box>
360
+ <Typography variant="h6" gutterBottom>Performance Feature</Typography>
361
+ <FeatureCard dataSource="features.lightning-fast" />
362
+ </Box>
363
+
364
+ {/* Innovation Card with Higher Elevation */}
365
+ <Box>
366
+ <Typography variant="h6" gutterBottom>Innovation Highlight</Typography>
367
+ <FeatureCard dataSource="features.cutting-edge" />
368
+ </Box>
369
+
370
+ {/* Feature List */}
371
+ <Box>
372
+ <Typography variant="h6" gutterBottom>Benefits List</Typography>
373
+ <FeatureCard dataSource="features.benefits-list" />
374
+ </Box>
375
+
376
+ </Box>
377
+
378
+ </Box>
379
+ </DataProvider>
380
+ </QwickApp>
381
+ ),
382
+ parameters: {
383
+ docs: {
384
+ description: {
385
+ story: 'Advanced data binding with multiple data sources showcasing different card configurations.',
386
+ },
387
+ },
388
+ },
389
389
  };
390
390
 
391
391
  export const JsonStringParsing: Story = {
392
- render: () => (
393
- <QwickApp appId="featurecard-json" appName='FeatureCard JSON String Parsing'>
394
- <DataProvider dataSource={{ dataProvider }}>
395
- <Box>
396
-
397
- <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
398
- <Typography variant="h5" gutterBottom>🔧 JSON String Processing</Typography>
399
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
400
- FeatureCard automatically parses JSON strings for feature data and actions, perfect for CMS integration.
401
- </Typography>
402
-
403
- <Code title="JSON Feature Data" language="json">{`{
404
- "feature": ${JSON.stringify({ id: 'example', title: 'Example Feature', description: 'Parsed from JSON string' }, null, 2)},
405
- "actions": ${JSON.stringify([{ id: 'action', label: 'Learn More', variant: 'contained' }], null, 2)}
392
+ render: () => (
393
+ <QwickApp appId="featurecard-json" appName='FeatureCard JSON String Parsing'>
394
+ <DataProvider dataSource={{ dataProvider }}>
395
+ <Box>
396
+
397
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
398
+ <Typography variant="h5" gutterBottom> JSON String Processing</Typography>
399
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
400
+ FeatureCard automatically parses JSON strings for feature data and actions, perfect for CMS integration.
401
+ </Typography>
402
+
403
+ <Code title="JSON Feature Data" language="json">{`{
404
+ "feature": ${JSON.stringify({ id: 'example', title: 'Example Feature', description: 'Parsed from JSON string' }, null, 2)},
405
+ "actions": ${JSON.stringify([{ id: 'action', label: 'Learn More', variant: 'contained' }], null, 2)}
406
406
  }`}</Code>
407
- </Box>
407
+ </Box>
408
408
 
409
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
410
-
411
- <Box>
412
- <Typography variant="h6" gutterBottom>JSON Feature + Actions</Typography>
413
- <FeatureCard dataSource="features.developer-experience" />
414
- </Box>
415
-
416
- <Box>
417
- <Typography variant="h6" gutterBottom>JSON Features List</Typography>
418
- <FeatureCard dataSource="features.enterprise-benefits" />
419
- </Box>
420
-
421
- </Box>
422
-
423
- </Box>
424
- </DataProvider>
425
- </QwickApp>
426
- ),
427
- parameters: {
428
- docs: {
429
- description: {
430
- story: 'FeatureCard with automatic JSON string parsing for CMS-friendly data formats.',
431
- },
432
- },
433
- },
409
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
410
+
411
+ <Box>
412
+ <Typography variant="h6" gutterBottom>JSON Feature + Actions</Typography>
413
+ <FeatureCard dataSource="features.developer-experience" />
414
+ </Box>
415
+
416
+ <Box>
417
+ <Typography variant="h6" gutterBottom>JSON Features List</Typography>
418
+ <FeatureCard dataSource="features.enterprise-benefits" />
419
+ </Box>
420
+
421
+ </Box>
422
+
423
+ </Box>
424
+ </DataProvider>
425
+ </QwickApp>
426
+ ),
427
+ parameters: {
428
+ docs: {
429
+ description: {
430
+ story: 'FeatureCard with automatic JSON string parsing for CMS-friendly data formats.',
431
+ },
432
+ },
433
+ },
434
434
  };
435
435
 
436
436
  export const DataBindingWithFallback: Story = {
437
- render: () => (
438
- <QwickApp appId="featurecard-fallback" appName='FeatureCard Data Binding with Fallback'>
439
- <DataProvider dataSource={{ dataProvider }}>
440
- <Box>
441
-
442
- <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
443
- <Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
444
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
445
- FeatureCard components gracefully handle missing data sources with fallback props.
446
- </Typography>
447
-
448
- <Code title="Fallback Usage" language="tsx">{`<FeatureCard
449
- dataSource="nonexistent.feature"
450
- feature={fallbackFeature}
451
- variant="standard"
452
- elevation={3}
437
+ render: () => (
438
+ <QwickApp appId="featurecard-fallback" appName='FeatureCard Data Binding with Fallback'>
439
+ <DataProvider dataSource={{ dataProvider }}>
440
+ <Box>
441
+
442
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', mb: 4 }}>
443
+ <Typography variant="h5" gutterBottom> Fallback Support</Typography>
444
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
445
+ FeatureCard components gracefully handle missing data sources with fallback props.
446
+ </Typography>
447
+
448
+ <Code title="Fallback Usage" language="tsx">{`<FeatureCard
449
+ dataSource="nonexistent.feature"
450
+ feature={fallbackFeature}
451
+ variant="standard"
452
+ elevation={3}
453
453
  />`}</Code>
454
- </Box>
454
+ </Box>
455
455
 
456
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
457
-
458
- <Box>
459
- <Typography variant="h6" gutterBottom>Standard Fallback</Typography>
460
- <FeatureCard
461
- dataSource="nonexistent.feature"
462
- feature={{
463
- id: 'fallback-standard',
464
- title: '🛡️ Reliable Fallbacks',
465
- description: 'Components gracefully handle missing data with fallback content to ensure your application never breaks',
466
- icon: '🛡️'
467
- }}
468
- variant="standard"
469
- elevation={3}
470
- />
471
- </Box>
472
-
473
- <Box>
474
- <Typography variant="h6" gutterBottom>List Fallback</Typography>
475
- <FeatureCard
476
- dataSource="nonexistent.features"
477
- features={[
478
- 'Graceful error handling',
479
- 'Fallback content support',
480
- 'Robust data binding',
481
- 'Never breaks your layout'
482
- ]}
483
- variant="list"
484
- title="Fallback Features"
485
- elevation={1}
486
- />
487
- </Box>
488
-
489
- </Box>
490
-
491
- </Box>
492
- </DataProvider>
493
- </QwickApp>
494
- ),
495
- parameters: {
496
- docs: {
497
- description: {
498
- story: 'FeatureCard with fallback props when dataSource is missing or unavailable.',
499
- },
500
- },
501
- },
456
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
457
+
458
+ <Box>
459
+ <Typography variant="h6" gutterBottom>Standard Fallback</Typography>
460
+ <FeatureCard
461
+ dataSource="nonexistent.feature"
462
+ feature={{
463
+ id: 'fallback-standard',
464
+ title: ' Reliable Fallbacks',
465
+ description: 'Components gracefully handle missing data with fallback content to ensure your application never breaks',
466
+ icon: ''
467
+ }}
468
+ variant="standard"
469
+ elevation={3}
470
+ />
471
+ </Box>
472
+
473
+ <Box>
474
+ <Typography variant="h6" gutterBottom>List Fallback</Typography>
475
+ <FeatureCard
476
+ dataSource="nonexistent.features"
477
+ features={[
478
+ 'Graceful error handling',
479
+ 'Fallback content support',
480
+ 'Robust data binding',
481
+ 'Never breaks your layout'
482
+ ]}
483
+ variant="list"
484
+ title="Fallback Features"
485
+ elevation={1}
486
+ />
487
+ </Box>
488
+
489
+ </Box>
490
+
491
+ </Box>
492
+ </DataProvider>
493
+ </QwickApp>
494
+ ),
495
+ parameters: {
496
+ docs: {
497
+ description: {
498
+ story: 'FeatureCard with fallback props when dataSource is missing or unavailable.',
499
+ },
500
+ },
501
+ },
502
502
  };
503
503
 
504
504
  export const InteractiveFeatures: Story = {
505
- render: () => (
506
- <QwickApp appId="featurecard-interactive" appName='Interactive FeatureCard Features'>
507
- <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 4 }}>
508
-
509
- <FeatureCard
510
- feature={{
511
- id: 'clickable-card',
512
- title: '👆 Clickable Card',
513
- description: 'Entire card is clickable with hover effects and cursor feedback',
514
- icon: '👆'
515
- }}
516
- onClick={() => alert('Card clicked!')}
517
- elevation={2}
518
- />
519
-
520
- <FeatureCard
521
- feature={{
522
- id: 'action-buttons',
523
- title: '🎯 Action Buttons',
524
- description: 'Multiple call-to-action buttons with different variants and colors',
525
- icon: '🎯'
526
- }}
527
- actions={[
528
- {
529
- id: 'primary-action',
530
- label: 'Primary',
531
- variant: 'contained',
532
- color: 'primary',
533
- onClick: () => alert('Primary action!')
534
- },
535
- {
536
- id: 'secondary-action',
537
- label: 'Secondary',
538
- variant: 'outlined',
539
- color: 'secondary',
540
- onClick: () => alert('Secondary action!')
541
- }
542
- ]}
543
- elevation={3}
544
- />
545
-
546
- <FeatureCard
547
- feature={{
548
- id: 'high-elevation',
549
- title: '📈 High Impact',
550
- description: 'Higher elevation creates visual prominence and draws attention',
551
- icon: '📈'
552
- }}
553
- elevation={6}
554
- />
555
-
556
- <FeatureCard
557
- features={[
558
- 'Interactive hover states',
559
- 'Smooth transitions',
560
- 'Accessibility support',
561
- 'Keyboard navigation',
562
- 'Focus indicators'
563
- ]}
564
- variant="list"
565
- title="Interactive Features"
566
- elevation={1}
567
- />
568
-
569
- </Box>
570
- </QwickApp>
571
- ),
572
- parameters: {
573
- docs: {
574
- description: {
575
- story: 'Interactive features including click handlers, action buttons, hover effects, and visual emphasis.',
576
- },
577
- },
578
- },
505
+ render: () => (
506
+ <QwickApp appId="featurecard-interactive" appName='Interactive FeatureCard Features'>
507
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 4 }}>
508
+
509
+ <FeatureCard
510
+ feature={{
511
+ id: 'clickable-card',
512
+ title: '👆 Clickable Card',
513
+ description: 'Entire card is clickable with hover effects and cursor feedback',
514
+ icon: '👆'
515
+ }}
516
+ onClick={() => alert('Card clicked!')}
517
+ elevation={2}
518
+ />
519
+
520
+ <FeatureCard
521
+ feature={{
522
+ id: 'action-buttons',
523
+ title: ' Action Buttons',
524
+ description: 'Multiple call-to-action buttons with different variants and colors',
525
+ icon: ''
526
+ }}
527
+ actions={[
528
+ {
529
+ id: 'primary-action',
530
+ label: 'Primary',
531
+ variant: 'contained',
532
+ color: 'primary',
533
+ onClick: () => alert('Primary action!')
534
+ },
535
+ {
536
+ id: 'secondary-action',
537
+ label: 'Secondary',
538
+ variant: 'outlined',
539
+ color: 'secondary',
540
+ onClick: () => alert('Secondary action!')
541
+ }
542
+ ]}
543
+ elevation={3}
544
+ />
545
+
546
+ <FeatureCard
547
+ feature={{
548
+ id: 'high-elevation',
549
+ title: '📈 High Impact',
550
+ description: 'Higher elevation creates visual prominence and draws attention',
551
+ icon: '📈'
552
+ }}
553
+ elevation={6}
554
+ />
555
+
556
+ <FeatureCard
557
+ features={[
558
+ 'Interactive hover states',
559
+ 'Smooth transitions',
560
+ 'Accessibility support',
561
+ 'Keyboard navigation',
562
+ 'Focus indicators'
563
+ ]}
564
+ variant="list"
565
+ title="Interactive Features"
566
+ elevation={1}
567
+ />
568
+
569
+ </Box>
570
+ </QwickApp>
571
+ ),
572
+ parameters: {
573
+ docs: {
574
+ description: {
575
+ story: 'Interactive features including click handlers, action buttons, hover effects, and visual emphasis.',
576
+ },
577
+ },
578
+ },
579
579
  };
580
580
 
581
581
  export const RealWorldExample: Story = {
582
- render: () => (
583
- <QwickApp appId="featurecard-real-world" appName='Real World FeatureCard Example'>
584
- <DataProvider dataSource={{ dataProvider }}>
585
- <Box>
586
-
587
- {/* Hero Feature Card */}
588
- <Box sx={{ mb: 6, textAlign: 'center' }}>
589
- <Typography variant="h3" gutterBottom sx={{ fontWeight: 'bold', mb: 4 }}>
590
- Why Choose QwickApps React Framework?
591
- </Typography>
592
- <Box sx={{ maxWidth: '400px', mx: 'auto' }}>
593
- <FeatureCard dataSource="features.lightning-fast" />
594
- </Box>
595
- </Box>
596
-
597
- {/* Feature Grid with Mixed Variants */}
598
- <Box sx={{ mb: 6 }}>
599
- <Typography variant="h4" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
600
- Complete Development Solution
601
- </Typography>
602
-
603
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '2fr 1fr' }, gap: 4 }}>
604
-
605
- {/* Main Feature Highlight */}
606
- <FeatureCard dataSource="features.developer-experience" />
607
-
608
- {/* Benefits List */}
609
- <FeatureCard dataSource="features.benefits-list" />
610
-
611
- </Box>
612
- </Box>
613
-
614
- {/* Bottom Feature Grid */}
615
- <Box>
616
- <Typography variant="h4" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
617
- Enterprise Ready
618
- </Typography>
619
-
620
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
621
-
622
- {/* Innovation Card */}
623
- <FeatureCard dataSource="features.cutting-edge" />
624
-
625
- {/* Enterprise Features */}
626
- <FeatureCard dataSource="features.enterprise-benefits" />
627
-
628
- </Box>
629
- </Box>
630
-
631
- </Box>
632
- </DataProvider>
633
- </QwickApp>
634
- ),
635
- parameters: {
636
- docs: {
637
- description: {
638
- story: 'Real-world example combining data-driven FeatureCards with different variants and configurations for a complete marketing page.',
639
- },
640
- },
641
- },
582
+ render: () => (
583
+ <QwickApp appId="featurecard-real-world" appName='Real World FeatureCard Example'>
584
+ <DataProvider dataSource={{ dataProvider }}>
585
+ <Box>
586
+
587
+ {/* Hero Feature Card */}
588
+ <Box sx={{ mb: 6, textAlign: 'center' }}>
589
+ <Typography variant="h3" gutterBottom sx={{ fontWeight: 'bold', mb: 4 }}>
590
+ Why Choose QwickApps React Framework?
591
+ </Typography>
592
+ <Box sx={{ maxWidth: '400px', mx: 'auto' }}>
593
+ <FeatureCard dataSource="features.lightning-fast" />
594
+ </Box>
595
+ </Box>
596
+
597
+ {/* Feature Grid with Mixed Variants */}
598
+ <Box sx={{ mb: 6 }}>
599
+ <Typography variant="h4" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
600
+ Complete Development Solution
601
+ </Typography>
602
+
603
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '2fr 1fr' }, gap: 4 }}>
604
+
605
+ {/* Main Feature Highlight */}
606
+ <FeatureCard dataSource="features.developer-experience" />
607
+
608
+ {/* Benefits List */}
609
+ <FeatureCard dataSource="features.benefits-list" />
610
+
611
+ </Box>
612
+ </Box>
613
+
614
+ {/* Bottom Feature Grid */}
615
+ <Box>
616
+ <Typography variant="h4" gutterBottom sx={{ textAlign: 'center', mb: 4 }}>
617
+ Enterprise Ready
618
+ </Typography>
619
+
620
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
621
+
622
+ {/* Innovation Card */}
623
+ <FeatureCard dataSource="features.cutting-edge" />
624
+
625
+ {/* Enterprise Features */}
626
+ <FeatureCard dataSource="features.enterprise-benefits" />
627
+
628
+ </Box>
629
+ </Box>
630
+
631
+ </Box>
632
+ </DataProvider>
633
+ </QwickApp>
634
+ ),
635
+ parameters: {
636
+ docs: {
637
+ description: {
638
+ story: 'Real-world example combining data-driven FeatureCards with different variants and configurations for a complete marketing page.',
639
+ },
640
+ },
641
+ },
642
642
  };