@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,539 @@
1
+ /**
2
+ * CardListGrid Component Stories - Generic grid layout 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 { Code } from '../components/blocks';
11
+ import { CardListGrid } from '../components/blocks/CardListGrid';
12
+ import QwickApp from '../components/QwickApp';
13
+
14
+ // Sample data for different card types
15
+ const sampleProducts = [
16
+ {
17
+ id: 'product-1',
18
+ name: 'QwickApps React Framework',
19
+ category: 'Frontend Framework',
20
+ description: 'A comprehensive React framework for building modern web applications with AI-driven component generation and data binding.',
21
+ shortDescription: 'React framework for modern web apps',
22
+ features: ['AI-driven components', 'Data binding', 'Enterprise ready'],
23
+ technologies: ['React', 'TypeScript', 'Material-UI'],
24
+ status: 'launched',
25
+ image: 'https://via.placeholder.com/400x200/1976d2/ffffff?text=QwickApps+Framework'
26
+ },
27
+ {
28
+ id: 'product-2',
29
+ name: 'QwickApps CMS',
30
+ category: 'Content Management',
31
+ description: 'Headless CMS built for developers with powerful API and visual editing capabilities.',
32
+ shortDescription: 'Developer-friendly headless CMS',
33
+ features: ['RESTful APIs', 'Visual editing', 'Multi-tenant'],
34
+ technologies: ['Node.js', 'PostgreSQL', 'GraphQL'],
35
+ status: 'beta',
36
+ image: 'https://via.placeholder.com/400x200/388e3c/ffffff?text=QwickApps+CMS'
37
+ },
38
+ {
39
+ id: 'product-3',
40
+ name: 'QwickApps AI',
41
+ category: 'AI Platform',
42
+ description: 'AI-powered development assistant for generating components and optimizing code.',
43
+ shortDescription: 'AI development assistant',
44
+ features: ['Code generation', 'Performance optimization', 'Security analysis'],
45
+ technologies: ['Python', 'TensorFlow', 'OpenAI API'],
46
+ status: 'coming-soon',
47
+ image: 'https://via.placeholder.com/400x200/7b1fa2/ffffff?text=QwickApps+AI'
48
+ }
49
+ ];
50
+
51
+ const sampleFeatures = [
52
+ {
53
+ id: 'feature-1',
54
+ title: 'Lightning Fast',
55
+ description: 'Optimized for performance with minimal bundle size and efficient rendering.',
56
+ icon: '⚡'
57
+ },
58
+ {
59
+ id: 'feature-2',
60
+ title: 'Type Safe',
61
+ description: 'Built with TypeScript for better developer experience and fewer runtime errors.',
62
+ icon: '🛡️'
63
+ },
64
+ {
65
+ id: 'feature-3',
66
+ title: 'Scalable',
67
+ description: 'Enterprise-grade architecture that scales with your application needs.',
68
+ icon: '📈'
69
+ },
70
+ {
71
+ id: 'feature-4',
72
+ title: 'Flexible',
73
+ description: 'Customizable components that adapt to your design requirements.',
74
+ icon: '🎨'
75
+ }
76
+ ];
77
+
78
+ // Sample CMS data for data binding stories with nested structure
79
+ const sampleCmsData = {
80
+ 'cardListGrids': {
81
+ 'products': {
82
+ items: sampleProducts,
83
+ renderComponent: 'ProductCard',
84
+ columns: 3,
85
+ spacing: 'large',
86
+ equalHeight: true,
87
+ itemProps: { variant: 'compact', maxFeaturesCompact: 2 }
88
+ },
89
+ 'features': {
90
+ items: sampleFeatures,
91
+ renderComponent: 'FeatureCard',
92
+ columns: 2,
93
+ spacing: 'large',
94
+ equalHeight: false,
95
+ itemProps: { variant: 'detailed' }
96
+ },
97
+ 'product-showcase': {
98
+ items: sampleProducts.slice(0, 2),
99
+ renderComponent: 'ProductCard',
100
+ columns: 2,
101
+ spacing: 'huge',
102
+ equalHeight: true,
103
+ itemProps: { variant: 'detailed', showTechnologies: true }
104
+ },
105
+ 'feature-compact': {
106
+ items: sampleFeatures,
107
+ renderComponent: 'FeatureCard',
108
+ columns: 4,
109
+ spacing: 'medium',
110
+ equalHeight: true,
111
+ itemProps: { variant: 'compact' }
112
+ }
113
+ }
114
+ };
115
+
116
+ const dataProvider = new JsonDataProvider({ data: sampleCmsData });
117
+
118
+ const meta = {
119
+ title: 'Blocks/CardListGrid',
120
+ component: CardListGrid,
121
+ parameters: {
122
+ layout: 'padded',
123
+ docs: {
124
+ description: {
125
+ component: `CardListGrid is a versatile grid layout component that can display any type of card component with consistent spacing and responsive design.
126
+
127
+ **Key Features:**
128
+ - **Universal Grid Layout**: Works with ProductCard, FeatureCard, or any custom card component
129
+ - **Flexible Columns**: Support for 1-6 columns with responsive behavior
130
+ - **Smart Spacing**: Six spacing options from none to huge for perfect visual balance
131
+ - **Equal Height Control**: Optional equal height for consistent card alignment
132
+ - **Data Binding**: Full CMS integration through dataSource prop
133
+ - **Custom Rendering**: Support for custom render functions or predefined component types
134
+ - **Item Props**: Pass additional properties to all rendered items
135
+ - **Responsive Design**: Automatically adapts to different screen sizes
136
+
137
+ **Perfect For:**
138
+ - Product catalogs and showcases
139
+ - Feature comparison grids
140
+ - Service offerings displays
141
+ - Blog post collections
142
+ - Team member grids
143
+ - Portfolio layouts`,
144
+ },
145
+ },
146
+ },
147
+ tags: ['autodocs'],
148
+ } satisfies Meta<typeof CardListGrid>;
149
+
150
+ export default meta;
151
+ type Story = StoryObj<typeof CardListGrid>;
152
+
153
+ // Traditional Usage Examples
154
+ export const ProductGrid: Story = {
155
+ render: () => (
156
+ <QwickApp appId="cardlistgrid-products" appName='Product Grid'>
157
+ <CardListGrid
158
+ items={sampleProducts}
159
+ renderComponent="ProductCard"
160
+ columns={3}
161
+ spacing="large"
162
+ equalHeight={true}
163
+ itemProps={{ variant: 'compact', maxFeaturesCompact: 2 }}
164
+ />
165
+ </QwickApp>
166
+ ),
167
+ parameters: {
168
+ docs: {
169
+ description: {
170
+ story: 'Grid of ProductCards with consistent spacing and equal height alignment.',
171
+ },
172
+ },
173
+ },
174
+ };
175
+
176
+ export const FeatureGrid: Story = {
177
+ render: () => (
178
+ <QwickApp appId="cardlistgrid-features" appName='Feature Grid'>
179
+ <CardListGrid
180
+ items={sampleFeatures}
181
+ renderComponent="FeatureCard"
182
+ columns={2}
183
+ spacing="large"
184
+ equalHeight={false}
185
+ itemProps={{ variant: 'detailed' }}
186
+ />
187
+ </QwickApp>
188
+ ),
189
+ parameters: {
190
+ docs: {
191
+ description: {
192
+ story: 'Grid of FeatureCards with detailed variant and natural height variation.',
193
+ },
194
+ },
195
+ },
196
+ };
197
+
198
+ export const CustomRenderFunction: Story = {
199
+ render: () => {
200
+ const customRenderItem = (item: any, index: number) => (
201
+ <Box
202
+ key={item.id || index}
203
+ sx={{
204
+ p: 3,
205
+ border: 1,
206
+ borderColor: 'divider',
207
+ borderRadius: 2,
208
+ textAlign: 'center',
209
+ backgroundColor: 'background.paper'
210
+ }}
211
+ >
212
+ <Typography variant="h6" gutterBottom>{item.name}</Typography>
213
+ <Typography variant="body2" color="text.secondary">
214
+ {item.shortDescription || item.description}
215
+ </Typography>
216
+ </Box>
217
+ );
218
+
219
+ return (
220
+ <QwickApp appId="cardlistgrid-custom" appName='Custom Render Grid'>
221
+ <CardListGrid
222
+ items={sampleProducts}
223
+ renderItem={customRenderItem}
224
+ columns={3}
225
+ spacing="medium"
226
+ />
227
+ </QwickApp>
228
+ );
229
+ },
230
+ parameters: {
231
+ docs: {
232
+ description: {
233
+ story: 'Using a custom render function to create unique card layouts with complete control over appearance.',
234
+ },
235
+ },
236
+ },
237
+ };
238
+
239
+ export const ColumnVariations: Story = {
240
+ render: () => (
241
+ <QwickApp appId="cardlistgrid-columns" appName='Column Variations'>
242
+ <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
243
+
244
+ <Box>
245
+ <Typography variant="h6" gutterBottom>Single Column Layout</Typography>
246
+ <CardListGrid
247
+ items={[sampleProducts[0]]}
248
+ renderComponent="ProductCard"
249
+ columns={1}
250
+ spacing="large"
251
+ itemProps={{ variant: 'detailed', showTechnologies: true }}
252
+ />
253
+ </Box>
254
+
255
+ <Box>
256
+ <Typography variant="h6" gutterBottom>Two Column Layout</Typography>
257
+ <CardListGrid
258
+ items={sampleProducts.slice(0, 2)}
259
+ renderComponent="ProductCard"
260
+ columns={2}
261
+ spacing="large"
262
+ itemProps={{ variant: 'compact' }}
263
+ />
264
+ </Box>
265
+
266
+ <Box>
267
+ <Typography variant="h6" gutterBottom>Four Column Layout</Typography>
268
+ <CardListGrid
269
+ items={sampleFeatures}
270
+ renderComponent="FeatureCard"
271
+ columns={4}
272
+ spacing="medium"
273
+ itemProps={{ variant: 'compact' }}
274
+ />
275
+ </Box>
276
+
277
+ </Box>
278
+ </QwickApp>
279
+ ),
280
+ parameters: {
281
+ docs: {
282
+ description: {
283
+ story: 'Different column configurations showing how the grid adapts to various layout needs.',
284
+ },
285
+ },
286
+ },
287
+ };
288
+
289
+ export const SpacingOptions: Story = {
290
+ render: () => (
291
+ <QwickApp appId="cardlistgrid-spacing" appName='Spacing Options'>
292
+ <Box sx={{ '& > *:not(:last-child)': { mb: 4 } }}>
293
+
294
+ <Box>
295
+ <Typography variant="h6" gutterBottom>Small Spacing</Typography>
296
+ <CardListGrid
297
+ items={sampleFeatures.slice(0, 2)}
298
+ renderComponent="FeatureCard"
299
+ columns={2}
300
+ spacing="small"
301
+ itemProps={{ variant: 'compact' }}
302
+ />
303
+ </Box>
304
+
305
+ <Box>
306
+ <Typography variant="h6" gutterBottom>Large Spacing</Typography>
307
+ <CardListGrid
308
+ items={sampleFeatures.slice(0, 2)}
309
+ renderComponent="FeatureCard"
310
+ columns={2}
311
+ spacing="large"
312
+ itemProps={{ variant: 'compact' }}
313
+ />
314
+ </Box>
315
+
316
+ <Box>
317
+ <Typography variant="h6" gutterBottom>Huge Spacing</Typography>
318
+ <CardListGrid
319
+ items={sampleFeatures.slice(0, 2)}
320
+ renderComponent="FeatureCard"
321
+ columns={2}
322
+ spacing="huge"
323
+ itemProps={{ variant: 'compact' }}
324
+ />
325
+ </Box>
326
+
327
+ </Box>
328
+ </QwickApp>
329
+ ),
330
+ parameters: {
331
+ docs: {
332
+ description: {
333
+ story: 'Different spacing options demonstrating visual density and breathing room between cards.',
334
+ },
335
+ },
336
+ },
337
+ };
338
+
339
+ // Data Binding Examples
340
+ export const DataBindingBasic: Story = {
341
+ render: () => (
342
+ <QwickApp appId="cardlistgrid-data-binding" appName='CardListGrid Data Binding' dataSource={{ dataProvider }}>
343
+ <Box>
344
+
345
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
346
+ <Typography variant="h5" gutterBottom>📊 Data-Driven CardListGrid</Typography>
347
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
348
+ CardListGrid can be completely driven by CMS data, automatically rendering the specified component type with configured properties.
349
+ </Typography>
350
+
351
+ <Code title="Usage" language="tsx">{`<CardListGrid dataSource="cardListGrids.products" />`}</Code>
352
+
353
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData['cardListGrids']['products'], null, 2)}</Code>
354
+ </Box>
355
+
356
+ <CardListGrid dataSource="cardListGrids.products" />
357
+
358
+ </Box>
359
+ </QwickApp>
360
+ ),
361
+ parameters: {
362
+ docs: {
363
+ description: {
364
+ story: 'CardListGrid with data binding - all configuration resolved from CMS data through dataSource.',
365
+ },
366
+ },
367
+ },
368
+ };
369
+
370
+ export const DataBindingAdvanced: Story = {
371
+ render: () => (
372
+ <QwickApp appId="cardlistgrid-data-advanced" appName='Advanced CardListGrid Data Binding' dataSource={{ dataProvider }}>
373
+ <Box>
374
+
375
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
376
+ <Typography variant="h5" gutterBottom>🎯 Multiple Grid Types</Typography>
377
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
378
+ Different CardListGrid instances can render different component types from separate data sources.
379
+ </Typography>
380
+ </Box>
381
+
382
+ {/* Product Showcase */}
383
+ <Box sx={{ mb: 4 }}>
384
+ <Typography variant="h4" gutterBottom>Product Showcase</Typography>
385
+ <CardListGrid dataSource="cardListGrids.product-showcase" />
386
+ </Box>
387
+
388
+ {/* Feature Grid */}
389
+ <Box sx={{ mb: 4 }}>
390
+ <Typography variant="h4" gutterBottom>Key Features</Typography>
391
+ <CardListGrid dataSource="cardListGrids.feature-compact" />
392
+ </Box>
393
+
394
+ </Box>
395
+ </QwickApp>
396
+ ),
397
+ parameters: {
398
+ docs: {
399
+ description: {
400
+ story: 'Advanced data binding with multiple grid types showcasing different component configurations.',
401
+ },
402
+ },
403
+ },
404
+ };
405
+
406
+ export const DataBindingWithFallback: Story = {
407
+ render: () => (
408
+ <QwickApp appId="cardlistgrid-fallback" appName='CardListGrid Data Binding with Fallback' dataSource={{ dataProvider }}>
409
+ <Box>
410
+
411
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
412
+ <Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
413
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
414
+ CardListGrid gracefully handles missing data sources with fallback props and items.
415
+ </Typography>
416
+
417
+ <Code title="Fallback Usage" language="tsx">{`<CardListGrid
418
+ dataSource="cardListGrids.nonexistent"
419
+ items={fallbackItems}
420
+ renderComponent="ProductCard"
421
+ columns={2}
422
+ />`}</Code>
423
+ </Box>
424
+
425
+ <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
426
+ <Box>
427
+ <Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
428
+ <CardListGrid
429
+ dataSource="nonexistent.grid"
430
+ items={sampleProducts.slice(0, 2)}
431
+ renderComponent="ProductCard"
432
+ columns={1}
433
+ spacing="medium"
434
+ itemProps={{ variant: 'compact' }}
435
+ />
436
+ </Box>
437
+ <Box>
438
+ <Typography variant="h6" gutterBottom>Valid Data Source</Typography>
439
+ <CardListGrid dataSource="cardListGrids.features" />
440
+ </Box>
441
+ </Box>
442
+
443
+ </Box>
444
+ </QwickApp>
445
+ ),
446
+ parameters: {
447
+ docs: {
448
+ description: {
449
+ story: 'CardListGrid with fallback props when dataSource is missing or unavailable.',
450
+ },
451
+ },
452
+ },
453
+ };
454
+
455
+ export const RealWorldExample: Story = {
456
+ render: () => (
457
+ <QwickApp appId="cardlistgrid-real-world" appName='Real World CardListGrid Example' dataSource={{ dataProvider }}>
458
+ <Box>
459
+
460
+ {/* Hero Products */}
461
+ <Box sx={{ mb: 6 }}>
462
+ <Typography variant="h3" gutterBottom>Our Products</Typography>
463
+ <Typography variant="h6" sx={{ mb: 4, opacity: 0.7 }}>
464
+ Comprehensive solutions for modern web development
465
+ </Typography>
466
+ <CardListGrid dataSource="cardListGrids.products" />
467
+ </Box>
468
+
469
+ {/* Features Section */}
470
+ <Box sx={{ mb: 6 }}>
471
+ <Typography variant="h3" gutterBottom>Why Choose QwickApps?</Typography>
472
+ <Typography variant="h6" sx={{ mb: 4, opacity: 0.7 }}>
473
+ Built for developers who demand excellence
474
+ </Typography>
475
+ <CardListGrid dataSource="cardListGrids.feature-compact" />
476
+ </Box>
477
+
478
+ {/* Detailed Product Showcase */}
479
+ <Box>
480
+ <Typography variant="h3" gutterBottom>Featured Solutions</Typography>
481
+ <Typography variant="h6" sx={{ mb: 4, opacity: 0.7 }}>
482
+ Deep dive into our flagship offerings
483
+ </Typography>
484
+ <CardListGrid dataSource="cardListGrids.product-showcase" />
485
+ </Box>
486
+
487
+ </Box>
488
+ </QwickApp>
489
+ ),
490
+ parameters: {
491
+ docs: {
492
+ description: {
493
+ story: 'Real-world example combining multiple CardListGrid instances in a complete landing page layout.',
494
+ },
495
+ },
496
+ },
497
+ };
498
+
499
+ export const EmptyAndLoadingStates: Story = {
500
+ render: () => (
501
+ <QwickApp appId="cardlistgrid-states" appName='CardListGrid States' dataSource={{ dataProvider }}>
502
+ <Box>
503
+
504
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
505
+ <Typography variant="h5" gutterBottom>🔄 State Management</Typography>
506
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
507
+ CardListGrid handles various states including empty data and component type switching.
508
+ </Typography>
509
+ </Box>
510
+
511
+ <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
512
+ <Box>
513
+ <Typography variant="h6" gutterBottom>Empty Items (Returns null)</Typography>
514
+ <CardListGrid
515
+ items={[]}
516
+ renderComponent="ProductCard"
517
+ columns={2}
518
+ />
519
+ <Typography variant="body2" color="text.secondary" sx={{ mt: 2 }}>
520
+ Component returns null when no items are provided
521
+ </Typography>
522
+ </Box>
523
+ <Box>
524
+ <Typography variant="h6" gutterBottom>Valid Grid</Typography>
525
+ <CardListGrid dataSource="cardListGrids.features" />
526
+ </Box>
527
+ </Box>
528
+
529
+ </Box>
530
+ </QwickApp>
531
+ ),
532
+ parameters: {
533
+ docs: {
534
+ description: {
535
+ story: 'Demonstrates empty state handling and normal grid display states.',
536
+ },
537
+ },
538
+ },
539
+ };