@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,154 @@
1
+ /**
2
+ * Dimensions Context - Responsive design tokens for typography, spacing, and sizing
3
+ *
4
+ * Provides consistent design tokens that adapt to screen size and user preferences.
5
+ * Works alongside MUI theme system for comprehensive responsive design.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+
10
+ import React, { createContext, useContext, useEffect, useState } from 'react';
11
+
12
+ export interface DimensionTokens {
13
+ // Border radius
14
+ borderRadius: {
15
+ small: number;
16
+ medium: number;
17
+ large: number;
18
+ };
19
+
20
+ // Typography scale (multipliers for MUI typography)
21
+ typography: {
22
+ scaleMultiplier: number;
23
+ lineHeightMultiplier: number;
24
+ };
25
+
26
+ // Spacing scale (multipliers for MUI spacing)
27
+ spacing: {
28
+ scaleMultiplier: number;
29
+ };
30
+
31
+ // Component sizing
32
+ component: {
33
+ buttonHeight: number;
34
+ inputHeight: number;
35
+ iconSize: number;
36
+ };
37
+ }
38
+
39
+ export interface DimensionsContextValue {
40
+ tokens: DimensionTokens;
41
+ screenSize: 'mobile' | 'tablet' | 'desktop';
42
+ isCompact: boolean;
43
+ setCompactMode: (compact: boolean) => void;
44
+ }
45
+
46
+ const DimensionsContext = createContext<DimensionsContextValue | undefined>(undefined);
47
+
48
+ // Default dimension tokens
49
+ const getDefaultTokens = (screenSize: 'mobile' | 'tablet' | 'desktop', isCompact: boolean): DimensionTokens => {
50
+ const compactMultiplier = isCompact ? 0.9 : 1.0;
51
+
52
+ let baseTokens: DimensionTokens;
53
+
54
+ switch (screenSize) {
55
+ case 'mobile':
56
+ baseTokens = {
57
+ borderRadius: { small: 6, medium: 10, large: 14 },
58
+ typography: { scaleMultiplier: 0.9, lineHeightMultiplier: 1.0 },
59
+ spacing: { scaleMultiplier: 0.8 },
60
+ component: { buttonHeight: 44, inputHeight: 44, iconSize: 20 },
61
+ };
62
+ break;
63
+ case 'tablet':
64
+ baseTokens = {
65
+ borderRadius: { small: 8, medium: 12, large: 16 },
66
+ typography: { scaleMultiplier: 0.95, lineHeightMultiplier: 1.0 },
67
+ spacing: { scaleMultiplier: 0.9 },
68
+ component: { buttonHeight: 40, inputHeight: 40, iconSize: 22 },
69
+ };
70
+ break;
71
+ case 'desktop':
72
+ default:
73
+ baseTokens = {
74
+ borderRadius: { small: 8, medium: 12, large: 16 },
75
+ typography: { scaleMultiplier: 1.0, lineHeightMultiplier: 1.0 },
76
+ spacing: { scaleMultiplier: 1.0 },
77
+ component: { buttonHeight: 36, inputHeight: 36, iconSize: 24 },
78
+ };
79
+ break;
80
+ }
81
+
82
+ // Apply compact mode multiplier
83
+ return {
84
+ ...baseTokens,
85
+ typography: {
86
+ scaleMultiplier: baseTokens.typography.scaleMultiplier * compactMultiplier,
87
+ lineHeightMultiplier: baseTokens.typography.lineHeightMultiplier * compactMultiplier,
88
+ },
89
+ spacing: {
90
+ scaleMultiplier: baseTokens.spacing.scaleMultiplier * compactMultiplier,
91
+ },
92
+ component: {
93
+ buttonHeight: Math.round(baseTokens.component.buttonHeight * compactMultiplier),
94
+ inputHeight: Math.round(baseTokens.component.inputHeight * compactMultiplier),
95
+ iconSize: Math.round(baseTokens.component.iconSize * compactMultiplier),
96
+ },
97
+ };
98
+ };
99
+
100
+ export interface DimensionsProviderProps {
101
+ children: React.ReactNode;
102
+ defaultCompactMode?: boolean;
103
+ }
104
+
105
+ export const DimensionsProvider: React.FC<DimensionsProviderProps> = ({
106
+ children,
107
+ defaultCompactMode = false,
108
+ }) => {
109
+ const [screenSize, setScreenSize] = useState<'mobile' | 'tablet' | 'desktop'>('desktop');
110
+ const [isCompact, setIsCompact] = useState(defaultCompactMode);
111
+
112
+ // Detect screen size
113
+ useEffect(() => {
114
+ const updateScreenSize = () => {
115
+ const width = window.innerWidth;
116
+ if (width < 768) {
117
+ setScreenSize('mobile');
118
+ } else if (width < 1024) {
119
+ setScreenSize('tablet');
120
+ } else {
121
+ setScreenSize('desktop');
122
+ }
123
+ };
124
+
125
+ updateScreenSize();
126
+ window.addEventListener('resize', updateScreenSize);
127
+ return () => window.removeEventListener('resize', updateScreenSize);
128
+ }, []);
129
+
130
+ const tokens = getDefaultTokens(screenSize, isCompact);
131
+
132
+ const contextValue: DimensionsContextValue = {
133
+ tokens,
134
+ screenSize,
135
+ isCompact,
136
+ setCompactMode: setIsCompact,
137
+ };
138
+
139
+ return (
140
+ <DimensionsContext.Provider value={contextValue}>
141
+ {children}
142
+ </DimensionsContext.Provider>
143
+ );
144
+ };
145
+
146
+ export const useDimensions = (): DimensionsContextValue => {
147
+ const context = useContext(DimensionsContext);
148
+ if (context === undefined) {
149
+ throw new Error('useDimensions must be used within a DimensionsProvider');
150
+ }
151
+ return context;
152
+ };
153
+
154
+ export default DimensionsProvider;
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Palette Context - Manages color palette state and switching
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';
8
+ import { AllPalettes } from '../palettes';
9
+ import {
10
+ loadUserPalettePreference,
11
+ saveUserPalettePreference,
12
+ clearUserPalettePreference
13
+ } from '../utils/persistenceUtils';
14
+
15
+ // Type definitions
16
+ export interface PaletteConfig {
17
+ id: string;
18
+ name: string;
19
+ description: string;
20
+ primaryColor: string;
21
+ }
22
+
23
+ export interface PaletteContextValue {
24
+ /** The palette currently being applied to the UI (resolved from preferred/default) */
25
+ currentPalette: string;
26
+ /** The user's preferred palette setting, or null if not set */
27
+ preferredPalette: string | null;
28
+ /** List of all available palettes */
29
+ availablePalettes: PaletteConfig[];
30
+ /** Whether preferences are persisted to localStorage */
31
+ isPersistent: boolean;
32
+
33
+ // Palette preference management
34
+ /** Set user's preferred palette (saves to localStorage if persistent) */
35
+ setPreferredPalette: (paletteId: string) => void;
36
+ /** Clear user's preferred palette (removes from localStorage) */
37
+ clearPreferredPalette: () => void;
38
+ /** Get user's preferred palette */
39
+ getPreferredPalette: () => string | null;
40
+
41
+ // Current palette management (for admin/preview overrides)
42
+ /** Get currently applied palette */
43
+ getCurrentPalette: () => string;
44
+ /** Temporarily override current palette (does not affect user preference) */
45
+ setCurrentPalette: (paletteId: string) => void;
46
+ }
47
+
48
+ export interface PaletteProviderProps {
49
+ children: ReactNode;
50
+ /**
51
+ * App identifier for generating unique storage key, or persistence strategy.
52
+ * - string: Use as app identifier to generate key 'appId.palette'
53
+ * - true (default): Use default key 'qwickapps-react-framework-palette'
54
+ * - false: Disable persistence (session-only)
55
+ * @example 'com.mycompany.myapp' | true | false
56
+ */
57
+ appId?: string | true | false;
58
+ /**
59
+ * Default palette for the application when no user preference exists. The default is 'default'.
60
+ * This can be overridden by user settings.
61
+ * @example 'ocean' | 'autumn' | 'spring' | 'winter' | 'default'
62
+ */
63
+ defaultPalette?: string;
64
+ }
65
+
66
+ // Create context with proper typing
67
+ const PaletteContext = createContext<PaletteContextValue | null>(null);
68
+
69
+ export const usePalette = (): PaletteContextValue => {
70
+ const context = useContext(PaletteContext);
71
+ if (!context) {
72
+ throw new Error('usePalette must be used within a PaletteProvider');
73
+ }
74
+ return context;
75
+ };
76
+
77
+ // Use imported palette configurations
78
+ const AVAILABLE_PALETTES: PaletteConfig[] = AllPalettes;
79
+
80
+ /**
81
+ * Resolve the default palette ID based on user preference or fallback
82
+ * @param paletteId - The desired palette ID
83
+ * @param warn - Whether to issue a warning for invalid palette IDs
84
+ * @returns The resolved palette ID
85
+ */
86
+ const resolveDefaultPalette = (paletteId: string | undefined, warn = true): string => {
87
+ if (paletteId && AVAILABLE_PALETTES.some(p => p.id === paletteId)) {
88
+ return paletteId;
89
+ }
90
+ if (warn) {
91
+ console.warn(`[PaletteProvider] Invalid defaultPalette '${paletteId}'. Using 'default'.`);
92
+ }
93
+ return 'default';
94
+ };
95
+
96
+ export const PaletteProvider: React.FC<PaletteProviderProps> = ({
97
+ children,
98
+ appId,
99
+ defaultPalette = 'default'
100
+ }) => {
101
+ // Determine storage key based on appId
102
+ const actualStorageKey = React.useMemo(() => {
103
+ if (appId === false) {
104
+ return null; // No persistence
105
+ }
106
+
107
+ if (typeof appId === 'string') {
108
+ return `${appId}.palette`;
109
+ }
110
+
111
+ // appId is true or undefined - use default key with warning
112
+ const defaultKey = 'qwickapps-react-framework-palette';
113
+ console.warn(
114
+ `[PaletteProvider] Using default storage key '${defaultKey}'. ` +
115
+ `Consider providing an appId for production apps to avoid conflicts. ` +
116
+ `Example: <PaletteProvider appId="com.mycompany.myapp">`
117
+ );
118
+
119
+ return defaultKey;
120
+ }, [appId]);
121
+
122
+ // Available palette IDs for validation
123
+ const availablePaletteIds = AVAILABLE_PALETTES.map(p => p.id);
124
+
125
+ // User's preferred palette (what they explicitly chose)
126
+ const [preferredPalette, setPreferredPaletteState] = useState<string | null>(() => {
127
+ return loadUserPalettePreference(actualStorageKey, availablePaletteIds);
128
+ });
129
+
130
+ // Current palette being applied (resolved from preferred/default)
131
+ const [currentPalette, setCurrentPaletteState] = useState<string>(() => {
132
+ const userPreference = loadUserPalettePreference(actualStorageKey, availablePaletteIds);
133
+ return userPreference || resolveDefaultPalette(defaultPalette);
134
+ });
135
+
136
+ // Apply palette to document root immediately and on changes
137
+ useEffect(() => {
138
+ if (typeof document !== 'undefined') {
139
+ document.documentElement.setAttribute('data-palette', currentPalette);
140
+
141
+ // Dispatch custom event to notify theme system (with small delay to ensure CSS is applied)
142
+ setTimeout(() => {
143
+ const event = new CustomEvent('palette-changed', {
144
+ detail: { palette: currentPalette }
145
+ });
146
+ window.dispatchEvent(event);
147
+ }, 50);
148
+ }
149
+ }, [currentPalette]);
150
+
151
+ // Note: We no longer automatically save to localStorage on every change
152
+ // localStorage is only updated via setPreferredPalette() method
153
+
154
+ // Palette preference management methods
155
+ const setPreferredPalette = (paletteId: string): void => {
156
+ const targetPalette = AVAILABLE_PALETTES.find(p => p.id === paletteId);
157
+ if (targetPalette) {
158
+ setPreferredPaletteState(paletteId);
159
+ setCurrentPaletteState(paletteId);
160
+ saveUserPalettePreference(actualStorageKey, paletteId);
161
+ } else {
162
+ console.warn(`Palette "${paletteId}" not found. Available palettes:`, AVAILABLE_PALETTES.map(p => p.id));
163
+ }
164
+ };
165
+
166
+ const clearPreferredPalette = (): void => {
167
+ setPreferredPaletteState(null);
168
+ clearUserPalettePreference(actualStorageKey);
169
+
170
+ // Reset to default palette
171
+ const fallbackPalette = resolveDefaultPalette(defaultPalette, false);
172
+ setCurrentPaletteState(fallbackPalette);
173
+ };
174
+
175
+ const getPreferredPalette = (): string | null => {
176
+ return preferredPalette;
177
+ };
178
+
179
+ // Current palette management methods (for admin/preview overrides)
180
+ const getCurrentPalette = (): string => {
181
+ return currentPalette;
182
+ };
183
+
184
+ const setCurrentPalette = (paletteId: string): void => {
185
+ const targetPalette = AVAILABLE_PALETTES.find(p => p.id === paletteId);
186
+ if (targetPalette) {
187
+ setCurrentPaletteState(paletteId);
188
+ // Note: This does NOT update preferredPalette or localStorage
189
+ } else {
190
+ console.warn(`Palette "${paletteId}" not found. Available palettes:`, AVAILABLE_PALETTES.map(p => p.id));
191
+ }
192
+ };
193
+
194
+ const value: PaletteContextValue = {
195
+ currentPalette,
196
+ preferredPalette,
197
+ availablePalettes: AVAILABLE_PALETTES,
198
+ isPersistent: actualStorageKey !== null,
199
+
200
+ // Palette preference management
201
+ setPreferredPalette,
202
+ clearPreferredPalette,
203
+ getPreferredPalette,
204
+
205
+ // Current palette management
206
+ getCurrentPalette,
207
+ setCurrentPalette,
208
+ };
209
+
210
+ return (
211
+ <PaletteContext.Provider value={value}>
212
+ {children}
213
+ </PaletteContext.Provider>
214
+ );
215
+ };
216
+
217
+ export default PaletteProvider;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * QwickApp Context - Application-level context for QwickApp configuration
3
+ *
4
+ * Provides app-level state and configuration that can be accessed by components
5
+ * within the QwickApp provider hierarchy.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+
10
+ import React from 'react';
11
+ import type { MenuItem } from '../components/menu';
12
+ import type { ScaffoldProps } from '../components/Scaffold';
13
+
14
+ export interface QwickAppProps {
15
+ /** Application name displayed in header/title */
16
+ appName: string;
17
+ /** Custom logo component - overrides the default logo */
18
+ logo?: React.ReactNode;
19
+ /** App identifier used for storage keys */
20
+ appId?: string | true | false;
21
+ /** Application version string */
22
+ appVersion?: string;
23
+ /** Theme mode preference (light/dark/auto) */
24
+ defaultTheme?: 'light' | 'dark' | 'system';
25
+ /** Default palette to use */
26
+ defaultPalette?: string;
27
+ /** Enable scaffolding with navigation system (default: false) */
28
+ enableScaffolding?: boolean;
29
+ /** Primary navigation items for scaffolding */
30
+ navigationItems?: MenuItem[];
31
+ /** App bar configuration for scaffolding */
32
+ appBar?: ScaffoldProps['appBar'];
33
+ /** Whether to show app bar when scaffolding is enabled (default: true) */
34
+ showAppBar?: boolean;
35
+ /** Custom app bar height when scaffolding is enabled */
36
+ appBarHeight?: number;
37
+ /** Whether to show theme switcher in app bar (default: false) */
38
+ showThemeSwitcher?: boolean;
39
+ /** Whether to show palette switcher in app bar (default: false) */
40
+ showPaletteSwitcher?: boolean;
41
+ /** Callback when logo is clicked */
42
+ onLogoClick?: () => void;
43
+ }
44
+
45
+ export interface QwickAppContextValue {
46
+ /** Application name */
47
+ appName: string;
48
+ /** Custom logo component */
49
+ logo?: React.ReactNode;
50
+ /** App identifier used for storage keys */
51
+ appId?: string | true | false;
52
+ /** Whether scaffolding is enabled */
53
+ enableScaffolding: boolean;
54
+ /** Navigation items for scaffolding */
55
+ navigationItems: MenuItem[];
56
+ /** App bar configuration */
57
+ appBar?: ScaffoldProps['appBar'];
58
+ /** Whether to show app bar */
59
+ showAppBar: boolean;
60
+ /** App bar height */
61
+ appBarHeight: number;
62
+ /** Whether to show theme switcher in app bar */
63
+ showThemeSwitcher: boolean;
64
+ /** Whether to show palette switcher in app bar */
65
+ showPaletteSwitcher: boolean;
66
+ /** Callback when logo is clicked */
67
+ onLogoClick?: () => void;
68
+ /** Update app configuration (excludes appName and appId for security) */
69
+ updateConfig: (updates: Partial<Pick<QwickAppProps, 'logo' | 'enableScaffolding' | 'navigationItems' | 'appBar' | 'showAppBar' | 'appBarHeight' | 'showThemeSwitcher' | 'showPaletteSwitcher'>>) => void;
70
+ // Navigation removed - now handled by AuthProvider when routing needed
71
+ }
72
+
73
+ const QwickAppContext = React.createContext<QwickAppContextValue>({
74
+ appName: 'QwickApps',
75
+ logo: undefined,
76
+ appId: true,
77
+ enableScaffolding: false,
78
+ navigationItems: [],
79
+ appBar: undefined,
80
+ showAppBar: true,
81
+ appBarHeight: 64,
82
+ showThemeSwitcher: false,
83
+ showPaletteSwitcher: false,
84
+ updateConfig: () => {},
85
+ });
86
+
87
+ export { QwickAppContext };
88
+
89
+ export const useQwickApp = (): QwickAppContextValue => {
90
+ const context = React.useContext(QwickAppContext);
91
+ if (!context) {
92
+ throw new Error('useQwickApp must be used within a QwickApp provider');
93
+ }
94
+ return context;
95
+ };