@qwickapps/react-framework 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/LICENSE +44 -0
  2. package/README.md +794 -0
  3. package/dist/components/AccessibilityChecker.d.ts +12 -0
  4. package/dist/components/AccessibilityChecker.d.ts.map +1 -0
  5. package/dist/components/Html.d.ts +48 -0
  6. package/dist/components/Html.d.ts.map +1 -0
  7. package/dist/components/Logo.d.ts +79 -0
  8. package/dist/components/Logo.d.ts.map +1 -0
  9. package/dist/components/Markdown.d.ts +47 -0
  10. package/dist/components/Markdown.d.ts.map +1 -0
  11. package/dist/components/QwickApp.d.ts +56 -0
  12. package/dist/components/QwickApp.d.ts.map +1 -0
  13. package/dist/components/QwickAppsLogo.d.ts +25 -0
  14. package/dist/components/QwickAppsLogo.d.ts.map +1 -0
  15. package/dist/components/ResponsiveMenu.d.ts +38 -0
  16. package/dist/components/ResponsiveMenu.d.ts.map +1 -0
  17. package/dist/components/SafeSpan.d.ts +23 -0
  18. package/dist/components/SafeSpan.d.ts.map +1 -0
  19. package/dist/components/Scaffold.d.ts +57 -0
  20. package/dist/components/Scaffold.d.ts.map +1 -0
  21. package/dist/components/blocks/Article.d.ts +23 -0
  22. package/dist/components/blocks/Article.d.ts.map +1 -0
  23. package/dist/components/blocks/CardListGrid.d.ts +23 -0
  24. package/dist/components/blocks/CardListGrid.d.ts.map +1 -0
  25. package/dist/components/blocks/Code.d.ts +21 -0
  26. package/dist/components/blocks/Code.d.ts.map +1 -0
  27. package/dist/components/blocks/Content.d.ts +24 -0
  28. package/dist/components/blocks/Content.d.ts.map +1 -0
  29. package/dist/components/blocks/CoverImageHeader.d.ts +44 -0
  30. package/dist/components/blocks/CoverImageHeader.d.ts.map +1 -0
  31. package/dist/components/blocks/FeatureCard.d.ts +66 -0
  32. package/dist/components/blocks/FeatureCard.d.ts.map +1 -0
  33. package/dist/components/blocks/FeatureGrid.d.ts +48 -0
  34. package/dist/components/blocks/FeatureGrid.d.ts.map +1 -0
  35. package/dist/components/blocks/Footer.d.ts +56 -0
  36. package/dist/components/blocks/Footer.d.ts.map +1 -0
  37. package/dist/components/blocks/HeroBlock.d.ts +33 -0
  38. package/dist/components/blocks/HeroBlock.d.ts.map +1 -0
  39. package/dist/components/blocks/PageBannerHeader.d.ts +30 -0
  40. package/dist/components/blocks/PageBannerHeader.d.ts.map +1 -0
  41. package/dist/components/blocks/ProductCard.d.ts +57 -0
  42. package/dist/components/blocks/ProductCard.d.ts.map +1 -0
  43. package/dist/components/blocks/Section.d.ts +40 -0
  44. package/dist/components/blocks/Section.d.ts.map +1 -0
  45. package/dist/components/blocks/index.d.ts +37 -0
  46. package/dist/components/blocks/index.d.ts.map +1 -0
  47. package/dist/components/buttons/Button.d.ts +38 -0
  48. package/dist/components/buttons/Button.d.ts.map +1 -0
  49. package/dist/components/buttons/PaletteSwitcher.d.ts +24 -0
  50. package/dist/components/buttons/PaletteSwitcher.d.ts.map +1 -0
  51. package/dist/components/buttons/ThemeSwitcher.d.ts +24 -0
  52. package/dist/components/buttons/ThemeSwitcher.d.ts.map +1 -0
  53. package/dist/components/buttons/index.d.ts +11 -0
  54. package/dist/components/buttons/index.d.ts.map +1 -0
  55. package/dist/components/forms/FormBlock.d.ts +45 -0
  56. package/dist/components/forms/FormBlock.d.ts.map +1 -0
  57. package/dist/components/forms/index.d.ts +8 -0
  58. package/dist/components/forms/index.d.ts.map +1 -0
  59. package/dist/components/index.d.ts +32 -0
  60. package/dist/components/index.d.ts.map +1 -0
  61. package/dist/components/input/ChoiceInputField.d.ts +30 -0
  62. package/dist/components/input/ChoiceInputField.d.ts.map +1 -0
  63. package/dist/components/input/HtmlInputField.d.ts +29 -0
  64. package/dist/components/input/HtmlInputField.d.ts.map +1 -0
  65. package/dist/components/input/SelectInputField.d.ts +29 -0
  66. package/dist/components/input/SelectInputField.d.ts.map +1 -0
  67. package/dist/components/input/TextField.d.ts +18 -0
  68. package/dist/components/input/TextField.d.ts.map +1 -0
  69. package/dist/components/input/TextInputField.d.ts +32 -0
  70. package/dist/components/input/TextInputField.d.ts.map +1 -0
  71. package/dist/components/input/index.d.ts +17 -0
  72. package/dist/components/input/index.d.ts.map +1 -0
  73. package/dist/components/layout/GridCell.d.ts +16 -0
  74. package/dist/components/layout/GridCell.d.ts.map +1 -0
  75. package/dist/components/layout/GridCellWrapper.d.ts +46 -0
  76. package/dist/components/layout/GridCellWrapper.d.ts.map +1 -0
  77. package/dist/components/layout/GridLayout.d.ts +38 -0
  78. package/dist/components/layout/GridLayout.d.ts.map +1 -0
  79. package/dist/components/layout/index.d.ts +12 -0
  80. package/dist/components/layout/index.d.ts.map +1 -0
  81. package/dist/components/menu/Menu.d.ts +1 -0
  82. package/dist/components/menu/Menu.d.ts.map +1 -0
  83. package/dist/components/menu/MenuItem.d.ts +31 -0
  84. package/dist/components/menu/MenuItem.d.ts.map +1 -0
  85. package/dist/components/menu/index.d.ts +7 -0
  86. package/dist/components/menu/index.d.ts.map +1 -0
  87. package/dist/components/pages/FormPage.d.ts +66 -0
  88. package/dist/components/pages/FormPage.d.ts.map +1 -0
  89. package/dist/components/pages/Page.d.ts +124 -0
  90. package/dist/components/pages/Page.d.ts.map +1 -0
  91. package/dist/components/pages/index.d.ts +11 -0
  92. package/dist/components/pages/index.d.ts.map +1 -0
  93. package/dist/contexts/DataContext.d.ts +139 -0
  94. package/dist/contexts/DataContext.d.ts.map +1 -0
  95. package/dist/contexts/DimensionsContext.d.ts +42 -0
  96. package/dist/contexts/DimensionsContext.d.ts.map +1 -0
  97. package/dist/contexts/PaletteContext.d.ts +53 -0
  98. package/dist/contexts/PaletteContext.d.ts.map +1 -0
  99. package/dist/contexts/QwickAppContext.d.ts +71 -0
  100. package/dist/contexts/QwickAppContext.d.ts.map +1 -0
  101. package/dist/contexts/ThemeContext.d.ts +65 -0
  102. package/dist/contexts/ThemeContext.d.ts.map +1 -0
  103. package/dist/contexts/index.d.ts +9 -0
  104. package/dist/contexts/index.d.ts.map +1 -0
  105. package/dist/hooks/index.d.ts +10 -0
  106. package/dist/hooks/index.d.ts.map +1 -0
  107. package/dist/hooks/useBaseProps.d.ts +101 -0
  108. package/dist/hooks/useBaseProps.d.ts.map +1 -0
  109. package/dist/hooks/useDataBinding.d.ts +22 -0
  110. package/dist/hooks/useDataBinding.d.ts.map +1 -0
  111. package/dist/index.css +1 -0
  112. package/dist/index.d.ts +8 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.esm.css +1 -0
  115. package/dist/index.esm.js +24143 -0
  116. package/dist/index.js +24245 -0
  117. package/dist/palettes/PaletteAutumn.d.ts +10 -0
  118. package/dist/palettes/PaletteAutumn.d.ts.map +1 -0
  119. package/dist/palettes/PaletteCosmic.d.ts +10 -0
  120. package/dist/palettes/PaletteCosmic.d.ts.map +1 -0
  121. package/dist/palettes/PaletteDefault.d.ts +10 -0
  122. package/dist/palettes/PaletteDefault.d.ts.map +1 -0
  123. package/dist/palettes/PaletteOcean.d.ts +10 -0
  124. package/dist/palettes/PaletteOcean.d.ts.map +1 -0
  125. package/dist/palettes/PaletteSpring.d.ts +10 -0
  126. package/dist/palettes/PaletteSpring.d.ts.map +1 -0
  127. package/dist/palettes/PaletteWinter.d.ts +10 -0
  128. package/dist/palettes/PaletteWinter.d.ts.map +1 -0
  129. package/dist/palettes/index.d.ts +13 -0
  130. package/dist/palettes/index.d.ts.map +1 -0
  131. package/dist/schemas/ActionSchema.d.ts +21 -0
  132. package/dist/schemas/ActionSchema.d.ts.map +1 -0
  133. package/dist/schemas/ArticleSchema.d.ts +13 -0
  134. package/dist/schemas/ArticleSchema.d.ts.map +1 -0
  135. package/dist/schemas/Builders.d.ts +7 -0
  136. package/dist/schemas/Builders.d.ts.map +1 -0
  137. package/dist/schemas/ButtonSchema.d.ts +19 -0
  138. package/dist/schemas/ButtonSchema.d.ts.map +1 -0
  139. package/dist/schemas/CardListGridSchema.d.ts +17 -0
  140. package/dist/schemas/CardListGridSchema.d.ts.map +1 -0
  141. package/dist/schemas/ChoiceInputFieldSchema.d.ts +18 -0
  142. package/dist/schemas/ChoiceInputFieldSchema.d.ts.map +1 -0
  143. package/dist/schemas/CodeSchema.d.ts +18 -0
  144. package/dist/schemas/CodeSchema.d.ts.map +1 -0
  145. package/dist/schemas/ContentSchema.d.ts +20 -0
  146. package/dist/schemas/ContentSchema.d.ts.map +1 -0
  147. package/dist/schemas/CoverImageHeaderSchema.d.ts +28 -0
  148. package/dist/schemas/CoverImageHeaderSchema.d.ts.map +1 -0
  149. package/dist/schemas/FeatureCardSchema.d.ts +28 -0
  150. package/dist/schemas/FeatureCardSchema.d.ts.map +1 -0
  151. package/dist/schemas/FeatureGridSchema.d.ts +17 -0
  152. package/dist/schemas/FeatureGridSchema.d.ts.map +1 -0
  153. package/dist/schemas/FeatureItemSchema.d.ts +16 -0
  154. package/dist/schemas/FeatureItemSchema.d.ts.map +1 -0
  155. package/dist/schemas/FooterItemSchema.d.ts +15 -0
  156. package/dist/schemas/FooterItemSchema.d.ts.map +1 -0
  157. package/dist/schemas/FooterSchema.d.ts +20 -0
  158. package/dist/schemas/FooterSchema.d.ts.map +1 -0
  159. package/dist/schemas/FooterSectionSchema.d.ts +15 -0
  160. package/dist/schemas/FooterSectionSchema.d.ts.map +1 -0
  161. package/dist/schemas/FormBlockSchema.d.ts +19 -0
  162. package/dist/schemas/FormBlockSchema.d.ts.map +1 -0
  163. package/dist/schemas/HeaderActionSchema.d.ts +17 -0
  164. package/dist/schemas/HeaderActionSchema.d.ts.map +1 -0
  165. package/dist/schemas/HeroBlockSchema.d.ts +22 -0
  166. package/dist/schemas/HeroBlockSchema.d.ts.map +1 -0
  167. package/dist/schemas/HtmlInputFieldSchema.d.ts +18 -0
  168. package/dist/schemas/HtmlInputFieldSchema.d.ts.map +1 -0
  169. package/dist/schemas/MetadataItemSchema.d.ts +13 -0
  170. package/dist/schemas/MetadataItemSchema.d.ts.map +1 -0
  171. package/dist/schemas/PageBannerHeaderSchema.d.ts +28 -0
  172. package/dist/schemas/PageBannerHeaderSchema.d.ts.map +1 -0
  173. package/dist/schemas/PaletteSwitcherSchema.d.ts +16 -0
  174. package/dist/schemas/PaletteSwitcherSchema.d.ts.map +1 -0
  175. package/dist/schemas/ProductCardSchema.d.ts +39 -0
  176. package/dist/schemas/ProductCardSchema.d.ts.map +1 -0
  177. package/dist/schemas/SafeSpanSchema.d.ts +13 -0
  178. package/dist/schemas/SafeSpanSchema.d.ts.map +1 -0
  179. package/dist/schemas/SectionSchema.d.ts +17 -0
  180. package/dist/schemas/SectionSchema.d.ts.map +1 -0
  181. package/dist/schemas/SelectInputFieldSchema.d.ts +27 -0
  182. package/dist/schemas/SelectInputFieldSchema.d.ts.map +1 -0
  183. package/dist/schemas/TextInputFieldSchema.d.ts +22 -0
  184. package/dist/schemas/TextInputFieldSchema.d.ts.map +1 -0
  185. package/dist/schemas/ThemeSwitcherSchema.d.ts +19 -0
  186. package/dist/schemas/ThemeSwitcherSchema.d.ts.map +1 -0
  187. package/dist/schemas/index.d.ts +33 -0
  188. package/dist/schemas/index.d.ts.map +1 -0
  189. package/dist/schemas/types.d.ts +7 -0
  190. package/dist/schemas/types.d.ts.map +1 -0
  191. package/dist/templates/TemplateResolver.d.ts +52 -0
  192. package/dist/templates/TemplateResolver.d.ts.map +1 -0
  193. package/dist/templates/index.d.ts +7 -0
  194. package/dist/templates/index.d.ts.map +1 -0
  195. package/dist/tests/ConsoleWarningTest.d.ts +5 -0
  196. package/dist/tests/ConsoleWarningTest.d.ts.map +1 -0
  197. package/dist/tests/StorageKeyTest.d.ts +6 -0
  198. package/dist/tests/StorageKeyTest.d.ts.map +1 -0
  199. package/dist/tests/ThemeStorageKeyTest.d.ts +6 -0
  200. package/dist/tests/ThemeStorageKeyTest.d.ts.map +1 -0
  201. package/dist/types/CacheProvider.d.ts +18 -0
  202. package/dist/types/CacheProvider.d.ts.map +1 -0
  203. package/dist/types/ContentProxy.d.ts +47 -0
  204. package/dist/types/ContentProxy.d.ts.map +1 -0
  205. package/dist/types/DataBinding.d.ts +7 -0
  206. package/dist/types/DataBinding.d.ts.map +1 -0
  207. package/dist/types/DataProvider.d.ts +7 -0
  208. package/dist/types/DataProvider.d.ts.map +1 -0
  209. package/dist/types/DataTypes.d.ts +185 -0
  210. package/dist/types/DataTypes.d.ts.map +1 -0
  211. package/dist/types/TemplateProvider.d.ts +10 -0
  212. package/dist/types/TemplateProvider.d.ts.map +1 -0
  213. package/dist/types/TemplateResolver.d.ts +23 -0
  214. package/dist/types/TemplateResolver.d.ts.map +1 -0
  215. package/dist/types/index.d.ts +81 -0
  216. package/dist/types/index.d.ts.map +1 -0
  217. package/dist/utils/breakpoints.d.ts +35 -0
  218. package/dist/utils/breakpoints.d.ts.map +1 -0
  219. package/dist/utils/customPaletteManager.d.ts +8 -0
  220. package/dist/utils/customPaletteManager.d.ts.map +1 -0
  221. package/dist/utils/dimensions.d.ts +34 -0
  222. package/dist/utils/dimensions.d.ts.map +1 -0
  223. package/dist/utils/htmlTransform.d.ts +44 -0
  224. package/dist/utils/htmlTransform.d.ts.map +1 -0
  225. package/dist/utils/index.d.ts +15 -0
  226. package/dist/utils/index.d.ts.map +1 -0
  227. package/dist/utils/logger.d.ts +14 -0
  228. package/dist/utils/logger.d.ts.map +1 -0
  229. package/dist/utils/paletteUtils.d.ts +38 -0
  230. package/dist/utils/paletteUtils.d.ts.map +1 -0
  231. package/dist/utils/persistenceUtils.d.ts +31 -0
  232. package/dist/utils/persistenceUtils.d.ts.map +1 -0
  233. package/dist/utils/reactUtils.d.ts +24 -0
  234. package/dist/utils/reactUtils.d.ts.map +1 -0
  235. package/dist/utils/spacing.d.ts +34 -0
  236. package/dist/utils/spacing.d.ts.map +1 -0
  237. package/dist/utils/themePerformanceMonitor.d.ts +32 -0
  238. package/dist/utils/themePerformanceMonitor.d.ts.map +1 -0
  239. package/dist/utils/themeUtils.d.ts +27 -0
  240. package/dist/utils/themeUtils.d.ts.map +1 -0
  241. package/package.json +141 -0
  242. package/src/__tests__/components/Logo.test.js +172 -0
  243. package/src/__tests__/contexts/DataContext.test.js +505 -0
  244. package/src/__tests__/contexts/PaletteContext.test.js +115 -0
  245. package/src/__tests__/contexts/ThemeContext.test.js +123 -0
  246. package/src/__tests__/utils/paletteUtils.test.js +142 -0
  247. package/src/__tests__/utils/themeUtils.test.js +142 -0
  248. package/src/components/AccessibilityChecker.tsx +264 -0
  249. package/src/components/Html.tsx +191 -0
  250. package/src/components/Logo.css +217 -0
  251. package/src/components/Logo.tsx +370 -0
  252. package/src/components/Markdown.tsx +191 -0
  253. package/src/components/QwickApp.css +257 -0
  254. package/src/components/QwickApp.tsx +157 -0
  255. package/src/components/QwickAppsLogo.tsx +77 -0
  256. package/src/components/ResponsiveMenu.css +416 -0
  257. package/src/components/ResponsiveMenu.tsx +310 -0
  258. package/src/components/SafeSpan.tsx +128 -0
  259. package/src/components/Scaffold.css +541 -0
  260. package/src/components/Scaffold.tsx +463 -0
  261. package/src/components/__tests__/Article.test.tsx +419 -0
  262. package/src/components/__tests__/Button.test.tsx +702 -0
  263. package/src/components/__tests__/CardListGrid.test.tsx +478 -0
  264. package/src/components/__tests__/ChoiceInputField.test.tsx +864 -0
  265. package/src/components/__tests__/Code.test.tsx +595 -0
  266. package/src/components/__tests__/Content.integration.test.tsx +193 -0
  267. package/src/components/__tests__/Content.test.tsx +504 -0
  268. package/src/components/__tests__/CoverImageHeader.test.tsx +456 -0
  269. package/src/components/__tests__/FeatureCard.integration.test.tsx +384 -0
  270. package/src/components/__tests__/FeatureGrid.integration.test.tsx +364 -0
  271. package/src/components/__tests__/FeatureGrid.test.tsx +494 -0
  272. package/src/components/__tests__/Footer.test.tsx +544 -0
  273. package/src/components/__tests__/FormBlock.test.tsx +857 -0
  274. package/src/components/__tests__/HeroBlock.integration.test.tsx +272 -0
  275. package/src/components/__tests__/HeroBlock.test.tsx +463 -0
  276. package/src/components/__tests__/Html.test.tsx +174 -0
  277. package/src/components/__tests__/HtmlInputField.test.tsx +856 -0
  278. package/src/components/__tests__/Markdown.test.tsx +233 -0
  279. package/src/components/__tests__/PageBannerHeader.test.tsx +614 -0
  280. package/src/components/__tests__/PaletteSwitcher.test.tsx +864 -0
  281. package/src/components/__tests__/ProductCard.test.tsx +377 -0
  282. package/src/components/__tests__/SafeSpan.integration.test.tsx +123 -0
  283. package/src/components/__tests__/SafeSpan.simple.test.tsx +65 -0
  284. package/src/components/__tests__/SafeSpan.test.tsx +388 -0
  285. package/src/components/__tests__/Section.integration.test.tsx +288 -0
  286. package/src/components/__tests__/Section.test.tsx +494 -0
  287. package/src/components/__tests__/SelectInputField.test.tsx +886 -0
  288. package/src/components/__tests__/TextInputField.test.tsx +749 -0
  289. package/src/components/__tests__/ThemeSwitcher.test.tsx +777 -0
  290. package/src/components/blocks/Article.tsx +194 -0
  291. package/src/components/blocks/CardListGrid.tsx +132 -0
  292. package/src/components/blocks/Code.tsx +313 -0
  293. package/src/components/blocks/Content.tsx +265 -0
  294. package/src/components/blocks/CoverImageHeader.css +17 -0
  295. package/src/components/blocks/CoverImageHeader.tsx +435 -0
  296. package/src/components/blocks/FeatureCard.tsx +321 -0
  297. package/src/components/blocks/FeatureGrid.tsx +147 -0
  298. package/src/components/blocks/Footer.tsx +343 -0
  299. package/src/components/blocks/HeroBlock.tsx +280 -0
  300. package/src/components/blocks/PageBannerHeader.tsx +471 -0
  301. package/src/components/blocks/ProductCard.tsx +472 -0
  302. package/src/components/blocks/Section.tsx +209 -0
  303. package/src/components/blocks/index.ts +37 -0
  304. package/src/components/buttons/Button.tsx +233 -0
  305. package/src/components/buttons/PaletteSwitcher.tsx +268 -0
  306. package/src/components/buttons/ThemeSwitcher.tsx +283 -0
  307. package/src/components/buttons/index.ts +11 -0
  308. package/src/components/forms/FormBlock.tsx +291 -0
  309. package/src/components/forms/index.ts +7 -0
  310. package/src/components/index.ts +37 -0
  311. package/src/components/input/ChoiceInputField.tsx +188 -0
  312. package/src/components/input/HtmlInputField.tsx +326 -0
  313. package/src/components/input/SelectInputField.tsx +197 -0
  314. package/src/components/input/TextField.tsx +47 -0
  315. package/src/components/input/TextInputField.tsx +144 -0
  316. package/src/components/input/index.ts +17 -0
  317. package/src/components/layout/GridCell.tsx +46 -0
  318. package/src/components/layout/GridCellWrapper.tsx +87 -0
  319. package/src/components/layout/GridLayout.tsx +169 -0
  320. package/src/components/layout/index.ts +13 -0
  321. package/src/components/menu/Menu.tsx +0 -0
  322. package/src/components/menu/MenuItem.tsx +32 -0
  323. package/src/components/menu/index.ts +6 -0
  324. package/src/components/pages/FormPage.tsx +108 -0
  325. package/src/components/pages/Page.css +460 -0
  326. package/src/components/pages/Page.tsx +345 -0
  327. package/src/components/pages/index.ts +11 -0
  328. package/src/contexts/DataContext.tsx +355 -0
  329. package/src/contexts/DimensionsContext.tsx +154 -0
  330. package/src/contexts/PaletteContext.tsx +217 -0
  331. package/src/contexts/QwickAppContext.tsx +95 -0
  332. package/src/contexts/ThemeContext.tsx +376 -0
  333. package/src/contexts/index.ts +9 -0
  334. package/src/hooks/__tests__/useDataBinding.test.tsx.disabled +229 -0
  335. package/src/hooks/index.ts +11 -0
  336. package/src/hooks/useBaseProps.ts +267 -0
  337. package/src/hooks/useDataBinding.ts +77 -0
  338. package/src/index.ts +23 -0
  339. package/src/palettes/PaletteAutumn.css +172 -0
  340. package/src/palettes/PaletteAutumn.ts +16 -0
  341. package/src/palettes/PaletteCosmic.css +172 -0
  342. package/src/palettes/PaletteCosmic.ts +16 -0
  343. package/src/palettes/PaletteDefault.css +178 -0
  344. package/src/palettes/PaletteDefault.ts +17 -0
  345. package/src/palettes/PaletteOcean.css +172 -0
  346. package/src/palettes/PaletteOcean.ts +16 -0
  347. package/src/palettes/PaletteSpring.css +160 -0
  348. package/src/palettes/PaletteSpring.ts +16 -0
  349. package/src/palettes/PaletteWinter.css +172 -0
  350. package/src/palettes/PaletteWinter.ts +16 -0
  351. package/src/palettes/index.css +12 -0
  352. package/src/palettes/index.ts +29 -0
  353. package/src/schemas/ActionSchema.ts +140 -0
  354. package/src/schemas/ArticleSchema.ts +35 -0
  355. package/src/schemas/ButtonSchema.ts +99 -0
  356. package/src/schemas/CardListGridSchema.ts +102 -0
  357. package/src/schemas/ChoiceInputFieldSchema.ts +89 -0
  358. package/src/schemas/CodeSchema.ts +88 -0
  359. package/src/schemas/ContentSchema.ts +128 -0
  360. package/src/schemas/CoverImageHeaderSchema.ts +208 -0
  361. package/src/schemas/FeatureCardSchema.ts +161 -0
  362. package/src/schemas/FeatureGridSchema.ts +87 -0
  363. package/src/schemas/FeatureItemSchema.ts +68 -0
  364. package/src/schemas/FooterItemSchema.ts +57 -0
  365. package/src/schemas/FooterSchema.ts +116 -0
  366. package/src/schemas/FooterSectionSchema.ts +50 -0
  367. package/src/schemas/FormBlockSchema.ts +102 -0
  368. package/src/schemas/HeaderActionSchema.ts +83 -0
  369. package/src/schemas/HeroBlockSchema.ts +149 -0
  370. package/src/schemas/HtmlInputFieldSchema.ts +88 -0
  371. package/src/schemas/MetadataItemSchema.ts +35 -0
  372. package/src/schemas/PageBannerHeaderSchema.ts +206 -0
  373. package/src/schemas/PaletteSwitcherSchema.ts +66 -0
  374. package/src/schemas/ProductCardSchema.ts +264 -0
  375. package/src/schemas/SafeSpanSchema.ts +36 -0
  376. package/src/schemas/SectionSchema.ts +106 -0
  377. package/src/schemas/SelectInputFieldSchema.ts +137 -0
  378. package/src/schemas/TextInputFieldSchema.ts +129 -0
  379. package/src/schemas/ThemeSwitcherSchema.ts +97 -0
  380. package/src/schemas/__tests__/builders.test.ts +313 -0
  381. package/src/schemas/index.ts +34 -0
  382. package/src/setupTests.js +60 -0
  383. package/src/stories/Article.stories.tsx +549 -0
  384. package/src/stories/Button.stories.tsx +498 -0
  385. package/src/stories/CardListGrid.stories.tsx +539 -0
  386. package/src/stories/ChoiceInputField.stories.tsx +591 -0
  387. package/src/stories/Code.stories.tsx +711 -0
  388. package/src/stories/Content.stories.tsx +463 -0
  389. package/src/stories/CoverImageHeader.stories.tsx +794 -0
  390. package/src/stories/DataBinding.advanced.stories.tsx +548 -0
  391. package/src/stories/DataBinding.stories.tsx +452 -0
  392. package/src/stories/DataProvider.stories.tsx +1361 -0
  393. package/src/stories/FeatureCard.stories.tsx +642 -0
  394. package/src/stories/FeatureGrid.stories.tsx +669 -0
  395. package/src/stories/Footer.stories.tsx +724 -0
  396. package/src/stories/FormBlock.stories.tsx +834 -0
  397. package/src/stories/HeroBlock.stories.tsx +442 -0
  398. package/src/stories/Html.stories.tsx +264 -0
  399. package/src/stories/HtmlInputField.stories.tsx +558 -0
  400. package/src/stories/Introduction.stories.tsx +721 -0
  401. package/src/stories/LayoutBlocks.stories.tsx +382 -0
  402. package/src/stories/LayoutSystem.stories.tsx +253 -0
  403. package/src/stories/Logo.stories.tsx +400 -0
  404. package/src/stories/Markdown.stories.tsx +349 -0
  405. package/src/stories/Page.stories.tsx +762 -0
  406. package/src/stories/PageBannerHeader.stories.tsx +949 -0
  407. package/src/stories/PaletteSwitcher.stories.tsx +156 -0
  408. package/src/stories/ProductCard.stories.tsx +504 -0
  409. package/src/stories/QwickApp.stories.tsx +461 -0
  410. package/src/stories/ResponsiveMenu.stories.tsx +299 -0
  411. package/src/stories/SafeSpan.stories.tsx +612 -0
  412. package/src/stories/Section.stories.tsx +613 -0
  413. package/src/stories/SelectInputField.stories.tsx +605 -0
  414. package/src/stories/TextInputField.stories.tsx +526 -0
  415. package/src/stories/ThemeSwitcher.stories.tsx +170 -0
  416. package/src/stories/form/FormComponents.stories.tsx +588 -0
  417. package/src/templates/TemplateResolver.ts +156 -0
  418. package/src/templates/index.ts +6 -0
  419. package/src/tests/ConsoleWarningTest.tsx +30 -0
  420. package/src/tests/StorageKeyTest.tsx +110 -0
  421. package/src/tests/ThemeStorageKeyTest.tsx +114 -0
  422. package/src/types/CacheProvider.ts +14 -0
  423. package/src/types/ContentProxy.ts +99 -0
  424. package/src/types/DataTypes.ts +196 -0
  425. package/src/types/TemplateProvider.ts +9 -0
  426. package/src/types/TemplateResolver.ts +26 -0
  427. package/src/types/index.ts +99 -0
  428. package/src/utils/__tests__/createDataDrivenComponent.test.tsx.disabled +193 -0
  429. package/src/utils/__tests__/htmlTransform.test.tsx +255 -0
  430. package/src/utils/breakpoints.ts +87 -0
  431. package/src/utils/customPaletteManager.js +214 -0
  432. package/src/utils/dimensions.ts +147 -0
  433. package/src/utils/htmlTransform.tsx +323 -0
  434. package/src/utils/index.ts +16 -0
  435. package/src/utils/logger.ts +28 -0
  436. package/src/utils/paletteUtils.ts +78 -0
  437. package/src/utils/persistenceUtils.ts +107 -0
  438. package/src/utils/reactUtils.tsx +37 -0
  439. package/src/utils/spacing.ts +155 -0
  440. package/src/utils/themePerformanceMonitor.js +113 -0
  441. package/src/utils/themeUtils.ts +67 -0
