@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,196 @@
1
+ /**
2
+ * Content Types for QwickApps React Framework
3
+ *
4
+ * These interfaces define the framework-agnostic content structure that can be
5
+ * automatically created and managed across different CMS systems and used
6
+ * for template resolution and component rendering.
7
+ *
8
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
9
+ */
10
+
11
+
12
+ /**
13
+ * Base content structure - common properties for all content elements
14
+ */
15
+ export interface BaseContent {
16
+ /** Unique identifier for this content element */
17
+ name: string;
18
+ /** Display title for this content element */
19
+ title?: string;
20
+ /** Subtitle or description */
21
+ subtitle?: string;
22
+ /** Short text displayed above the title */
23
+ overline?: string;
24
+ /** Icon identifier or URL for this content element */
25
+ icon?: string;
26
+ }
27
+
28
+
29
+ /**
30
+ * Individual content field definition
31
+ */
32
+ export interface Field extends BaseContent {
33
+ /** The type of field */
34
+ type: string;
35
+ /** Current value of the field */
36
+ value?: any;
37
+ /** Default value for the field */
38
+ defaultValue?: any;
39
+ /** Whether this field is required */
40
+ required?: boolean;
41
+ /** Placeholder text for input fields */
42
+ placeholder?: string;
43
+ /** Help text or instructions */
44
+ instructions?: string;
45
+ /** Options for select/radio/checkbox fields */
46
+ choices?: Array<{ label: string; value: any }>;
47
+ /** Minimum value (for numbers) or length (for text) */
48
+ min?: number;
49
+ /** Maximum value (for numbers) or length (for text) */
50
+ max?: number;
51
+ /** Regular expression for validation */
52
+ pattern?: string;
53
+ }
54
+
55
+ /**
56
+ * HTTP methods for form submission
57
+ */
58
+ export enum FormMethod {
59
+ POST = 'POST',
60
+ PUT = 'PUT',
61
+ PATCH = 'PATCH'
62
+ }
63
+
64
+ /**
65
+ * Action types for interactive elements
66
+ */
67
+ export enum ActionType {
68
+ NAVIGATE = 'navigate',
69
+ SUBMIT = 'submit',
70
+ RESET = 'reset',
71
+ CANCEL = 'cancel'
72
+ }
73
+
74
+ /**
75
+ * Action definition for interactive elements
76
+ */
77
+ export interface Action extends BaseContent {
78
+ /** The type of action */
79
+ type: ActionType;
80
+ /** Target URL for navigation actions */
81
+ target?: string;
82
+ /** JavaScript handler function name */
83
+ handler?: string;
84
+ /** Whether the action is disabled */
85
+ disabled?: boolean;
86
+ }
87
+
88
+ /**
89
+ * Field group - container for fields and nested field groups
90
+ */
91
+ export interface FieldGroup extends BaseContent {
92
+ /** Child fields in this group */
93
+ fields?: Field[];
94
+ /** Nested field groups */
95
+ fieldGroups?: FieldGroup[];
96
+ /** Actions available for this field group */
97
+ actions?: Action[];
98
+ /** Whether this field group is repeatable */
99
+ repeatable?: boolean;
100
+ /** Minimum number of repetitions */
101
+ minRows?: number;
102
+ /** Maximum number of repetitions */
103
+ maxRows?: number;
104
+ }
105
+
106
+ /**
107
+ * Form-specific field with validation
108
+ */
109
+ export interface FormField extends Field {
110
+ /** Validation rules for forms */
111
+ validation?: {
112
+ required?: boolean;
113
+ minLength?: number;
114
+ maxLength?: number;
115
+ pattern?: RegExp;
116
+ custom?: (value: any) => boolean | string;
117
+ };
118
+ }
119
+
120
+ /**
121
+ * Form-specific action
122
+ */
123
+ export interface FormAction extends Action {
124
+ type: ActionType;
125
+ /** Form validation behavior */
126
+ validateOnAction?: boolean;
127
+ }
128
+
129
+ /**
130
+ * Form field group
131
+ */
132
+ export interface FormFieldGroup extends FieldGroup {
133
+ fields?: FormField[];
134
+ actions?: FormAction[];
135
+ /** Form submission endpoint */
136
+ submitUrl?: string;
137
+ /** Form method */
138
+ method?: FormMethod;
139
+ }
140
+
141
+ /**
142
+ * Content represents any structured data that can be persisted and managed
143
+ * through the CMS. All content is essentially a field group with a unique type name.
144
+ *
145
+ * Content types are string-based for maximum flexibility - can be anything
146
+ * as long as it's unique (e.g., 'contact', 'product', 'blog-post', 'testimonial').
147
+ */
148
+ export interface Data extends FieldGroup {
149
+ /** The type of content - flexible string identifier */
150
+ type: string;
151
+ /** Whether this content should be auto-created if missing */
152
+ autoCreate?: boolean;
153
+ }
154
+
155
+ /**
156
+ * Generic link interface for database persistence
157
+ * This is a simple data structure, not a Content type
158
+ */
159
+ export interface Link {
160
+ /** Unique identifier */
161
+ id: string;
162
+ /** Display label */
163
+ label: string;
164
+ /** URL */
165
+ url: string;
166
+ /** Icon identifier or URL */
167
+ icon?: string;
168
+ }
169
+
170
+ /**
171
+ * Social media link extending base Link
172
+ * This is a simple data structure, not a Content type
173
+ */
174
+ export interface SocialLink extends Link {
175
+ /** Social media platform */
176
+ platform: string;
177
+ /** Social media handle or username */
178
+ handle?: string;
179
+ }
180
+
181
+ /**
182
+ * Footer section containing multiple links
183
+ * This is a simple data structure, not a Content type
184
+ */
185
+ export interface FooterSection {
186
+ /** Unique section identifier */
187
+ id: string;
188
+ /** Section title */
189
+ title: string;
190
+ /** Links in this section */
191
+ items: Link[];
192
+ /** Display order */
193
+ order?: number;
194
+ /** Whether section is visible */
195
+ visible?: boolean;
196
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Pure template resolution provider interface
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export interface TemplateProvider {
7
+ /** Resolve template with given context using mustache syntax */
8
+ resolve(template: string, context: any): string;
9
+ }
@@ -0,0 +1,26 @@
1
+ import { ICacheProvider, IDataProvider } from "@qwickapps/schema";
2
+ import { TemplateProvider } from "./TemplateProvider";
3
+
4
+ /**
5
+ * Configuration for Data Provider orchestrator
6
+ */
7
+
8
+ export interface TemplateResolverConfig {
9
+ /** Data provider for fetching raw data */
10
+ dataProvider: IDataProvider;
11
+ /** Template resolver (optional, defaults to MustacheTemplateResolver) */
12
+ templateResolver?: TemplateProvider;
13
+ /** Cache provider (optional, defaults to MemoryCacheProvider, false = no cache) */
14
+ cacheProvider?: ICacheProvider<any[]> | boolean;
15
+ /** Enable debug logging */
16
+ enableLogging?: boolean;
17
+ }/**
18
+ * Content resolver interface
19
+ * This is now an orchestrator that combines data, template, and cache providers
20
+ */
21
+
22
+ export interface ITemplateResolver extends IDataProvider {
23
+ /** Resolve template string with mustache syntax */
24
+ resolveTemplate(template: string): Promise<string>;
25
+ }
26
+
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Centralized Type Definitions for QwickApps React Framework
3
+ *
4
+ * This file consolidates all common types used throughout the framework
5
+ * to ensure consistency and eliminate duplication.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+
10
+ /**
11
+ * Standard t-shirt sizing system used across the framework
12
+ */
13
+ export type TShirtSize = 'tiny' | 'small' | 'medium' | 'large' | 'x-large' | 'huge';
14
+
15
+ /**
16
+ * MUI breakpoint values for responsive design
17
+ */
18
+ export type MUIBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
19
+
20
+ /**
21
+ * Extended MUI breakpoint names for better readability
22
+ */
23
+ export type ExtendedBreakpoint = 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';
24
+
25
+ /**
26
+ * Combined breakpoint type supporting all naming conventions
27
+ */
28
+ export type BreakpointValue = MUIBreakpoint | ExtendedBreakpoint | false;
29
+
30
+ /**
31
+ * Height presets commonly used in layout components
32
+ */
33
+ export type HeightPreset = TShirtSize | 'viewport' | 'auto';
34
+
35
+ /**
36
+ * Note: SpacingValue is defined in utils/spacing.ts to avoid circular dependencies
37
+ */
38
+
39
+ /**
40
+ * Dimension values supporting CSS units and t-shirt sizes
41
+ */
42
+ export type DimensionValue = TShirtSize | MUIBreakpoint | number | 'auto' | 'grow' | string | undefined;
43
+
44
+ /**
45
+ * Background variant types for themed components
46
+ */
47
+ export type BackgroundVariant = 'default' | 'primary' | 'secondary' | 'surface' | 'paper';
48
+
49
+ /**
50
+ * Text alignment options
51
+ */
52
+ export type TextAlignment = 'left' | 'center' | 'right' | 'justify';
53
+
54
+ /**
55
+ * Common spacing presets for layout components
56
+ */
57
+ export type SpacingPreset = 'none' | 'compact' | 'comfortable' | 'spacious';
58
+
59
+ /**
60
+ * Component size variants (different from dimension sizes)
61
+ */
62
+ export type ComponentSize = 'small' | 'medium' | 'large';
63
+
64
+ /**
65
+ * Elevation levels for Material-UI components
66
+ */
67
+ export type ElevationLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 12 | 16 | 24;
68
+
69
+ /**
70
+ * Common variant styles for components
71
+ */
72
+ export type ComponentVariant = 'default' | 'elevated' | 'outlined' | 'filled' | 'text';
73
+
74
+ /**
75
+ * Animation durations
76
+ */
77
+ export type AnimationDuration = 'fast' | 'medium' | 'slow' | number;
78
+
79
+ /**
80
+ * Grid span values for layout systems
81
+ */
82
+ export type GridSpan = number | 'auto' | 'grow';
83
+
84
+ /**
85
+ * Color intensity levels
86
+ */
87
+ export type ColorIntensity = 'light' | 'main' | 'dark';
88
+
89
+ /**
90
+ * Common loading states
91
+ */
92
+ export type LoadingState = 'idle' | 'loading' | 'success' | 'error';
93
+
94
+ // Export all content-related types
95
+ export * from './CacheProvider';
96
+ export * from './ContentProxy';
97
+ export * from './DataTypes';
98
+ export * from './TemplateProvider';
99
+ export * from './TemplateResolver';
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Tests for createDataDrivenComponent factory
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ import React from 'react';
8
+ import { render, waitFor } from '@testing-library/react';
9
+ import { createDataDrivenComponent } from '../createDataDrivenComponent';
10
+ import { DataProvider } from '../../contexts/DataContext';
11
+ import { JsonDataProvider } from '../../providers/JsonDataProvider';
12
+
13
+ // Simple test component
14
+ interface TestProps {
15
+ html?: string;
16
+ placeholder?: string;
17
+ testProp?: string;
18
+ }
19
+
20
+ const BaseTestComponent: React.FC<TestProps> = ({ html, placeholder, testProp, ...otherProps }) => (
21
+ <div data-testid="base-component" {...otherProps}>
22
+ <div data-testid="html">{html}</div>
23
+ <div data-testid="placeholder">{placeholder}</div>
24
+ <div data-testid="test-prop">{testProp}</div>
25
+ </div>
26
+ );
27
+
28
+ describe('createDataDrivenComponent', () => {
29
+ const testData = {
30
+ 'company.description': [
31
+ {
32
+ html: '<p>QwickApps React Framework</p>',
33
+ placeholder: 'Loading...',
34
+ testProp: 'data-driven-value'
35
+ }
36
+ ]
37
+ };
38
+
39
+ const dataProvider = new JsonDataProvider(testData);
40
+
41
+ it('should create a component that works without dataSource', () => {
42
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
43
+
44
+ const { getByTestId } = render(
45
+ <DataDrivenTest html="<p>Direct prop</p>" placeholder="Direct placeholder" testProp="direct-value" />
46
+ );
47
+
48
+ expect(getByTestId('html')).toHaveTextContent('Direct prop');
49
+ expect(getByTestId('placeholder')).toHaveTextContent('Direct placeholder');
50
+ expect(getByTestId('test-prop')).toHaveTextContent('direct-value');
51
+ });
52
+
53
+ it('should resolve props from dataSource when provided', async () => {
54
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
55
+
56
+ const { getByTestId } = render(
57
+ <DataProvider dataSource={dataProvider}>
58
+ <DataDrivenTest dataSource="company.description" />
59
+ </DataProvider>
60
+ );
61
+
62
+ await waitFor(() => {
63
+ expect(getByTestId('html')).toHaveTextContent('QwickApps React Framework');
64
+ expect(getByTestId('placeholder')).toHaveTextContent('Loading...');
65
+ expect(getByTestId('test-prop')).toHaveTextContent('data-driven-value');
66
+ });
67
+ });
68
+
69
+ it('should merge dataSource props with direct props', async () => {
70
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
71
+
72
+ const { getByTestId } = render(
73
+ <DataProvider dataSource={dataProvider}>
74
+ <DataDrivenTest
75
+ dataSource="company.description"
76
+ testProp="override-value" // This should be overridden by dataSource
77
+ placeholder="direct-placeholder" // This should be overridden by dataSource
78
+ />
79
+ </DataProvider>
80
+ );
81
+
82
+ await waitFor(() => {
83
+ expect(getByTestId('html')).toHaveTextContent('QwickApps React Framework');
84
+ // dataSource should override direct props
85
+ expect(getByTestId('placeholder')).toHaveTextContent('Loading...');
86
+ expect(getByTestId('test-prop')).toHaveTextContent('data-driven-value');
87
+ });
88
+ });
89
+
90
+ it('should add data attributes to the component', async () => {
91
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
92
+
93
+ const { getByTestId } = render(
94
+ <DataProvider dataSource={dataProvider}>
95
+ <DataDrivenTest dataSource="company.description" />
96
+ </DataProvider>
97
+ );
98
+
99
+ await waitFor(() => {
100
+ const component = getByTestId('base-component');
101
+ expect(component).toHaveAttribute('data-component', 'SafeSpan');
102
+ expect(component).toHaveAttribute('data-data-source', 'company.description');
103
+ expect(component).toHaveAttribute('data-cached', 'false');
104
+ });
105
+ });
106
+
107
+ it('should show loading state when data is loading', () => {
108
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
109
+
110
+ const { getByText } = render(
111
+ <DataProvider dataSource={dataProvider}>
112
+ <DataDrivenTest dataSource="nonexistent.data" />
113
+ </DataProvider>
114
+ );
115
+
116
+ // Should show loading initially
117
+ expect(getByText('Loading SafeSpan...')).toBeInTheDocument();
118
+ });
119
+
120
+ it('should handle fallback options', async () => {
121
+ const DataDrivenTest = createDataDrivenComponent(
122
+ BaseTestComponent,
123
+ undefined,
124
+ {
125
+ fallback: {
126
+ html: '<p>Fallback content</p>',
127
+ placeholder: 'Fallback placeholder'
128
+ }
129
+ }
130
+ );
131
+
132
+ const { getByTestId } = render(
133
+ <DataProvider dataSource={dataProvider}>
134
+ <DataDrivenTest dataSource="nonexistent.data" />
135
+ </DataProvider>
136
+ );
137
+
138
+ await waitFor(() => {
139
+ expect(getByTestId('html')).toHaveTextContent('Fallback content');
140
+ expect(getByTestId('placeholder')).toHaveTextContent('Fallback placeholder');
141
+ });
142
+ });
143
+
144
+ it('should support custom binding options per component instance', async () => {
145
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
146
+
147
+ const customOptions = {
148
+ fallback: {
149
+ html: '<p>Custom fallback</p>',
150
+ placeholder: 'Custom placeholder'
151
+ },
152
+ strict: true
153
+ };
154
+
155
+ const { getByTestId } = render(
156
+ <DataProvider dataSource={dataProvider}>
157
+ <DataDrivenTest
158
+ dataSource="nonexistent.data"
159
+ bindingOptions={customOptions}
160
+ />
161
+ </DataProvider>
162
+ );
163
+
164
+ await waitFor(() => {
165
+ expect(getByTestId('html')).toHaveTextContent('Custom fallback');
166
+ expect(getByTestId('placeholder')).toHaveTextContent('Custom placeholder');
167
+ });
168
+ });
169
+
170
+ it('should set correct display name', () => {
171
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
172
+ expect(DataDrivenTest.displayName).toBe('DataDriven(BaseTestComponent)');
173
+ });
174
+
175
+ it('should attach schema to the component', () => {
176
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
177
+ expect((DataDrivenTest as any).schema).toBe(undefined);
178
+ });
179
+
180
+ it('should forward refs correctly', () => {
181
+ const DataDrivenTest = createDataDrivenComponent(BaseTestComponent, undefined);
182
+ const ref = React.createRef<HTMLDivElement>();
183
+
184
+ render(
185
+ <DataDrivenTest
186
+ ref={ref}
187
+ html="<p>Test content</p>"
188
+ />
189
+ );
190
+
191
+ expect(ref.current).toBeInstanceOf(HTMLElement);
192
+ });
193
+ });