@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
@@ -11,19 +11,19 @@ import Logo from '../components/Logo';
11
11
  import QwickApp from '../components/QwickApp';
12
12
 
13
13
  const meta: Meta<typeof Footer> = {
14
- title: 'Blocks/Footer',
15
- component: Footer,
16
- parameters: {
17
- layout: 'fullscreen',
18
- docs: {
19
- description: {
20
- component: `The Footer component provides a flexible and responsive footer layout with multiple sections, legal information, and branding options.
14
+ title: 'Blocks/Footer',
15
+ component: Footer,
16
+ parameters: {
17
+ layout: 'fullscreen',
18
+ docs: {
19
+ description: {
20
+ component: `The Footer component provides a flexible and responsive footer layout with multiple sections, legal information, and branding options.
21
21
 
22
22
  **Key Features:**
23
23
  - **Flexible Sections**: Organize links and content into logical groups with titles
24
24
  - **Responsive Layout**: Automatically adapts between vertical/horizontal orientations based on screen size
25
25
  - **Legal Information**: Built-in support for copyright notices and legal text
26
- - **Multiple Variants**: Default, contained, and outlined styling options
26
+ - **Multiple Variants**: Default, contained, and outlined styling options
27
27
  - **Logo/Branding**: Optional logo or custom branding element
28
28
  - **Link Management**: Support for internal and external links with proper accessibility
29
29
 
@@ -34,42 +34,42 @@ const meta: Meta<typeof Footer> = {
34
34
  - Company information and contact details
35
35
  - Site navigation and resource links
36
36
  - Brand reinforcement and social links`,
37
- },
38
- },
39
- },
40
- tags: ['autodocs'],
41
- argTypes: {
42
- sections: {
43
- description: 'Footer sections with titles and links',
44
- control: { type: 'object' },
45
- },
46
- logo: {
47
- description: 'Optional logo or branding element',
48
- control: false,
49
- },
50
- copyright: {
51
- description: 'Copyright text',
52
- control: { type: 'text' },
53
- },
54
- legalText: {
55
- description: 'Additional legal or info text',
56
- control: { type: 'text' },
57
- },
58
- orientation: {
59
- description: 'Layout orientation',
60
- control: { type: 'select' },
61
- options: ['vertical', 'horizontal'],
62
- },
63
- variant: {
64
- description: 'Background variant',
65
- control: { type: 'select' },
66
- options: ['default', 'contained', 'outlined'],
67
- },
68
- showDivider: {
69
- description: 'Whether to show divider above footer',
70
- control: { type: 'boolean' },
71
- },
72
- },
37
+ },
38
+ },
39
+ },
40
+ tags: ['autodocs'],
41
+ argTypes: {
42
+ sections: {
43
+ description: 'Footer sections with titles and links',
44
+ control: { type: 'object' },
45
+ },
46
+ logo: {
47
+ description: 'Optional logo or branding element',
48
+ control: false,
49
+ },
50
+ copyright: {
51
+ description: 'Copyright text',
52
+ control: { type: 'text' },
53
+ },
54
+ legalText: {
55
+ description: 'Additional legal or info text',
56
+ control: { type: 'text' },
57
+ },
58
+ orientation: {
59
+ description: 'Layout orientation',
60
+ control: { type: 'select' },
61
+ options: ['vertical', 'horizontal'],
62
+ },
63
+ variant: {
64
+ description: 'Background variant',
65
+ control: { type: 'select' },
66
+ options: ['default', 'contained', 'outlined'],
67
+ },
68
+ showDivider: {
69
+ description: 'Whether to show divider above footer',
70
+ control: { type: 'boolean' },
71
+ },
72
+ },
73
73
  } satisfies Meta<typeof Footer>;
74
74
 
75
75
  export default meta;
@@ -77,648 +77,648 @@ type Story = StoryObj<typeof meta>;
77
77
 
78
78
  // Sample footer sections for demos
79
79
  const sampleSections = [
80
- {
81
- id: 'product',
82
- title: 'Product',
83
- items: [
84
- { id: 'features', label: 'Features', href: '#features' },
85
- { id: 'pricing', label: 'Pricing', href: '#pricing' },
86
- { id: 'documentation', label: 'Documentation', href: '#docs' },
87
- { id: 'api', label: 'API Reference', href: '#api' },
88
- { id: 'changelog', label: 'Changelog', href: '#changelog' },
89
- ],
90
- },
91
- {
92
- id: 'company',
93
- title: 'Company',
94
- items: [
95
- { id: 'about', label: 'About Us', href: '#about' },
96
- { id: 'careers', label: 'Careers', href: '#careers' },
97
- { id: 'blog', label: 'Blog', href: '#blog' },
98
- { id: 'press', label: 'Press Kit', href: '#press' },
99
- { id: 'contact', label: 'Contact', href: '#contact' },
100
- ],
101
- },
102
- {
103
- id: 'resources',
104
- title: 'Resources',
105
- items: [
106
- { id: 'help', label: 'Help Center', href: '#help' },
107
- { id: 'community', label: 'Community', href: '#community' },
108
- { id: 'tutorials', label: 'Tutorials', href: '#tutorials' },
109
- { id: 'webinars', label: 'Webinars', href: '#webinars' },
110
- ],
111
- },
112
- {
113
- id: 'legal',
114
- title: 'Legal',
115
- items: [
116
- { id: 'privacy', label: 'Privacy Policy', href: '#privacy' },
117
- { id: 'terms', label: 'Terms of Service', href: '#terms' },
118
- { id: 'cookies', label: 'Cookie Policy', href: '#cookies' },
119
- { id: 'gdpr', label: 'GDPR Compliance', href: '#gdpr' },
120
- ],
121
- },
80
+ {
81
+ id: 'product',
82
+ title: 'Product',
83
+ items: [
84
+ { id: 'features', label: 'Features', href: '#features' },
85
+ { id: 'pricing', label: 'Pricing', href: '#pricing' },
86
+ { id: 'documentation', label: 'Documentation', href: '#docs' },
87
+ { id: 'api', label: 'API Reference', href: '#api' },
88
+ { id: 'changelog', label: 'Changelog', href: '#changelog' },
89
+ ],
90
+ },
91
+ {
92
+ id: 'company',
93
+ title: 'Company',
94
+ items: [
95
+ { id: 'about', label: 'About Us', href: '#about' },
96
+ { id: 'careers', label: 'Careers', href: '#careers' },
97
+ { id: 'blog', label: 'Blog', href: '#blog' },
98
+ { id: 'press', label: 'Press Kit', href: '#press' },
99
+ { id: 'contact', label: 'Contact', href: '#contact' },
100
+ ],
101
+ },
102
+ {
103
+ id: 'resources',
104
+ title: 'Resources',
105
+ items: [
106
+ { id: 'help', label: 'Help Center', href: '#help' },
107
+ { id: 'community', label: 'Community', href: '#community' },
108
+ { id: 'tutorials', label: 'Tutorials', href: '#tutorials' },
109
+ { id: 'webinars', label: 'Webinars', href: '#webinars' },
110
+ ],
111
+ },
112
+ {
113
+ id: 'legal',
114
+ title: 'Legal',
115
+ items: [
116
+ { id: 'privacy', label: 'Privacy Policy', href: '#privacy' },
117
+ { id: 'terms', label: 'Terms of Service', href: '#terms' },
118
+ { id: 'cookies', label: 'Cookie Policy', href: '#cookies' },
119
+ { id: 'gdpr', label: 'GDPR Compliance', href: '#gdpr' },
120
+ ],
121
+ },
122
122
  ];
123
123
 
124
124
  const socialSections = [
125
- {
126
- id: 'social',
127
- title: 'Follow Us',
128
- items: [
129
- { id: 'twitter', label: 'Twitter', href: 'https://twitter.com/qwickapps', external: true },
130
- { id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/company/qwickapps', external: true },
131
- { id: 'github', label: 'GitHub', href: 'https://github.com/qwickapps', external: true },
132
- { id: 'youtube', label: 'YouTube', href: 'https://youtube.com/@qwickapps', external: true },
133
- ],
134
- },
125
+ {
126
+ id: 'social',
127
+ title: 'Follow Us',
128
+ items: [
129
+ { id: 'twitter', label: 'Twitter', href: 'https://twitter.com/qwickapps', external: true },
130
+ { id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/company/qwickapps', external: true },
131
+ { id: 'github', label: 'GitHub', href: 'https://github.com/qwickapps', external: true },
132
+ { id: 'youtube', label: 'YouTube', href: 'https://youtube.com/@qwickapps', external: true },
133
+ ],
134
+ },
135
135
  ];
136
136
 
137
137
  // Sample CMS data for data binding stories
138
138
  const sampleCmsData = {
139
- 'footers': {
140
- 'main': {
141
- sections: [
142
- {
143
- id: 'products',
144
- title: 'Products',
145
- items: [
146
- { id: 'framework', label: 'QwickApps React Framework', href: '/framework' },
147
- { id: 'builder', label: 'QwickApp Builder', href: '/builder' },
148
- { id: 'cms', label: 'QwickCMS', href: '/cms' },
149
- { id: 'templates', label: 'Templates', href: '/templates' }
150
- ]
151
- },
152
- {
153
- id: 'developers',
154
- title: 'Developers',
155
- items: [
156
- { id: 'docs', label: 'Documentation', href: '/docs' },
157
- { id: 'api', label: 'API Reference', href: '/api' },
158
- { id: 'guides', label: 'Guides', href: '/guides' },
159
- { id: 'community', label: 'Community', href: '/community' }
160
- ]
161
- },
162
- {
163
- id: 'company',
164
- title: 'Company',
165
- items: [
166
- { id: 'about', label: 'About Us', href: '/about' },
167
- { id: 'careers', label: 'Careers', href: '/careers' },
168
- { id: 'contact', label: 'Contact', href: '/contact' },
169
- { id: 'blog', label: 'Blog', href: '/blog' }
170
- ]
171
- },
172
- {
173
- id: 'social',
174
- title: 'Connect',
175
- items: [
176
- { id: 'twitter', label: 'Twitter', href: 'https://twitter.com/qwickapps', external: true },
177
- { id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/company/qwickapps', external: true },
178
- { id: 'github', label: 'GitHub', href: 'https://github.com/qwickapps', external: true }
179
- ]
180
- }
181
- ],
182
- logo: '<strong style="font-size: 1.5rem; color: #1976d2;">QwickApps</strong>',
183
- copyright: '© 2025 QwickApps. All rights reserved.',
184
- legalText: 'Privacy Policy | Terms of Service | Cookie Policy',
185
- orientation: 'vertical',
186
- variant: 'default',
187
- showDivider: true
188
- },
189
- 'startup': {
190
- sections: [
191
- {
192
- id: 'links',
193
- items: [
194
- { id: 'home', label: 'Home', href: '/' },
195
- { id: 'about', label: 'About', href: '/about' },
196
- { id: 'services', label: 'Services', href: '/services' },
197
- { id: 'contact', label: 'Contact', href: '/contact' }
198
- ]
199
- }
200
- ],
201
- copyright: '© 2025 Startup Inc.',
202
- orientation: 'horizontal',
203
- variant: 'contained',
204
- showDivider: false
205
- },
206
- 'ecommerce': {
207
- sections: [
208
- {
209
- id: 'shop',
210
- title: 'Shop',
211
- items: [
212
- { id: 'products', label: 'All Products', href: '/products' },
213
- { id: 'sale', label: 'Sale', href: '/sale' },
214
- { id: 'new', label: 'New Arrivals', href: '/new' }
215
- ]
216
- },
217
- {
218
- id: 'support',
219
- title: 'Customer Support',
220
- items: [
221
- { id: 'help', label: 'Help Center', href: '/help' },
222
- { id: 'returns', label: 'Returns', href: '/returns' },
223
- { id: 'shipping', label: 'Shipping Info', href: '/shipping' }
224
- ]
225
- }
226
- ],
227
- copyright: '© 2025 E-Store. All rights reserved.',
228
- legalText: 'Privacy | Terms | Returns Policy',
229
- orientation: 'vertical',
230
- variant: 'outlined',
231
- showDivider: true
232
- },
233
- 'minimal': {
234
- copyright: '© 2025 Minimal Site',
235
- variant: 'default',
236
- showDivider: false
237
- }
238
- }
139
+ 'footers': {
140
+ 'main': {
141
+ sections: [
142
+ {
143
+ id: 'products',
144
+ title: 'Products',
145
+ items: [
146
+ { id: 'framework', label: 'QwickApps React Framework', href: '/framework' },
147
+ { id: 'builder', label: 'QwickApp Builder', href: '/builder' },
148
+ { id: 'cms', label: 'QwickCMS', href: '/cms' },
149
+ { id: 'templates', label: 'Templates', href: '/templates' }
150
+ ]
151
+ },
152
+ {
153
+ id: 'developers',
154
+ title: 'Developers',
155
+ items: [
156
+ { id: 'docs', label: 'Documentation', href: '/docs' },
157
+ { id: 'api', label: 'API Reference', href: '/api' },
158
+ { id: 'guides', label: 'Guides', href: '/guides' },
159
+ { id: 'community', label: 'Community', href: '/community' }
160
+ ]
161
+ },
162
+ {
163
+ id: 'company',
164
+ title: 'Company',
165
+ items: [
166
+ { id: 'about', label: 'About Us', href: '/about' },
167
+ { id: 'careers', label: 'Careers', href: '/careers' },
168
+ { id: 'contact', label: 'Contact', href: '/contact' },
169
+ { id: 'blog', label: 'Blog', href: '/blog' }
170
+ ]
171
+ },
172
+ {
173
+ id: 'social',
174
+ title: 'Connect',
175
+ items: [
176
+ { id: 'twitter', label: 'Twitter', href: 'https://twitter.com/qwickapps', external: true },
177
+ { id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/company/qwickapps', external: true },
178
+ { id: 'github', label: 'GitHub', href: 'https://github.com/qwickapps', external: true }
179
+ ]
180
+ }
181
+ ],
182
+ logo: '<strong style="font-size: 1.5rem; color: #1976d2;">QwickApps</strong>',
183
+ copyright: '© 2025 QwickApps. All rights reserved.',
184
+ legalText: 'Privacy Policy | Terms of Service | Cookie Policy',
185
+ orientation: 'vertical',
186
+ variant: 'default',
187
+ showDivider: true
188
+ },
189
+ 'startup': {
190
+ sections: [
191
+ {
192
+ id: 'links',
193
+ items: [
194
+ { id: 'home', label: 'Home', href: '/' },
195
+ { id: 'about', label: 'About', href: '/about' },
196
+ { id: 'services', label: 'Services', href: '/services' },
197
+ { id: 'contact', label: 'Contact', href: '/contact' }
198
+ ]
199
+ }
200
+ ],
201
+ copyright: '© 2025 Startup Inc.',
202
+ orientation: 'horizontal',
203
+ variant: 'contained',
204
+ showDivider: false
205
+ },
206
+ 'ecommerce': {
207
+ sections: [
208
+ {
209
+ id: 'shop',
210
+ title: 'Shop',
211
+ items: [
212
+ { id: 'products', label: 'All Products', href: '/products' },
213
+ { id: 'sale', label: 'Sale', href: '/sale' },
214
+ { id: 'new', label: 'New Arrivals', href: '/new' }
215
+ ]
216
+ },
217
+ {
218
+ id: 'support',
219
+ title: 'Customer Support',
220
+ items: [
221
+ { id: 'help', label: 'Help Center', href: '/help' },
222
+ { id: 'returns', label: 'Returns', href: '/returns' },
223
+ { id: 'shipping', label: 'Shipping Info', href: '/shipping' }
224
+ ]
225
+ }
226
+ ],
227
+ copyright: '© 2025 E-Store. All rights reserved.',
228
+ legalText: 'Privacy | Terms | Returns Policy',
229
+ orientation: 'vertical',
230
+ variant: 'outlined',
231
+ showDivider: true
232
+ },
233
+ 'minimal': {
234
+ copyright: '© 2025 Minimal Site',
235
+ variant: 'default',
236
+ showDivider: false
237
+ }
238
+ }
239
239
  };
240
240
 
241
241
  const dataProvider = new JsonDataProvider({ data: sampleCmsData });
242
242
 
243
243
  export const BasicFooter: Story = {
244
- args: {
245
- sections: sampleSections.slice(0, 2),
246
- copyright: '© 2025 QwickApps. All rights reserved.',
247
- orientation: 'horizontal',
248
- variant: 'default',
249
- showDivider: true,
250
- },
251
- render: (args) => (
252
- <QwickApp appId="footer-basic" appName='Footer Basic'>
253
- <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
254
- <div style={{ textAlign: 'center', maxWidth: '600px' }}>
255
- <h2>Page Content</h2>
256
- <p>This is the main page content. Scroll down to see the footer.</p>
257
- <p>The footer will appear below this content with organized sections and copyright information.</p>
258
- </div>
259
- </div>
260
- <Footer {...args} />
261
- </QwickApp>
262
- ),
263
- parameters: {
264
- docs: {
265
- description: {
266
- story: 'Basic footer with two sections and copyright information. Clean and minimal design.',
267
- },
268
- },
269
- },
244
+ args: {
245
+ sections: sampleSections.slice(0, 2),
246
+ copyright: '© 2025 QwickApps. All rights reserved.',
247
+ orientation: 'horizontal',
248
+ variant: 'default',
249
+ showDivider: true,
250
+ },
251
+ render: (args) => (
252
+ <QwickApp appId="footer-basic" appName='Footer Basic'>
253
+ <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
254
+ <div style={{ textAlign: 'center', maxWidth: '600px' }}>
255
+ <h2>Page Content</h2>
256
+ <p>This is the main page content. Scroll down to see the footer.</p>
257
+ <p>The footer will appear below this content with organized sections and copyright information.</p>
258
+ </div>
259
+ </div>
260
+ <Footer {...args} />
261
+ </QwickApp>
262
+ ),
263
+ parameters: {
264
+ docs: {
265
+ description: {
266
+ story: 'Basic footer with two sections and copyright information. Clean and minimal design.',
267
+ },
268
+ },
269
+ },
270
270
  };
271
271
 
272
272
  export const ComprehensiveFooter: Story = {
273
- args: {
274
- logo: <Logo name="Qwick Apps" size="small" />,
275
- sections: sampleSections,
276
- copyright: '© 2025 QwickApps Inc. All rights reserved.',
277
- legalText: 'Privacy Policy • Terms of Service • Cookie Settings',
278
- orientation: 'horizontal',
279
- variant: 'contained',
280
- showDivider: true,
281
- },
282
- render: (args) => (
283
- <QwickApp appId="footer-comprehensive" appName='Footer Comprehensive'>
284
- <div style={{ minHeight: '60vh', padding: '2rem' }}>
285
- <div style={{ maxWidth: '800px', margin: '0 auto' }}>
286
- <h1>QwickApps Platform</h1>
287
- <p>
288
- Build amazing React applications with our comprehensive component library and development tools.
289
- Our platform provides everything you need to create modern, accessible, and performant web applications.
290
- </p>
273
+ args: {
274
+ logo: <Logo name="Qwick Apps" size="small" />,
275
+ sections: sampleSections,
276
+ copyright: '© 2025 QwickApps Inc. All rights reserved.',
277
+ legalText: 'Privacy Policy • Terms of Service • Cookie Settings',
278
+ orientation: 'horizontal',
279
+ variant: 'contained',
280
+ showDivider: true,
281
+ },
282
+ render: (args) => (
283
+ <QwickApp appId="footer-comprehensive" appName='Footer Comprehensive'>
284
+ <div style={{ minHeight: '60vh', padding: '2rem' }}>
285
+ <div style={{ maxWidth: '800px', margin: '0 auto' }}>
286
+ <h1>QwickApps Platform</h1>
287
+ <p>
288
+ Build amazing React applications with our comprehensive component library and development tools.
289
+ Our platform provides everything you need to create modern, accessible, and performant web applications.
290
+ </p>
291
291
 
292
- <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: '2rem', margin: '3rem 0' }}>
293
- <div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
294
- <h3>🚀 Components</h3>
295
- <p>Over 50+ production-ready components with TypeScript support.</p>
296
- </div>
297
- <div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
298
- <h3>🎨 Theming</h3>
299
- <p>Flexible theming system with dark mode and custom palettes.</p>
300
- </div>
301
- <div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
302
- <h3>📱 Responsive</h3>
303
- <p>Mobile-first design with comprehensive responsive breakpoints.</p>
304
- </div>
305
- </div>
306
- </div>
307
- </div>
308
- <Footer {...args} />
309
- </QwickApp>
310
- ),
311
- parameters: {
312
- docs: {
313
- description: {
314
- story: 'Comprehensive footer with logo, multiple sections, and legal information. Perfect for business websites and applications.',
315
- },
316
- },
317
- },
292
+ <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))', gap: '2rem', margin: '3rem 0' }}>
293
+ <div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
294
+ <h3> Components</h3>
295
+ <p>Over 50+ production-ready components with TypeScript support.</p>
296
+ </div>
297
+ <div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
298
+ <h3> Theming</h3>
299
+ <p>Flexible theming system with dark mode and custom palettes.</p>
300
+ </div>
301
+ <div style={{ padding: '2rem', backgroundColor: 'var(--theme-surface)', borderRadius: '8px', border: '1px solid var(--theme-outline)' }}>
302
+ <h3> Responsive</h3>
303
+ <p>Mobile-first design with comprehensive responsive breakpoints.</p>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ </div>
308
+ <Footer {...args} />
309
+ </QwickApp>
310
+ ),
311
+ parameters: {
312
+ docs: {
313
+ description: {
314
+ story: 'Comprehensive footer with logo, multiple sections, and legal information. Perfect for business websites and applications.',
315
+ },
316
+ },
317
+ },
318
318
  };
319
319
 
320
320
  export const VerticalLayout: Story = {
321
- args: {
322
- logo: (
323
- <div style={{
324
- fontWeight: 'bold',
325
- fontSize: '1.5rem',
326
- background: 'linear-gradient(45deg, #2196F3, #21CBF3)',
327
- WebkitBackgroundClip: 'text',
328
- WebkitTextFillColor: 'transparent',
329
- backgroundClip: 'text'
330
- }}>
331
- BRAND
332
- </div>
333
- ),
334
- sections: sampleSections.slice(0, 3),
335
- copyright: '© 2025 Brand Corp.',
336
- legalText: 'Privacy • Terms • Cookies',
337
- orientation: 'vertical',
338
- variant: 'outlined',
339
- showDivider: true,
340
- },
341
- render: (args) => (
342
- <QwickApp appId="footer-vertical" appName='Footer Vertical'>
343
- <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
344
- <div style={{ textAlign: 'center', maxWidth: '600px' }}>
345
- <h2>Vertical Footer Layout</h2>
346
- <p>This demonstrates the vertical orientation where sections are stacked on top of each other.</p>
347
- </div>
348
- </div>
349
- <Footer {...args} />
350
- </QwickApp>
351
- ),
352
- parameters: {
353
- docs: {
354
- description: {
355
- story: 'Vertical footer layout with sections stacked on top of each other. Automatically switches to horizontal on larger screens for better usability.',
356
- },
357
- },
358
- },
321
+ args: {
322
+ logo: (
323
+ <div style={{
324
+ fontWeight: 'bold',
325
+ fontSize: '1.5rem',
326
+ background: 'linear-gradient(45deg, #2196F3, #21CBF3)',
327
+ WebkitBackgroundClip: 'text',
328
+ WebkitTextFillColor: 'transparent',
329
+ backgroundClip: 'text'
330
+ }}>
331
+ BRAND
332
+ </div>
333
+ ),
334
+ sections: sampleSections.slice(0, 3),
335
+ copyright: '© 2025 Brand Corp.',
336
+ legalText: 'Privacy • Terms • Cookies',
337
+ orientation: 'vertical',
338
+ variant: 'outlined',
339
+ showDivider: true,
340
+ },
341
+ render: (args) => (
342
+ <QwickApp appId="footer-vertical" appName='Footer Vertical'>
343
+ <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
344
+ <div style={{ textAlign: 'center', maxWidth: '600px' }}>
345
+ <h2>Vertical Footer Layout</h2>
346
+ <p>This demonstrates the vertical orientation where sections are stacked on top of each other.</p>
347
+ </div>
348
+ </div>
349
+ <Footer {...args} />
350
+ </QwickApp>
351
+ ),
352
+ parameters: {
353
+ docs: {
354
+ description: {
355
+ story: 'Vertical footer layout with sections stacked on top of each other. Automatically switches to horizontal on larger screens for better usability.',
356
+ },
357
+ },
358
+ },
359
359
  };
360
360
 
361
361
  export const SocialMediaFooter: Story = {
362
- args: {
363
- logo: (
364
- <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
365
- <div style={{
366
- width: '32px',
367
- height: '32px',
368
- background: 'linear-gradient(45deg, #FF6B6B, #4ECDC4)',
369
- borderRadius: '8px',
370
- display: 'flex',
371
- alignItems: 'center',
372
- justifyContent: 'center',
373
- fontSize: '1.2rem',
374
- }}>
375
- 🌟
376
- </div>
377
- <span style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>SocialApp</span>
378
- </div>
379
- ),
380
- sections: [
381
- ...sampleSections.slice(0, 2),
382
- ...socialSections,
383
- ],
384
- copyright: '© 2025 SocialApp. Made with ❤️ in San Francisco.',
385
- legalText: 'Privacy Policy • Community Guidelines • Terms of Use',
386
- orientation: 'horizontal',
387
- variant: 'contained',
388
- showDivider: false,
389
- },
390
- render: (args) => (
391
- <QwickApp appId="footer-social" appName='Footer Social'>
392
- <div style={{
393
- minHeight: '60vh',
394
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
395
- padding: '3rem 2rem',
396
- display: 'flex',
397
- alignItems: 'center',
398
- justifyContent: 'center',
399
- color: 'white'
400
- }}>
401
- <div style={{ textAlign: 'center', maxWidth: '700px' }}>
402
- <h1 style={{ fontSize: '3rem', marginBottom: '1rem' }}>Connect & Share</h1>
403
- <p style={{ fontSize: '1.2rem', opacity: 0.9 }}>
404
- Join millions of users sharing their stories, connecting with friends, and discovering amazing content every day.
405
- </p>
406
- <button style={{
407
- marginTop: '2rem',
408
- padding: '1rem 2rem',
409
- fontSize: '1.1rem',
410
- backgroundColor: 'white',
411
- color: '#667eea',
412
- border: 'none',
413
- borderRadius: '8px',
414
- fontWeight: 'bold',
415
- cursor: 'pointer'
416
- }}>
417
- Get Started Today
418
- </button>
419
- </div>
420
- </div>
421
- <Footer {...args} />
422
- </QwickApp>
423
- ),
424
- parameters: {
425
- docs: {
426
- description: {
427
- story: 'Social media style footer with custom logo, social links, and community-focused content.',
428
- },
429
- },
430
- },
362
+ args: {
363
+ logo: (
364
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
365
+ <div style={{
366
+ width: '32px',
367
+ height: '32px',
368
+ background: 'linear-gradient(45deg, #FF6B6B, #4ECDC4)',
369
+ borderRadius: '8px',
370
+ display: 'flex',
371
+ alignItems: 'center',
372
+ justifyContent: 'center',
373
+ fontSize: '1.2rem',
374
+ }}>
375
+
376
+ </div>
377
+ <span style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>SocialApp</span>
378
+ </div>
379
+ ),
380
+ sections: [
381
+ ...sampleSections.slice(0, 2),
382
+ ...socialSections,
383
+ ],
384
+ copyright: '© 2025 SocialApp. Made with in San Francisco.',
385
+ legalText: 'Privacy Policy • Community Guidelines • Terms of Use',
386
+ orientation: 'horizontal',
387
+ variant: 'contained',
388
+ showDivider: false,
389
+ },
390
+ render: (args) => (
391
+ <QwickApp appId="footer-social" appName='Footer Social'>
392
+ <div style={{
393
+ minHeight: '60vh',
394
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
395
+ padding: '3rem 2rem',
396
+ display: 'flex',
397
+ alignItems: 'center',
398
+ justifyContent: 'center',
399
+ color: 'white'
400
+ }}>
401
+ <div style={{ textAlign: 'center', maxWidth: '700px' }}>
402
+ <h1 style={{ fontSize: '3rem', marginBottom: '1rem' }}>Connect & Share</h1>
403
+ <p style={{ fontSize: '1.2rem', opacity: 0.9 }}>
404
+ Join millions of users sharing their stories, connecting with friends, and discovering amazing content every day.
405
+ </p>
406
+ <button style={{
407
+ marginTop: '2rem',
408
+ padding: '1rem 2rem',
409
+ fontSize: '1.1rem',
410
+ backgroundColor: 'white',
411
+ color: '#667eea',
412
+ border: 'none',
413
+ borderRadius: '8px',
414
+ fontWeight: 'bold',
415
+ cursor: 'pointer'
416
+ }}>
417
+ Get Started Today
418
+ </button>
419
+ </div>
420
+ </div>
421
+ <Footer {...args} />
422
+ </QwickApp>
423
+ ),
424
+ parameters: {
425
+ docs: {
426
+ description: {
427
+ story: 'Social media style footer with custom logo, social links, and community-focused content.',
428
+ },
429
+ },
430
+ },
431
431
  };
432
432
 
433
433
  export const MinimalFooter: Story = {
434
- args: {
435
- copyright: '© 2025 Minimal Co.',
436
- legalText: 'Privacy • Terms',
437
- orientation: 'horizontal',
438
- variant: 'default',
439
- showDivider: false,
440
- },
441
- render: (args) => (
442
- <QwickApp appId="footer-minimal" appName='Footer Minimal'>
443
- <div style={{ minHeight: '70vh', padding: '3rem 2rem' }}>
444
- <div style={{ maxWidth: '600px', margin: '0 auto', textAlign: 'center' }}>
445
- <h1>Less is More</h1>
446
- <p style={{ fontSize: '1.1rem', lineHeight: 1.6, margin: '2rem 0' }}>
447
- Sometimes the most elegant solution is the simplest one. This minimal footer
448
- contains only the essential legal information without any additional sections or navigation.
449
- </p>
450
- <p>
451
- Perfect for landing pages, portfolios, or applications where you want to keep
452
- the focus on your main content while still providing necessary legal compliance.
453
- </p>
454
- </div>
455
- </div>
456
- <Footer {...args} />
457
- </QwickApp>
458
- ),
459
- parameters: {
460
- docs: {
461
- description: {
462
- story: 'Minimal footer with only copyright and legal text. Perfect for simple pages and focused designs.',
463
- },
464
- },
465
- },
434
+ args: {
435
+ copyright: '© 2025 Minimal Co.',
436
+ legalText: 'Privacy • Terms',
437
+ orientation: 'horizontal',
438
+ variant: 'default',
439
+ showDivider: false,
440
+ },
441
+ render: (args) => (
442
+ <QwickApp appId="footer-minimal" appName='Footer Minimal'>
443
+ <div style={{ minHeight: '70vh', padding: '3rem 2rem' }}>
444
+ <div style={{ maxWidth: '600px', margin: '0 auto', textAlign: 'center' }}>
445
+ <h1>Less is More</h1>
446
+ <p style={{ fontSize: '1.1rem', lineHeight: 1.6, margin: '2rem 0' }}>
447
+ Sometimes the most elegant solution is the simplest one. This minimal footer
448
+ contains only the essential legal information without any additional sections or navigation.
449
+ </p>
450
+ <p>
451
+ Perfect for landing pages, portfolios, or applications where you want to keep
452
+ the focus on your main content while still providing necessary legal compliance.
453
+ </p>
454
+ </div>
455
+ </div>
456
+ <Footer {...args} />
457
+ </QwickApp>
458
+ ),
459
+ parameters: {
460
+ docs: {
461
+ description: {
462
+ story: 'Minimal footer with only copyright and legal text. Perfect for simple pages and focused designs.',
463
+ },
464
+ },
465
+ },
466
466
  };
467
467
 
468
468
  export const VariantComparison: Story = {
469
- render: () => (
470
- <QwickApp appId="footer-variants" appName='Footer Variants'>
471
- <div style={{ display: 'flex', flexDirection: 'column' }}>
472
- {/* Default Variant */}
473
- <div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#f5f5f5' }}>
474
- <div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
475
- <h2>Default Variant</h2>
476
- <p>Transparent background, blends with page content.</p>
477
- </div>
478
- </div>
479
- <Footer
480
- sections={sampleSections.slice(0, 2)}
481
- copyright="© 2025 Default Footer"
482
- variant="default"
483
- />
469
+ render: () => (
470
+ <QwickApp appId="footer-variants" appName='Footer Variants'>
471
+ <div style={{ display: 'flex', flexDirection: 'column' }}>
472
+ {/* Default Variant */}
473
+ <div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#f5f5f5' }}>
474
+ <div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
475
+ <h2>Default Variant</h2>
476
+ <p>Transparent background, blends with page content.</p>
477
+ </div>
478
+ </div>
479
+ <Footer
480
+ sections={sampleSections.slice(0, 2)}
481
+ copyright="© 2025 Default Footer"
482
+ variant="default"
483
+ />
484
484
 
485
- {/* Contained Variant */}
486
- <div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#e3f2fd' }}>
487
- <div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
488
- <h2>Contained Variant</h2>
489
- <p>Solid background color for clear separation from content.</p>
490
- </div>
491
- </div>
492
- <Footer
493
- sections={sampleSections.slice(0, 2)}
494
- copyright="© 2025 Contained Footer"
495
- variant="contained"
496
- />
485
+ {/* Contained Variant */}
486
+ <div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#e3f2fd' }}>
487
+ <div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
488
+ <h2>Contained Variant</h2>
489
+ <p>Solid background color for clear separation from content.</p>
490
+ </div>
491
+ </div>
492
+ <Footer
493
+ sections={sampleSections.slice(0, 2)}
494
+ copyright="© 2025 Contained Footer"
495
+ variant="contained"
496
+ />
497
497
 
498
- {/* Outlined Variant */}
499
- <div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#fff3e0' }}>
500
- <div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
501
- <h2>Outlined Variant</h2>
502
- <p>Border outline for subtle definition without heavy background.</p>
503
- </div>
504
- </div>
505
- <Footer
506
- sections={sampleSections.slice(0, 2)}
507
- copyright="© 2025 Outlined Footer"
508
- variant="outlined"
509
- />
510
- </div>
511
- </QwickApp>
512
- ),
513
- parameters: {
514
- docs: {
515
- description: {
516
- story: 'Comparison of footer variants: default (transparent), contained (solid background), and outlined (border).',
517
- },
518
- },
519
- },
498
+ {/* Outlined Variant */}
499
+ <div style={{ minHeight: '30vh', padding: '2rem', backgroundColor: '#fff3e0' }}>
500
+ <div style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
501
+ <h2>Outlined Variant</h2>
502
+ <p>Border outline for subtle definition without heavy background.</p>
503
+ </div>
504
+ </div>
505
+ <Footer
506
+ sections={sampleSections.slice(0, 2)}
507
+ copyright="© 2025 Outlined Footer"
508
+ variant="outlined"
509
+ />
510
+ </div>
511
+ </QwickApp>
512
+ ),
513
+ parameters: {
514
+ docs: {
515
+ description: {
516
+ story: 'Comparison of footer variants: default (transparent), contained (solid background), and outlined (border).',
517
+ },
518
+ },
519
+ },
520
520
  };
521
521
 
522
522
  export const DeveloperFooter: Story = {
523
- args: {
524
- logo: (
525
- <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
526
- <span style={{ fontSize: '1.5rem' }}>👩‍💻</span>
527
- <span style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>DevPortfolio</span>
528
- </div>
529
- ),
530
- sections: [
531
- {
532
- id: 'projects',
533
- title: 'Projects',
534
- items: [
535
- { id: 'web-apps', label: 'Web Applications', href: '#web-apps' },
536
- { id: 'mobile-apps', label: 'Mobile Apps', href: '#mobile-apps' },
537
- { id: 'open-source', label: 'Open Source', href: '#open-source' },
538
- { id: 'experiments', label: 'Experiments', href: '#experiments' },
539
- ],
540
- },
541
- {
542
- id: 'skills',
543
- title: 'Skills',
544
- items: [
545
- { id: 'frontend', label: 'Frontend Development', onClick: () => alert('Frontend skills') },
546
- { id: 'backend', label: 'Backend Development', onClick: () => alert('Backend skills') },
547
- { id: 'devops', label: 'DevOps & Cloud', onClick: () => alert('DevOps skills') },
548
- { id: 'design', label: 'UI/UX Design', onClick: () => alert('Design skills') },
549
- ],
550
- },
551
- {
552
- id: 'connect',
553
- title: 'Connect',
554
- items: [
555
- { id: 'email', label: 'Email', href: 'mailto:hello@devportfolio.com' },
556
- { id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/in/developer', external: true },
557
- { id: 'github', label: 'GitHub', href: 'https://github.com/developer', external: true },
558
- { id: 'resume', label: 'Download Resume', href: '/resume.pdf', external: true },
559
- ],
560
- },
561
- ],
562
- copyright: '© 2025 Jane Developer. Built with React and TypeScript.',
563
- legalText: 'Available for hire • Open to opportunities',
564
- orientation: 'horizontal',
565
- variant: 'default',
566
- showDivider: true,
567
- },
568
- render: (args) => (
569
- <QwickApp appId="footer-developer" appName='Footer Developer'>
570
- <div style={{ padding: '2rem' }}>
571
- <div style={{ maxWidth: '800px', margin: '0 auto' }}>
572
- <h1>Jane Developer</h1>
573
- <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8 }}>
574
- Full-Stack Developer & UI/UX Designer
575
- </p>
523
+ args: {
524
+ logo: (
525
+ <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
526
+ <span style={{ fontSize: '1.5rem' }}>👩‍</span>
527
+ <span style={{ fontWeight: 'bold', fontSize: '1.2rem' }}>DevPortfolio</span>
528
+ </div>
529
+ ),
530
+ sections: [
531
+ {
532
+ id: 'projects',
533
+ title: 'Projects',
534
+ items: [
535
+ { id: 'web-apps', label: 'Web Applications', href: '#web-apps' },
536
+ { id: 'mobile-apps', label: 'Mobile Apps', href: '#mobile-apps' },
537
+ { id: 'open-source', label: 'Open Source', href: '#open-source' },
538
+ { id: 'experiments', label: 'Experiments', href: '#experiments' },
539
+ ],
540
+ },
541
+ {
542
+ id: 'skills',
543
+ title: 'Skills',
544
+ items: [
545
+ { id: 'frontend', label: 'Frontend Development', onClick: () => alert('Frontend skills') },
546
+ { id: 'backend', label: 'Backend Development', onClick: () => alert('Backend skills') },
547
+ { id: 'devops', label: 'DevOps & Cloud', onClick: () => alert('DevOps skills') },
548
+ { id: 'design', label: 'UI/UX Design', onClick: () => alert('Design skills') },
549
+ ],
550
+ },
551
+ {
552
+ id: 'connect',
553
+ title: 'Connect',
554
+ items: [
555
+ { id: 'email', label: 'Email', href: 'mailto:hello@devportfolio.com' },
556
+ { id: 'linkedin', label: 'LinkedIn', href: 'https://linkedin.com/in/developer', external: true },
557
+ { id: 'github', label: 'GitHub', href: 'https://github.com/developer', external: true },
558
+ { id: 'resume', label: 'Download Resume', href: '/resume.pdf', external: true },
559
+ ],
560
+ },
561
+ ],
562
+ copyright: '© 2025 Jane Developer. Built with React and TypeScript.',
563
+ legalText: 'Available for hire • Open to opportunities',
564
+ orientation: 'horizontal',
565
+ variant: 'default',
566
+ showDivider: true,
567
+ },
568
+ render: (args) => (
569
+ <QwickApp appId="footer-developer" appName='Footer Developer'>
570
+ <div style={{ padding: '2rem' }}>
571
+ <div style={{ maxWidth: '800px', margin: '0 auto' }}>
572
+ <h1>Jane Developer</h1>
573
+ <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8 }}>
574
+ Full-Stack Developer & UI/UX Designer
575
+ </p>
576
576
 
577
- <div style={{ margin: '3rem 0' }}>
578
- <h2>Featured Projects</h2>
579
- <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: '2rem', marginTop: '2rem' }}>
580
- <div style={{ padding: '2rem', border: '1px solid var(--theme-outline)', borderRadius: '12px' }}>
581
- <h3>🌟 Task Management App</h3>
582
- <p>React, TypeScript, Node.js, PostgreSQL</p>
583
- <div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
584
- <button style={{ padding: '0.5rem 1rem', backgroundColor: 'var(--theme-primary)', color: 'white', border: 'none', borderRadius: '4px' }}>
585
- View Project
586
- </button>
587
- <button style={{ padding: '0.5rem 1rem', border: '1px solid var(--theme-outline)', backgroundColor: 'transparent', borderRadius: '4px' }}>
588
- GitHub
589
- </button>
590
- </div>
591
- </div>
577
+ <div style={{ margin: '3rem 0' }}>
578
+ <h2>Featured Projects</h2>
579
+ <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: '2rem', marginTop: '2rem' }}>
580
+ <div style={{ padding: '2rem', border: '1px solid var(--theme-outline)', borderRadius: '12px' }}>
581
+ <h3> Task Management App</h3>
582
+ <p>React, TypeScript, Node.js, PostgreSQL</p>
583
+ <div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
584
+ <button style={{ padding: '0.5rem 1rem', backgroundColor: 'var(--theme-primary)', color: 'white', border: 'none', borderRadius: '4px' }}>
585
+ View Project
586
+ </button>
587
+ <button style={{ padding: '0.5rem 1rem', border: '1px solid var(--theme-outline)', backgroundColor: 'transparent', borderRadius: '4px' }}>
588
+ GitHub
589
+ </button>
590
+ </div>
591
+ </div>
592
592
 
593
- <div style={{ padding: '2rem', border: '1px solid var(--theme-outline)', borderRadius: '12px' }}>
594
- <h3>🎨 Design System</h3>
595
- <p>React, Storybook, Figma, Design Tokens</p>
596
- <div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
597
- <button style={{ padding: '0.5rem 1rem', backgroundColor: 'var(--theme-primary)', color: 'white', border: 'none', borderRadius: '4px' }}>
598
- View Project
599
- </button>
600
- <button style={{ padding: '0.5rem 1rem', border: '1px solid var(--theme-outline)', backgroundColor: 'transparent', borderRadius: '4px' }}>
601
- GitHub
602
- </button>
603
- </div>
604
- </div>
605
- </div>
606
- </div>
607
- </div>
608
- </div>
609
- <Footer {...args} />
610
- </QwickApp>
611
- ),
612
- parameters: {
613
- docs: {
614
- description: {
615
- story: 'Developer portfolio footer with projects, skills, and professional contact information. Perfect for personal websites and portfolios.',
616
- },
617
- },
618
- },
593
+ <div style={{ padding: '2rem', border: '1px solid var(--theme-outline)', borderRadius: '12px' }}>
594
+ <h3> Design System</h3>
595
+ <p>React, Storybook, Figma, Design Tokens</p>
596
+ <div style={{ display: 'flex', gap: '1rem', marginTop: '1rem' }}>
597
+ <button style={{ padding: '0.5rem 1rem', backgroundColor: 'var(--theme-primary)', color: 'white', border: 'none', borderRadius: '4px' }}>
598
+ View Project
599
+ </button>
600
+ <button style={{ padding: '0.5rem 1rem', border: '1px solid var(--theme-outline)', backgroundColor: 'transparent', borderRadius: '4px' }}>
601
+ GitHub
602
+ </button>
603
+ </div>
604
+ </div>
605
+ </div>
606
+ </div>
607
+ </div>
608
+ </div>
609
+ <Footer {...args} />
610
+ </QwickApp>
611
+ ),
612
+ parameters: {
613
+ docs: {
614
+ description: {
615
+ story: 'Developer portfolio footer with projects, skills, and professional contact information. Perfect for personal websites and portfolios.',
616
+ },
617
+ },
618
+ },
619
619
  };
620
620
 
621
621
  // Data Binding Stories
622
622
  export const DataBindingMain: Story = {
623
- args: {
624
- dataSource: 'footers.main',
625
- },
626
- render: (args) => (
627
- <QwickApp appId="footer-data-main" appName='Footer Data Binding Main' dataSource={{ dataProvider }}>
628
- <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
629
- <div style={{ textAlign: 'center', maxWidth: '600px' }}>
630
- <h1>Company Website</h1>
631
- <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
632
- Complete footer loaded from CMS with multiple sections, logo, copyright, and legal information.
633
- </p>
634
- </div>
635
- </div>
636
- <Footer {...args} />
637
- </QwickApp>
638
- ),
639
- parameters: {
640
- docs: {
641
- description: {
642
- story: 'Footer content loaded from CMS data source. Shows comprehensive footer with multiple navigation sections, social links, and legal information.',
643
- },
644
- },
645
- },
623
+ args: {
624
+ dataSource: 'footers.main',
625
+ },
626
+ render: (args) => (
627
+ <QwickApp appId="footer-data-main" appName='Footer Data Binding Main' dataSource={{ dataProvider }}>
628
+ <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
629
+ <div style={{ textAlign: 'center', maxWidth: '600px' }}>
630
+ <h1>Company Website</h1>
631
+ <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
632
+ Complete footer loaded from CMS with multiple sections, logo, copyright, and legal information.
633
+ </p>
634
+ </div>
635
+ </div>
636
+ <Footer {...args} />
637
+ </QwickApp>
638
+ ),
639
+ parameters: {
640
+ docs: {
641
+ description: {
642
+ story: 'Footer content loaded from CMS data source. Shows comprehensive footer with multiple navigation sections, social links, and legal information.',
643
+ },
644
+ },
645
+ },
646
646
  };
647
647
 
648
648
  export const DataBindingStartup: Story = {
649
- args: {
650
- dataSource: 'footers.startup',
651
- },
652
- render: (args) => (
653
- <QwickApp appId="footer-data-startup" appName='Footer Data Binding Startup' dataSource={{ dataProvider }}>
654
- <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
655
- <div style={{ textAlign: 'center', maxWidth: '600px' }}>
656
- <h1>Startup Landing</h1>
657
- <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
658
- Simple horizontal footer layout perfect for startup landing pages.
659
- </p>
660
- </div>
661
- </div>
662
- <Footer {...args} />
663
- </QwickApp>
664
- ),
665
- parameters: {
666
- docs: {
667
- description: {
668
- story: 'Startup-style footer loaded from CMS. Features horizontal layout with contained variant and minimal links.',
669
- },
670
- },
671
- },
649
+ args: {
650
+ dataSource: 'footers.startup',
651
+ },
652
+ render: (args) => (
653
+ <QwickApp appId="footer-data-startup" appName='Footer Data Binding Startup' dataSource={{ dataProvider }}>
654
+ <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
655
+ <div style={{ textAlign: 'center', maxWidth: '600px' }}>
656
+ <h1>Startup Landing</h1>
657
+ <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
658
+ Simple horizontal footer layout perfect for startup landing pages.
659
+ </p>
660
+ </div>
661
+ </div>
662
+ <Footer {...args} />
663
+ </QwickApp>
664
+ ),
665
+ parameters: {
666
+ docs: {
667
+ description: {
668
+ story: 'Startup-style footer loaded from CMS. Features horizontal layout with contained variant and minimal links.',
669
+ },
670
+ },
671
+ },
672
672
  };
673
673
 
674
674
  export const DataBindingEcommerce: Story = {
675
- args: {
676
- dataSource: 'footers.ecommerce',
677
- },
678
- render: (args) => (
679
- <QwickApp appId="footer-data-ecommerce" appName='Footer Data Binding Ecommerce' dataSource={{ dataProvider }}>
680
- <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
681
- <div style={{ textAlign: 'center', maxWidth: '600px' }}>
682
- <h1>E-Commerce Store</h1>
683
- <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
684
- E-commerce footer with shopping categories and customer support sections.
685
- </p>
686
- </div>
687
- </div>
688
- <Footer {...args} />
689
- </QwickApp>
690
- ),
691
- parameters: {
692
- docs: {
693
- description: {
694
- story: 'E-commerce footer loaded from CMS. Features outlined variant with shopping and support sections.',
695
- },
696
- },
697
- },
675
+ args: {
676
+ dataSource: 'footers.ecommerce',
677
+ },
678
+ render: (args) => (
679
+ <QwickApp appId="footer-data-ecommerce" appName='Footer Data Binding Ecommerce' dataSource={{ dataProvider }}>
680
+ <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
681
+ <div style={{ textAlign: 'center', maxWidth: '600px' }}>
682
+ <h1>E-Commerce Store</h1>
683
+ <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
684
+ E-commerce footer with shopping categories and customer support sections.
685
+ </p>
686
+ </div>
687
+ </div>
688
+ <Footer {...args} />
689
+ </QwickApp>
690
+ ),
691
+ parameters: {
692
+ docs: {
693
+ description: {
694
+ story: 'E-commerce footer loaded from CMS. Features outlined variant with shopping and support sections.',
695
+ },
696
+ },
697
+ },
698
698
  };
699
699
 
700
700
  export const DataBindingMinimal: Story = {
701
- args: {
702
- dataSource: 'footers.minimal',
703
- },
704
- render: (args) => (
705
- <QwickApp appId="footer-data-minimal" appName='Footer Data Binding Minimal' dataSource={{ dataProvider }}>
706
- <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
707
- <div style={{ textAlign: 'center', maxWidth: '600px' }}>
708
- <h1>Minimal Site</h1>
709
- <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
710
- Ultra-minimal footer with just copyright information.
711
- </p>
712
- </div>
713
- </div>
714
- <Footer {...args} />
715
- </QwickApp>
716
- ),
717
- parameters: {
718
- docs: {
719
- description: {
720
- story: 'Minimal footer loaded from CMS. Shows the simplest possible footer with just copyright text.',
721
- },
722
- },
723
- },
701
+ args: {
702
+ dataSource: 'footers.minimal',
703
+ },
704
+ render: (args) => (
705
+ <QwickApp appId="footer-data-minimal" appName='Footer Data Binding Minimal' dataSource={{ dataProvider }}>
706
+ <div style={{ minHeight: '50vh', padding: '2rem', display: 'flex', alignItems: 'center', justifyContent: 'center' }}>
707
+ <div style={{ textAlign: 'center', maxWidth: '600px' }}>
708
+ <h1>Minimal Site</h1>
709
+ <p style={{ fontSize: '1.2rem', color: 'var(--theme-on-background)', opacity: 0.8, marginBottom: '3rem' }}>
710
+ Ultra-minimal footer with just copyright information.
711
+ </p>
712
+ </div>
713
+ </div>
714
+ <Footer {...args} />
715
+ </QwickApp>
716
+ ),
717
+ parameters: {
718
+ docs: {
719
+ description: {
720
+ story: 'Minimal footer loaded from CMS. Shows the simplest possible footer with just copyright text.',
721
+ },
722
+ },
723
+ },
724
724
  };