@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,494 @@
1
+ /**
2
+ * Unit tests for FeatureGrid component
3
+ *
4
+ * Tests both traditional props usage and data binding functionality
5
+ * with the new schema system.
6
+ */
7
+
8
+ import React from 'react';
9
+ import { render, screen } from '@testing-library/react';
10
+ import '@testing-library/jest-dom';
11
+ import FeatureGrid from '../blocks/FeatureGrid';
12
+ import type { FeatureItem } from '../blocks/FeatureGrid';
13
+ import { DataProvider } from '../../contexts/DataContext';
14
+ import { JsonDataProvider } from '@qwickapps/schema';
15
+ import { ThemeProvider, PaletteProvider } from '../../contexts';
16
+
17
+ // Test data for data binding
18
+ const sampleCmsData = {
19
+ 'features.main': [{
20
+ features: [
21
+ {
22
+ id: 'feature-1',
23
+ icon: '⚡',
24
+ title: 'Lightning Fast',
25
+ description: 'Built for speed with optimized performance out of the box'
26
+ },
27
+ {
28
+ id: 'feature-2',
29
+ icon: '🎨',
30
+ title: 'Beautiful UI',
31
+ description: 'Pre-built components with modern design principles'
32
+ },
33
+ {
34
+ id: 'feature-3',
35
+ icon: '📱',
36
+ title: 'Mobile Ready',
37
+ description: 'Responsive design that works perfectly on all devices'
38
+ },
39
+ {
40
+ id: 'feature-4',
41
+ icon: '🔧',
42
+ title: 'Developer Friendly',
43
+ description: 'Intuitive APIs and excellent developer experience'
44
+ }
45
+ ],
46
+ columns: 2,
47
+ gap: 'large',
48
+ equalHeight: true
49
+ }],
50
+ 'features.product': [{
51
+ features: [
52
+ {
53
+ id: 'product-1',
54
+ title: 'Advanced Analytics',
55
+ description: 'Deep insights into your application performance'
56
+ },
57
+ {
58
+ id: 'product-2',
59
+ title: 'Real-time Updates',
60
+ description: 'Live data synchronization across all platforms'
61
+ }
62
+ ],
63
+ columns: 1,
64
+ gap: 'medium',
65
+ equalHeight: false
66
+ }],
67
+ 'features.minimal': [{
68
+ features: [
69
+ {
70
+ id: 'minimal-1',
71
+ title: 'Simple Feature',
72
+ description: 'Minimal feature for testing'
73
+ }
74
+ ]
75
+ }],
76
+ 'features.empty': [{}]
77
+ };
78
+
79
+ // Sample features for testing
80
+ const sampleFeatures: FeatureItem[] = [
81
+ {
82
+ id: 'test-1',
83
+ icon: '🚀',
84
+ title: 'Test Feature 1',
85
+ description: 'Description for test feature 1'
86
+ },
87
+ {
88
+ id: 'test-2',
89
+ title: 'Test Feature 2',
90
+ description: 'Description for test feature 2'
91
+ },
92
+ {
93
+ id: 'test-3',
94
+ icon: '⭐',
95
+ title: 'Test Feature 3',
96
+ description: 'Description for test feature 3',
97
+ action: 'Learn More'
98
+ }
99
+ ];
100
+
101
+ // Wrapper component for tests that need providers
102
+ const TestWrapper: React.FC<{ children: React.ReactNode; dataProvider?: any }> = ({
103
+ children,
104
+ dataProvider
105
+ }) => (
106
+ <ThemeProvider>
107
+ <PaletteProvider>
108
+ {dataProvider ? (
109
+ <DataProvider dataSource={dataProvider}>
110
+ {children}
111
+ </DataProvider>
112
+ ) : (
113
+ children
114
+ )}
115
+ </PaletteProvider>
116
+ </ThemeProvider>
117
+ );
118
+
119
+ describe.skip('FeatureGrid', () => {
120
+ describe('Traditional Props Usage', () => {
121
+ it('renders basic feature grid', () => {
122
+ render(
123
+ <TestWrapper>
124
+ <FeatureGrid features={sampleFeatures} />
125
+ </TestWrapper>
126
+ );
127
+
128
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
129
+ expect(screen.getByText('Test Feature 2')).toBeInTheDocument();
130
+ expect(screen.getByText('Test Feature 3')).toBeInTheDocument();
131
+ });
132
+
133
+ it('renders feature descriptions', () => {
134
+ render(
135
+ <TestWrapper>
136
+ <FeatureGrid features={sampleFeatures} />
137
+ </TestWrapper>
138
+ );
139
+
140
+ expect(screen.getByText('Description for test feature 1')).toBeInTheDocument();
141
+ expect(screen.getByText('Description for test feature 2')).toBeInTheDocument();
142
+ expect(screen.getByText('Description for test feature 3')).toBeInTheDocument();
143
+ });
144
+
145
+ it('handles different column configurations', () => {
146
+ const columns = [1, 2, 3, 4, 5, 6] as const;
147
+
148
+ columns.forEach(columnCount => {
149
+ const { unmount } = render(
150
+ <TestWrapper>
151
+ <FeatureGrid
152
+ features={sampleFeatures}
153
+ columns={columnCount}
154
+ />
155
+ </TestWrapper>
156
+ );
157
+
158
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
159
+
160
+ unmount();
161
+ });
162
+ });
163
+
164
+ it('handles different gap sizes', () => {
165
+ const gaps = ['small', 'medium', 'large'] as const;
166
+
167
+ gaps.forEach(gapSize => {
168
+ const { unmount } = render(
169
+ <TestWrapper>
170
+ <FeatureGrid
171
+ features={sampleFeatures}
172
+ gap={gapSize}
173
+ />
174
+ </TestWrapper>
175
+ );
176
+
177
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
178
+
179
+ unmount();
180
+ });
181
+ });
182
+
183
+ it('handles equalHeight prop', () => {
184
+ render(
185
+ <TestWrapper>
186
+ <FeatureGrid
187
+ features={sampleFeatures}
188
+ equalHeight={false}
189
+ />
190
+ </TestWrapper>
191
+ );
192
+
193
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
194
+ });
195
+
196
+ it('renders empty grid gracefully', () => {
197
+ render(
198
+ <TestWrapper>
199
+ <FeatureGrid features={[]} />
200
+ </TestWrapper>
201
+ );
202
+
203
+ // Should render without crashing
204
+ const container = document.querySelector('[class*="MuiGrid"]');
205
+ expect(container).toBeInTheDocument();
206
+ });
207
+
208
+ it('supports grid props', () => {
209
+ const { container } = render(
210
+ <TestWrapper>
211
+ <FeatureGrid
212
+ features={sampleFeatures}
213
+ span={12}
214
+ xs={12}
215
+ md={6}
216
+ />
217
+ </TestWrapper>
218
+ );
219
+
220
+ // Check if grid props are passed through
221
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
222
+ });
223
+
224
+ it('renders with custom CSS classes and styles', () => {
225
+ render(
226
+ <TestWrapper>
227
+ <FeatureGrid
228
+ features={sampleFeatures}
229
+ className="custom-feature-grid"
230
+ sx={{ backgroundColor: 'red' }}
231
+ />
232
+ </TestWrapper>
233
+ );
234
+
235
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
236
+ });
237
+
238
+ it('handles features with icons', () => {
239
+ const featuresWithIcons: FeatureItem[] = [
240
+ {
241
+ id: 'icon-test',
242
+ icon: '🎉',
243
+ title: 'Feature with Icon',
244
+ description: 'This feature has an icon'
245
+ }
246
+ ];
247
+
248
+ render(
249
+ <TestWrapper>
250
+ <FeatureGrid features={featuresWithIcons} />
251
+ </TestWrapper>
252
+ );
253
+
254
+ expect(screen.getByText('Feature with Icon')).toBeInTheDocument();
255
+ expect(screen.getByText('This feature has an icon')).toBeInTheDocument();
256
+ });
257
+
258
+ it('handles features with actions', () => {
259
+ const featuresWithActions: FeatureItem[] = [
260
+ {
261
+ id: 'action-test',
262
+ title: 'Feature with Action',
263
+ description: 'This feature has an action',
264
+ action: 'Click Me'
265
+ }
266
+ ];
267
+
268
+ render(
269
+ <TestWrapper>
270
+ <FeatureGrid features={featuresWithActions} />
271
+ </TestWrapper>
272
+ );
273
+
274
+ expect(screen.getByText('Feature with Action')).toBeInTheDocument();
275
+ expect(screen.getByText('This feature has an action')).toBeInTheDocument();
276
+ });
277
+ });
278
+
279
+ describe.skip('Data Binding Usage', () => {
280
+ let dataProvider: JsonDataProvider;
281
+
282
+ beforeEach(() => {
283
+ dataProvider = new JsonDataProvider({ data: sampleCmsData });
284
+ });
285
+
286
+ it('renders with dataSource prop (main features)', async () => {
287
+ render(
288
+ <TestWrapper dataProvider={dataProvider}>
289
+ <FeatureGrid dataSource="features.main" />
290
+ </TestWrapper>
291
+ );
292
+
293
+ await screen.findByText('Lightning Fast');
294
+ expect(screen.getByText('Beautiful UI')).toBeInTheDocument();
295
+ expect(screen.getByText('Mobile Ready')).toBeInTheDocument();
296
+ expect(screen.getByText('Developer Friendly')).toBeInTheDocument();
297
+ });
298
+
299
+ it('renders with dataSource prop (product features)', async () => {
300
+ render(
301
+ <TestWrapper dataProvider={dataProvider}>
302
+ <FeatureGrid dataSource="features.product" />
303
+ </TestWrapper>
304
+ );
305
+
306
+ await screen.findByText('Advanced Analytics');
307
+ expect(screen.getByText('Real-time Updates')).toBeInTheDocument();
308
+ });
309
+
310
+ it('shows loading state while data is loading', () => {
311
+ render(
312
+ <TestWrapper dataProvider={dataProvider}>
313
+ <FeatureGrid dataSource="features.nonexistent" />
314
+ </TestWrapper>
315
+ );
316
+
317
+ expect(screen.getByText('Loading Feature...')).toBeInTheDocument();
318
+ });
319
+
320
+ it('uses fallback props when dataSource has no content', async () => {
321
+ render(
322
+ <TestWrapper dataProvider={dataProvider}>
323
+ <FeatureGrid
324
+ dataSource="nonexistent.features"
325
+ features={sampleFeatures}
326
+ />
327
+ </TestWrapper>
328
+ );
329
+
330
+ await screen.findByText('Test Feature 1');
331
+ expect(screen.getByText('Test Feature 2')).toBeInTheDocument();
332
+ });
333
+
334
+ it('handles minimal features from data', async () => {
335
+ render(
336
+ <TestWrapper dataProvider={dataProvider}>
337
+ <FeatureGrid dataSource="features.minimal" />
338
+ </TestWrapper>
339
+ );
340
+
341
+ await screen.findByText('Simple Feature');
342
+ });
343
+
344
+ it('works with custom binding options', async () => {
345
+ render(
346
+ <TestWrapper dataProvider={dataProvider}>
347
+ <FeatureGrid
348
+ dataSource="features.main"
349
+ bindingOptions={{ cache: false, strict: true }}
350
+ />
351
+ </TestWrapper>
352
+ );
353
+
354
+ await screen.findByText('Lightning Fast');
355
+ });
356
+
357
+ it('handles empty data from CMS', async () => {
358
+ render(
359
+ <TestWrapper dataProvider={dataProvider}>
360
+ <FeatureGrid
361
+ dataSource="features.empty"
362
+ features={sampleFeatures}
363
+ />
364
+ </TestWrapper>
365
+ );
366
+
367
+ await screen.findByText('Test Feature 1');
368
+ });
369
+ });
370
+
371
+ describe('Edge Cases', () => {
372
+ it('handles very long feature titles and descriptions', () => {
373
+ const longFeatures: FeatureItem[] = [
374
+ {
375
+ id: 'long-feature',
376
+ title: 'Very '.repeat(20) + 'Long Feature Title',
377
+ description: 'Very '.repeat(30) + 'Long Feature Description'
378
+ }
379
+ ];
380
+
381
+ render(
382
+ <TestWrapper>
383
+ <FeatureGrid features={longFeatures} />
384
+ </TestWrapper>
385
+ );
386
+
387
+ expect(screen.getByText(/Very.*Long Feature Title/)).toBeInTheDocument();
388
+ expect(screen.getByText(/Very.*Long Feature Description/)).toBeInTheDocument();
389
+ });
390
+
391
+ it('handles special characters in content', () => {
392
+ const specialFeatures: FeatureItem[] = [
393
+ {
394
+ id: 'special-feature',
395
+ title: 'Special: &<>"\' Characters',
396
+ description: 'Description with & < > " \' chars'
397
+ }
398
+ ];
399
+
400
+ render(
401
+ <TestWrapper>
402
+ <FeatureGrid features={specialFeatures} />
403
+ </TestWrapper>
404
+ );
405
+
406
+ expect(screen.getByText(/Special:.*Characters/)).toBeInTheDocument();
407
+ expect(screen.getByText(/Description with.*chars/)).toBeInTheDocument();
408
+ });
409
+
410
+ it('handles large number of features', () => {
411
+ const manyFeatures = Array.from({ length: 50 }, (_, i) => ({
412
+ id: `feature-${i}`,
413
+ title: `Feature ${i + 1}`,
414
+ description: `Description for feature ${i + 1}`
415
+ }));
416
+
417
+ render(
418
+ <TestWrapper>
419
+ <FeatureGrid features={manyFeatures} />
420
+ </TestWrapper>
421
+ );
422
+
423
+ expect(screen.getByText('Feature 1')).toBeInTheDocument();
424
+ expect(screen.getByText('Feature 50')).toBeInTheDocument();
425
+ });
426
+
427
+ it('handles features without required fields gracefully', () => {
428
+ const incompleteFeatures: FeatureItem[] = [
429
+ {
430
+ id: 'incomplete',
431
+ title: '',
432
+ description: ''
433
+ }
434
+ ];
435
+
436
+ render(
437
+ <TestWrapper>
438
+ <FeatureGrid features={incompleteFeatures} />
439
+ </TestWrapper>
440
+ );
441
+
442
+ // Should render without crashing
443
+ const container = document.querySelector('[class*="MuiGrid"]');
444
+ expect(container).toBeInTheDocument();
445
+ });
446
+
447
+ it('handles mixed feature types', () => {
448
+ const mixedFeatures: FeatureItem[] = [
449
+ {
450
+ id: 'with-icon',
451
+ icon: '🎯',
452
+ title: 'With Icon',
453
+ description: 'Feature with icon'
454
+ },
455
+ {
456
+ id: 'without-icon',
457
+ title: 'Without Icon',
458
+ description: 'Feature without icon'
459
+ },
460
+ {
461
+ id: 'with-action',
462
+ title: 'With Action',
463
+ description: 'Feature with action',
464
+ action: 'Action Button'
465
+ }
466
+ ];
467
+
468
+ render(
469
+ <TestWrapper>
470
+ <FeatureGrid features={mixedFeatures} />
471
+ </TestWrapper>
472
+ );
473
+
474
+ expect(screen.getByText('With Icon')).toBeInTheDocument();
475
+ expect(screen.getByText('Without Icon')).toBeInTheDocument();
476
+ expect(screen.getByText('With Action')).toBeInTheDocument();
477
+ });
478
+
479
+ it('handles extreme column configurations', () => {
480
+ render(
481
+ <TestWrapper>
482
+ <FeatureGrid
483
+ features={sampleFeatures}
484
+ columns={6}
485
+ gap="large"
486
+ equalHeight={true}
487
+ />
488
+ </TestWrapper>
489
+ );
490
+
491
+ expect(screen.getByText('Test Feature 1')).toBeInTheDocument();
492
+ });
493
+ });
494
+ });