@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,498 @@
1
+ /**
2
+ * Button Component Stories - Enhanced action component with data binding support
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ import { Box, Typography } 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 { Button } from '../components/buttons/Button';
12
+ import QwickApp from '../components/QwickApp';
13
+
14
+ // Sample button data for different use cases
15
+ const sampleCmsData = {
16
+ 'buttons': {
17
+ 'hero-primary': {
18
+ label: 'Get Started Free',
19
+ variant: 'primary',
20
+ buttonSize: 'large',
21
+ href: '/signup'
22
+ },
23
+ 'hero-secondary': {
24
+ label: 'Watch Demo',
25
+ variant: 'outlined',
26
+ buttonSize: 'large'
27
+ },
28
+ 'feature-cta': {
29
+ label: 'Try Feature',
30
+ variant: 'primary',
31
+ buttonSize: 'small',
32
+ href: '/features/analytics'
33
+ },
34
+ 'download-button': {
35
+ label: 'Download Guide',
36
+ variant: 'secondary',
37
+ href: '/guide.pdf',
38
+ target: '_blank'
39
+ },
40
+ 'loading-button': {
41
+ label: 'Processing...',
42
+ variant: 'primary',
43
+ loading: true,
44
+ disabled: true
45
+ },
46
+ 'contact-sales': {
47
+ label: 'Contact Sales',
48
+ variant: 'outlined',
49
+ href: 'mailto:sales@example.com'
50
+ },
51
+ 'full-width': {
52
+ label: 'Get Started',
53
+ variant: 'primary',
54
+ fullWidth: true,
55
+ buttonSize: 'large'
56
+ },
57
+ 'disabled': {
58
+ label: 'Unavailable',
59
+ variant: 'outlined',
60
+ disabled: true
61
+ }
62
+ }
63
+ };
64
+
65
+ const dataProvider = new JsonDataProvider({ data: sampleCmsData });
66
+
67
+ const meta = {
68
+ title: 'Components/Button',
69
+ component: Button,
70
+ parameters: {
71
+ layout: 'padded',
72
+ docs: {
73
+ description: {
74
+ component: `Button is the enhanced action component for QwickApps React Framework with comprehensive features and data binding support.
75
+
76
+ **Key Features:**
77
+ - **Dual Purpose**: Works as both link (href) and button (onClick)
78
+ - **Loading States**: Built-in spinner and disabled state management
79
+ - **Icon Support**: Start and end icon placement with customization
80
+ - **Custom Variants**: Primary, secondary, outlined, text, and contained styles
81
+ - **Data Binding**: Full CMS integration through dataSource prop
82
+ - **Accessibility**: Complete ARIA support and keyboard navigation
83
+ - **Theme Integration**: Automatically uses QwickApp theme colors and styling
84
+ - **Base Props**: Supports grid behavior and consistent styling patterns
85
+ - **Flexible API**: Label prop for simple usage, children for complex content
86
+
87
+ **Perfect For:**
88
+ - Hero section calls-to-action and primary user flows
89
+ - Feature grid actions and secondary interactions
90
+ - Content block buttons and navigation elements
91
+ - Form submissions and interactive controls
92
+ - Any interactive element requiring consistent styling and behavior`,
93
+ },
94
+ },
95
+ },
96
+ tags: ['autodocs'],
97
+ } satisfies Meta<typeof Button>;
98
+
99
+ export default meta;
100
+ type Story = StoryObj<typeof Button>;
101
+
102
+ // Traditional Usage Examples
103
+ export const Primary: Story = {
104
+ render: () => (
105
+ <QwickApp appId="button-primary" appName='Primary Button'>
106
+ <Button
107
+ label="Get Started"
108
+ variant="primary"
109
+ onClick={() => { alert('Primary button clicked'); }}
110
+ />
111
+ </QwickApp>
112
+ ),
113
+ parameters: {
114
+ docs: {
115
+ description: {
116
+ story: 'Primary button with default styling and click handler.',
117
+ },
118
+ },
119
+ },
120
+ };
121
+
122
+ export const Secondary: Story = {
123
+ render: () => (
124
+ <QwickApp appId="button-secondary" appName='Secondary Button'>
125
+ <Button
126
+ label="Learn More"
127
+ variant="secondary"
128
+ onClick={() => { alert('Secondary button clicked'); }}
129
+ />
130
+ </QwickApp>
131
+ ),
132
+ parameters: {
133
+ docs: {
134
+ description: {
135
+ story: 'Secondary button variant with contained styling.',
136
+ },
137
+ },
138
+ },
139
+ };
140
+
141
+ export const Outlined: Story = {
142
+ render: () => (
143
+ <QwickApp appId="button-outlined" appName='Outlined Button'>
144
+ <Button
145
+ label="View Details"
146
+ variant="outlined"
147
+ onClick={() => { alert('Outlined button clicked'); }}
148
+ />
149
+ </QwickApp>
150
+ ),
151
+ parameters: {
152
+ docs: {
153
+ description: {
154
+ story: 'Outlined button variant for secondary actions.',
155
+ },
156
+ },
157
+ },
158
+ };
159
+
160
+ export const WithIcons: Story = {
161
+ render: () => (
162
+ <QwickApp appId="button-icons" appName='Button with Icons'>
163
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
164
+ <Button
165
+ label="Download"
166
+ icon={<span>⬇️</span>}
167
+ onClick={() => { alert('Download clicked'); }}
168
+ />
169
+ <Button
170
+ label="Share"
171
+ endIcon={<span>↗️</span>}
172
+ variant="outlined"
173
+ onClick={() => { alert('Share clicked'); }}
174
+ />
175
+ <Button
176
+ label="Save & Continue"
177
+ icon={<span>💾</span>}
178
+ endIcon={<span>→</span>}
179
+ onClick={() => { alert('Save & Continue clicked'); }}
180
+ />
181
+ </Box>
182
+ </QwickApp>
183
+ ),
184
+ parameters: {
185
+ docs: {
186
+ description: {
187
+ story: 'Buttons can have icons at the start (icon prop) or end (endIcon prop), or both.',
188
+ },
189
+ },
190
+ },
191
+ };
192
+
193
+ export const AsLinks: Story = {
194
+ render: () => (
195
+ <QwickApp appId="button-links" appName='Button as Links'>
196
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
197
+ <Button
198
+ label="Visit Homepage"
199
+ href="https://example.com"
200
+ target="_blank"
201
+ icon={<span>🏠</span>}
202
+ />
203
+ <Button
204
+ label="Internal Link"
205
+ href="/about"
206
+ variant="outlined"
207
+ />
208
+ <Button
209
+ label="Email Us"
210
+ href="mailto:hello@example.com"
211
+ variant="text"
212
+ icon={<span>📧</span>}
213
+ />
214
+ </Box>
215
+ </QwickApp>
216
+ ),
217
+ parameters: {
218
+ docs: {
219
+ description: {
220
+ story: 'Button automatically becomes a link when href prop is provided. Supports external links, internal navigation, and mailto links.',
221
+ },
222
+ },
223
+ },
224
+ };
225
+
226
+ export const States: Story = {
227
+ render: () => (
228
+ <QwickApp appId="button-states" appName='Button States'>
229
+ <Box sx={{ display: 'flex', gap: 2, flexDirection: 'column', maxWidth: 400 }}>
230
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
231
+ <Button
232
+ label="Normal"
233
+ onClick={() => { alert('Normal clicked'); }}
234
+ />
235
+ <Button
236
+ label="Loading..."
237
+ loading={true}
238
+ onClick={() => { alert('Loading clicked'); }}
239
+ />
240
+ <Button
241
+ label="Disabled"
242
+ disabled={true}
243
+ onClick={() => { alert('Disabled clicked'); }}
244
+ />
245
+ </Box>
246
+ <Button
247
+ label="Full Width"
248
+ fullWidth={true}
249
+ variant="outlined"
250
+ onClick={() => { alert('Full Width clicked'); }}
251
+ />
252
+ </Box>
253
+ </QwickApp>
254
+ ),
255
+ parameters: {
256
+ docs: {
257
+ description: {
258
+ story: 'Buttons support loading states (with spinner), disabled states, and full-width layout.',
259
+ },
260
+ },
261
+ },
262
+ };
263
+
264
+ // Data Binding Examples
265
+ export const DataBindingBasic: Story = {
266
+ render: () => (
267
+ <QwickApp appId="button-data-binding" appName='Button Data Binding' dataSource={{ dataProvider }}>
268
+ <Box>
269
+
270
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
271
+ <Typography variant="h5" gutterBottom>📊 Data-Driven Button</Typography>
272
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
273
+ Button components can be completely driven by CMS data, loading configuration and behavior from your data source.
274
+ </Typography>
275
+
276
+ <Code title="Usage" language="tsx">{`<Button dataSource="buttons.hero-primary" />`}</Code>
277
+
278
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.buttons['hero-primary'], null, 2)}</Code>
279
+ </Box>
280
+
281
+ <Button dataSource="buttons.hero-primary" />
282
+
283
+ </Box>
284
+ </QwickApp>
285
+ ),
286
+ parameters: {
287
+ docs: {
288
+ description: {
289
+ story: 'Button with data binding - configuration resolved from CMS data through dataSource.',
290
+ },
291
+ },
292
+ },
293
+ };
294
+
295
+ export const DataBindingAdvanced: Story = {
296
+ render: () => (
297
+ <QwickApp appId="button-data-advanced" appName='Advanced Button Data Binding' dataSource={{ dataProvider }}>
298
+ <Box>
299
+
300
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
301
+ <Typography variant="h5" gutterBottom>🎯 Multiple Button Types</Typography>
302
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
303
+ Different Button instances can load different configurations from separate data sources.
304
+ </Typography>
305
+ </Box>
306
+
307
+ {/* Hero Section Buttons */}
308
+ <Box sx={{ mb: 4 }}>
309
+ <Typography variant="h4" gutterBottom>Hero Section</Typography>
310
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
311
+ <Button dataSource="buttons.hero-primary" />
312
+ <Button dataSource="buttons.hero-secondary" />
313
+ </Box>
314
+ </Box>
315
+
316
+ {/* Feature Actions */}
317
+ <Box sx={{ mb: 4 }}>
318
+ <Typography variant="h4" gutterBottom>Feature Actions</Typography>
319
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
320
+ <Button dataSource="buttons.feature-cta" />
321
+ <Button dataSource="buttons.download-button" />
322
+ </Box>
323
+ </Box>
324
+
325
+ {/* Special States */}
326
+ <Box sx={{ mb: 4 }}>
327
+ <Typography variant="h4" gutterBottom>Special States</Typography>
328
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
329
+ <Button dataSource="buttons.loading-button" />
330
+ <Button dataSource="buttons.disabled" />
331
+ </Box>
332
+ </Box>
333
+
334
+ </Box>
335
+ </QwickApp>
336
+ ),
337
+ parameters: {
338
+ docs: {
339
+ description: {
340
+ story: 'Advanced data binding with multiple button types showcasing different configurations and states.',
341
+ },
342
+ },
343
+ },
344
+ };
345
+
346
+ export const DataBindingWithFallback: Story = {
347
+ render: () => (
348
+ <QwickApp appId="button-fallback" appName='Button Data Binding with Fallback' dataSource={{ dataProvider }}>
349
+ <Box>
350
+
351
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
352
+ <Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
353
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
354
+ Button components gracefully handle missing data sources with fallback configurations.
355
+ </Typography>
356
+
357
+ <Code title="Fallback Usage" language="tsx">{`<Button
358
+ dataSource="nonexistent.button"
359
+ label="Fallback Button"
360
+ variant="primary"
361
+ />`}</Code>
362
+ </Box>
363
+
364
+ <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
365
+ <Box>
366
+ <Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
367
+ <Button
368
+ dataSource="nonexistent.button"
369
+ label="Fallback Button"
370
+ variant="primary"
371
+ />
372
+ </Box>
373
+ <Box>
374
+ <Typography variant="h6" gutterBottom>Valid Data Source</Typography>
375
+ <Button dataSource="buttons.hero-primary" />
376
+ </Box>
377
+ </Box>
378
+
379
+ </Box>
380
+ </QwickApp>
381
+ ),
382
+ parameters: {
383
+ docs: {
384
+ description: {
385
+ story: 'Button with fallback configuration when dataSource is missing or unavailable.',
386
+ },
387
+ },
388
+ },
389
+ };
390
+
391
+ export const RealWorldExample: Story = {
392
+ render: () => (
393
+ <QwickApp appId="button-real-world" appName='Real World Button Example' dataSource={{ dataProvider }}>
394
+ <Box>
395
+
396
+ {/* Hero Section */}
397
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
398
+ <Typography variant="h3" gutterBottom>Transform Your Workflow</Typography>
399
+ <Typography variant="h6" sx={{ mb: 4, opacity: 0.9 }}>
400
+ Experience the power of QwickApps React Framework for modern web development
401
+ </Typography>
402
+ <Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
403
+ <Button dataSource="buttons.hero-primary" />
404
+ <Button dataSource="buttons.hero-secondary" />
405
+ </Box>
406
+ </Box>
407
+
408
+ {/* Feature Grid */}
409
+ <Box sx={{ mb: 6 }}>
410
+ <Typography variant="h3" gutterBottom>Feature Highlights</Typography>
411
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 3 }}>
412
+ <Box sx={{ p: 3, border: 1, borderColor: 'divider', borderRadius: 2 }}>
413
+ <Typography variant="h6" gutterBottom>Analytics Dashboard</Typography>
414
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.8 }}>
415
+ Get insights into your application performance with real-time analytics.
416
+ </Typography>
417
+ <Button dataSource="buttons.feature-cta" />
418
+ </Box>
419
+ <Box sx={{ p: 3, border: 1, borderColor: 'divider', borderRadius: 2 }}>
420
+ <Typography variant="h6" gutterBottom>Resource Library</Typography>
421
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.8 }}>
422
+ Access comprehensive guides and documentation for developers.
423
+ </Typography>
424
+ <Button dataSource="buttons.download-button" />
425
+ </Box>
426
+ <Box sx={{ p: 3, border: 1, borderColor: 'divider', borderRadius: 2 }}>
427
+ <Typography variant="h6" gutterBottom>Sales Support</Typography>
428
+ <Typography variant="body2" sx={{ mb: 2, opacity: 0.8 }}>
429
+ Connect with our sales team for personalized assistance.
430
+ </Typography>
431
+ <Button dataSource="buttons.contact-sales" />
432
+ </Box>
433
+ </Box>
434
+ </Box>
435
+
436
+ {/* Full Width Action */}
437
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
438
+ <Typography variant="h4" gutterBottom sx={{ textAlign: 'center' }}>Ready to Get Started?</Typography>
439
+ <Typography variant="body1" sx={{ mb: 4, textAlign: 'center', opacity: 0.8 }}>
440
+ Join thousands of developers building amazing applications with QwickApps React Framework.
441
+ </Typography>
442
+ <Button dataSource="buttons.full-width" />
443
+ </Box>
444
+
445
+ </Box>
446
+ </QwickApp>
447
+ ),
448
+ parameters: {
449
+ docs: {
450
+ description: {
451
+ story: 'Real-world example showing Button in various contexts: hero sections, feature grids, and call-to-action areas.',
452
+ },
453
+ },
454
+ },
455
+ };
456
+
457
+ export const LoadingAndErrorStates: Story = {
458
+ render: () => (
459
+ <QwickApp appId="button-states" appName='Button Loading and Error States' dataSource={{ dataProvider }}>
460
+ <Box>
461
+
462
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
463
+ <Typography variant="h5" gutterBottom>🔄 State Management</Typography>
464
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
465
+ Button handles various states including loading and error scenarios gracefully.
466
+ </Typography>
467
+ </Box>
468
+
469
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))', gap: 4 }}>
470
+ <Box>
471
+ <Typography variant="h6" gutterBottom>Loading State</Typography>
472
+ <Button dataSource="buttons.loading-button" />
473
+ </Box>
474
+ <Box>
475
+ <Typography variant="h6" gutterBottom>Disabled State</Typography>
476
+ <Button dataSource="buttons.disabled" />
477
+ </Box>
478
+ <Box>
479
+ <Typography variant="h6" gutterBottom>Normal State</Typography>
480
+ <Button dataSource="buttons.hero-primary" />
481
+ </Box>
482
+ <Box>
483
+ <Typography variant="h6" gutterBottom>Full Width</Typography>
484
+ <Button dataSource="buttons.full-width" />
485
+ </Box>
486
+ </Box>
487
+
488
+ </Box>
489
+ </QwickApp>
490
+ ),
491
+ parameters: {
492
+ docs: {
493
+ description: {
494
+ story: 'Demonstrates loading, disabled, and various button state handling.',
495
+ },
496
+ },
497
+ },
498
+ };