@qwickapps/react-framework 1.3.4 → 1.4.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 (325) hide show
  1. package/README.md +1688 -2
  2. package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts +66 -0
  3. package/dist/__tests__/schemas/transformers/MockSerializableComponent.d.ts.map +1 -0
  4. package/dist/components/ErrorBoundary.d.ts +7 -0
  5. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  6. package/dist/components/Html.d.ts +28 -18
  7. package/dist/components/Html.d.ts.map +1 -1
  8. package/dist/components/Logo.d.ts +12 -35
  9. package/dist/components/Logo.d.ts.map +1 -1
  10. package/dist/components/Markdown.d.ts +18 -13
  11. package/dist/components/Markdown.d.ts.map +1 -1
  12. package/dist/components/QwickApp.d.ts +16 -3
  13. package/dist/components/QwickApp.d.ts.map +1 -1
  14. package/dist/components/QwickIcon.d.ts +23 -0
  15. package/dist/components/QwickIcon.d.ts.map +1 -0
  16. package/dist/components/SafeSpan.d.ts +12 -5
  17. package/dist/components/SafeSpan.d.ts.map +1 -1
  18. package/dist/components/Scaffold.d.ts.map +1 -1
  19. package/dist/components/base/ModelView.d.ts +101 -0
  20. package/dist/components/base/ModelView.d.ts.map +1 -0
  21. package/dist/components/base/index.d.ts +11 -0
  22. package/dist/components/base/index.d.ts.map +1 -0
  23. package/dist/components/blocks/Article.d.ts +12 -2
  24. package/dist/components/blocks/Article.d.ts.map +1 -1
  25. package/dist/components/blocks/Code.d.ts +13 -2
  26. package/dist/components/blocks/Code.d.ts.map +1 -1
  27. package/dist/components/blocks/Content.d.ts.map +1 -1
  28. package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -1
  29. package/dist/components/blocks/FeatureCard.d.ts.map +1 -1
  30. package/dist/components/blocks/FeatureGrid.d.ts.map +1 -1
  31. package/dist/components/blocks/Footer.d.ts.map +1 -1
  32. package/dist/components/blocks/HeroBlock.d.ts +27 -13
  33. package/dist/components/blocks/HeroBlock.d.ts.map +1 -1
  34. package/dist/components/blocks/Image.d.ts +41 -0
  35. package/dist/components/blocks/Image.d.ts.map +1 -0
  36. package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -1
  37. package/dist/components/blocks/ProductCard.d.ts.map +1 -1
  38. package/dist/components/blocks/Section.d.ts +16 -2
  39. package/dist/components/blocks/Section.d.ts.map +1 -1
  40. package/dist/components/blocks/Text.d.ts +41 -0
  41. package/dist/components/blocks/Text.d.ts.map +1 -0
  42. package/dist/components/blocks/index.d.ts +4 -0
  43. package/dist/components/blocks/index.d.ts.map +1 -1
  44. package/dist/components/buttons/Button.d.ts +23 -7
  45. package/dist/components/buttons/Button.d.ts.map +1 -1
  46. package/dist/components/forms/FormBlock.d.ts +19 -13
  47. package/dist/components/forms/FormBlock.d.ts.map +1 -1
  48. package/dist/components/index.d.ts +4 -0
  49. package/dist/components/index.d.ts.map +1 -1
  50. package/dist/components/input/ChoiceInputField.d.ts +17 -11
  51. package/dist/components/input/ChoiceInputField.d.ts.map +1 -1
  52. package/dist/components/input/HtmlInputField.d.ts +17 -11
  53. package/dist/components/input/HtmlInputField.d.ts.map +1 -1
  54. package/dist/components/input/SelectInputField.d.ts +16 -10
  55. package/dist/components/input/SelectInputField.d.ts.map +1 -1
  56. package/dist/components/input/SwitchInputField.d.ts +16 -10
  57. package/dist/components/input/SwitchInputField.d.ts.map +1 -1
  58. package/dist/components/input/TextField.d.ts.map +1 -1
  59. package/dist/components/input/TextInputField.d.ts +16 -11
  60. package/dist/components/input/TextInputField.d.ts.map +1 -1
  61. package/dist/components/layout/GridCell.d.ts +23 -6
  62. package/dist/components/layout/GridCell.d.ts.map +1 -1
  63. package/dist/components/layout/GridLayout.d.ts +24 -23
  64. package/dist/components/layout/GridLayout.d.ts.map +1 -1
  65. package/dist/components/pages/FormPage.d.ts.map +1 -1
  66. package/dist/components/pages/Page.d.ts +49 -87
  67. package/dist/components/pages/Page.d.ts.map +1 -1
  68. package/dist/components/pages/index.d.ts +2 -2
  69. package/dist/components/pages/index.d.ts.map +1 -1
  70. package/dist/config/AppConfig.d.ts +49 -0
  71. package/dist/config/AppConfig.d.ts.map +1 -0
  72. package/dist/config/AppConfigBuilder.d.ts +75 -0
  73. package/dist/config/AppConfigBuilder.d.ts.map +1 -0
  74. package/dist/config/index.d.ts +13 -0
  75. package/dist/config/index.d.ts.map +1 -0
  76. package/dist/config/types.d.ts +130 -0
  77. package/dist/config/types.d.ts.map +1 -0
  78. package/dist/config.d.ts +15 -0
  79. package/dist/config.d.ts.map +1 -0
  80. package/dist/config.esm.js +451 -0
  81. package/dist/config.js +455 -0
  82. package/dist/contexts/PrintModeContext.d.ts +27 -0
  83. package/dist/contexts/PrintModeContext.d.ts.map +1 -0
  84. package/dist/contexts/QwickAppContext.d.ts +2 -2
  85. package/dist/contexts/QwickAppContext.d.ts.map +1 -1
  86. package/dist/contexts/ThemeContext.d.ts.map +1 -1
  87. package/dist/contexts/index.d.ts +2 -0
  88. package/dist/contexts/index.d.ts.map +1 -1
  89. package/dist/hooks/index.d.ts +2 -0
  90. package/dist/hooks/index.d.ts.map +1 -1
  91. package/dist/hooks/usePrintMode.d.ts +39 -0
  92. package/dist/hooks/usePrintMode.d.ts.map +1 -0
  93. package/dist/index.css +1 -1
  94. package/dist/index.d.ts +1 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.esm.css +1 -1
  97. package/dist/index.esm.js +20722 -16021
  98. package/dist/index.js +20725 -16010
  99. package/dist/schemas/CodeSchema.d.ts +2 -1
  100. package/dist/schemas/CodeSchema.d.ts.map +1 -1
  101. package/dist/schemas/CollapsibleLayoutSchema.d.ts +2 -1
  102. package/dist/schemas/CollapsibleLayoutSchema.d.ts.map +1 -1
  103. package/dist/schemas/ContentSchema.d.ts +2 -1
  104. package/dist/schemas/ContentSchema.d.ts.map +1 -1
  105. package/dist/schemas/GridCellSchema.d.ts +25 -0
  106. package/dist/schemas/GridCellSchema.d.ts.map +1 -0
  107. package/dist/schemas/GridLayoutSchema.d.ts +23 -0
  108. package/dist/schemas/GridLayoutSchema.d.ts.map +1 -0
  109. package/dist/schemas/HtmlSchema.d.ts +14 -0
  110. package/dist/schemas/HtmlSchema.d.ts.map +1 -0
  111. package/dist/schemas/ImageSchema.d.ts +32 -0
  112. package/dist/schemas/ImageSchema.d.ts.map +1 -0
  113. package/dist/schemas/LogoSchema.d.ts +35 -0
  114. package/dist/schemas/LogoSchema.d.ts.map +1 -0
  115. package/dist/schemas/MarkdownSchema.d.ts +14 -0
  116. package/dist/schemas/MarkdownSchema.d.ts.map +1 -0
  117. package/dist/schemas/PageTemplateSchema.d.ts +31 -0
  118. package/dist/schemas/PageTemplateSchema.d.ts.map +1 -0
  119. package/dist/schemas/PrintConfigSchema.d.ts +31 -0
  120. package/dist/schemas/PrintConfigSchema.d.ts.map +1 -0
  121. package/dist/schemas/SectionSchema.d.ts +2 -1
  122. package/dist/schemas/SectionSchema.d.ts.map +1 -1
  123. package/dist/schemas/TextSchema.d.ts +37 -0
  124. package/dist/schemas/TextSchema.d.ts.map +1 -0
  125. package/dist/schemas/ViewModelSchema.d.ts +23 -0
  126. package/dist/schemas/ViewModelSchema.d.ts.map +1 -0
  127. package/dist/schemas/index.d.ts +15 -1
  128. package/dist/schemas/index.d.ts.map +1 -1
  129. package/dist/schemas/transformers/ComponentTransformer.d.ts +116 -0
  130. package/dist/schemas/transformers/ComponentTransformer.d.ts.map +1 -0
  131. package/dist/schemas/transformers/ReactNodeTransformer.d.ts +53 -0
  132. package/dist/schemas/transformers/ReactNodeTransformer.d.ts.map +1 -0
  133. package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts +66 -0
  134. package/dist/schemas/transformers/__tests__/MockSerializableComponent.d.ts.map +1 -0
  135. package/dist/schemas/transformers/registry.d.ts +15 -0
  136. package/dist/schemas/transformers/registry.d.ts.map +1 -0
  137. package/dist/schemas/types/Serializable.d.ts +46 -0
  138. package/dist/schemas/types/Serializable.d.ts.map +1 -0
  139. package/dist/utils/htmlTransform.d.ts.map +1 -1
  140. package/dist/utils/reactUtils.d.ts +12 -3
  141. package/dist/utils/reactUtils.d.ts.map +1 -1
  142. package/package.json +17 -3
  143. package/src/{components/__tests__ → __tests__/components}/AccessibilityProvider.test.tsx +1 -1
  144. package/src/{components/__tests__ → __tests__/components}/Article.test.tsx +1 -1
  145. package/src/{components/__tests__ → __tests__/components}/Breadcrumbs.test.tsx +1 -1
  146. package/src/{components/__tests__ → __tests__/components}/Button.test.tsx +1 -1
  147. package/src/{components/__tests__ → __tests__/components}/CardListGrid.test.tsx +2 -2
  148. package/src/{components/__tests__ → __tests__/components}/ChoiceInputField.test.tsx +1 -1
  149. package/src/{components/__tests__ → __tests__/components}/Code.test.tsx +1 -1
  150. package/src/{components/__tests__ → __tests__/components}/Content.integration.test.tsx +1 -1
  151. package/src/{components/__tests__ → __tests__/components}/Content.test.tsx +1 -1
  152. package/src/{components/__tests__ → __tests__/components}/CoverImageHeader.test.tsx +2 -2
  153. package/src/{components/__tests__ → __tests__/components}/ErrorBoundary.test.tsx +1 -1
  154. package/src/{components/__tests__ → __tests__/components}/FeatureCard.integration.test.tsx +2 -2
  155. package/src/{components/__tests__ → __tests__/components}/FeatureGrid.integration.test.tsx +2 -2
  156. package/src/{components/__tests__ → __tests__/components}/FeatureGrid.test.tsx +2 -2
  157. package/src/{components/__tests__ → __tests__/components}/Footer.test.tsx +4 -4
  158. package/src/{components/__tests__ → __tests__/components}/FormBlock.test.tsx +1 -1
  159. package/src/{components/__tests__ → __tests__/components}/HeroBlock.integration.test.tsx +2 -2
  160. package/src/{components/__tests__ → __tests__/components}/HeroBlock.test.tsx +233 -7
  161. package/src/{components/__tests__ → __tests__/components}/Html.test.tsx +11 -2
  162. package/src/{components/__tests__ → __tests__/components}/HtmlInputField.test.tsx +3 -3
  163. package/src/__tests__/components/Logo.test.js +3 -3
  164. package/src/{components/__tests__ → __tests__/components}/Markdown.test.tsx +1 -1
  165. package/src/{components/__tests__ → __tests__/components}/PageBannerHeader.test.tsx +3 -3
  166. package/src/{components/__tests__ → __tests__/components}/PaletteSwitcher.test.tsx +3 -3
  167. package/src/{components/__tests__ → __tests__/components}/ProductCard.test.tsx +4 -4
  168. package/src/{components/__tests__ → __tests__/components}/SafeSpan.integration.test.tsx +2 -2
  169. package/src/{components/__tests__ → __tests__/components}/SafeSpan.simple.test.tsx +1 -1
  170. package/src/{components/__tests__ → __tests__/components}/SafeSpan.test.tsx +1 -1
  171. package/src/{components/__tests__ → __tests__/components}/Section.integration.test.tsx +1 -1
  172. package/src/{components/__tests__ → __tests__/components}/Section.test.tsx +1 -1
  173. package/src/{components/__tests__ → __tests__/components}/SelectInputField.test.tsx +1 -1
  174. package/src/{components/__tests__ → __tests__/components}/TextInputField.test.tsx +3 -3
  175. package/src/{components/__tests__ → __tests__/components}/ThemeSwitcher.test.tsx +3 -3
  176. package/src/__tests__/components/base/ModelView.test.tsx +220 -0
  177. package/src/__tests__/components/blocks/Code.performance.test.tsx +625 -0
  178. package/src/__tests__/components/blocks/Code.serialization.test.tsx +507 -0
  179. package/src/__tests__/components/blocks/HeroBlock.serialization.test.tsx +414 -0
  180. package/src/__tests__/components/blocks/Image.serialization.test.tsx +257 -0
  181. package/src/__tests__/components/blocks/Section.serialization.test.tsx +553 -0
  182. package/src/__tests__/components/blocks/Text.performance.test.tsx +442 -0
  183. package/src/__tests__/components/blocks/Text.serialization.test.tsx +491 -0
  184. package/src/__tests__/components/buttons/Button.serialization.test.tsx +443 -0
  185. package/src/__tests__/components/input/FormComponents.serialization.test.tsx +482 -0
  186. package/src/__tests__/components/input/SelectInputField.serialization.test.tsx +439 -0
  187. package/src/__tests__/components/input/TextInputField.serialization.test.tsx +359 -0
  188. package/src/{components/layout/CollapsibleLayout/__tests__ → __tests__/components/layout}/CollapsibleLayout.test.tsx +4 -4
  189. package/src/__tests__/components/layout/GridCell.serialization.test.tsx +403 -0
  190. package/src/__tests__/components/layout/GridLayout.serialization.test.tsx +311 -0
  191. package/src/__tests__/hooks/usePrintMode.test.ts +89 -0
  192. package/src/__tests__/schemas/PageTemplateSchema.test.ts +161 -0
  193. package/src/__tests__/schemas/PrintConfigSchema.test.ts +127 -0
  194. package/src/__tests__/schemas/ViewModelSchema.test.ts +80 -0
  195. package/src/__tests__/schemas/transformers/ComponentSerializationPatterns.test.tsx +602 -0
  196. package/src/__tests__/schemas/transformers/ComponentTransformer.htmlPatterns.test.ts +301 -0
  197. package/src/__tests__/schemas/transformers/ComponentTransformer.test.ts +521 -0
  198. package/src/__tests__/schemas/transformers/CrossBrowserCompatibility.test.ts +586 -0
  199. package/src/__tests__/schemas/transformers/MockSerializableComponent.ts +103 -0
  200. package/src/__tests__/schemas/transformers/RealWorldScenarios.test.tsx +1165 -0
  201. package/src/__tests__/schemas/transformers/SerializationErrorHandling.test.ts +602 -0
  202. package/src/__tests__/schemas/transformers/SerializationIntegration.test.tsx +691 -0
  203. package/src/__tests__/schemas/transformers/SerializationPerformance.test.ts +460 -0
  204. package/src/__tests__/schemas/transformers/TestAutomation.test.ts +597 -0
  205. package/src/{utils/__tests__ → __tests__/utils}/nested-dom-fix.test.tsx +1 -1
  206. package/src/components/ErrorBoundary.tsx +8 -8
  207. package/src/components/Html.tsx +147 -44
  208. package/src/components/Logo.tsx +198 -100
  209. package/src/components/Markdown.tsx +125 -16
  210. package/src/components/QwickApp.tsx +64 -31
  211. package/src/components/QwickIcon.tsx +59 -0
  212. package/src/components/SafeSpan.tsx +65 -10
  213. package/src/components/Scaffold.tsx +2 -8
  214. package/src/components/base/ModelView.tsx +199 -0
  215. package/src/components/base/index.ts +11 -0
  216. package/src/components/blocks/Article.tsx +57 -18
  217. package/src/components/blocks/Code.md +529 -0
  218. package/src/components/blocks/Code.tsx +102 -15
  219. package/src/components/blocks/Content.tsx +25 -77
  220. package/src/components/blocks/CoverImageHeader.tsx +9 -4
  221. package/src/components/blocks/FeatureCard.tsx +1 -2
  222. package/src/components/blocks/FeatureGrid.tsx +19 -1
  223. package/src/components/blocks/Footer.tsx +13 -1
  224. package/src/components/blocks/HeroBlock.tsx +87 -20
  225. package/src/components/blocks/Image.tsx +395 -0
  226. package/src/components/blocks/PageBannerHeader.tsx +14 -12
  227. package/src/components/blocks/ProductCard.tsx +51 -52
  228. package/src/components/blocks/Section.tsx +113 -8
  229. package/src/components/blocks/Text.tsx +285 -0
  230. package/src/components/blocks/index.ts +4 -0
  231. package/src/components/buttons/Button.tsx +184 -15
  232. package/src/components/forms/FormBlock.tsx +70 -17
  233. package/src/components/index.ts +5 -0
  234. package/src/components/input/ChoiceInputField.tsx +48 -18
  235. package/src/components/input/HtmlInputField.tsx +48 -18
  236. package/src/components/input/SelectInputField.tsx +48 -16
  237. package/src/components/input/SwitchInputField.tsx +48 -17
  238. package/src/components/input/TextField.tsx +41 -1
  239. package/src/components/input/TextInputField.tsx +52 -18
  240. package/src/components/layout/GridCell.tsx +118 -9
  241. package/src/components/layout/GridLayout.tsx +125 -24
  242. package/src/components/pages/FormPage.tsx +0 -1
  243. package/src/components/pages/Page.css +304 -332
  244. package/src/components/pages/Page.tsx +307 -255
  245. package/src/components/pages/index.ts +2 -2
  246. package/src/config/AppConfig.ts +133 -0
  247. package/src/config/AppConfigBuilder.ts +421 -0
  248. package/src/config/__tests__/AppConfig.test.ts +385 -0
  249. package/src/config/__tests__/AppConfigBuilder.test.ts +432 -0
  250. package/src/config/index.ts +24 -0
  251. package/src/config/types.ts +170 -0
  252. package/src/config.ts +25 -0
  253. package/src/contexts/PrintModeContext.tsx +332 -0
  254. package/src/contexts/QwickAppContext.tsx +2 -2
  255. package/src/contexts/ThemeContext.tsx +1 -2
  256. package/src/contexts/index.ts +2 -0
  257. package/src/hooks/index.ts +5 -1
  258. package/src/hooks/usePrintMode.ts +73 -0
  259. package/src/index.ts +3 -0
  260. package/src/schemas/CodeSchema.ts +3 -3
  261. package/src/schemas/CollapsibleLayoutSchema.ts +2 -1
  262. package/src/schemas/ContentSchema.ts +2 -1
  263. package/src/schemas/GridCellSchema.ts +164 -0
  264. package/src/schemas/GridLayoutSchema.ts +133 -0
  265. package/src/schemas/HtmlSchema.ts +47 -0
  266. package/src/schemas/ImageSchema.ts +235 -0
  267. package/src/schemas/LogoSchema.ts +241 -0
  268. package/src/schemas/MarkdownSchema.ts +47 -0
  269. package/src/schemas/PageTemplateSchema.ts +186 -0
  270. package/src/schemas/PrintConfigSchema.ts +207 -0
  271. package/src/schemas/README.md +661 -0
  272. package/src/schemas/SectionSchema.ts +2 -1
  273. package/src/schemas/TextSchema.ts +329 -0
  274. package/src/schemas/ViewModelSchema.ts +115 -0
  275. package/src/schemas/index.ts +21 -2
  276. package/src/schemas/transformers/ComponentTransformer.ts +403 -0
  277. package/src/schemas/transformers/ReactNodeTransformer.ts +236 -0
  278. package/src/schemas/transformers/registry.ts +72 -0
  279. package/src/schemas/types/Serializable.ts +51 -0
  280. package/src/stories/AccessibilityProvider.stories.tsx +253 -253
  281. package/src/stories/Article.stories.tsx +433 -433
  282. package/src/stories/Button.stories.tsx +1 -1
  283. package/src/stories/CardListGrid.stories.tsx +451 -451
  284. package/src/stories/ChoiceInputField.stories.tsx +503 -503
  285. package/src/stories/Code.stories.tsx +1 -1
  286. package/src/stories/CollapsibleLayout.stories.tsx +1414 -1414
  287. package/src/stories/Content.stories.tsx +393 -393
  288. package/src/stories/CoverImageHeader.stories.tsx +701 -701
  289. package/src/stories/DataBinding.advanced.stories.tsx +432 -432
  290. package/src/stories/DataProvider.stories.tsx +1192 -1192
  291. package/src/stories/FeatureCard.stories.tsx +557 -557
  292. package/src/stories/FeatureGrid.stories.tsx +594 -594
  293. package/src/stories/Footer.stories.tsx +640 -640
  294. package/src/stories/FormBlock.stories.tsx +760 -760
  295. package/src/stories/FormComponents.stories.tsx +349 -541
  296. package/src/stories/GridCell.stories.tsx +417 -0
  297. package/src/stories/GridLayout.stories.tsx +353 -0
  298. package/src/stories/HeroBlock.stories.tsx +862 -373
  299. package/src/stories/HtmlInputField.stories.tsx +474 -474
  300. package/src/stories/Image.stories.tsx +819 -0
  301. package/src/stories/Introduction.stories.tsx +667 -667
  302. package/src/stories/LayoutBlocks.stories.tsx +324 -324
  303. package/src/stories/Logo.stories.tsx +165 -6
  304. package/src/stories/Markdown.stories.tsx +137 -137
  305. package/src/stories/ModelView.stories.tsx +477 -0
  306. package/src/stories/Page.stories.tsx +688 -688
  307. package/src/stories/PageBannerHeader.stories.tsx +864 -864
  308. package/src/stories/PaletteSwitcher.stories.tsx +119 -119
  309. package/src/stories/ProductCard.stories.tsx +424 -424
  310. package/src/stories/QwickApp.stories.tsx +368 -368
  311. package/src/stories/ResponsiveMenu.stories.tsx +249 -249
  312. package/src/stories/SafeSpan.stories.tsx +531 -531
  313. package/src/stories/Section.stories.tsx +90 -2
  314. package/src/stories/SelectInputField.stories.tsx +524 -524
  315. package/src/stories/Text.stories.tsx +560 -0
  316. package/src/stories/TextInputField.stories.tsx +443 -443
  317. package/src/stories/ThemeSwitcher.stories.tsx +123 -123
  318. package/src/utils/htmlTransform.tsx +74 -53
  319. package/src/utils/reactUtils.tsx +57 -6
  320. package/dist/index.bundled.css +0 -12
  321. /package/src/{hooks/__tests__ → __tests__/hooks}/useDataBinding.test.tsx.disabled +0 -0
  322. /package/src/{schemas/__tests__ → __tests__/schemas}/builders.test.ts +0 -0
  323. /package/src/{utils/__tests__ → __tests__/utils}/createDataDrivenComponent.test.tsx.disabled +0 -0
  324. /package/src/{utils/__tests__ → __tests__/utils}/htmlTransform.test.tsx +0 -0
  325. /package/src/{utils/__tests__ → __tests__/utils}/optional-logging.test.ts +0 -0
