@qwickapps/react-framework 1.3.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 (441) hide show
  1. package/LICENSE +44 -0
  2. package/README.md +794 -0
  3. package/dist/components/AccessibilityChecker.d.ts +12 -0
  4. package/dist/components/AccessibilityChecker.d.ts.map +1 -0
  5. package/dist/components/Html.d.ts +48 -0
  6. package/dist/components/Html.d.ts.map +1 -0
  7. package/dist/components/Logo.d.ts +79 -0
  8. package/dist/components/Logo.d.ts.map +1 -0
  9. package/dist/components/Markdown.d.ts +47 -0
  10. package/dist/components/Markdown.d.ts.map +1 -0
  11. package/dist/components/QwickApp.d.ts +56 -0
  12. package/dist/components/QwickApp.d.ts.map +1 -0
  13. package/dist/components/QwickAppsLogo.d.ts +25 -0
  14. package/dist/components/QwickAppsLogo.d.ts.map +1 -0
  15. package/dist/components/ResponsiveMenu.d.ts +38 -0
  16. package/dist/components/ResponsiveMenu.d.ts.map +1 -0
  17. package/dist/components/SafeSpan.d.ts +23 -0
  18. package/dist/components/SafeSpan.d.ts.map +1 -0
  19. package/dist/components/Scaffold.d.ts +57 -0
  20. package/dist/components/Scaffold.d.ts.map +1 -0
  21. package/dist/components/blocks/Article.d.ts +23 -0
  22. package/dist/components/blocks/Article.d.ts.map +1 -0
  23. package/dist/components/blocks/CardListGrid.d.ts +23 -0
  24. package/dist/components/blocks/CardListGrid.d.ts.map +1 -0
  25. package/dist/components/blocks/Code.d.ts +21 -0
  26. package/dist/components/blocks/Code.d.ts.map +1 -0
  27. package/dist/components/blocks/Content.d.ts +24 -0
  28. package/dist/components/blocks/Content.d.ts.map +1 -0
  29. package/dist/components/blocks/CoverImageHeader.d.ts +44 -0
  30. package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -0
  31. package/dist/components/blocks/FeatureCard.d.ts +66 -0
  32. package/dist/components/blocks/FeatureCard.d.ts.map +1 -0
  33. package/dist/components/blocks/FeatureGrid.d.ts +48 -0
  34. package/dist/components/blocks/FeatureGrid.d.ts.map +1 -0
  35. package/dist/components/blocks/Footer.d.ts +56 -0
  36. package/dist/components/blocks/Footer.d.ts.map +1 -0
  37. package/dist/components/blocks/HeroBlock.d.ts +33 -0
  38. package/dist/components/blocks/HeroBlock.d.ts.map +1 -0
  39. package/dist/components/blocks/PageBannerHeader.d.ts +30 -0
  40. package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -0
  41. package/dist/components/blocks/ProductCard.d.ts +57 -0
  42. package/dist/components/blocks/ProductCard.d.ts.map +1 -0
  43. package/dist/components/blocks/Section.d.ts +40 -0
  44. package/dist/components/blocks/Section.d.ts.map +1 -0
  45. package/dist/components/blocks/index.d.ts +37 -0
  46. package/dist/components/blocks/index.d.ts.map +1 -0
  47. package/dist/components/buttons/Button.d.ts +38 -0
  48. package/dist/components/buttons/Button.d.ts.map +1 -0
  49. package/dist/components/buttons/PaletteSwitcher.d.ts +24 -0
  50. package/dist/components/buttons/PaletteSwitcher.d.ts.map +1 -0
  51. package/dist/components/buttons/ThemeSwitcher.d.ts +24 -0
  52. package/dist/components/buttons/ThemeSwitcher.d.ts.map +1 -0
  53. package/dist/components/buttons/index.d.ts +11 -0
  54. package/dist/components/buttons/index.d.ts.map +1 -0
  55. package/dist/components/forms/FormBlock.d.ts +45 -0
  56. package/dist/components/forms/FormBlock.d.ts.map +1 -0
  57. package/dist/components/forms/index.d.ts +8 -0
  58. package/dist/components/forms/index.d.ts.map +1 -0
  59. package/dist/components/index.d.ts +32 -0
  60. package/dist/components/index.d.ts.map +1 -0
  61. package/dist/components/input/ChoiceInputField.d.ts +30 -0
  62. package/dist/components/input/ChoiceInputField.d.ts.map +1 -0
  63. package/dist/components/input/HtmlInputField.d.ts +29 -0
  64. package/dist/components/input/HtmlInputField.d.ts.map +1 -0
  65. package/dist/components/input/SelectInputField.d.ts +29 -0
  66. package/dist/components/input/SelectInputField.d.ts.map +1 -0
  67. package/dist/components/input/TextField.d.ts +18 -0
  68. package/dist/components/input/TextField.d.ts.map +1 -0
  69. package/dist/components/input/TextInputField.d.ts +32 -0
  70. package/dist/components/input/TextInputField.d.ts.map +1 -0
  71. package/dist/components/input/index.d.ts +17 -0
  72. package/dist/components/input/index.d.ts.map +1 -0
  73. package/dist/components/layout/GridCell.d.ts +16 -0
  74. package/dist/components/layout/GridCell.d.ts.map +1 -0
  75. package/dist/components/layout/GridCellWrapper.d.ts +46 -0
  76. package/dist/components/layout/GridCellWrapper.d.ts.map +1 -0
  77. package/dist/components/layout/GridLayout.d.ts +38 -0
  78. package/dist/components/layout/GridLayout.d.ts.map +1 -0
  79. package/dist/components/layout/index.d.ts +12 -0
  80. package/dist/components/layout/index.d.ts.map +1 -0
  81. package/dist/components/menu/Menu.d.ts +1 -0
  82. package/dist/components/menu/Menu.d.ts.map +1 -0
  83. package/dist/components/menu/MenuItem.d.ts +31 -0
  84. package/dist/components/menu/MenuItem.d.ts.map +1 -0
  85. package/dist/components/menu/index.d.ts +7 -0
  86. package/dist/components/menu/index.d.ts.map +1 -0
  87. package/dist/components/pages/FormPage.d.ts +66 -0
  88. package/dist/components/pages/FormPage.d.ts.map +1 -0
  89. package/dist/components/pages/Page.d.ts +124 -0
  90. package/dist/components/pages/Page.d.ts.map +1 -0
  91. package/dist/components/pages/index.d.ts +11 -0
  92. package/dist/components/pages/index.d.ts.map +1 -0
  93. package/dist/contexts/DataContext.d.ts +139 -0
  94. package/dist/contexts/DataContext.d.ts.map +1 -0
  95. package/dist/contexts/DimensionsContext.d.ts +42 -0
  96. package/dist/contexts/DimensionsContext.d.ts.map +1 -0
  97. package/dist/contexts/PaletteContext.d.ts +53 -0
  98. package/dist/contexts/PaletteContext.d.ts.map +1 -0
  99. package/dist/contexts/QwickAppContext.d.ts +71 -0
  100. package/dist/contexts/QwickAppContext.d.ts.map +1 -0
  101. package/dist/contexts/ThemeContext.d.ts +65 -0
  102. package/dist/contexts/ThemeContext.d.ts.map +1 -0
  103. package/dist/contexts/index.d.ts +9 -0
  104. package/dist/contexts/index.d.ts.map +1 -0
  105. package/dist/hooks/index.d.ts +10 -0
  106. package/dist/hooks/index.d.ts.map +1 -0
  107. package/dist/hooks/useBaseProps.d.ts +101 -0
  108. package/dist/hooks/useBaseProps.d.ts.map +1 -0
  109. package/dist/hooks/useDataBinding.d.ts +22 -0
  110. package/dist/hooks/useDataBinding.d.ts.map +1 -0
  111. package/dist/index.css +1 -0
  112. package/dist/index.d.ts +8 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.esm.css +1 -0
  115. package/dist/index.esm.js +24143 -0
  116. package/dist/index.js +24245 -0
  117. package/dist/palettes/PaletteAutumn.d.ts +10 -0
  118. package/dist/palettes/PaletteAutumn.d.ts.map +1 -0
  119. package/dist/palettes/PaletteCosmic.d.ts +10 -0
  120. package/dist/palettes/PaletteCosmic.d.ts.map +1 -0
  121. package/dist/palettes/PaletteDefault.d.ts +10 -0
  122. package/dist/palettes/PaletteDefault.d.ts.map +1 -0
  123. package/dist/palettes/PaletteOcean.d.ts +10 -0
  124. package/dist/palettes/PaletteOcean.d.ts.map +1 -0
  125. package/dist/palettes/PaletteSpring.d.ts +10 -0
  126. package/dist/palettes/PaletteSpring.d.ts.map +1 -0
  127. package/dist/palettes/PaletteWinter.d.ts +10 -0
  128. package/dist/palettes/PaletteWinter.d.ts.map +1 -0
  129. package/dist/palettes/index.d.ts +13 -0
  130. package/dist/palettes/index.d.ts.map +1 -0
  131. package/dist/schemas/ActionSchema.d.ts +21 -0
  132. package/dist/schemas/ActionSchema.d.ts.map +1 -0
  133. package/dist/schemas/ArticleSchema.d.ts +13 -0
  134. package/dist/schemas/ArticleSchema.d.ts.map +1 -0
  135. package/dist/schemas/Builders.d.ts +7 -0
  136. package/dist/schemas/Builders.d.ts.map +1 -0
  137. package/dist/schemas/ButtonSchema.d.ts +19 -0
  138. package/dist/schemas/ButtonSchema.d.ts.map +1 -0
  139. package/dist/schemas/CardListGridSchema.d.ts +17 -0
  140. package/dist/schemas/CardListGridSchema.d.ts.map +1 -0
  141. package/dist/schemas/ChoiceInputFieldSchema.d.ts +18 -0
  142. package/dist/schemas/ChoiceInputFieldSchema.d.ts.map +1 -0
  143. package/dist/schemas/CodeSchema.d.ts +18 -0
  144. package/dist/schemas/CodeSchema.d.ts.map +1 -0
  145. package/dist/schemas/ContentSchema.d.ts +20 -0
  146. package/dist/schemas/ContentSchema.d.ts.map +1 -0
  147. package/dist/schemas/CoverImageHeaderSchema.d.ts +28 -0
  148. package/dist/schemas/CoverImageHeaderSchema.d.ts.map +1 -0
  149. package/dist/schemas/FeatureCardSchema.d.ts +28 -0
  150. package/dist/schemas/FeatureCardSchema.d.ts.map +1 -0
  151. package/dist/schemas/FeatureGridSchema.d.ts +17 -0
  152. package/dist/schemas/FeatureGridSchema.d.ts.map +1 -0
  153. package/dist/schemas/FeatureItemSchema.d.ts +16 -0
  154. package/dist/schemas/FeatureItemSchema.d.ts.map +1 -0
  155. package/dist/schemas/FooterItemSchema.d.ts +15 -0
  156. package/dist/schemas/FooterItemSchema.d.ts.map +1 -0
  157. package/dist/schemas/FooterSchema.d.ts +20 -0
  158. package/dist/schemas/FooterSchema.d.ts.map +1 -0
  159. package/dist/schemas/FooterSectionSchema.d.ts +15 -0
  160. package/dist/schemas/FooterSectionSchema.d.ts.map +1 -0
  161. package/dist/schemas/FormBlockSchema.d.ts +19 -0
  162. package/dist/schemas/FormBlockSchema.d.ts.map +1 -0
  163. package/dist/schemas/HeaderActionSchema.d.ts +17 -0
  164. package/dist/schemas/HeaderActionSchema.d.ts.map +1 -0
  165. package/dist/schemas/HeroBlockSchema.d.ts +22 -0
  166. package/dist/schemas/HeroBlockSchema.d.ts.map +1 -0
  167. package/dist/schemas/HtmlInputFieldSchema.d.ts +18 -0
  168. package/dist/schemas/HtmlInputFieldSchema.d.ts.map +1 -0
  169. package/dist/schemas/MetadataItemSchema.d.ts +13 -0
  170. package/dist/schemas/MetadataItemSchema.d.ts.map +1 -0
  171. package/dist/schemas/PageBannerHeaderSchema.d.ts +28 -0
  172. package/dist/schemas/PageBannerHeaderSchema.d.ts.map +1 -0
  173. package/dist/schemas/PaletteSwitcherSchema.d.ts +16 -0
  174. package/dist/schemas/PaletteSwitcherSchema.d.ts.map +1 -0
  175. package/dist/schemas/ProductCardSchema.d.ts +39 -0
  176. package/dist/schemas/ProductCardSchema.d.ts.map +1 -0
  177. package/dist/schemas/SafeSpanSchema.d.ts +13 -0
  178. package/dist/schemas/SafeSpanSchema.d.ts.map +1 -0
  179. package/dist/schemas/SectionSchema.d.ts +17 -0
  180. package/dist/schemas/SectionSchema.d.ts.map +1 -0
  181. package/dist/schemas/SelectInputFieldSchema.d.ts +27 -0
  182. package/dist/schemas/SelectInputFieldSchema.d.ts.map +1 -0
  183. package/dist/schemas/TextInputFieldSchema.d.ts +22 -0
  184. package/dist/schemas/TextInputFieldSchema.d.ts.map +1 -0
  185. package/dist/schemas/ThemeSwitcherSchema.d.ts +19 -0
  186. package/dist/schemas/ThemeSwitcherSchema.d.ts.map +1 -0
  187. package/dist/schemas/index.d.ts +33 -0
  188. package/dist/schemas/index.d.ts.map +1 -0
  189. package/dist/schemas/types.d.ts +7 -0
  190. package/dist/schemas/types.d.ts.map +1 -0
  191. package/dist/templates/TemplateResolver.d.ts +52 -0
  192. package/dist/templates/TemplateResolver.d.ts.map +1 -0
  193. package/dist/templates/index.d.ts +7 -0
  194. package/dist/templates/index.d.ts.map +1 -0
  195. package/dist/tests/ConsoleWarningTest.d.ts +5 -0
  196. package/dist/tests/ConsoleWarningTest.d.ts.map +1 -0
  197. package/dist/tests/StorageKeyTest.d.ts +6 -0
  198. package/dist/tests/StorageKeyTest.d.ts.map +1 -0
  199. package/dist/tests/ThemeStorageKeyTest.d.ts +6 -0
  200. package/dist/tests/ThemeStorageKeyTest.d.ts.map +1 -0
  201. package/dist/types/CacheProvider.d.ts +18 -0
  202. package/dist/types/CacheProvider.d.ts.map +1 -0
  203. package/dist/types/ContentProxy.d.ts +47 -0
  204. package/dist/types/ContentProxy.d.ts.map +1 -0
  205. package/dist/types/DataBinding.d.ts +7 -0
  206. package/dist/types/DataBinding.d.ts.map +1 -0
  207. package/dist/types/DataProvider.d.ts +7 -0
  208. package/dist/types/DataProvider.d.ts.map +1 -0
  209. package/dist/types/DataTypes.d.ts +185 -0
  210. package/dist/types/DataTypes.d.ts.map +1 -0
  211. package/dist/types/TemplateProvider.d.ts +10 -0
  212. package/dist/types/TemplateProvider.d.ts.map +1 -0
  213. package/dist/types/TemplateResolver.d.ts +23 -0
  214. package/dist/types/TemplateResolver.d.ts.map +1 -0
  215. package/dist/types/index.d.ts +81 -0
  216. package/dist/types/index.d.ts.map +1 -0
  217. package/dist/utils/breakpoints.d.ts +35 -0
  218. package/dist/utils/breakpoints.d.ts.map +1 -0
  219. package/dist/utils/customPaletteManager.d.ts +8 -0
  220. package/dist/utils/customPaletteManager.d.ts.map +1 -0
  221. package/dist/utils/dimensions.d.ts +34 -0
  222. package/dist/utils/dimensions.d.ts.map +1 -0
  223. package/dist/utils/htmlTransform.d.ts +44 -0
  224. package/dist/utils/htmlTransform.d.ts.map +1 -0
  225. package/dist/utils/index.d.ts +15 -0
  226. package/dist/utils/index.d.ts.map +1 -0
  227. package/dist/utils/logger.d.ts +14 -0
  228. package/dist/utils/logger.d.ts.map +1 -0
  229. package/dist/utils/paletteUtils.d.ts +38 -0
  230. package/dist/utils/paletteUtils.d.ts.map +1 -0
  231. package/dist/utils/persistenceUtils.d.ts +31 -0
  232. package/dist/utils/persistenceUtils.d.ts.map +1 -0
  233. package/dist/utils/reactUtils.d.ts +24 -0
  234. package/dist/utils/reactUtils.d.ts.map +1 -0
  235. package/dist/utils/spacing.d.ts +34 -0
  236. package/dist/utils/spacing.d.ts.map +1 -0
  237. package/dist/utils/themePerformanceMonitor.d.ts +32 -0
  238. package/dist/utils/themePerformanceMonitor.d.ts.map +1 -0
  239. package/dist/utils/themeUtils.d.ts +27 -0
  240. package/dist/utils/themeUtils.d.ts.map +1 -0
  241. package/package.json +141 -0
  242. package/src/__tests__/components/Logo.test.js +172 -0
  243. package/src/__tests__/contexts/DataContext.test.js +505 -0
  244. package/src/__tests__/contexts/PaletteContext.test.js +115 -0
  245. package/src/__tests__/contexts/ThemeContext.test.js +123 -0
  246. package/src/__tests__/utils/paletteUtils.test.js +142 -0
  247. package/src/__tests__/utils/themeUtils.test.js +142 -0
  248. package/src/components/AccessibilityChecker.tsx +264 -0
  249. package/src/components/Html.tsx +191 -0
  250. package/src/components/Logo.css +217 -0
  251. package/src/components/Logo.tsx +370 -0
  252. package/src/components/Markdown.tsx +191 -0
  253. package/src/components/QwickApp.css +257 -0
  254. package/src/components/QwickApp.tsx +157 -0
  255. package/src/components/QwickAppsLogo.tsx +77 -0
  256. package/src/components/ResponsiveMenu.css +416 -0
  257. package/src/components/ResponsiveMenu.tsx +310 -0
  258. package/src/components/SafeSpan.tsx +128 -0
  259. package/src/components/Scaffold.css +541 -0
  260. package/src/components/Scaffold.tsx +463 -0
  261. package/src/components/__tests__/Article.test.tsx +419 -0
  262. package/src/components/__tests__/Button.test.tsx +702 -0
  263. package/src/components/__tests__/CardListGrid.test.tsx +478 -0
  264. package/src/components/__tests__/ChoiceInputField.test.tsx +864 -0
  265. package/src/components/__tests__/Code.test.tsx +595 -0
  266. package/src/components/__tests__/Content.integration.test.tsx +193 -0
  267. package/src/components/__tests__/Content.test.tsx +504 -0
  268. package/src/components/__tests__/CoverImageHeader.test.tsx +456 -0
  269. package/src/components/__tests__/FeatureCard.integration.test.tsx +384 -0
  270. package/src/components/__tests__/FeatureGrid.integration.test.tsx +364 -0
  271. package/src/components/__tests__/FeatureGrid.test.tsx +494 -0
  272. package/src/components/__tests__/Footer.test.tsx +544 -0
  273. package/src/components/__tests__/FormBlock.test.tsx +857 -0
  274. package/src/components/__tests__/HeroBlock.integration.test.tsx +272 -0
  275. package/src/components/__tests__/HeroBlock.test.tsx +463 -0
  276. package/src/components/__tests__/Html.test.tsx +174 -0
  277. package/src/components/__tests__/HtmlInputField.test.tsx +856 -0
  278. package/src/components/__tests__/Markdown.test.tsx +233 -0
  279. package/src/components/__tests__/PageBannerHeader.test.tsx +614 -0
  280. package/src/components/__tests__/PaletteSwitcher.test.tsx +864 -0
  281. package/src/components/__tests__/ProductCard.test.tsx +377 -0
  282. package/src/components/__tests__/SafeSpan.integration.test.tsx +123 -0
  283. package/src/components/__tests__/SafeSpan.simple.test.tsx +65 -0
  284. package/src/components/__tests__/SafeSpan.test.tsx +388 -0
  285. package/src/components/__tests__/Section.integration.test.tsx +288 -0
  286. package/src/components/__tests__/Section.test.tsx +494 -0
  287. package/src/components/__tests__/SelectInputField.test.tsx +886 -0
  288. package/src/components/__tests__/TextInputField.test.tsx +749 -0
  289. package/src/components/__tests__/ThemeSwitcher.test.tsx +777 -0
  290. package/src/components/blocks/Article.tsx +194 -0
  291. package/src/components/blocks/CardListGrid.tsx +132 -0
  292. package/src/components/blocks/Code.tsx +313 -0
  293. package/src/components/blocks/Content.tsx +265 -0
  294. package/src/components/blocks/CoverImageHeader.css +17 -0
  295. package/src/components/blocks/CoverImageHeader.tsx +435 -0
  296. package/src/components/blocks/FeatureCard.tsx +321 -0
  297. package/src/components/blocks/FeatureGrid.tsx +147 -0
  298. package/src/components/blocks/Footer.tsx +343 -0
  299. package/src/components/blocks/HeroBlock.tsx +280 -0
  300. package/src/components/blocks/PageBannerHeader.tsx +471 -0
  301. package/src/components/blocks/ProductCard.tsx +472 -0
  302. package/src/components/blocks/Section.tsx +209 -0
  303. package/src/components/blocks/index.ts +37 -0
  304. package/src/components/buttons/Button.tsx +233 -0
  305. package/src/components/buttons/PaletteSwitcher.tsx +268 -0
  306. package/src/components/buttons/ThemeSwitcher.tsx +283 -0
  307. package/src/components/buttons/index.ts +11 -0
  308. package/src/components/forms/FormBlock.tsx +291 -0
  309. package/src/components/forms/index.ts +7 -0
  310. package/src/components/index.ts +37 -0
  311. package/src/components/input/ChoiceInputField.tsx +188 -0
  312. package/src/components/input/HtmlInputField.tsx +326 -0
  313. package/src/components/input/SelectInputField.tsx +197 -0
  314. package/src/components/input/TextField.tsx +47 -0
  315. package/src/components/input/TextInputField.tsx +144 -0
  316. package/src/components/input/index.ts +17 -0
  317. package/src/components/layout/GridCell.tsx +46 -0
  318. package/src/components/layout/GridCellWrapper.tsx +87 -0
  319. package/src/components/layout/GridLayout.tsx +169 -0
  320. package/src/components/layout/index.ts +13 -0
  321. package/src/components/menu/Menu.tsx +0 -0
  322. package/src/components/menu/MenuItem.tsx +32 -0
  323. package/src/components/menu/index.ts +6 -0
  324. package/src/components/pages/FormPage.tsx +108 -0
  325. package/src/components/pages/Page.css +460 -0
  326. package/src/components/pages/Page.tsx +345 -0
  327. package/src/components/pages/index.ts +11 -0
  328. package/src/contexts/DataContext.tsx +355 -0
  329. package/src/contexts/DimensionsContext.tsx +154 -0
  330. package/src/contexts/PaletteContext.tsx +217 -0
  331. package/src/contexts/QwickAppContext.tsx +95 -0
  332. package/src/contexts/ThemeContext.tsx +376 -0
  333. package/src/contexts/index.ts +9 -0
  334. package/src/hooks/__tests__/useDataBinding.test.tsx.disabled +229 -0
  335. package/src/hooks/index.ts +11 -0
  336. package/src/hooks/useBaseProps.ts +267 -0
  337. package/src/hooks/useDataBinding.ts +77 -0
  338. package/src/index.ts +23 -0
  339. package/src/palettes/PaletteAutumn.css +172 -0
  340. package/src/palettes/PaletteAutumn.ts +16 -0
  341. package/src/palettes/PaletteCosmic.css +172 -0
  342. package/src/palettes/PaletteCosmic.ts +16 -0
  343. package/src/palettes/PaletteDefault.css +178 -0
  344. package/src/palettes/PaletteDefault.ts +17 -0
  345. package/src/palettes/PaletteOcean.css +172 -0
  346. package/src/palettes/PaletteOcean.ts +16 -0
  347. package/src/palettes/PaletteSpring.css +160 -0
  348. package/src/palettes/PaletteSpring.ts +16 -0
  349. package/src/palettes/PaletteWinter.css +172 -0
  350. package/src/palettes/PaletteWinter.ts +16 -0
  351. package/src/palettes/index.css +12 -0
  352. package/src/palettes/index.ts +29 -0
  353. package/src/schemas/ActionSchema.ts +140 -0
  354. package/src/schemas/ArticleSchema.ts +35 -0
  355. package/src/schemas/ButtonSchema.ts +99 -0
  356. package/src/schemas/CardListGridSchema.ts +102 -0
  357. package/src/schemas/ChoiceInputFieldSchema.ts +89 -0
  358. package/src/schemas/CodeSchema.ts +88 -0
  359. package/src/schemas/ContentSchema.ts +128 -0
  360. package/src/schemas/CoverImageHeaderSchema.ts +208 -0
  361. package/src/schemas/FeatureCardSchema.ts +161 -0
  362. package/src/schemas/FeatureGridSchema.ts +87 -0
  363. package/src/schemas/FeatureItemSchema.ts +68 -0
  364. package/src/schemas/FooterItemSchema.ts +57 -0
  365. package/src/schemas/FooterSchema.ts +116 -0
  366. package/src/schemas/FooterSectionSchema.ts +50 -0
  367. package/src/schemas/FormBlockSchema.ts +102 -0
  368. package/src/schemas/HeaderActionSchema.ts +83 -0
  369. package/src/schemas/HeroBlockSchema.ts +149 -0
  370. package/src/schemas/HtmlInputFieldSchema.ts +88 -0
  371. package/src/schemas/MetadataItemSchema.ts +35 -0
  372. package/src/schemas/PageBannerHeaderSchema.ts +206 -0
  373. package/src/schemas/PaletteSwitcherSchema.ts +66 -0
  374. package/src/schemas/ProductCardSchema.ts +264 -0
  375. package/src/schemas/SafeSpanSchema.ts +36 -0
  376. package/src/schemas/SectionSchema.ts +106 -0
  377. package/src/schemas/SelectInputFieldSchema.ts +137 -0
  378. package/src/schemas/TextInputFieldSchema.ts +129 -0
  379. package/src/schemas/ThemeSwitcherSchema.ts +97 -0
  380. package/src/schemas/__tests__/builders.test.ts +313 -0
  381. package/src/schemas/index.ts +34 -0
  382. package/src/setupTests.js +60 -0
  383. package/src/stories/Article.stories.tsx +549 -0
  384. package/src/stories/Button.stories.tsx +498 -0
  385. package/src/stories/CardListGrid.stories.tsx +539 -0
  386. package/src/stories/ChoiceInputField.stories.tsx +591 -0
  387. package/src/stories/Code.stories.tsx +711 -0
  388. package/src/stories/Content.stories.tsx +463 -0
  389. package/src/stories/CoverImageHeader.stories.tsx +794 -0
  390. package/src/stories/DataBinding.advanced.stories.tsx +548 -0
  391. package/src/stories/DataBinding.stories.tsx +452 -0
  392. package/src/stories/DataProvider.stories.tsx +1361 -0
  393. package/src/stories/FeatureCard.stories.tsx +642 -0
  394. package/src/stories/FeatureGrid.stories.tsx +669 -0
  395. package/src/stories/Footer.stories.tsx +724 -0
  396. package/src/stories/FormBlock.stories.tsx +834 -0
  397. package/src/stories/HeroBlock.stories.tsx +442 -0
  398. package/src/stories/Html.stories.tsx +264 -0
  399. package/src/stories/HtmlInputField.stories.tsx +558 -0
  400. package/src/stories/Introduction.stories.tsx +721 -0
  401. package/src/stories/LayoutBlocks.stories.tsx +382 -0
  402. package/src/stories/LayoutSystem.stories.tsx +253 -0
  403. package/src/stories/Logo.stories.tsx +400 -0
  404. package/src/stories/Markdown.stories.tsx +349 -0
  405. package/src/stories/Page.stories.tsx +762 -0
  406. package/src/stories/PageBannerHeader.stories.tsx +949 -0
  407. package/src/stories/PaletteSwitcher.stories.tsx +156 -0
  408. package/src/stories/ProductCard.stories.tsx +504 -0
  409. package/src/stories/QwickApp.stories.tsx +461 -0
  410. package/src/stories/ResponsiveMenu.stories.tsx +299 -0
  411. package/src/stories/SafeSpan.stories.tsx +612 -0
  412. package/src/stories/Section.stories.tsx +613 -0
  413. package/src/stories/SelectInputField.stories.tsx +605 -0
  414. package/src/stories/TextInputField.stories.tsx +526 -0
  415. package/src/stories/ThemeSwitcher.stories.tsx +170 -0
  416. package/src/stories/form/FormComponents.stories.tsx +588 -0
  417. package/src/templates/TemplateResolver.ts +156 -0
  418. package/src/templates/index.ts +6 -0
  419. package/src/tests/ConsoleWarningTest.tsx +30 -0
  420. package/src/tests/StorageKeyTest.tsx +110 -0
  421. package/src/tests/ThemeStorageKeyTest.tsx +114 -0
  422. package/src/types/CacheProvider.ts +14 -0
  423. package/src/types/ContentProxy.ts +99 -0
  424. package/src/types/DataTypes.ts +196 -0
  425. package/src/types/TemplateProvider.ts +9 -0
  426. package/src/types/TemplateResolver.ts +26 -0
  427. package/src/types/index.ts +99 -0
  428. package/src/utils/__tests__/createDataDrivenComponent.test.tsx.disabled +193 -0
  429. package/src/utils/__tests__/htmlTransform.test.tsx +255 -0
  430. package/src/utils/breakpoints.ts +87 -0
  431. package/src/utils/customPaletteManager.js +214 -0
  432. package/src/utils/dimensions.ts +147 -0
  433. package/src/utils/htmlTransform.tsx +323 -0
  434. package/src/utils/index.ts +16 -0
  435. package/src/utils/logger.ts +28 -0
  436. package/src/utils/paletteUtils.ts +78 -0
  437. package/src/utils/persistenceUtils.ts +107 -0
  438. package/src/utils/reactUtils.tsx +37 -0
  439. package/src/utils/spacing.ts +155 -0
  440. package/src/utils/themePerformanceMonitor.js +113 -0
  441. package/src/utils/themeUtils.ts +67 -0
