@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,452 @@
1
+ /**
2
+ * Data Binding System - Storybook Stories
3
+ *
4
+ * Demonstrates the AI-driven data-binding component system that enables
5
+ * components to be configured through CMS data rather than hardcoded props.
6
+ *
7
+ * This is the foundation for AI agents to automatically generate both
8
+ * content and presentation for web applications.
9
+ *
10
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
11
+ */
12
+
13
+ import { Card, Typography } from '@mui/material';
14
+ import { JsonDataProvider } from '@qwickapps/schema';
15
+ import type { Meta, StoryObj } from '@storybook/react';
16
+ import { Code, GridLayout, SafeSpan, Section } from '../components';
17
+ import { DataProvider } from '../contexts';
18
+
19
+ // Sample CMS data for demonstrations - using dotted notation for testing JsonDataProvider conversion
20
+ const sampleCmsData = {
21
+ // Company information
22
+ 'company.tagline': {
23
+ html: '<h1>Build Apps <em>Faster</em> with <strong>QwickApps</strong></h1>',
24
+ placeholder: 'Loading company tagline...'
25
+ },
26
+ 'company.description': {
27
+ html: '<p>QwickApps React Framework provides a comprehensive set of tools and components to help developers create high-quality applications with <strong>minimal effort</strong> and <em>maximum efficiency</em>.</p>',
28
+ placeholder: 'Loading company description...'
29
+ },
30
+
31
+ // Page content
32
+ 'pages.home.hero-subtitle': {
33
+ html: '<p class="subtitle">The complete solution for modern web development</p>',
34
+ placeholder: 'Loading hero subtitle...'
35
+ },
36
+ 'pages.about.mission': {
37
+ html: '<p>Our mission is to <strong>empower developers</strong> with tools that make app development accessible, efficient, and enjoyable.</p>',
38
+ placeholder: 'Loading mission statement...'
39
+ },
40
+
41
+ // Feature descriptions
42
+ 'features.responsive-design': {
43
+ html: '<p>Built-in responsive design patterns that work seamlessly across all devices and screen sizes.</p>',
44
+ placeholder: 'Loading responsive features...'
45
+ },
46
+ 'features.performance': {
47
+ html: '<p>Optimized rendering and caching strategies ensure your applications run fast and efficiently at scale.</p>',
48
+ placeholder: 'Loading performance features...'
49
+ },
50
+
51
+ // Marketing content
52
+ 'marketing.cta': {
53
+ html: '<p><strong>Get started today</strong> and experience the future of app development!</p>',
54
+ placeholder: 'Loading call-to-action...'
55
+ },
56
+
57
+ // User testimonials
58
+ 'testimonials.developer': {
59
+ html: '<blockquote><p>"QwickApps has <em>revolutionized</em> our development workflow. We ship features <strong>3x faster</strong> now."</p><cite>- Sarah Chen, Senior Developer</cite></blockquote>',
60
+ placeholder: 'Loading testimonial...'
61
+ },
62
+
63
+ // Empty content for fallback testing
64
+ 'empty.content': {},
65
+
66
+ // Content with only placeholder
67
+ 'placeholder.only': {
68
+ placeholder: 'This content is coming soon...'
69
+ }
70
+ };
71
+
72
+ // Create data provider
73
+ const dataProvider = new JsonDataProvider({ data: sampleCmsData });
74
+
75
+ const meta: Meta<typeof SafeSpan> = {
76
+ title: 'Framework/Data Binding',
77
+ component: SafeSpan,
78
+ parameters: {
79
+ layout: 'padded',
80
+ docs: {
81
+ description: {
82
+ component: `
83
+ # Data Binding System
84
+
85
+ The QwickApps Data Binding System enables dynamic component configuration through CMS data.
86
+ Instead of hardcoding props, components can resolve their content from data sources with
87
+ automatic validation and type safety.
88
+
89
+ ## Key Concepts
90
+
91
+ **Traditional Approach:**
92
+ \`\`\`jsx
93
+ <SafeSpan html="<p>Hardcoded content</p>" placeholder="Hardcoded placeholder" />
94
+ \`\`\`
95
+
96
+ **Data-Driven Approach:**
97
+ \`\`\`jsx
98
+ <SafeSpan dataSource="company.description" />
99
+ \`\`\`
100
+
101
+ ## Component Schema
102
+
103
+ Each data-driven component has a schema that defines:
104
+ - Field types (using ContentTypes.FieldType enum)
105
+ - Validation rules
106
+ - Content editor instructions
107
+ - Usage examples
108
+
109
+ ## Data Source Syntax
110
+
111
+ Data sources use dot notation to reference nested data:
112
+ - \`company.tagline\` - Company tagline content
113
+ - \`pages.home.hero-block\` - Home page hero block
114
+ - \`features.responsive-design\` - Feature descriptions
115
+
116
+ ## Benefits
117
+
118
+ The data binding system provides:
119
+ 1. Clear separation between content and presentation
120
+ 2. Runtime validation of content data
121
+ 3. Flexible fallback mechanisms
122
+ 4. Type-safe component configuration
123
+ 5. Consistent CMS integration patterns
124
+ `
125
+ }
126
+ }
127
+ },
128
+ decorators: [
129
+ (Story) => (
130
+ <DataProvider dataSource={{ dataProvider }}>
131
+ <Story />
132
+ </DataProvider>
133
+ )
134
+ ]
135
+ };
136
+
137
+ export default meta;
138
+ type Story = StoryObj<typeof meta>;
139
+
140
+ // Basic Examples
141
+ export const CompanyTagline: Story = {
142
+ render: () => (
143
+ <Section>
144
+ <Typography variant="h4">Company Tagline</Typography>
145
+ <Typography variant="body1" gutterBottom>
146
+ Company tagline loaded from CMS data with rich HTML formatting.
147
+ </Typography>
148
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
149
+ <SafeSpan dataSource="company.tagline" />
150
+ </Card>
151
+ <Code title="Usage">{`<SafeSpan dataSource="company.tagline" />`}</Code>
152
+ <Code title="CMS Data">{`'company.tagline': [
153
+ {
154
+ html: '<h1>Build Apps <em>Faster</em> with <strong>QwickApps</strong></h1>',
155
+ placeholder: 'Loading company tagline...'
156
+ }
157
+ ]`}</Code>
158
+ </Section>
159
+ ),
160
+ parameters: {
161
+ docs: {
162
+ description: {
163
+ story: 'Company tagline loaded from CMS data with rich HTML formatting.'
164
+ }
165
+ }
166
+ }
167
+ };
168
+
169
+ export const CompanyDescription: Story = {
170
+ render: () => (
171
+ <Section>
172
+ <Typography variant="h4">Company Description</Typography>
173
+ <Typography variant="body1" gutterBottom>
174
+ Detailed company description with emphasis and strong text formatting.
175
+ </Typography>
176
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
177
+ <SafeSpan dataSource="company.description" />
178
+ </Card>
179
+ <Code title="Usage">{`<SafeSpan dataSource="company.description" />`}</Code>
180
+ <Code title="CMS Data">{`'company.description': [
181
+ {
182
+ html: '<p>QwickApps React Framework provides comprehensive tools with <strong>minimal effort</strong> and <em>maximum efficiency</em>.</p>',
183
+ placeholder: 'Loading company description...'
184
+ }
185
+ ]`}</Code>
186
+ </Section>
187
+ ),
188
+ parameters: {
189
+ docs: {
190
+ description: {
191
+ story: 'Detailed company description with emphasis and strong text formatting.'
192
+ }
193
+ }
194
+ }
195
+ };
196
+
197
+ export const HeroSubtitle: Story = {
198
+ render: () => (
199
+ <Section>
200
+ <Typography variant="h4">Hero Subtitle</Typography>
201
+ <Typography variant="body1" gutterBottom>
202
+ Page-specific content with custom CSS classes from CMS.
203
+ </Typography>
204
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
205
+ <SafeSpan dataSource="pages.home.hero-subtitle" />
206
+ </Card>
207
+ <Code title="Usage">{`<SafeSpan dataSource="pages.home.hero-subtitle" />`}</Code>
208
+ <Code title="CMS Data">{`'pages.home.hero-subtitle': [
209
+ {
210
+ html: '<p class="subtitle">The complete solution for modern web development</p>',
211
+ placeholder: 'Loading hero subtitle...'
212
+ }
213
+ ]`}</Code>
214
+ </Section>
215
+ ),
216
+ parameters: {
217
+ docs: {
218
+ description: {
219
+ story: 'Page-specific content with custom CSS classes from CMS.'
220
+ }
221
+ }
222
+ }
223
+ };
224
+
225
+ // Comparison Stories
226
+ export const TraditionalVsDataDriven: Story = {
227
+ render: () => (
228
+ <Section>
229
+ <Typography variant="h4">Traditional vs Data-Driven Approach</Typography>
230
+ <Typography variant="body1" gutterBottom>
231
+ Side-by-side comparison showing traditional hardcoded props vs data-driven approach.
232
+ </Typography>
233
+
234
+ <GridLayout columns={2} spacing="large">
235
+ <div>
236
+ <Typography variant="h6">Traditional Approach (Hardcoded Props)</Typography>
237
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#fff3cd' }}>
238
+ <SafeSpan
239
+ html="<p>This content is <strong>hardcoded</strong> in the component props.</p>"
240
+ placeholder="Hardcoded placeholder"
241
+ />
242
+ </Card>
243
+ </div>
244
+
245
+ <div>
246
+ <Typography variant="h6">Data-Driven Approach (CMS Data)</Typography>
247
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#d4edda' }}>
248
+ <SafeSpan dataSource="features.responsive-design" />
249
+ </Card>
250
+ </div>
251
+ </GridLayout>
252
+
253
+ <Code title="Traditional Approach">{`<SafeSpan
254
+ html="<p>This content is <strong>hardcoded</strong>...</p>"
255
+ placeholder="Hardcoded placeholder"
256
+ />`}</Code>
257
+
258
+ <Code title="Data-Driven Approach">{`<SafeSpan dataSource="features.responsive-design" />`}</Code>
259
+ </Section>
260
+ ),
261
+ parameters: {
262
+ docs: {
263
+ description: {
264
+ story: 'Side-by-side comparison showing traditional hardcoded props vs data-driven approach.'
265
+ }
266
+ }
267
+ }
268
+ };
269
+
270
+ // Fallback and Error Handling
271
+ export const FallbackBehavior: Story = {
272
+ render: () => (
273
+ <Section>
274
+ <Typography variant="h4">Fallback and Error Handling</Typography>
275
+ <Typography variant="body1" gutterBottom>
276
+ Demonstrates how the system handles missing, empty, or invalid data sources.
277
+ </Typography>
278
+
279
+ <GridLayout spacing="large">
280
+ <div>
281
+ <Typography variant="h6">Empty Content (Uses Fallback Props)</Typography>
282
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
283
+ <SafeSpan
284
+ dataSource="empty.content"
285
+ html="<p>This is <strong>fallback content</strong> when CMS data is empty.</p>"
286
+ placeholder="Fallback placeholder"
287
+ />
288
+ </Card>
289
+ </div>
290
+
291
+ <div>
292
+ <Typography variant="h6">Placeholder Only Content</Typography>
293
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
294
+ <SafeSpan dataSource="placeholder.only" />
295
+ </Card>
296
+ </div>
297
+
298
+ <div>
299
+ <Typography variant="h6">Non-existent Data Source</Typography>
300
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
301
+ <SafeSpan
302
+ dataSource="nonexistent.data"
303
+ placeholder="This placeholder shows when data source doesn't exist"
304
+ />
305
+ </Card>
306
+ </div>
307
+ </GridLayout>
308
+
309
+ <Code title="Fallback with Props">{`<SafeSpan
310
+ dataSource="empty.content"
311
+ html="<p>This is <strong>fallback content</strong> when CMS data is empty.</p>"
312
+ placeholder="Fallback placeholder"
313
+ />`}</Code>
314
+
315
+ <Code title="Placeholder Only">{`<SafeSpan dataSource="placeholder.only" />`}</Code>
316
+
317
+ <Code title="Non-existent Data Source">{`<SafeSpan
318
+ dataSource="nonexistent.data"
319
+ placeholder="This placeholder shows when data source doesn't exist"
320
+ />`}</Code>
321
+ </Section>
322
+ ),
323
+ parameters: {
324
+ docs: {
325
+ description: {
326
+ story: 'Demonstrates how the system handles missing, empty, or invalid data sources.'
327
+ }
328
+ }
329
+ }
330
+ };
331
+
332
+ // Real-world Use Cases
333
+ export const MarketingContent: Story = {
334
+ render: () => (
335
+ <Section>
336
+ <Typography variant="h4">Marketing Content</Typography>
337
+ <Typography variant="body1" gutterBottom>
338
+ Marketing content including call-to-action and user testimonials.
339
+ </Typography>
340
+
341
+ <GridLayout spacing="large">
342
+ <Card variant="outlined" style={{ padding: '1rem', backgroundColor: '#f8f9fa' }}>
343
+ <SafeSpan dataSource="marketing.cta" />
344
+ </Card>
345
+ <Card variant="outlined" style={{ padding: '1rem', backgroundColor: '#f8f9fa' }}>
346
+ <SafeSpan dataSource="testimonials.developer" />
347
+ </Card>
348
+ </GridLayout>
349
+
350
+ <Code title="Call to Action">{`<SafeSpan dataSource="marketing.cta" />`}</Code>
351
+ <Code title="User Testimonial">{`<SafeSpan dataSource="testimonials.developer" />`}</Code>
352
+ </Section>
353
+ ),
354
+ parameters: {
355
+ docs: {
356
+ description: {
357
+ story: 'Marketing content including call-to-action and user testimonials.'
358
+ }
359
+ }
360
+ }
361
+ };
362
+
363
+ export const FeatureDescriptions: Story = {
364
+ render: () => (
365
+ <Section>
366
+ <Typography variant="h4">Feature Descriptions</Typography>
367
+ <Typography variant="body1" gutterBottom>
368
+ Feature descriptions loaded from CMS, perfect for product pages.
369
+ </Typography>
370
+
371
+ <GridLayout spacing="large">
372
+ <div>
373
+ <Typography variant="h6">Responsive Design</Typography>
374
+ <Card variant="outlined" style={{ padding: '1rem', backgroundColor: '#f8f9fa' }}>
375
+ <SafeSpan dataSource="features.responsive-design" />
376
+ </Card>
377
+ </div>
378
+
379
+ <div>
380
+ <Typography variant="h6">Performance Optimization</Typography>
381
+ <Card variant="outlined" style={{ padding: '1rem', backgroundColor: '#f8f9fa' }}>
382
+ <SafeSpan dataSource="features.performance" />
383
+ </Card>
384
+ </div>
385
+ </GridLayout>
386
+
387
+ <Code title="Responsive Design Features">{`<SafeSpan dataSource="features.responsive-design" />`}</Code>
388
+ <Code title="Performance Features">{`<SafeSpan dataSource="features.performance" />`}</Code>
389
+ </Section>
390
+ ),
391
+ parameters: {
392
+ docs: {
393
+ description: {
394
+ story: 'Feature descriptions loaded from CMS, perfect for product pages.'
395
+ }
396
+ }
397
+ }
398
+ };
399
+
400
+ // Schema Information
401
+ export const ComponentSchemaInfo: Story = {
402
+ render: () => (
403
+ <Section>
404
+ <Typography variant="h4">Component Schema System</Typography>
405
+ <Typography variant="body1" gutterBottom>
406
+ Component schemas define data structure requirements for data-driven components with validation and type safety.
407
+ </Typography>
408
+
409
+ <Card variant="outlined" style={{ padding: '1rem', marginBottom: '1rem', backgroundColor: '#f8f9fa' }}>
410
+ <Typography variant="h6" gutterBottom>Schema Benefits:</Typography>
411
+ <ul>
412
+ <li><strong>Field Types:</strong> Defines whether content should be text, textarea, etc.</li>
413
+ <li><strong>Validation:</strong> Ensures content meets component requirements</li>
414
+ <li><strong>Editor Instructions:</strong> Guides content editors with context</li>
415
+ <li><strong>Usage Examples:</strong> Shows proper dataSource syntax</li>
416
+ <li><strong>Type Safety:</strong> Runtime validation of CMS data</li>
417
+ </ul>
418
+ </Card>
419
+
420
+ <Code title="SafeSpan Component Schema" language="json">
421
+ {JSON.stringify(undefined, null, 2)}
422
+ </Code>
423
+
424
+ <Code title="Schema Usage in Component">{`import { toDataSchema, createFieldMapping } from '../utils/toDataSchema';
425
+
426
+ const schema = toDataSchema<SafeSpanProps>({
427
+ componentName: 'SafeSpan',
428
+ description: 'Safely renders HTML content with automatic sanitization',
429
+ usageExamples: [
430
+ '<SafeSpan dataSource="company.description" />',
431
+ '<SafeSpan dataSource="pages.home.tagline" />'
432
+ ]
433
+ }, {
434
+ html: createFieldMapping.richText({
435
+ required: false,
436
+ instructions: 'HTML content to display safely'
437
+ }),
438
+ placeholder: createFieldMapping.text({
439
+ required: false,
440
+ instructions: 'Text to show when no content is available'
441
+ })
442
+ });`}</Code>
443
+ </Section>
444
+ ),
445
+ parameters: {
446
+ docs: {
447
+ description: {
448
+ story: 'Component schema system that enables type-safe data binding with runtime validation and CMS integration.'
449
+ }
450
+ }
451
+ }
452
+ };