@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,591 @@
1
+ /**
2
+ * ChoiceInputField Component Stories - Dynamic options management with data binding support
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ import { Box, Typography, Alert } from '@mui/material';
8
+ import { JsonDataProvider } from '@qwickapps/schema';
9
+ import type { Meta, StoryObj } from '@storybook/react';
10
+ import { Code } from '../components/blocks';
11
+ import ChoiceInputField from '../components/input/ChoiceInputField';
12
+ import QwickApp from '../components/QwickApp';
13
+ import { useState } from 'react';
14
+
15
+ // Sample choice input field data for different use cases
16
+ const sampleCmsData = {
17
+ 'choiceInputFields': {
18
+ 'poll-question': {
19
+ label: 'Poll Options',
20
+ options: [
21
+ 'Strongly Agree',
22
+ 'Agree',
23
+ 'Neutral',
24
+ 'Disagree',
25
+ 'Strongly Disagree'
26
+ ],
27
+ optionLabelPrefix: 'Choice',
28
+ placeholder: 'Enter poll option...',
29
+ addButtonText: 'Add Poll Option',
30
+ rows: 1
31
+ },
32
+ 'quiz-answers': {
33
+ label: 'Quiz Answer Options',
34
+ options: [
35
+ '<b>JavaScript</b> - A programming language',
36
+ '<i>Python</i> - Another programming language',
37
+ '<code>HTML</code> - Markup language',
38
+ '<u>CSS</u> - Styling language'
39
+ ],
40
+ optionLabelPrefix: 'Answer',
41
+ placeholder: 'Enter quiz answer with HTML formatting...',
42
+ addButtonText: 'Add Answer',
43
+ rows: 2
44
+ },
45
+ 'feature-requests': {
46
+ label: 'Feature Request Categories',
47
+ options: [
48
+ '<b>🚀 Performance</b><br/>Speed and optimization improvements',
49
+ '<b>🎨 UI/UX</b><br/>Interface and experience enhancements',
50
+ '<b>⚙️ Functionality</b><br/>New features and capabilities',
51
+ '<b>🔧 Bug Fixes</b><br/>Issues and error corrections'
52
+ ],
53
+ optionLabelPrefix: 'Category',
54
+ placeholder: 'Describe feature category with HTML...',
55
+ addButtonText: 'Add Category',
56
+ rows: 3
57
+ },
58
+ 'product-benefits': {
59
+ label: 'Product Benefits',
60
+ options: [
61
+ '⚡ <b>Lightning Fast</b> - Optimized for speed',
62
+ '🔒 <i>Secure by Design</i> - Built with security first',
63
+ '📱 <u>Mobile Responsive</u> - Works on all devices'
64
+ ],
65
+ optionLabelPrefix: 'Benefit',
66
+ placeholder: 'Describe product benefit...',
67
+ addButtonText: 'Add Benefit',
68
+ rows: 2
69
+ },
70
+ 'survey-responses': {
71
+ label: 'Survey Response Options',
72
+ options: [
73
+ 'Excellent',
74
+ 'Very Good',
75
+ 'Good',
76
+ 'Fair',
77
+ 'Poor'
78
+ ],
79
+ optionLabelPrefix: 'Response',
80
+ placeholder: 'Enter response option...',
81
+ addButtonText: 'Add Response',
82
+ rows: 1
83
+ },
84
+ 'faq-categories': {
85
+ label: 'FAQ Categories',
86
+ options: [
87
+ '<b>Getting Started</b><br/>Basic setup and onboarding questions',
88
+ '<b>Account Management</b><br/>Profile, billing, and subscription questions',
89
+ '<b>Technical Support</b><br/>Technical issues and troubleshooting',
90
+ '<b>Features & Usage</b><br/>How to use specific features'
91
+ ],
92
+ optionLabelPrefix: 'Category',
93
+ placeholder: 'Define FAQ category with description...',
94
+ addButtonText: 'Add FAQ Category',
95
+ rows: 3
96
+ },
97
+ 'menu-items': {
98
+ label: 'Navigation Menu Items',
99
+ options: [
100
+ 'Home',
101
+ 'About Us',
102
+ 'Services',
103
+ 'Contact'
104
+ ],
105
+ optionLabelPrefix: 'Menu Item',
106
+ placeholder: 'Enter menu item name...',
107
+ addButtonText: 'Add Menu Item',
108
+ rows: 1
109
+ },
110
+ 'pricing-tiers': {
111
+ label: 'Pricing Tier Options',
112
+ options: [
113
+ '<b>💎 Premium</b> - $99/month<br/><i>All features included</i>',
114
+ '<b>⚡ Pro</b> - $49/month<br/><i>Most popular plan</i>',
115
+ '<b>🌟 Starter</b> - $19/month<br/><i>Perfect for beginners</i>'
116
+ ],
117
+ optionLabelPrefix: 'Tier',
118
+ placeholder: 'Define pricing tier with details...',
119
+ addButtonText: 'Add Pricing Tier',
120
+ rows: 3
121
+ },
122
+ 'team-roles': {
123
+ label: 'Team Role Definitions',
124
+ options: [
125
+ '<b>👑 Project Manager</b><br/>Oversees project execution and team coordination',
126
+ '<b>💻 Senior Developer</b><br/>Leads technical development and code reviews'
127
+ ],
128
+ optionLabelPrefix: 'Role',
129
+ placeholder: 'Define team role and responsibilities...',
130
+ addButtonText: 'Add Team Role',
131
+ rows: 3
132
+ },
133
+ 'basic-options': {
134
+ label: 'Basic Options List',
135
+ options: [
136
+ 'Option A',
137
+ 'Option B'
138
+ ],
139
+ optionLabelPrefix: 'Option',
140
+ placeholder: 'Enter option...',
141
+ addButtonText: 'Add Option',
142
+ rows: 1
143
+ }
144
+ }
145
+ };
146
+
147
+ const dataProvider = new JsonDataProvider({ data: sampleCmsData });
148
+
149
+ const meta = {
150
+ title: 'Forms/ChoiceInputField',
151
+ component: ChoiceInputField,
152
+ parameters: {
153
+ layout: 'padded',
154
+ docs: {
155
+ description: {
156
+ component: `ChoiceInputField is a dynamic options management component with HTML formatting capabilities and data binding support for creating interactive choice lists.
157
+
158
+ **Key Features:**
159
+ - **Dynamic Options**: Add, edit, and manage multiple option inputs
160
+ - **HTML Formatting**: Each option supports rich HTML formatting through HtmlInputField
161
+ - **Flexible Configuration**: Customizable labels, placeholders, and button text
162
+ - **Data Binding**: Full CMS integration through dataSource prop
163
+ - **Interactive Management**: Built-in "Add Option" functionality for dynamic lists
164
+ - **Theme Integration**: Automatically uses QwickApp theme styling
165
+ - **Base Props**: Supports grid behavior and consistent styling patterns
166
+ - **Accessibility**: Complete ARIA support and keyboard navigation
167
+
168
+ **Perfect For:**
169
+ - Poll and survey question options
170
+ - Quiz and test answer choices
171
+ - Product feature lists and benefits
172
+ - FAQ category management
173
+ - Menu and navigation item creation
174
+ - Any dynamic list of formatted options`,
175
+ },
176
+ },
177
+ },
178
+ tags: ['autodocs'],
179
+ } satisfies Meta<typeof ChoiceInputField>;
180
+
181
+ export default meta;
182
+ type Story = StoryObj<typeof ChoiceInputField>;
183
+
184
+ // Interactive example component
185
+ function InteractiveChoiceExample({
186
+ initialOptions = ['Option 1', 'Option 2'],
187
+ label = 'Interactive Options',
188
+ optionLabelPrefix = 'Option'
189
+ }: {
190
+ initialOptions?: string[];
191
+ label?: string;
192
+ optionLabelPrefix?: string;
193
+ }) {
194
+ const [options, setOptions] = useState<string[]>(initialOptions);
195
+
196
+ const handleOptionChange = (optionIndex: number, value: string) => {
197
+ const newOptions = [...options];
198
+ newOptions[optionIndex] = value;
199
+ setOptions(newOptions);
200
+ console.log('Option changed:', { optionIndex, value, allOptions: newOptions });
201
+ };
202
+
203
+ const handleAddOption = () => {
204
+ setOptions([...options, '']);
205
+ console.log('Added new option, total:', options.length + 1);
206
+ };
207
+
208
+ return (
209
+ <ChoiceInputField
210
+ label={label}
211
+ options={options}
212
+ optionLabelPrefix={optionLabelPrefix}
213
+ onOptionChange={handleOptionChange}
214
+ onAddOption={handleAddOption}
215
+ placeholder="Enter option text. HTML formatting supported."
216
+ />
217
+ );
218
+ }
219
+
220
+ // Traditional Usage Examples
221
+ export const BasicChoices: Story = {
222
+ render: () => (
223
+ <QwickApp appId="choice-input-basic" appName='Basic Choice Input'>
224
+ <InteractiveChoiceExample
225
+ initialOptions={['First Option', 'Second Option']}
226
+ label="Basic Options List"
227
+ />
228
+ </QwickApp>
229
+ ),
230
+ parameters: {
231
+ docs: {
232
+ description: {
233
+ story: 'Basic choice input field with editable options and add functionality.',
234
+ },
235
+ },
236
+ },
237
+ };
238
+
239
+ export const PollOptions: Story = {
240
+ render: () => (
241
+ <QwickApp appId="choice-input-poll" appName='Poll Options'>
242
+ <InteractiveChoiceExample
243
+ initialOptions={[
244
+ 'Strongly Agree',
245
+ 'Agree',
246
+ 'Neutral',
247
+ 'Disagree',
248
+ 'Strongly Disagree'
249
+ ]}
250
+ label="Poll Question Options"
251
+ optionLabelPrefix="Choice"
252
+ />
253
+ </QwickApp>
254
+ ),
255
+ parameters: {
256
+ docs: {
257
+ description: {
258
+ story: 'Choice input configured for poll question options with standard survey responses.',
259
+ },
260
+ },
261
+ },
262
+ };
263
+
264
+ export const HtmlFormattedOptions: Story = {
265
+ render: () => (
266
+ <QwickApp appId="choice-input-html" appName='HTML Formatted Options'>
267
+ <InteractiveChoiceExample
268
+ initialOptions={[
269
+ '<b>JavaScript</b> - A programming language',
270
+ '<i>Python</i> - Another programming language',
271
+ '<code>HTML</code> - Markup language'
272
+ ]}
273
+ label="Quiz Answer Options"
274
+ optionLabelPrefix="Answer"
275
+ />
276
+ </QwickApp>
277
+ ),
278
+ parameters: {
279
+ docs: {
280
+ description: {
281
+ story: 'Choice input with HTML-formatted options for rich content like quiz answers.',
282
+ },
283
+ },
284
+ },
285
+ };
286
+
287
+ export const ProductFeatures: Story = {
288
+ render: () => (
289
+ <QwickApp appId="choice-input-features" appName='Product Features'>
290
+ <InteractiveChoiceExample
291
+ initialOptions={[
292
+ '⚡ <b>Lightning Fast</b> - Optimized for speed',
293
+ '🔒 <i>Secure by Design</i> - Built with security first',
294
+ '📱 <u>Mobile Responsive</u> - Works on all devices'
295
+ ]}
296
+ label="Product Benefits"
297
+ optionLabelPrefix="Benefit"
298
+ />
299
+ </QwickApp>
300
+ ),
301
+ parameters: {
302
+ docs: {
303
+ description: {
304
+ story: 'Choice input for managing product features and benefits with icons and formatting.',
305
+ },
306
+ },
307
+ },
308
+ };
309
+
310
+ export const StaticDisplay: Story = {
311
+ render: () => (
312
+ <QwickApp appId="choice-input-static" appName='Static Choice Display'>
313
+ <ChoiceInputField
314
+ label="Read-only Options"
315
+ options={[
316
+ 'Option 1 (read-only)',
317
+ 'Option 2 (read-only)',
318
+ 'Option 3 (read-only)'
319
+ ]}
320
+ optionLabelPrefix="Item"
321
+ disabled={true}
322
+ // No onAddOption or onOptionChange = static display
323
+ />
324
+ </QwickApp>
325
+ ),
326
+ parameters: {
327
+ docs: {
328
+ description: {
329
+ story: 'Static choice input display without edit functionality for read-only scenarios.',
330
+ },
331
+ },
332
+ },
333
+ };
334
+
335
+ // Data Binding Examples
336
+ export const DataBindingBasic: Story = {
337
+ render: () => (
338
+ <QwickApp appId="choice-input-data-binding" appName='ChoiceInputField Data Binding' dataSource={{ dataProvider }}>
339
+ <Box>
340
+
341
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
342
+ <Typography variant="h5" gutterBottom>📊 Data-Driven Choice Options</Typography>
343
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
344
+ ChoiceInputField components can be completely driven by CMS data, loading options and configuration from your data source.
345
+ </Typography>
346
+
347
+ <Code title="Usage" language="tsx">{`<ChoiceInputField dataSource="choiceInputFields.poll-question" />`}</Code>
348
+
349
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.choiceInputFields['poll-question'], null, 2)}</Code>
350
+ </Box>
351
+
352
+ <ChoiceInputField dataSource="choiceInputFields.poll-question" />
353
+
354
+ </Box>
355
+ </QwickApp>
356
+ ),
357
+ parameters: {
358
+ docs: {
359
+ description: {
360
+ story: 'ChoiceInputField with data binding - options and configuration resolved from CMS data through dataSource.',
361
+ },
362
+ },
363
+ },
364
+ };
365
+
366
+ export const DataBindingAdvanced: Story = {
367
+ render: () => (
368
+ <QwickApp appId="choice-input-data-advanced" appName='Advanced ChoiceInputField Data Binding' dataSource={{ dataProvider }}>
369
+ <Box>
370
+
371
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
372
+ <Typography variant="h5" gutterBottom>🎯 Multiple Choice Types</Typography>
373
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
374
+ Different ChoiceInputField instances can load different option sets and configurations from separate data sources.
375
+ </Typography>
376
+ </Box>
377
+
378
+ {/* Survey & Polls */}
379
+ <Box sx={{ mb: 4 }}>
380
+ <Typography variant="h4" gutterBottom>Surveys & Polls</Typography>
381
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
382
+ <ChoiceInputField dataSource="choiceInputFields.poll-question" />
383
+ <ChoiceInputField dataSource="choiceInputFields.survey-responses" />
384
+ </Box>
385
+ </Box>
386
+
387
+ {/* Content Management */}
388
+ <Box sx={{ mb: 4 }}>
389
+ <Typography variant="h4" gutterBottom>Content & Learning</Typography>
390
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
391
+ <ChoiceInputField dataSource="choiceInputFields.quiz-answers" />
392
+ <ChoiceInputField dataSource="choiceInputFields.faq-categories" />
393
+ </Box>
394
+ </Box>
395
+
396
+ {/* Business Configuration */}
397
+ <Box sx={{ mb: 4 }}>
398
+ <Typography variant="h4" gutterBottom>Business & Product</Typography>
399
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
400
+ <ChoiceInputField dataSource="choiceInputFields.feature-requests" />
401
+ <ChoiceInputField dataSource="choiceInputFields.pricing-tiers" />
402
+ </Box>
403
+ </Box>
404
+
405
+ </Box>
406
+ </QwickApp>
407
+ ),
408
+ parameters: {
409
+ docs: {
410
+ description: {
411
+ story: 'Advanced data binding with multiple choice types showcasing different configurations and use cases.',
412
+ },
413
+ },
414
+ },
415
+ };
416
+
417
+ export const DataBindingWithFallback: Story = {
418
+ render: () => (
419
+ <QwickApp appId="choice-input-fallback" appName='ChoiceInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
420
+ <Box>
421
+
422
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
423
+ <Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
424
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
425
+ ChoiceInputField components gracefully handle missing data sources with fallback configurations.
426
+ </Typography>
427
+
428
+ <Code title="Fallback Usage" language="tsx">{`<ChoiceInputField
429
+ dataSource="nonexistent.field"
430
+ label="Fallback Options"
431
+ options={['Fallback 1', 'Fallback 2']}
432
+ optionLabelPrefix="Option"
433
+ />`}</Code>
434
+ </Box>
435
+
436
+ <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
437
+ <Box>
438
+ <Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
439
+ <ChoiceInputField
440
+ dataSource="nonexistent.field"
441
+ label="Fallback Options"
442
+ options={['Fallback Option 1', 'Fallback Option 2']}
443
+ optionLabelPrefix="Option"
444
+ />
445
+ </Box>
446
+ <Box>
447
+ <Typography variant="h6" gutterBottom>Valid Data Source</Typography>
448
+ <ChoiceInputField dataSource="choiceInputFields.poll-question" />
449
+ </Box>
450
+ </Box>
451
+
452
+ </Box>
453
+ </QwickApp>
454
+ ),
455
+ parameters: {
456
+ docs: {
457
+ description: {
458
+ story: 'ChoiceInputField with fallback options when dataSource is missing or unavailable.',
459
+ },
460
+ },
461
+ },
462
+ };
463
+
464
+ export const RealWorldExample: Story = {
465
+ render: () => (
466
+ <QwickApp appId="choice-input-real-world" appName='Real World ChoiceInputField Example' dataSource={{ dataProvider }}>
467
+ <Box>
468
+
469
+ {/* Survey Platform */}
470
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
471
+ <Typography variant="h3" gutterBottom>Survey & Polling Platform</Typography>
472
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
473
+ Create comprehensive surveys and polls with customizable response options
474
+ </Typography>
475
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
476
+ <ChoiceInputField dataSource="choiceInputFields.poll-question" />
477
+ <ChoiceInputField dataSource="choiceInputFields.survey-responses" />
478
+ </Box>
479
+ </Box>
480
+
481
+ {/* E-Learning System */}
482
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
483
+ <Typography variant="h3" gutterBottom>E-Learning & Assessment</Typography>
484
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
485
+ Build interactive quizzes and organize educational content effectively
486
+ </Typography>
487
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
488
+ <ChoiceInputField dataSource="choiceInputFields.quiz-answers" />
489
+ <ChoiceInputField dataSource="choiceInputFields.faq-categories" />
490
+ </Box>
491
+ </Box>
492
+
493
+ {/* Business Management */}
494
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
495
+ <Typography variant="h3" gutterBottom>Business Configuration</Typography>
496
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
497
+ Manage business features, pricing, and team structures dynamically
498
+ </Typography>
499
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
500
+ <ChoiceInputField dataSource="choiceInputFields.feature-requests" />
501
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4 }}>
502
+ <ChoiceInputField dataSource="choiceInputFields.pricing-tiers" />
503
+ <ChoiceInputField dataSource="choiceInputFields.team-roles" />
504
+ </Box>
505
+ </Box>
506
+ </Box>
507
+
508
+ {/* Website Management */}
509
+ <Box sx={{ p: 4, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 2 }}>
510
+ <Typography variant="h3" gutterBottom>Website & Content Management</Typography>
511
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
512
+ Manage website navigation, product features, and content categories
513
+ </Typography>
514
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 4, maxWidth: 1000 }}>
515
+ <ChoiceInputField dataSource="choiceInputFields.menu-items" />
516
+ <ChoiceInputField dataSource="choiceInputFields.product-benefits" />
517
+ </Box>
518
+ </Box>
519
+
520
+ </Box>
521
+ </QwickApp>
522
+ ),
523
+ parameters: {
524
+ docs: {
525
+ description: {
526
+ story: 'Real-world example showing ChoiceInputField in various contexts: surveys, e-learning, business management, and website administration.',
527
+ },
528
+ },
529
+ },
530
+ };
531
+
532
+ export const InteractiveDemo: Story = {
533
+ render: () => (
534
+ <QwickApp appId="choice-input-interactive" appName='Interactive ChoiceInputField Demo'>
535
+ <Box>
536
+
537
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
538
+ <Typography variant="h5" gutterBottom>🎮 Interactive Demo</Typography>
539
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
540
+ Try editing the options below. You can modify existing options or add new ones using the "Add Option" button.
541
+ </Typography>
542
+
543
+ <Alert severity="info" sx={{ mb: 3 }}>
544
+ <Typography variant="body2">
545
+ Each option supports HTML formatting. Try using <code>&lt;b&gt;</code>, <code>&lt;i&gt;</code>, <code>&lt;u&gt;</code>, or <code>&lt;code&gt;</code> tags!
546
+ </Typography>
547
+ </Alert>
548
+ </Box>
549
+
550
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 800 }}>
551
+ <InteractiveChoiceExample
552
+ initialOptions={[
553
+ '<b>Excellent</b> - Outstanding quality',
554
+ '<i>Very Good</i> - Above expectations',
555
+ 'Good - Meets expectations'
556
+ ]}
557
+ label="Customer Satisfaction Survey"
558
+ optionLabelPrefix="Rating"
559
+ />
560
+
561
+ <InteractiveChoiceExample
562
+ initialOptions={[
563
+ '🎯 <b>Marketing</b>',
564
+ '💻 <b>Development</b>',
565
+ '🎨 <b>Design</b>'
566
+ ]}
567
+ label="Department Selection"
568
+ optionLabelPrefix="Department"
569
+ />
570
+
571
+ <InteractiveChoiceExample
572
+ initialOptions={[
573
+ '<code>React</code> - UI Library',
574
+ '<code>TypeScript</code> - Type Safety'
575
+ ]}
576
+ label="Technology Stack"
577
+ optionLabelPrefix="Technology"
578
+ />
579
+ </Box>
580
+
581
+ </Box>
582
+ </QwickApp>
583
+ ),
584
+ parameters: {
585
+ docs: {
586
+ description: {
587
+ story: 'Interactive demonstration of ChoiceInputField functionality with real-time editing and HTML formatting.',
588
+ },
589
+ },
590
+ },
591
+ };