@@ -17,13 +17,13 @@ import Scaffold from '../components/Scaffold';
17
17
  import ThemeSwitcher from '../components/buttons/ThemeSwitcher';
18
18
 
19
19
  const meta = {
20
- title: 'Framework/QwickApp',
21
- component: QwickApp,
22
- parameters: {
23
- layout: 'fullscreen',
24
- docs: {
25
- description: {
26
- component: `QwickApp is the easiest way to set up the QwickApps React Framework with complete theme system and component library integration.
20
+ title: 'Framework/QwickApp',
21
+ component: QwickApp,
22
+ parameters: {
23
+ layout: 'fullscreen',
24
+ docs: {
25
+ description: {
26
+ component: `QwickApp is the easiest way to set up the QwickApps React Framework with complete theme system and component library integration.
27
27
 
28
28
  **Key Features:**
29
29
  - **CSS Loading**: Imports all necessary theme system styles
@@ -42,66 +42,66 @@ const meta = {
42
42
  - Multi-tenant applications with dynamic branding
43
43
  - Teams needing standardized UI components
44
44
  - Projects requiring dark/light mode switching`,
45
- },
46
- },
47
- },
48
- tags: ['autodocs'],
49
- argTypes: {
50
- appId: {
51
- description: 'Unique app identifier for localStorage keys',
52
- control: false, // Disable control since it cannot be changed dynamically
53
- },
54
- appName: {
55
- description: 'Application name for display purposes',
56
- control: { type: 'text' },
57
- },
58
- logo: {
59
- description: 'Logo component to display',
60
- control: false,
61
- },
62
- children: {
63
- description: 'Child components to render',
64
- control: false,
65
- },
66
- className: {
67
- description: 'Additional CSS class name',
68
- control: false,
69
- },
70
- style: {
71
- description: 'Additional inline styles',
72
- control: { type: 'object' },
73
- },
74
- defaultTheme: {
75
- description: 'Default theme to use when no user preference exists',
76
- control: false,
77
- },
78
- defaultPalette: {
79
- description: 'Default palette to use when no user preference exists',
80
- control: false,
81
- },
82
- enableScaffolding: {
83
- description: 'Enable scaffolding features',
84
- control: false,
85
- },
86
- showAppBar: {
87
- description: 'Whether to show the app bar',
88
- control: { type: 'boolean' },
89
- defaultValue: false,
90
- },
91
- appBar: {
92
- description: 'App bar configuration for scaffolding',
93
- control: false, // Disable control since it's an object
94
- },
95
- navigationItems: {
96
- description: 'Navigation items for scaffolding',
97
- control: false, // Disable control since it's an array of objects
98
- },
99
- appBarHeight: {
100
- description: 'Height of the app bar',
101
- control: { type: 'text' },
102
- defaultValue: '64px',
103
- },
104
- },
45
+ },
46
+ },
47
+ },
48
+ tags: ['autodocs'],
49
+ argTypes: {
50
+ appId: {
51
+ description: 'Unique app identifier for localStorage keys',
52
+ control: false, // Disable control since it cannot be changed dynamically
53
+ },
54
+ appName: {
55
+ description: 'Application name for display purposes',
56
+ control: { type: 'text' },
57
+ },
58
+ logo: {
59
+ description: 'Logo component to display',
60
+ control: false,
61
+ },
62
+ children: {
63
+ description: 'Child components to render',
64
+ control: false,
65
+ },
66
+ className: {
67
+ description: 'Additional CSS class name',
68
+ control: false,
69
+ },
70
+ style: {
71
+ description: 'Additional inline styles',
72
+ control: { type: 'object' },
73
+ },
74
+ defaultTheme: {
75
+ description: 'Default theme to use when no user preference exists',
76
+ control: false,
77
+ },
78
+ defaultPalette: {
79
+ description: 'Default palette to use when no user preference exists',
80
+ control: false,
81
+ },
82
+ enableScaffolding: {
83
+ description: 'Enable scaffolding features',
84
+ control: false,
85
+ },
86
+ showAppBar: {
87
+ description: 'Whether to show the app bar',
88
+ control: { type: 'boolean' },
89
+ defaultValue: false,
90
+ },
91
+ appBar: {
92
+ description: 'App bar configuration for scaffolding',
93
+ control: false, // Disable control since it's an object
94
+ },
95
+ navigationItems: {
96
+ description: 'Navigation items for scaffolding',
97
+ control: false, // Disable control since it's an array of objects
98
+ },
99
+ appBarHeight: {
100
+ description: 'Height of the app bar',
101
+ control: { type: 'text' },
102
+ defaultValue: '64px',
103
+ },
104
+ },
105
105
  } satisfies Meta<typeof QwickApp>;
106
106
 
107
107
  export default meta;
@@ -109,169 +109,169 @@ type Story = StoryObj<typeof meta>;
109
109
 
110
110
  // Demo component that shows theme system integration
111
111
  function ThemeSystemDemo() {
112
- const { currentTheme, actualThemeMode, setPreferredTheme } = useTheme();
113
- const { currentPalette, setPreferredPalette, availablePalettes } = usePalette();
112
+ const { currentTheme, actualThemeMode, setPreferredTheme } = useTheme();
113
+ const { currentPalette, setPreferredPalette, availablePalettes } = usePalette();
114
114
 
115
- return (
116
- <Scaffold
117
- navigationItems={[]}
118
- showAppBar={true}
119
- appBar={{
120
- title: "QwickApp Demo",
121
- logo: <Logo name="My App" variant={'on-primary'} size="small" badge="none" />,
122
- actions: (
123
- <div style={{ display: 'flex', gap: '8px' }}>
124
- <ThemeSwitcher />
125
- <PaletteSwitcher />
126
- </div>
127
- ),
128
- }}
129
- >
130
- <Section spacing="spacious">
131
- <Content
132
- title="🚀 Welcome to QwickApp!"
133
- centered
134
- maxWidth="lg"
135
- >
136
- <Typography variant="body1" color="text.secondary">
137
- This entire demo is wrapped in a single <code>&lt;QwickApp&gt;</code> component.
138
- No manual provider setup required - everything just works!
139
- </Typography>
140
- </Content>
141
- </Section>
115
+ return (
116
+ <Scaffold
117
+ navigationItems={[]}
118
+ showAppBar={true}
119
+ appBar={{
120
+ title: "QwickApp Demo",
121
+ logo: <Logo name="My App" variant={'on-primary'} size="small" badge="none" />,
122
+ actions: (
123
+ <div style={{ display: 'flex', gap: '8px' }}>
124
+ <ThemeSwitcher />
125
+ <PaletteSwitcher />
126
+ </div>
127
+ ),
128
+ }}
129
+ >
130
+ <Section spacing="spacious">
131
+ <Content
132
+ title=" Welcome to QwickApp!"
133
+ centered
134
+ maxWidth="lg"
135
+ >
136
+ <Typography variant="body1" color="text.secondary">
137
+ This entire demo is wrapped in a single <code>&lt;QwickApp&gt;</code> component.
138
+ No manual provider setup required - everything just works!
139
+ </Typography>
140
+ </Content>
141
+ </Section>
142
142
 
143
- <Section background="alternate" spacing="comfortable">
144
- <Content title="📊 Current Theme System State" centered maxWidth="lg">
145
- <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: 2, mb: 2 }}>
146
- <Box>
147
- <Typography variant="subtitle2" color="text.secondary">
148
- Theme Mode
149
- </Typography>
150
- <Typography variant="body1" color="text.primary">
151
- {currentTheme} → {actualThemeMode}
152
- </Typography>
153
- </Box>
154
- <Box>
155
- <Typography variant="subtitle2" color="text.secondary">
156
- Current Palette
157
- </Typography>
158
- <Typography variant="body1" color="text.primary">
159
- {currentPalette}
160
- </Typography>
161
- </Box>
162
- <Box>
163
- <Typography variant="subtitle2" color="text.secondary">
164
- Available Palettes
165
- </Typography>
166
- <Typography variant="body1" color="text.primary">
167
- {availablePalettes.length} palettes
168
- </Typography>
169
- </Box>
170
- </Box>
171
- </Content>
172
- </Section>
143
+ <Section background="alternate" spacing="comfortable">
144
+ <Content title=" Current Theme System State" centered maxWidth="lg">
145
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: 2, mb: 2 }}>
146
+ <Box>
147
+ <Typography variant="subtitle2" color="text.secondary">
148
+ Theme Mode
149
+ </Typography>
150
+ <Typography variant="body1" color="text.primary">
151
+ {currentTheme} → {actualThemeMode}
152
+ </Typography>
153
+ </Box>
154
+ <Box>
155
+ <Typography variant="subtitle2" color="text.secondary">
156
+ Current Palette
157
+ </Typography>
158
+ <Typography variant="body1" color="text.primary">
159
+ {currentPalette}
160
+ </Typography>
161
+ </Box>
162
+ <Box>
163
+ <Typography variant="subtitle2" color="text.secondary">
164
+ Available Palettes
165
+ </Typography>
166
+ <Typography variant="body1" color="text.primary">
167
+ {availablePalettes.length} palettes
168
+ </Typography>
169
+ </Box>
170
+ </Box>
171
+ </Content>
172
+ </Section>
173
173
 
174
- <Section spacing="comfortable">
175
- <Content
176
- title="🎮 Interactive Demo"
177
- centered
178
- maxWidth="lg"
179
- actions={[
180
- { label: "☀️ Light Mode", onClick: () => setPreferredTheme('light'), disabled: actualThemeMode === 'light' },
181
- { label: "🌙 Dark Mode", onClick: () => setPreferredTheme('dark'), disabled: actualThemeMode === 'dark' },
182
- { label: "🖥️ System Mode", onClick: () => setPreferredTheme('system'), disabled: currentTheme === 'system' },
183
- ]}
184
- >
185
- <Typography variant="body2" color="text.secondary">
186
- Try these buttons to see the theme system in action:
187
- </Typography>
188
-
189
- <Typography variant="body2" color="text.secondary" sx={{ mt: 2 }}>
190
- Available palettes:
191
- </Typography>
192
- <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, justifyContent: 'center', mt: 1 }}>
193
- {availablePalettes.map((palette) => (
194
- <Button
195
- key={palette.id}
196
- variant={currentPalette === palette.id ? 'contained' : 'outlined'}
197
- size="small"
198
- onClick={() => setPreferredPalette(palette.id)}
199
- >
200
- {palette.name}
201
- </Button>
202
- ))}
203
- </Box>
204
- </Content>
205
- </Section>
174
+ <Section spacing="comfortable">
175
+ <Content
176
+ title="🎮 Interactive Demo"
177
+ centered
178
+ maxWidth="lg"
179
+ actions={[
180
+ { label: " Light Mode", onClick: () => setPreferredTheme('light'), disabled: actualThemeMode === 'light' },
181
+ { label: "🌙 Dark Mode", onClick: () => setPreferredTheme('dark'), disabled: actualThemeMode === 'dark' },
182
+ { label: "🖥 System Mode", onClick: () => setPreferredTheme('system'), disabled: currentTheme === 'system' },
183
+ ]}
184
+ >
185
+ <Typography variant="body2" color="text.secondary">
186
+ Try these buttons to see the theme system in action:
187
+ </Typography>
188
+
189
+ <Typography variant="body2" color="text.secondary" sx={{ mt: 2 }}>
190
+ Available palettes:
191
+ </Typography>
192
+ <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1, justifyContent: 'center', mt: 1 }}>
193
+ {availablePalettes.map((palette) => (
194
+ <Button
195
+ key={palette.id}
196
+ variant={currentPalette === palette.id ? 'contained' : 'outlined'}
197
+ size="small"
198
+ onClick={() => setPreferredPalette(palette.id)}
199
+ >
200
+ {palette.name}
201
+ </Button>
202
+ ))}
203
+ </Box>
204
+ </Content>
205
+ </Section>
206
206
 
207
- <Section background="alternate" spacing="comfortable">
208
- <Content title="🎨 Current Color Palette" centered maxWidth="lg">
209
- <Box sx={{
210
- display: 'grid',
211
- gridTemplateColumns: 'repeat(auto-fit, minmax(120px, 1fr))',
212
- gap: 2
213
- }}>
214
- {[
215
- { name: 'Primary', color: 'primary.main' },
216
- { name: 'Secondary', color: 'secondary.main' },
217
- { name: 'Background', color: 'background.default' },
218
- { name: 'Surface', color: 'background.paper' },
219
- { name: 'Success', color: 'success.main' },
220
- { name: 'Warning', color: 'warning.main' },
221
- { name: 'Error', color: 'error.main' },
222
- { name: 'Info', color: 'info.main' },
223
- ].map(({ name, color }) => (
224
- <Box key={name} sx={{ textAlign: 'center' }}>
225
- <Box sx={{
226
- width: '100%',
227
- height: 60,
228
- backgroundColor: color,
229
- border: color.includes('background') ? '1px solid' : 'none',
230
- borderColor: 'divider',
231
- borderRadius: 1,
232
- mb: 1,
233
- boxShadow: 1
234
- }} />
235
- <Typography variant="caption" color="text.secondary">
236
- {name}
237
- </Typography>
238
- </Box>
239
- ))}
240
- </Box>
241
- </Content>
242
- </Section>
207
+ <Section background="alternate" spacing="comfortable">
208
+ <Content title=" Current Color Palette" centered maxWidth="lg">
209
+ <Box sx={{
210
+ display: 'grid',
211
+ gridTemplateColumns: 'repeat(auto-fit, minmax(120px, 1fr))',
212
+ gap: 2
213
+ }}>
214
+ {[
215
+ { name: 'Primary', color: 'primary.main' },
216
+ { name: 'Secondary', color: 'secondary.main' },
217
+ { name: 'Background', color: 'background.default' },
218
+ { name: 'Surface', color: 'background.paper' },
219
+ { name: 'Success', color: 'success.main' },
220
+ { name: 'Warning', color: 'warning.main' },
221
+ { name: 'Error', color: 'error.main' },
222
+ { name: 'Info', color: 'info.main' },
223
+ ].map(({ name, color }) => (
224
+ <Box key={name} sx={{ textAlign: 'center' }}>
225
+ <Box sx={{
226
+ width: '100%',
227
+ height: 60,
228
+ backgroundColor: color,
229
+ border: color.includes('background') ? '1px solid' : 'none',
230
+ borderColor: 'divider',
231
+ borderRadius: 1,
232
+ mb: 1,
233
+ boxShadow: 1
234
+ }} />
235
+ <Typography variant="caption" color="text.secondary">
236
+ {name}
237
+ </Typography>
238
+ </Box>
239
+ ))}
240
+ </Box>
241
+ </Content>
242
+ </Section>
243
243
 
244
- <Section spacing="comfortable">
245
- <Content title="♿ Accessibility Monitoring" centered maxWidth="lg">
246
- <Typography variant="body2" sx={{ mb: 2 }} color="text.secondary">
247
- QwickApp includes automatic accessibility monitoring via the AccessibilityChecker component:
248
- </Typography>
249
- <AccessibilityChecker />
250
- </Content>
251
- </Section>
252
- </Scaffold>
253
- );
244
+ <Section spacing="comfortable">
245
+ <Content title="♿ Accessibility Monitoring" centered maxWidth="lg">
246
+ <Typography variant="body2" sx={{ mb: 2 }} color="text.secondary">
247
+ QwickApp includes automatic accessibility monitoring via the AccessibilityChecker component:
248
+ </Typography>
249
+ <AccessibilityChecker />
250
+ </Content>
251
+ </Section>
252
+ </Scaffold>
253
+ );
254
254
  }
255
255
 
256
- // Complete App Example Story
256
+ // Complete App Example Story
257
257
  export const CompleteExample: Story = {
258
- args: {
259
- appId: 'com.example.qwickapp-demo',
260
- children: undefined, // Will be overridden by render function
261
- },
262
- render: (args) => (
263
- <Scaffold navigationItems={[]} {...args}>
264
- <ThemeSystemDemo />
265
- </Scaffold>
266
- ),
267
- parameters: {
268
- docs: {
269
- description: {
270
- story: `This story demonstrates a complete application setup using QwickApp.
271
-
258
+ args: {
259
+ appId: 'com.example.qwickapp-demo',
260
+ children: undefined, // Will be overridden by render function
261
+ },
262
+ render: (args) => (
263
+ <Scaffold navigationItems={[]} {...args}>
264
+ <ThemeSystemDemo />
265
+ </Scaffold>
266
+ ),
267
+ parameters: {
268
+ docs: {
269
+ description: {
270
+ story: `This story demonstrates a complete application setup using QwickApp.
271
+
272
272
  **Key Features Demonstrated:**
273
273
  - Single component setup with automatic provider configuration
274
- - Theme and palette switching with real-time updates
274
+ - Theme and palette switching with real-time updates
275
275
  - MUI integration with automatic theme synchronization
276
276
  - Accessibility monitoring and compliance checking
277
277
  - Storage isolation with unique appId
@@ -281,181 +281,181 @@ export const CompleteExample: Story = {
281
281
  import { QwickApp } from '@qwickapps/react-framework';
282
282
 
283
283
  function App() {
284
- return (
285
- <QwickApp appId="com.mycompany.myapp">
286
- {/* Your entire app goes here */}
287
- </QwickApp>
288
- );
284
+ return (
285
+ <QwickApp appId="com.mycompany.myapp">
286
+ {/* Your entire app goes here */}
287
+ </QwickApp>
288
+ );
289
289
  }
290
290
  \`\`\``,
291
- },
292
- },
293
- },
291
+ },
292
+ },
293
+ },
294
294
  };
295
295
 
296
296
  // Simple Example Story
297
297
  export const SimpleExample: Story = {
298
- args: {
299
- appId: 'com.example.simple-demo',
300
- children: undefined, // Will be overridden by render function
301
- },
302
- render: (args) => (
303
- <Scaffold navigationItems={[]} {...args}>
304
- <Box sx={{ p: 3, textAlign: 'center' }}>
305
- <Logo name="Simple App" size="large" />
306
- <Typography variant="h4" sx={{ mt: 2, mb: 3 }}>
307
- Hello QwickApp! 👋
308
- </Typography>
309
- <Typography variant="body1" sx={{ mb: 2 }} color="text.secondary">
310
- This simple example shows how easy it is to get started.
311
- Just wrap your content with QwickApp and you're ready to go!
312
- </Typography>
313
- <Box sx={{ display: 'flex', gap: 2, justifyContent: 'center', flexWrap: 'wrap' }}>
314
- <ThemeSwitcher />
315
- <PaletteSwitcher />
316
- </Box>
317
- </Box>
318
- </Scaffold>
319
- ),
320
- parameters: {
321
- docs: {
322
- description: {
323
- story: `The simplest possible QwickApp setup. Perfect for getting started quickly!
324
-
298
+ args: {
299
+ appId: 'com.example.simple-demo',
300
+ children: undefined, // Will be overridden by render function
301
+ },
302
+ render: (args) => (
303
+ <Scaffold navigationItems={[]} {...args}>
304
+ <Box sx={{ p: 3, textAlign: 'center' }}>
305
+ <Logo name="Simple App" size="large" />
306
+ <Typography variant="h4" sx={{ mt: 2, mb: 3 }}>
307
+ Hello QwickApp! 👋
308
+ </Typography>
309
+ <Typography variant="body1" sx={{ mb: 2 }} color="text.secondary">
310
+ This simple example shows how easy it is to get started.
311
+ Just wrap your content with QwickApp and you're ready to go!
312
+ </Typography>
313
+ <Box sx={{ display: 'flex', gap: 2, justifyContent: 'center', flexWrap: 'wrap' }}>
314
+ <ThemeSwitcher />
315
+ <PaletteSwitcher />
316
+ </Box>
317
+ </Box>
318
+ </Scaffold>
319
+ ),
320
+ parameters: {
321
+ docs: {
322
+ description: {
323
+ story: `The simplest possible QwickApp setup. Perfect for getting started quickly!
324
+
325
325
  **This example shows:**
326
326
  - Minimal QwickApp setup
327
- - Automatic theme system initialization
327
+ - Automatic theme system initialization
328
328
  - Theme and palette switchers working out of the box
329
329
  - Clean, semantic HTML structure`,
330
- },
331
- },
332
- },
330
+ },
331
+ },
332
+ },
333
333
  };
334
334
 
335
335
  // Storage Isolation Example
336
336
  export const StorageIsolation: Story = {
337
- args: {
338
- appId: 'com.example.isolated-storage',
339
- children: undefined, // Will be overridden by render function
340
- },
341
- render: (args) => (
342
- <Scaffold navigationItems={[]} {...args}>
343
- <Box sx={{ p: 3 }}>
344
- <Typography variant="h5" gutterBottom>
345
- 🔒 Storage Isolation Demo
346
- </Typography>
347
- <Typography variant="body1" sx={{ mb: 2 }} color="text.secondary">
348
- This instance uses appId: <code>"{args.appId}"</code>
349
- </Typography>
350
- <Typography variant="body2" sx={{ mb: 2 }} color="text.secondary">
351
- Theme preferences are stored in localStorage with unique keys:
352
- </Typography>
353
- <Box sx={{
354
- p: 2,
355
- backgroundColor: 'background.paper',
356
- borderRadius: 1,
357
- fontFamily: 'monospace',
358
- fontSize: '0.875rem',
359
- border: '1px solid',
360
- borderColor: 'divider'
361
- }}>
362
- <div>Theme: {args.appId}.theme</div>
363
- <div>Palette: {args.appId}.palette</div>
364
- </Box>
365
- <Box sx={{ mt: 3, display: 'flex', gap: 2 }}>
366
- <ThemeSwitcher />
367
- <PaletteSwitcher />
368
- </Box>
369
- </Box>
370
- </Scaffold>
371
- ),
372
- parameters: {
373
- docs: {
374
- description: {
375
- story: `Demonstrates how QwickApp uses the appId to create isolated storage keys.
376
-
337
+ args: {
338
+ appId: 'com.example.isolated-storage',
339
+ children: undefined, // Will be overridden by render function
340
+ },
341
+ render: (args) => (
342
+ <Scaffold navigationItems={[]} {...args}>
343
+ <Box sx={{ p: 3 }}>
344
+ <Typography variant="h5" gutterBottom>
345
+ 🔒 Storage Isolation Demo
346
+ </Typography>
347
+ <Typography variant="body1" sx={{ mb: 2 }} color="text.secondary">
348
+ This instance uses appId: <code>"{args.appId}"</code>
349
+ </Typography>
350
+ <Typography variant="body2" sx={{ mb: 2 }} color="text.secondary">
351
+ Theme preferences are stored in localStorage with unique keys:
352
+ </Typography>
353
+ <Box sx={{
354
+ p: 2,
355
+ backgroundColor: 'background.paper',
356
+ borderRadius: 1,
357
+ fontFamily: 'monospace',
358
+ fontSize: '0.875rem',
359
+ border: '1px solid',
360
+ borderColor: 'divider'
361
+ }}>
362
+ <div>Theme: {args.appId}.theme</div>
363
+ <div>Palette: {args.appId}.palette</div>
364
+ </Box>
365
+ <Box sx={{ mt: 3, display: 'flex', gap: 2 }}>
366
+ <ThemeSwitcher />
367
+ <PaletteSwitcher />
368
+ </Box>
369
+ </Box>
370
+ </Scaffold>
371
+ ),
372
+ parameters: {
373
+ docs: {
374
+ description: {
375
+ story: `Demonstrates how QwickApp uses the appId to create isolated storage keys.
376
+
377
377
  **Benefits:**
378
378
  - No conflicts between different applications
379
- - Clean separation of theme preferences
379
+ - Clean separation of theme preferences
380
380
  - Easy to identify which app stored which preferences
381
381
  - Supports multiple QwickApps on the same domain`,
382
- },
383
- },
384
- },
382
+ },
383
+ },
384
+ },
385
385
  };
386
386
 
387
387
  // Complete Framework Integration Example
388
388
  export const CompleteFrameworkExample: Story = {
389
- args: {
390
- appId: 'com.example.complete-framework',
391
- appName: 'QwickApp Demo',
392
- enableScaffolding: true,
393
- showThemeSwitcher: true,
394
- showPaletteSwitcher: true,
395
- },
396
- render: (args) => (
397
- <QwickApp {...args}>
398
- <HeroBlock
399
- title="Complete QwickApp Framework"
400
- subtitle="Theme system, components, and layout working together seamlessly"
401
- backgroundGradient="linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
402
- blockHeight="medium"
403
- textAlign="center"
404
- />
389
+ args: {
390
+ appId: 'com.example.complete-framework',
391
+ appName: 'QwickApp Demo',
392
+ enableScaffolding: true,
393
+ showThemeSwitcher: true,
394
+ showPaletteSwitcher: true,
395
+ },
396
+ render: (args) => (
397
+ <QwickApp {...args}>
398
+ <HeroBlock
399
+ title="Complete QwickApp Framework"
400
+ subtitle="Theme system, components, and layout working together seamlessly"
401
+ backgroundGradient="linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
402
+ blockHeight="medium"
403
+ textAlign="center"
404
+ />
405
405
 
406
- <Section>
407
- <Content title="Framework Benefits" centered>
408
- <FeatureGrid
409
- columns={2}
410
- gap="large"
411
- features={[
412
- {
413
- id: 'theme-system',
414
- title: '🎨 Complete Theme System',
415
- description: 'Automatic theme and palette management with localStorage persistence and MUI integration.',
416
- },
417
- {
418
- id: 'component-library',
419
- title: '🧩 Rich Component Library',
420
- description: '50+ production-ready components with consistent styling and data binding support.',
421
- },
422
- {
423
- id: 'developer-experience',
424
- title: '🛠️ Great Developer Experience',
425
- description: 'Simple setup with TypeScript support, comprehensive documentation, and live examples.',
426
- },
427
- {
428
- id: 'responsive-design',
429
- title: '📱 Mobile-First Design',
430
- description: 'All components are responsive and work perfectly across all device sizes.',
431
- },
432
- ]}
433
- />
434
- </Content>
435
- </Section>
406
+ <Section>
407
+ <Content title="Framework Benefits" centered>
408
+ <FeatureGrid
409
+ columns={2}
410
+ gap="large"
411
+ features={[
412
+ {
413
+ id: 'theme-system',
414
+ title: ' Complete Theme System',
415
+ description: 'Automatic theme and palette management with localStorage persistence and MUI integration.',
416
+ },
417
+ {
418
+ id: 'component-library',
419
+ title: '🧩 Rich Component Library',
420
+ description: '50+ production-ready components with consistent styling and data binding support.',
421
+ },
422
+ {
423
+ id: 'developer-experience',
424
+ title: '🛠 Great Developer Experience',
425
+ description: 'Simple setup with TypeScript support, comprehensive documentation, and live examples.',
426
+ },
427
+ {
428
+ id: 'responsive-design',
429
+ title: ' Mobile-First Design',
430
+ description: 'All components are responsive and work perfectly across all device sizes.',
431
+ },
432
+ ]}
433
+ />
434
+ </Content>
435
+ </Section>
436
436
 
437
- <Section background="alternate">
438
- <Content title="Theme System Demo" centered>
439
- <Typography variant="body1">
440
- Try switching themes and palettes using the controls above. All components automatically adapt to your selected theme and color scheme.
441
- </Typography>
442
- </Content>
443
- </Section>
444
- </QwickApp>
445
- ),
446
- decorators: [],
447
- parameters: {
448
- docs: {
449
- description: {
450
- story: `Demonstrates QwickApp and Scaffold integration - the two core components working together.
451
-
437
+ <Section background="alternate">
438
+ <Content title="Theme System Demo" centered>
439
+ <Typography variant="body1">
440
+ Try switching themes and palettes using the controls above. All components automatically adapt to your selected theme and color scheme.
441
+ </Typography>
442
+ </Content>
443
+ </Section>
444
+ </QwickApp>
445
+ ),
446
+ decorators: [],
447
+ parameters: {
448
+ docs: {
449
+ description: {
450
+ story: `Demonstrates QwickApp and Scaffold integration - the two core components working together.
451
+
452
452
  **Integration Highlights:**
453
453
  - QwickApp manages theme system and storage isolation
454
- - Scaffold provides responsive navigation and app layout
454
+ - Scaffold provides responsive navigation and app layout
455
455
  - Theme switchers in app bar demonstrate real-time updates
456
456
  - All layout components automatically inherit theme colors
457
457
  - Clean component separation with clear responsibilities`,
458
- },
459
- },
460
- },
458
+ },
459
+ },
460
+ },
461
461
  };