@@ -0,0 +1,605 @@
1
+ /**
2
+ * SelectInputField Component Stories - Select dropdown with data binding support
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ import { Box, Typography } from '@mui/material';
8
+ import { JsonDataProvider } from '@qwickapps/schema';
9
+ import type { Meta, StoryObj } from '@storybook/react';
10
+ import { Code } from '../components/blocks';
11
+ import SelectInputField from '../components/input/SelectInputField';
12
+ import QwickApp from '../components/QwickApp';
13
+
14
+ // Sample select field data for different use cases
15
+ const sampleCmsData = {
16
+ 'selectInputFields': {
17
+ 'basic-dropdown': {
18
+ label: 'Country',
19
+ placeholder: 'Select your country',
20
+ required: true,
21
+ options: [
22
+ { label: 'United States', value: 'us' },
23
+ { label: 'Canada', value: 'ca' },
24
+ { label: 'United Kingdom', value: 'uk' },
25
+ { label: 'Germany', value: 'de' },
26
+ { label: 'France', value: 'fr' },
27
+ { label: 'Australia', value: 'au' },
28
+ { label: 'Japan', value: 'jp' }
29
+ ]
30
+ },
31
+ 'user-role': {
32
+ label: 'User Role',
33
+ placeholder: 'Choose user role',
34
+ required: true,
35
+ helperText: 'Select the appropriate role for this user',
36
+ options: [
37
+ { label: 'Administrator', value: 'admin' },
38
+ { label: 'Editor', value: 'editor' },
39
+ { label: 'Author', value: 'author' },
40
+ { label: 'Contributor', value: 'contributor' },
41
+ { label: 'Subscriber', value: 'subscriber' }
42
+ ]
43
+ },
44
+ 'product-category': {
45
+ label: 'Product Category',
46
+ placeholder: 'Select category',
47
+ helperText: 'Choose the most appropriate category',
48
+ options: [
49
+ { label: 'Electronics', value: 'electronics' },
50
+ { label: 'Clothing & Fashion', value: 'clothing' },
51
+ { label: 'Home & Garden', value: 'home-garden' },
52
+ { label: 'Books & Media', value: 'books-media' },
53
+ { label: 'Sports & Outdoors', value: 'sports' },
54
+ { label: 'Health & Beauty', value: 'health-beauty' }
55
+ ]
56
+ },
57
+ 'priority-level': {
58
+ label: 'Priority Level',
59
+ placeholder: 'Set priority',
60
+ required: true,
61
+ options: [
62
+ { label: '🔥 Critical', value: 'critical' },
63
+ { label: '⚡ High', value: 'high' },
64
+ { label: '🟡 Medium', value: 'medium' },
65
+ { label: '🔵 Low', value: 'low' },
66
+ { label: '⚪ Minimal', value: 'minimal' }
67
+ ]
68
+ },
69
+ 'subscription-plan': {
70
+ label: 'Subscription Plan',
71
+ placeholder: 'Choose your plan',
72
+ required: true,
73
+ helperText: 'You can upgrade or downgrade at any time',
74
+ options: [
75
+ { label: 'Free Plan - $0/month', value: 'free' },
76
+ { label: 'Starter Plan - $9/month', value: 'starter' },
77
+ { label: 'Professional Plan - $29/month', value: 'professional' },
78
+ { label: 'Enterprise Plan - $99/month', value: 'enterprise' }
79
+ ]
80
+ },
81
+ 'language-preference': {
82
+ label: 'Language Preference',
83
+ placeholder: 'Select language',
84
+ helperText: 'Choose your preferred interface language',
85
+ options: [
86
+ { label: '🇺🇸 English', value: 'en' },
87
+ { label: '🇪🇸 Spanish', value: 'es' },
88
+ { label: '🇫🇷 French', value: 'fr' },
89
+ { label: '🇩🇪 German', value: 'de' },
90
+ { label: '🇮🇹 Italian', value: 'it' },
91
+ { label: '🇯🇵 Japanese', value: 'ja' },
92
+ { label: '🇰🇷 Korean', value: 'ko' },
93
+ { label: '🇨🇳 Chinese (Simplified)', value: 'zh-cn' }
94
+ ]
95
+ },
96
+ 'status-select': {
97
+ label: 'Status',
98
+ value: 'active',
99
+ options: [
100
+ { label: '✅ Active', value: 'active' },
101
+ { label: '⏸️ Pending', value: 'pending' },
102
+ { label: '❌ Inactive', value: 'inactive' },
103
+ { label: '🛑 Suspended', value: 'suspended' }
104
+ ]
105
+ },
106
+ 'disabled-select': {
107
+ label: 'Read-only Field',
108
+ value: 'locked-value',
109
+ disabled: true,
110
+ helperText: 'This field cannot be modified',
111
+ options: [
112
+ { label: 'Locked Value', value: 'locked-value' },
113
+ { label: 'Alternative Option', value: 'alt-option' }
114
+ ]
115
+ },
116
+ 'error-select': {
117
+ label: 'Department',
118
+ placeholder: 'Select department',
119
+ error: 'Please select a valid department',
120
+ required: true,
121
+ options: [
122
+ { label: 'Engineering', value: 'engineering' },
123
+ { label: 'Design', value: 'design' },
124
+ { label: 'Marketing', value: 'marketing' },
125
+ { label: 'Sales', value: 'sales' }
126
+ ]
127
+ },
128
+ 'numeric-options': {
129
+ label: 'Team Size',
130
+ placeholder: 'Select team size',
131
+ helperText: 'Approximate number of team members',
132
+ options: [
133
+ { label: '1-5 people', value: 5 },
134
+ { label: '6-10 people', value: 10 },
135
+ { label: '11-25 people', value: 25 },
136
+ { label: '26-50 people', value: 50 },
137
+ { label: '51-100 people', value: 100 },
138
+ { label: '100+ people', value: 999 }
139
+ ]
140
+ }
141
+ }
142
+ };
143
+
144
+ const dataProvider = new JsonDataProvider({ data: sampleCmsData });
145
+
146
+ const meta = {
147
+ title: 'Forms/SelectInputField',
148
+ component: SelectInputField,
149
+ parameters: {
150
+ layout: 'padded',
151
+ docs: {
152
+ description: {
153
+ component: `SelectInputField is a dropdown select component with comprehensive features and data binding support for form building.
154
+
155
+ **Key Features:**
156
+ - **Flexible Options**: Support for string and numeric values with custom labels
157
+ - **Rich Option Display**: Support for emoji and formatted option labels
158
+ - **Validation States**: Built-in error handling and helper text display
159
+ - **Data Binding**: Full CMS integration through dataSource prop
160
+ - **Accessibility**: Complete ARIA support and keyboard navigation
161
+ - **Theme Integration**: Automatically uses QwickApp theme styling
162
+ - **Base Props**: Supports grid behavior and consistent styling patterns
163
+ - **Placeholder Support**: Configurable placeholder text for empty state
164
+
165
+ **Perfect For:**
166
+ - User role and permission selection
167
+ - Category and classification dropdowns
168
+ - Settings and preference selection
169
+ - Status and priority selection
170
+ - Language and region selection
171
+ - Any single-choice selection requirement`,
172
+ },
173
+ },
174
+ },
175
+ tags: ['autodocs'],
176
+ } satisfies Meta<typeof SelectInputField>;
177
+
178
+ export default meta;
179
+ type Story = StoryObj<typeof SelectInputField>;
180
+
181
+ // Traditional Usage Examples
182
+ export const BasicDropdown: Story = {
183
+ render: () => (
184
+ <QwickApp appId="select-basic" appName='Basic Select'>
185
+ <SelectInputField
186
+ label="Country"
187
+ placeholder="Select your country"
188
+ options={[
189
+ { label: 'United States', value: 'us' },
190
+ { label: 'Canada', value: 'ca' },
191
+ { label: 'United Kingdom', value: 'uk' },
192
+ { label: 'Germany', value: 'de' }
193
+ ]}
194
+ onChange={(value) => console.log('Country selected:', value)}
195
+ />
196
+ </QwickApp>
197
+ ),
198
+ parameters: {
199
+ docs: {
200
+ description: {
201
+ story: 'Basic select dropdown with country options.',
202
+ },
203
+ },
204
+ },
205
+ };
206
+
207
+ export const WithIcons: Story = {
208
+ render: () => (
209
+ <QwickApp appId="select-icons" appName='Select with Icons'>
210
+ <SelectInputField
211
+ label="Priority Level"
212
+ placeholder="Set priority"
213
+ options={[
214
+ { label: '🔥 Critical', value: 'critical' },
215
+ { label: '⚡ High', value: 'high' },
216
+ { label: '🟡 Medium', value: 'medium' },
217
+ { label: '🔵 Low', value: 'low' },
218
+ { label: '⚪ Minimal', value: 'minimal' }
219
+ ]}
220
+ onChange={(value) => console.log('Priority selected:', value)}
221
+ />
222
+ </QwickApp>
223
+ ),
224
+ parameters: {
225
+ docs: {
226
+ description: {
227
+ story: 'Select dropdown with emoji icons in option labels.',
228
+ },
229
+ },
230
+ },
231
+ };
232
+
233
+ export const NumericValues: Story = {
234
+ render: () => (
235
+ <QwickApp appId="select-numeric" appName='Select with Numeric Values'>
236
+ <SelectInputField
237
+ label="Team Size"
238
+ placeholder="Select team size"
239
+ helperText="Approximate number of team members"
240
+ options={[
241
+ { label: '1-5 people', value: 5 },
242
+ { label: '6-10 people', value: 10 },
243
+ { label: '11-25 people', value: 25 },
244
+ { label: '26-50 people', value: 50 },
245
+ { label: '100+ people', value: 999 }
246
+ ]}
247
+ onChange={(value) => console.log('Team size selected:', value)}
248
+ />
249
+ </QwickApp>
250
+ ),
251
+ parameters: {
252
+ docs: {
253
+ description: {
254
+ story: 'Select dropdown with numeric values and descriptive labels.',
255
+ },
256
+ },
257
+ },
258
+ };
259
+
260
+ export const WithHelperText: Story = {
261
+ render: () => (
262
+ <QwickApp appId="select-helper" appName='Select with Helper Text'>
263
+ <SelectInputField
264
+ label="Subscription Plan"
265
+ placeholder="Choose your plan"
266
+ required={true}
267
+ helperText="You can upgrade or downgrade at any time"
268
+ options={[
269
+ { label: 'Free Plan - $0/month', value: 'free' },
270
+ { label: 'Starter Plan - $9/month', value: 'starter' },
271
+ { label: 'Professional Plan - $29/month', value: 'professional' },
272
+ { label: 'Enterprise Plan - $99/month', value: 'enterprise' }
273
+ ]}
274
+ onChange={(value) => console.log('Plan selected:', value)}
275
+ />
276
+ </QwickApp>
277
+ ),
278
+ parameters: {
279
+ docs: {
280
+ description: {
281
+ story: 'Select dropdown with helper text and pricing information.',
282
+ },
283
+ },
284
+ },
285
+ };
286
+
287
+ export const States: Story = {
288
+ render: () => (
289
+ <QwickApp appId="select-states" appName='Select Field States'>
290
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
291
+ <SelectInputField
292
+ label="Normal State"
293
+ placeholder="Select an option"
294
+ options={[
295
+ { label: 'Option 1', value: 'option1' },
296
+ { label: 'Option 2', value: 'option2' },
297
+ { label: 'Option 3', value: 'option3' }
298
+ ]}
299
+ onChange={(value) => console.log('Normal selected:', value)}
300
+ />
301
+
302
+ <SelectInputField
303
+ label="Required Field"
304
+ placeholder="This field is required"
305
+ required={true}
306
+ options={[
307
+ { label: 'Option A', value: 'a' },
308
+ { label: 'Option B', value: 'b' }
309
+ ]}
310
+ onChange={(value) => console.log('Required selected:', value)}
311
+ />
312
+
313
+ <SelectInputField
314
+ label="Pre-selected Value"
315
+ value="active"
316
+ options={[
317
+ { label: '✅ Active', value: 'active' },
318
+ { label: '❌ Inactive', value: 'inactive' }
319
+ ]}
320
+ onChange={(value) => console.log('Pre-selected changed:', value)}
321
+ />
322
+
323
+ <SelectInputField
324
+ label="Disabled Field"
325
+ value="locked"
326
+ disabled={true}
327
+ options={[
328
+ { label: 'Locked Value', value: 'locked' },
329
+ { label: 'Alternative', value: 'alt' }
330
+ ]}
331
+ />
332
+
333
+ <SelectInputField
334
+ label="Error State"
335
+ placeholder="Select a department"
336
+ error="Please select a valid department"
337
+ options={[
338
+ { label: 'Engineering', value: 'eng' },
339
+ { label: 'Design', value: 'design' },
340
+ { label: 'Marketing', value: 'marketing' }
341
+ ]}
342
+ onChange={(value) => console.log('Error field selected:', value)}
343
+ />
344
+ </Box>
345
+ </QwickApp>
346
+ ),
347
+ parameters: {
348
+ docs: {
349
+ description: {
350
+ story: 'Different select field states including normal, required, pre-selected, disabled, and error states.',
351
+ },
352
+ },
353
+ },
354
+ };
355
+
356
+ // Data Binding Examples
357
+ export const DataBindingBasic: Story = {
358
+ render: () => (
359
+ <QwickApp appId="select-data-binding" appName='SelectInputField Data Binding' dataSource={{ dataProvider }}>
360
+ <Box>
361
+
362
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
363
+ <Typography variant="h5" gutterBottom>📊 Data-Driven Select</Typography>
364
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
365
+ SelectInputField components can be completely driven by CMS data, loading options and configuration from your data source.
366
+ </Typography>
367
+
368
+ <Code title="Usage" language="tsx">{`<SelectInputField dataSource="selectInputFields.basic-dropdown" />`}</Code>
369
+
370
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.selectInputFields['basic-dropdown'], null, 2)}</Code>
371
+ </Box>
372
+
373
+ <SelectInputField dataSource="selectInputFields.basic-dropdown" />
374
+
375
+ </Box>
376
+ </QwickApp>
377
+ ),
378
+ parameters: {
379
+ docs: {
380
+ description: {
381
+ story: 'SelectInputField with data binding - options and configuration resolved from CMS data through dataSource.',
382
+ },
383
+ },
384
+ },
385
+ };
386
+
387
+ export const DataBindingAdvanced: Story = {
388
+ render: () => (
389
+ <QwickApp appId="select-data-advanced" appName='Advanced SelectInputField Data Binding' dataSource={{ dataProvider }}>
390
+ <Box>
391
+
392
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
393
+ <Typography variant="h5" gutterBottom>🎯 Multiple Select Types</Typography>
394
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
395
+ Different SelectInputField instances can load different option sets and configurations from separate data sources.
396
+ </Typography>
397
+ </Box>
398
+
399
+ {/* User Management */}
400
+ <Box sx={{ mb: 4 }}>
401
+ <Typography variant="h4" gutterBottom>User Management</Typography>
402
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
403
+ <SelectInputField dataSource="selectInputFields.user-role" />
404
+ <SelectInputField dataSource="selectInputFields.status-select" />
405
+ <SelectInputField dataSource="selectInputFields.language-preference" />
406
+ </Box>
407
+ </Box>
408
+
409
+ {/* Business Settings */}
410
+ <Box sx={{ mb: 4 }}>
411
+ <Typography variant="h4" gutterBottom>Business Configuration</Typography>
412
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
413
+ <SelectInputField dataSource="selectInputFields.subscription-plan" />
414
+ <SelectInputField dataSource="selectInputFields.numeric-options" />
415
+ <SelectInputField dataSource="selectInputFields.basic-dropdown" />
416
+ </Box>
417
+ </Box>
418
+
419
+ {/* Project Management */}
420
+ <Box sx={{ mb: 4 }}>
421
+ <Typography variant="h4" gutterBottom>Project Settings</Typography>
422
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
423
+ <SelectInputField dataSource="selectInputFields.priority-level" />
424
+ <SelectInputField dataSource="selectInputFields.product-category" />
425
+ <SelectInputField dataSource="selectInputFields.error-select" />
426
+ </Box>
427
+ </Box>
428
+
429
+ </Box>
430
+ </QwickApp>
431
+ ),
432
+ parameters: {
433
+ docs: {
434
+ description: {
435
+ story: 'Advanced data binding with multiple select types showcasing different option sets and configurations.',
436
+ },
437
+ },
438
+ },
439
+ };
440
+
441
+ export const DataBindingWithFallback: Story = {
442
+ render: () => (
443
+ <QwickApp appId="select-fallback" appName='SelectInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
444
+ <Box>
445
+
446
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
447
+ <Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
448
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
449
+ SelectInputField components gracefully handle missing data sources with fallback options.
450
+ </Typography>
451
+
452
+ <Code title="Fallback Usage" language="tsx">{`<SelectInputField
453
+ dataSource="nonexistent.field"
454
+ label="Fallback Select"
455
+ placeholder="Choose option"
456
+ options={[
457
+ { label: 'Fallback Option 1', value: 'fb1' },
458
+ { label: 'Fallback Option 2', value: 'fb2' }
459
+ ]}
460
+ />`}</Code>
461
+ </Box>
462
+
463
+ <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
464
+ <Box>
465
+ <Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
466
+ <SelectInputField
467
+ dataSource="nonexistent.field"
468
+ label="Fallback Select"
469
+ placeholder="Choose option"
470
+ options={[
471
+ { label: 'Fallback Option 1', value: 'fb1' },
472
+ { label: 'Fallback Option 2', value: 'fb2' }
473
+ ]}
474
+ />
475
+ </Box>
476
+ <Box>
477
+ <Typography variant="h6" gutterBottom>Valid Data Source</Typography>
478
+ <SelectInputField dataSource="selectInputFields.basic-dropdown" />
479
+ </Box>
480
+ </Box>
481
+
482
+ </Box>
483
+ </QwickApp>
484
+ ),
485
+ parameters: {
486
+ docs: {
487
+ description: {
488
+ story: 'SelectInputField with fallback options when dataSource is missing or unavailable.',
489
+ },
490
+ },
491
+ },
492
+ };
493
+
494
+ export const RealWorldExample: Story = {
495
+ render: () => (
496
+ <QwickApp appId="select-real-world" appName='Real World SelectInputField Example' dataSource={{ dataProvider }}>
497
+ <Box>
498
+
499
+ {/* User Profile Setup */}
500
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
501
+ <Typography variant="h3" gutterBottom>User Profile Setup</Typography>
502
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
503
+ Configure your account settings and preferences
504
+ </Typography>
505
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 3, maxWidth: 800 }}>
506
+ <SelectInputField dataSource="selectInputFields.basic-dropdown" />
507
+ <SelectInputField dataSource="selectInputFields.language-preference" />
508
+ <SelectInputField dataSource="selectInputFields.user-role" />
509
+ <SelectInputField dataSource="selectInputFields.subscription-plan" />
510
+ </Box>
511
+ </Box>
512
+
513
+ {/* Project Management Dashboard */}
514
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
515
+ <Typography variant="h3" gutterBottom>Project Configuration</Typography>
516
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
517
+ Set up your project parameters and team settings
518
+ </Typography>
519
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr 1fr' }, gap: 3, maxWidth: 1000 }}>
520
+ <SelectInputField dataSource="selectInputFields.priority-level" />
521
+ <SelectInputField dataSource="selectInputFields.product-category" />
522
+ <SelectInputField dataSource="selectInputFields.numeric-options" />
523
+ </Box>
524
+ </Box>
525
+
526
+ {/* System Administration */}
527
+ <Box sx={{ p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
528
+ <Typography variant="h3" gutterBottom>System Administration</Typography>
529
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
530
+ Manage system-wide settings and user permissions
531
+ </Typography>
532
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 500 }}>
533
+ <SelectInputField dataSource="selectInputFields.status-select" />
534
+ <SelectInputField dataSource="selectInputFields.disabled-select" />
535
+ <SelectInputField dataSource="selectInputFields.error-select" />
536
+ </Box>
537
+ </Box>
538
+
539
+ </Box>
540
+ </QwickApp>
541
+ ),
542
+ parameters: {
543
+ docs: {
544
+ description: {
545
+ story: 'Real-world example showing SelectInputField in various contexts: user profiles, project management, and system administration.',
546
+ },
547
+ },
548
+ },
549
+ };
550
+
551
+ export const OptionsShowcase: Story = {
552
+ render: () => (
553
+ <QwickApp appId="select-showcase" appName='SelectInputField Options Showcase' dataSource={{ dataProvider }}>
554
+ <Box>
555
+
556
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
557
+ <Typography variant="h5" gutterBottom>🎨 Options Showcase</Typography>
558
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
559
+ SelectInputField supports various option formats including icons, pricing, status indicators, and numeric values.
560
+ </Typography>
561
+ </Box>
562
+
563
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(350px, 1fr))', gap: 4 }}>
564
+ <Box>
565
+ <Typography variant="h6" gutterBottom>Basic Text Options</Typography>
566
+ <SelectInputField dataSource="selectInputFields.basic-dropdown" />
567
+ </Box>
568
+
569
+ <Box>
570
+ <Typography variant="h6" gutterBottom>Icon-Enhanced Options</Typography>
571
+ <SelectInputField dataSource="selectInputFields.priority-level" />
572
+ </Box>
573
+
574
+ <Box>
575
+ <Typography variant="h6" gutterBottom>Pricing Options</Typography>
576
+ <SelectInputField dataSource="selectInputFields.subscription-plan" />
577
+ </Box>
578
+
579
+ <Box>
580
+ <Typography variant="h6" gutterBottom>Status Indicators</Typography>
581
+ <SelectInputField dataSource="selectInputFields.status-select" />
582
+ </Box>
583
+
584
+ <Box>
585
+ <Typography variant="h6" gutterBottom>Numeric Values</Typography>
586
+ <SelectInputField dataSource="selectInputFields.numeric-options" />
587
+ </Box>
588
+
589
+ <Box>
590
+ <Typography variant="h6" gutterBottom>Multi-language Options</Typography>
591
+ <SelectInputField dataSource="selectInputFields.language-preference" />
592
+ </Box>
593
+ </Box>
594
+
595
+ </Box>
596
+ </QwickApp>
597
+ ),
598
+ parameters: {
599
+ docs: {
600
+ description: {
601
+ story: 'Comprehensive showcase of different SelectInputField option formats and styles.',
602
+ },
603
+ },
604
+ },
605
+ };