@@ -0,0 +1,642 @@
1
+ /**
2
+ * FeatureCard Component Stories - Individual feature display cards with data binding support
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ import { Box, Typography } from '@mui/material';
8
+ import { JsonDataProvider } from '@qwickapps/schema';
9
+ import type { Meta, StoryObj } from '@storybook/react';
10
+ import QwickApp from '../components/QwickApp';
11
+ import { Code } from '../components/blocks';
12
+ import FeatureCard from '../components/blocks/FeatureCard';
13
+ import { DataProvider } from '../contexts/DataContext';
14
+
15
+ // Sample CMS data for data binding stories
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
+ }
88
+ };
89
+
90
+ const dataProvider = new JsonDataProvider({ data: sampleCmsData });
91
+
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.
100
+
101
+ **Key Features:**
102
+ - **Dual Variants**: Standard cards with rich content or simple list format
103
+ - **Interactive Elements**: Hover effects, click handlers, and custom actions
104
+ - **Flexible Content**: Icons, titles, descriptions, and action buttons
105
+ - **Elevation Control**: Material-UI Paper elevation for visual hierarchy
106
+ - **Data Binding**: Full CMS integration with JSON parsing support
107
+ - **Theme Integration**: Consistent styling with Material-UI theme system
108
+
109
+ **Perfect For:**
110
+ - Individual feature highlights and benefit showcases
111
+ - Feature comparison cards and capability displays
112
+ - Simple feature lists and bullet point summaries
113
+ - Interactive elements with call-to-action buttons
114
+ - Product cards and service offerings`,
115
+ },
116
+ },
117
+ },
118
+ tags: ['autodocs'],
119
+ } satisfies Meta<typeof FeatureCard>;
120
+
121
+ export default meta;
122
+ type Story = StoryObj<typeof meta>;
123
+
124
+ // Sample features for traditional examples
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: '🔧'
130
+ };
131
+
132
+ const sampleFeatures = [
133
+ 'Comprehensive component library',
134
+ 'Advanced theming capabilities',
135
+ 'Built-in accessibility support',
136
+ 'Performance optimization tools',
137
+ 'Responsive design system'
138
+ ];
139
+
140
+ // Traditional Usage Examples
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
+ },
158
+ };
159
+
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
+ },
178
+ };
179
+
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
+ },
247
+ };
248
+
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
+ },
308
+ };
309
+
310
+ // Data Binding Examples
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>
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
+ },
341
+ };
342
+
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>
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
+ },
389
+ };
390
+
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)}
406
+ }`}</Code>
407
+ </Box>
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
+ },
434
+ };
435
+
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}
453
+ />`}</Code>
454
+ </Box>
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
+ },
502
+ };
503
+
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
+ },
579
+ };
580
+
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
+ },
642
+ };