@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
@@ -13,98 +13,98 @@ import QwickApp from '../components/QwickApp';
13
13
 
14
14
  // Sample HTML input field data for different use cases
15
15
  const sampleCmsData = {
16
- 'htmlInputFields': {
17
- 'blog-content': {
18
- label: 'Blog Post Content',
19
- placeholder: 'Write your blog post content with HTML formatting...',
20
- required: true,
21
- multiline: true,
22
- rows: 6,
23
- value: '<p>Welcome to our <b>amazing</b> blog! Here you can share your <i>thoughts</i> and <u>experiences</u>.</p>'
24
- },
25
- 'product-description': {
26
- label: 'Product Description',
27
- placeholder: 'Describe your product with rich formatting...',
28
- required: true,
29
- multiline: true,
30
- rows: 4,
31
- value: '<p>This <b>premium product</b> features:</p><br/>• Advanced <code>technology</code><br/>• <i>Elegant</i> design<br/>• <u>Lifetime warranty</u>'
32
- },
33
- 'announcement-banner': {
34
- label: 'Site Announcement',
35
- placeholder: 'Create an announcement with HTML styling...',
36
- multiline: false,
37
- value: '🎉 <b>New Feature Launch!</b> Experience our <i>enhanced</i> <code>user interface</code>'
38
- },
39
- 'email-signature': {
40
- label: 'Email Signature',
41
- placeholder: 'Create your HTML email signature...',
42
- multiline: true,
43
- rows: 3,
44
- value: '<b>John Doe</b><br/><i>Senior Developer</i><br/>📧 john@example.com | 📱 +1-555-0123'
45
- },
46
- 'newsletter-intro': {
47
- label: 'Newsletter Introduction',
48
- placeholder: 'Write the newsletter intro with formatting...',
49
- required: true,
50
- multiline: true,
51
- rows: 4,
52
- value: '<p>Hello <b>subscribers</b>! Welcome to our <i>monthly newsletter</i>.</p><p>This month we are excited to share <u>exciting updates</u> and <code>new features</code>.</p>'
53
- },
54
- 'testimonial-quote': {
55
- label: 'Customer Testimonial',
56
- placeholder: 'Add customer testimonial with HTML styling...',
57
- multiline: true,
58
- rows: 3,
59
- value: '<i>"This product has <b>transformed</b> our workflow. The <code>automation features</code> are incredible!"</i><br/><br/>- <b>Sarah Johnson</b>, CEO'
60
- },
61
- 'feature-highlight': {
62
- label: 'Feature Highlight',
63
- placeholder: 'Highlight key features with HTML...',
64
- multiline: true,
65
- rows: 5,
66
- value: '<p><b>🚀 Key Features:</b></p><p>• <u>Real-time</u> collaboration<br/>• <code>API integration</code><br/>• <i>Advanced</i> analytics<br/>• <b>24/7</b> support</p>'
67
- },
68
- 'code-snippet': {
69
- label: 'Code Documentation',
70
- placeholder: 'Document code with HTML formatting...',
71
- multiline: true,
72
- rows: 4,
73
- value: '<p>Use the <code>useState</code> hook for <b>state management</b>:</p><br/><code>const [count, setCount] = useState(0);</code><br/><br/><i>Remember to import from React!</i>'
74
- },
75
- 'event-details': {
76
- label: 'Event Details',
77
- placeholder: 'Add event information with styling...',
78
- multiline: true,
79
- rows: 5,
80
- value: '<b>🎪 Annual Tech Conference 2025</b><br/><br/>📅 <i>March 15-17, 2025</i><br/>📍 <u>San Francisco Convention Center</u><br/>🎟️ <code>Early bird tickets available</code>'
81
- },
82
- 'basic-html': {
83
- label: 'Basic HTML Content',
84
- placeholder: 'Enter HTML content...',
85
- multiline: true,
86
- rows: 4
87
- },
88
- 'disabled-field': {
89
- label: 'Read-only Content',
90
- value: 'This content is <b>read-only</b> and <i>cannot be edited</i>.',
91
- disabled: true,
92
- multiline: true,
93
- rows: 2
94
- }
95
- }
16
+ 'htmlInputFields': {
17
+ 'blog-content': {
18
+ label: 'Blog Post Content',
19
+ placeholder: 'Write your blog post content with HTML formatting...',
20
+ required: true,
21
+ multiline: true,
22
+ rows: 6,
23
+ value: '<p>Welcome to our <b>amazing</b> blog! Here you can share your <i>thoughts</i> and <u>experiences</u>.</p>'
24
+ },
25
+ 'product-description': {
26
+ label: 'Product Description',
27
+ placeholder: 'Describe your product with rich formatting...',
28
+ required: true,
29
+ multiline: true,
30
+ rows: 4,
31
+ value: '<p>This <b>premium product</b> features:</p><br/>• Advanced <code>technology</code><br/>• <i>Elegant</i> design<br/>• <u>Lifetime warranty</u>'
32
+ },
33
+ 'announcement-banner': {
34
+ label: 'Site Announcement',
35
+ placeholder: 'Create an announcement with HTML styling...',
36
+ multiline: false,
37
+ value: ' <b>New Feature Launch!</b> Experience our <i>enhanced</i> <code>user interface</code>'
38
+ },
39
+ 'email-signature': {
40
+ label: 'Email Signature',
41
+ placeholder: 'Create your HTML email signature...',
42
+ multiline: true,
43
+ rows: 3,
44
+ value: '<b>John Doe</b><br/><i>Senior Developer</i><br/>📧 john@example.com | +1-555-0123'
45
+ },
46
+ 'newsletter-intro': {
47
+ label: 'Newsletter Introduction',
48
+ placeholder: 'Write the newsletter intro with formatting...',
49
+ required: true,
50
+ multiline: true,
51
+ rows: 4,
52
+ value: '<p>Hello <b>subscribers</b>! Welcome to our <i>monthly newsletter</i>.</p><p>This month we are excited to share <u>exciting updates</u> and <code>new features</code>.</p>'
53
+ },
54
+ 'testimonial-quote': {
55
+ label: 'Customer Testimonial',
56
+ placeholder: 'Add customer testimonial with HTML styling...',
57
+ multiline: true,
58
+ rows: 3,
59
+ value: '<i>"This product has <b>transformed</b> our workflow. The <code>automation features</code> are incredible!"</i><br/><br/>- <b>Sarah Johnson</b>, CEO'
60
+ },
61
+ 'feature-highlight': {
62
+ label: 'Feature Highlight',
63
+ placeholder: 'Highlight key features with HTML...',
64
+ multiline: true,
65
+ rows: 5,
66
+ value: '<p><b> Key Features:</b></p><p>• <u>Real-time</u> collaboration<br/>• <code>API integration</code><br/>• <i>Advanced</i> analytics<br/>• <b>24/7</b> support</p>'
67
+ },
68
+ 'code-snippet': {
69
+ label: 'Code Documentation',
70
+ placeholder: 'Document code with HTML formatting...',
71
+ multiline: true,
72
+ rows: 4,
73
+ value: '<p>Use the <code>useState</code> hook for <b>state management</b>:</p><br/><code>const [count, setCount] = useState(0);</code><br/><br/><i>Remember to import from React!</i>'
74
+ },
75
+ 'event-details': {
76
+ label: 'Event Details',
77
+ placeholder: 'Add event information with styling...',
78
+ multiline: true,
79
+ rows: 5,
80
+ value: '<b>🎪 Annual Tech Conference 2025</b><br/><br/>📅 <i>March 15-17, 2025</i><br/>📍 <u>San Francisco Convention Center</u><br/>🎟 <code>Early bird tickets available</code>'
81
+ },
82
+ 'basic-html': {
83
+ label: 'Basic HTML Content',
84
+ placeholder: 'Enter HTML content...',
85
+ multiline: true,
86
+ rows: 4
87
+ },
88
+ 'disabled-field': {
89
+ label: 'Read-only Content',
90
+ value: 'This content is <b>read-only</b> and <i>cannot be edited</i>.',
91
+ disabled: true,
92
+ multiline: true,
93
+ rows: 2
94
+ }
95
+ }
96
96
  };
97
97
 
98
98
  const dataProvider = new JsonDataProvider({ data: sampleCmsData });
99
99
 
100
100
  const meta = {
101
- title: 'Forms/HtmlInputField',
102
- component: HtmlInputField,
103
- parameters: {
104
- layout: 'padded',
105
- docs: {
106
- description: {
107
- component: `HtmlInputField is a rich text editor component with HTML formatting capabilities and data binding support for content creation.
101
+ title: 'Forms/HtmlInputField',
102
+ component: HtmlInputField,
103
+ parameters: {
104
+ layout: 'padded',
105
+ docs: {
106
+ description: {
107
+ component: `HtmlInputField is a rich text editor component with HTML formatting capabilities and data binding support for content creation.
108
108
 
109
109
  **Key Features:**
110
110
  - **Rich Text Formatting**: Built-in toolbar with bold, italic, underline, and code formatting
@@ -123,10 +123,10 @@ const meta = {
123
123
  - Rich text comments and feedback
124
124
  - Documentation and help content
125
125
  - Any content requiring HTML formatting capabilities`,
126
- },
127
- },
128
- },
129
- tags: ['autodocs'],
126
+ },
127
+ },
128
+ },
129
+ tags: ['autodocs'],
130
130
  } satisfies Meta<typeof HtmlInputField>;
131
131
 
132
132
  export default meta;
@@ -134,425 +134,425 @@ type Story = StoryObj<typeof HtmlInputField>;
134
134
 
135
135
  // Traditional Usage Examples
136
136
  export const BasicHtmlEditor: Story = {
137
- render: () => (
138
- <QwickApp appId="html-input-basic" appName='Basic HTML Editor'>
139
- <HtmlInputField
140
- label="Content Editor"
141
- placeholder="Enter HTML content..."
142
- multiline={true}
143
- rows={4}
144
- onChange={(value) => console.log('HTML content changed:', value)}
145
- />
146
- </QwickApp>
147
- ),
148
- parameters: {
149
- docs: {
150
- description: {
151
- story: 'Basic HTML input field with formatting toolbar and preview capabilities.',
152
- },
153
- },
154
- },
137
+ render: () => (
138
+ <QwickApp appId="html-input-basic" appName='Basic HTML Editor'>
139
+ <HtmlInputField
140
+ label="Content Editor"
141
+ placeholder="Enter HTML content..."
142
+ multiline={true}
143
+ rows={4}
144
+ onChange={(value) => console.log('HTML content changed:', value)}
145
+ />
146
+ </QwickApp>
147
+ ),
148
+ parameters: {
149
+ docs: {
150
+ description: {
151
+ story: 'Basic HTML input field with formatting toolbar and preview capabilities.',
152
+ },
153
+ },
154
+ },
155
155
  };
156
156
 
157
157
  export const BlogContentEditor: Story = {
158
- render: () => (
159
- <QwickApp appId="html-input-blog" appName='Blog Content Editor'>
160
- <HtmlInputField
161
- label="Blog Post Content"
162
- placeholder="Write your blog post content with HTML formatting..."
163
- required={true}
164
- multiline={true}
165
- rows={6}
166
- value='<p>Welcome to our <b>amazing</b> blog! Here you can share your <i>thoughts</i> and <u>experiences</u>.</p>'
167
- onChange={(value) => console.log('Blog content:', value)}
168
- />
169
- </QwickApp>
170
- ),
171
- parameters: {
172
- docs: {
173
- description: {
174
- story: 'Rich HTML editor configured for blog post content creation with initial content.',
175
- },
176
- },
177
- },
158
+ render: () => (
159
+ <QwickApp appId="html-input-blog" appName='Blog Content Editor'>
160
+ <HtmlInputField
161
+ label="Blog Post Content"
162
+ placeholder="Write your blog post content with HTML formatting..."
163
+ required={true}
164
+ multiline={true}
165
+ rows={6}
166
+ value='<p>Welcome to our <b>amazing</b> blog! Here you can share your <i>thoughts</i> and <u>experiences</u>.</p>'
167
+ onChange={(value) => console.log('Blog content:', value)}
168
+ />
169
+ </QwickApp>
170
+ ),
171
+ parameters: {
172
+ docs: {
173
+ description: {
174
+ story: 'Rich HTML editor configured for blog post content creation with initial content.',
175
+ },
176
+ },
177
+ },
178
178
  };
179
179
 
180
180
  export const ProductDescription: Story = {
181
- render: () => (
182
- <QwickApp appId="html-input-product" appName='Product Description Editor'>
183
- <HtmlInputField
184
- label="Product Description"
185
- placeholder="Describe your product with rich formatting..."
186
- required={true}
187
- multiline={true}
188
- rows={4}
189
- value='<p>This <b>premium product</b> features:</p><br/>• Advanced <code>technology</code><br/>• <i>Elegant</i> design<br/>• <u>Lifetime warranty</u>'
190
- onChange={(value) => console.log('Product description:', value)}
191
- />
192
- </QwickApp>
193
- ),
194
- parameters: {
195
- docs: {
196
- description: {
197
- story: 'HTML editor for product descriptions with formatting for features and highlights.',
198
- },
199
- },
200
- },
181
+ render: () => (
182
+ <QwickApp appId="html-input-product" appName='Product Description Editor'>
183
+ <HtmlInputField
184
+ label="Product Description"
185
+ placeholder="Describe your product with rich formatting..."
186
+ required={true}
187
+ multiline={true}
188
+ rows={4}
189
+ value='<p>This <b>premium product</b> features:</p><br/>• Advanced <code>technology</code><br/>• <i>Elegant</i> design<br/>• <u>Lifetime warranty</u>'
190
+ onChange={(value) => console.log('Product description:', value)}
191
+ />
192
+ </QwickApp>
193
+ ),
194
+ parameters: {
195
+ docs: {
196
+ description: {
197
+ story: 'HTML editor for product descriptions with formatting for features and highlights.',
198
+ },
199
+ },
200
+ },
201
201
  };
202
202
 
203
203
  export const SingleLineHtml: Story = {
204
- render: () => (
205
- <QwickApp appId="html-input-single" appName='Single Line HTML'>
206
- <HtmlInputField
207
- label="Site Announcement"
208
- placeholder="Create an announcement with HTML styling..."
209
- multiline={false}
210
- value='🎉 <b>New Feature Launch!</b> Experience our <i>enhanced</i> <code>user interface</code>'
211
- onChange={(value) => console.log('Announcement:', value)}
212
- />
213
- </QwickApp>
214
- ),
215
- parameters: {
216
- docs: {
217
- description: {
218
- story: 'Single-line HTML input field for announcements and short formatted content.',
219
- },
220
- },
221
- },
204
+ render: () => (
205
+ <QwickApp appId="html-input-single" appName='Single Line HTML'>
206
+ <HtmlInputField
207
+ label="Site Announcement"
208
+ placeholder="Create an announcement with HTML styling..."
209
+ multiline={false}
210
+ value=' <b>New Feature Launch!</b> Experience our <i>enhanced</i> <code>user interface</code>'
211
+ onChange={(value) => console.log('Announcement:', value)}
212
+ />
213
+ </QwickApp>
214
+ ),
215
+ parameters: {
216
+ docs: {
217
+ description: {
218
+ story: 'Single-line HTML input field for announcements and short formatted content.',
219
+ },
220
+ },
221
+ },
222
222
  };
223
223
 
224
224
  export const FormattingShowcase: Story = {
225
- render: () => (
226
- <QwickApp appId="html-input-formatting" appName='HTML Formatting Showcase'>
227
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
228
- <Alert severity="info">
229
- <Typography variant="body2">
230
- Use the toolbar buttons to format selected text, or click for insertion. Toggle preview mode to see the rendered output.
231
- </Typography>
232
- </Alert>
233
-
234
- <HtmlInputField
235
- label="Formatting Examples"
236
- placeholder="Try the formatting tools above..."
237
- multiline={true}
238
- rows={6}
239
- value='<p>Examples of <b>formatting</b>:</p><br/>• <b>Bold text</b> for emphasis<br/>• <i>Italic text</i> for style<br/>• <u>Underlined text</u> for highlighting<br/>• <code>Code snippets</code> for technical content<br/><br/><p>Mix and match: <b><i>Bold italic</i></b> and <u><code>underlined code</code></u>!</p>'
240
- onChange={(value) => console.log('Formatted content:', value)}
241
- />
242
- </Box>
243
- </QwickApp>
244
- ),
245
- parameters: {
246
- docs: {
247
- description: {
248
- story: 'Showcase of HTML formatting capabilities with examples of different text styles.',
249
- },
250
- },
251
- },
225
+ render: () => (
226
+ <QwickApp appId="html-input-formatting" appName='HTML Formatting Showcase'>
227
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
228
+ <Alert severity="info">
229
+ <Typography variant="body2">
230
+ Use the toolbar buttons to format selected text, or click for insertion. Toggle preview mode to see the rendered output.
231
+ </Typography>
232
+ </Alert>
233
+
234
+ <HtmlInputField
235
+ label="Formatting Examples"
236
+ placeholder="Try the formatting tools above..."
237
+ multiline={true}
238
+ rows={6}
239
+ value='<p>Examples of <b>formatting</b>:</p><br/>• <b>Bold text</b> for emphasis<br/>• <i>Italic text</i> for style<br/>• <u>Underlined text</u> for highlighting<br/>• <code>Code snippets</code> for technical content<br/><br/><p>Mix and match: <b><i>Bold italic</i></b> and <u><code>underlined code</code></u>!</p>'
240
+ onChange={(value) => console.log('Formatted content:', value)}
241
+ />
242
+ </Box>
243
+ </QwickApp>
244
+ ),
245
+ parameters: {
246
+ docs: {
247
+ description: {
248
+ story: 'Showcase of HTML formatting capabilities with examples of different text styles.',
249
+ },
250
+ },
251
+ },
252
252
  };
253
253
 
254
254
  export const States: Story = {
255
- render: () => (
256
- <QwickApp appId="html-input-states" appName='HTML Input States'>
257
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
258
- <HtmlInputField
259
- label="Normal State"
260
- placeholder="Enter HTML content..."
261
- multiline={true}
262
- rows={3}
263
- onChange={(value) => console.log('Normal:', value)}
264
- />
265
-
266
- <HtmlInputField
267
- label="Required Field"
268
- placeholder="This field is required"
269
- required={true}
270
- multiline={true}
271
- rows={3}
272
- onChange={(value) => console.log('Required:', value)}
273
- />
274
-
275
- <HtmlInputField
276
- label="Pre-filled Content"
277
- value="<p>This field has <b>pre-filled</b> <i>content</i> with <code>formatting</code>.</p>"
278
- multiline={true}
279
- rows={3}
280
- onChange={(value) => console.log('Pre-filled:', value)}
281
- />
282
-
283
- <HtmlInputField
284
- label="Disabled Field"
285
- value="This content is <b>read-only</b> and <i>cannot be edited</i>."
286
- disabled={true}
287
- multiline={true}
288
- rows={2}
289
- />
290
- </Box>
291
- </QwickApp>
292
- ),
293
- parameters: {
294
- docs: {
295
- description: {
296
- story: 'Different HTML input field states including normal, required, pre-filled, and disabled.',
297
- },
298
- },
299
- },
255
+ render: () => (
256
+ <QwickApp appId="html-input-states" appName='HTML Input States'>
257
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
258
+ <HtmlInputField
259
+ label="Normal State"
260
+ placeholder="Enter HTML content..."
261
+ multiline={true}
262
+ rows={3}
263
+ onChange={(value) => console.log('Normal:', value)}
264
+ />
265
+
266
+ <HtmlInputField
267
+ label="Required Field"
268
+ placeholder="This field is required"
269
+ required={true}
270
+ multiline={true}
271
+ rows={3}
272
+ onChange={(value) => console.log('Required:', value)}
273
+ />
274
+
275
+ <HtmlInputField
276
+ label="Pre-filled Content"
277
+ value="<p>This field has <b>pre-filled</b> <i>content</i> with <code>formatting</code>.</p>"
278
+ multiline={true}
279
+ rows={3}
280
+ onChange={(value) => console.log('Pre-filled:', value)}
281
+ />
282
+
283
+ <HtmlInputField
284
+ label="Disabled Field"
285
+ value="This content is <b>read-only</b> and <i>cannot be edited</i>."
286
+ disabled={true}
287
+ multiline={true}
288
+ rows={2}
289
+ />
290
+ </Box>
291
+ </QwickApp>
292
+ ),
293
+ parameters: {
294
+ docs: {
295
+ description: {
296
+ story: 'Different HTML input field states including normal, required, pre-filled, and disabled.',
297
+ },
298
+ },
299
+ },
300
300
  };
301
301
 
302
302
  // Data Binding Examples
303
303
  export const DataBindingBasic: Story = {
304
- render: () => (
305
- <QwickApp appId="html-input-data-binding" appName='HtmlInputField Data Binding' dataSource={{ dataProvider }}>
306
- <Box>
307
-
308
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
309
- <Typography variant="h5" gutterBottom>📊 Data-Driven HTML Editor</Typography>
310
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
311
- HtmlInputField components can be completely driven by CMS data, loading content and configuration from your data source.
312
- </Typography>
313
-
314
- <Code title="Usage" language="tsx">{`<HtmlInputField dataSource="htmlInputFields.blog-content" />`}</Code>
315
-
316
- <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.htmlInputFields['blog-content'], null, 2)}</Code>
317
- </Box>
304
+ render: () => (
305
+ <QwickApp appId="html-input-data-binding" appName='HtmlInputField Data Binding' dataSource={{ dataProvider }}>
306
+ <Box>
307
+
308
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
309
+ <Typography variant="h5" gutterBottom> Data-Driven HTML Editor</Typography>
310
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
311
+ HtmlInputField components can be completely driven by CMS data, loading content and configuration from your data source.
312
+ </Typography>
313
+
314
+ <Code title="Usage" language="tsx">{`<HtmlInputField dataSource="htmlInputFields.blog-content" />`}</Code>
315
+
316
+ <Code title="Data Structure" language="json">{JSON.stringify(sampleCmsData.htmlInputFields['blog-content'], null, 2)}</Code>
317
+ </Box>
318
318
 
319
- <HtmlInputField dataSource="htmlInputFields.blog-content" />
320
-
321
- </Box>
322
- </QwickApp>
323
- ),
324
- parameters: {
325
- docs: {
326
- description: {
327
- story: 'HtmlInputField with data binding - content and configuration resolved from CMS data through dataSource.',
328
- },
329
- },
330
- },
319
+ <HtmlInputField dataSource="htmlInputFields.blog-content" />
320
+
321
+ </Box>
322
+ </QwickApp>
323
+ ),
324
+ parameters: {
325
+ docs: {
326
+ description: {
327
+ story: 'HtmlInputField with data binding - content and configuration resolved from CMS data through dataSource.',
328
+ },
329
+ },
330
+ },
331
331
  };
332
332
 
333
333
  export const DataBindingAdvanced: Story = {
334
- render: () => (
335
- <QwickApp appId="html-input-data-advanced" appName='Advanced HtmlInputField Data Binding' dataSource={{ dataProvider }}>
336
- <Box>
337
-
338
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
339
- <Typography variant="h5" gutterBottom>🎯 Multiple Content Types</Typography>
340
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
341
- Different HtmlInputField instances can load different content types and configurations from separate data sources.
342
- </Typography>
343
- </Box>
334
+ render: () => (
335
+ <QwickApp appId="html-input-data-advanced" appName='Advanced HtmlInputField Data Binding' dataSource={{ dataProvider }}>
336
+ <Box>
337
+
338
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
339
+ <Typography variant="h5" gutterBottom> Multiple Content Types</Typography>
340
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
341
+ Different HtmlInputField instances can load different content types and configurations from separate data sources.
342
+ </Typography>
343
+ </Box>
344
344
 
345
- {/* Content Creation */}
346
- <Box sx={{ mb: 4 }}>
347
- <Typography variant="h4" gutterBottom>Content Creation</Typography>
348
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
349
- <HtmlInputField dataSource="htmlInputFields.blog-content" />
350
- <HtmlInputField dataSource="htmlInputFields.newsletter-intro" />
351
- </Box>
352
- </Box>
345
+ {/* Content Creation */}
346
+ <Box sx={{ mb: 4 }}>
347
+ <Typography variant="h4" gutterBottom>Content Creation</Typography>
348
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
349
+ <HtmlInputField dataSource="htmlInputFields.blog-content" />
350
+ <HtmlInputField dataSource="htmlInputFields.newsletter-intro" />
351
+ </Box>
352
+ </Box>
353
353
 
354
- {/* Marketing Content */}
355
- <Box sx={{ mb: 4 }}>
356
- <Typography variant="h4" gutterBottom>Marketing & Sales</Typography>
357
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
358
- <HtmlInputField dataSource="htmlInputFields.product-description" />
359
- <HtmlInputField dataSource="htmlInputFields.testimonial-quote" />
360
- <HtmlInputField dataSource="htmlInputFields.feature-highlight" />
361
- </Box>
362
- </Box>
354
+ {/* Marketing Content */}
355
+ <Box sx={{ mb: 4 }}>
356
+ <Typography variant="h4" gutterBottom>Marketing & Sales</Typography>
357
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
358
+ <HtmlInputField dataSource="htmlInputFields.product-description" />
359
+ <HtmlInputField dataSource="htmlInputFields.testimonial-quote" />
360
+ <HtmlInputField dataSource="htmlInputFields.feature-highlight" />
361
+ </Box>
362
+ </Box>
363
363
 
364
- {/* Communication */}
365
- <Box sx={{ mb: 4 }}>
366
- <Typography variant="h4" gutterBottom>Communication</Typography>
367
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
368
- <HtmlInputField dataSource="htmlInputFields.email-signature" />
369
- <HtmlInputField dataSource="htmlInputFields.announcement-banner" />
370
- </Box>
371
- </Box>
372
-
373
- </Box>
374
- </QwickApp>
375
- ),
376
- parameters: {
377
- docs: {
378
- description: {
379
- story: 'Advanced data binding with multiple HTML content types showcasing different configurations and use cases.',
380
- },
381
- },
382
- },
364
+ {/* Communication */}
365
+ <Box sx={{ mb: 4 }}>
366
+ <Typography variant="h4" gutterBottom>Communication</Typography>
367
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, maxWidth: 800 }}>
368
+ <HtmlInputField dataSource="htmlInputFields.email-signature" />
369
+ <HtmlInputField dataSource="htmlInputFields.announcement-banner" />
370
+ </Box>
371
+ </Box>
372
+
373
+ </Box>
374
+ </QwickApp>
375
+ ),
376
+ parameters: {
377
+ docs: {
378
+ description: {
379
+ story: 'Advanced data binding with multiple HTML content types showcasing different configurations and use cases.',
380
+ },
381
+ },
382
+ },
383
383
  };
384
384
 
385
385
  export const DataBindingWithFallback: Story = {
386
- render: () => (
387
- <QwickApp appId="html-input-fallback" appName='HtmlInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
388
- <Box>
389
-
390
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
391
- <Typography variant="h5" gutterBottom>🛡️ Fallback Support</Typography>
392
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
393
- HtmlInputField components gracefully handle missing data sources with fallback configurations.
394
- </Typography>
395
-
396
- <Code title="Fallback Usage" language="tsx">{`<HtmlInputField
397
- dataSource="nonexistent.field"
398
- label="Fallback Editor"
399
- placeholder="This is fallback content"
400
- multiline={true}
401
- rows={4}
386
+ render: () => (
387
+ <QwickApp appId="html-input-fallback" appName='HtmlInputField Data Binding with Fallback' dataSource={{ dataProvider }}>
388
+ <Box>
389
+
390
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
391
+ <Typography variant="h5" gutterBottom> Fallback Support</Typography>
392
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
393
+ HtmlInputField components gracefully handle missing data sources with fallback configurations.
394
+ </Typography>
395
+
396
+ <Code title="Fallback Usage" language="tsx">{`<HtmlInputField
397
+ dataSource="nonexistent.field"
398
+ label="Fallback Editor"
399
+ placeholder="This is fallback content"
400
+ multiline={true}
401
+ rows={4}
402
402
  />`}</Code>
403
- </Box>
403
+ </Box>
404
404
 
405
- <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
406
- <Box>
407
- <Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
408
- <HtmlInputField
409
- dataSource="nonexistent.field"
410
- label="Fallback Editor"
411
- placeholder="This is fallback content..."
412
- multiline={true}
413
- rows={4}
414
- />
415
- </Box>
416
- <Box>
417
- <Typography variant="h6" gutterBottom>Valid Data Source</Typography>
418
- <HtmlInputField dataSource="htmlInputFields.blog-content" />
419
- </Box>
420
- </Box>
421
-
422
- </Box>
423
- </QwickApp>
424
- ),
425
- parameters: {
426
- docs: {
427
- description: {
428
- story: 'HtmlInputField with fallback configuration when dataSource is missing or unavailable.',
429
- },
430
- },
431
- },
405
+ <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 4 }}>
406
+ <Box>
407
+ <Typography variant="h6" gutterBottom>Missing Data Source (Fallback)</Typography>
408
+ <HtmlInputField
409
+ dataSource="nonexistent.field"
410
+ label="Fallback Editor"
411
+ placeholder="This is fallback content..."
412
+ multiline={true}
413
+ rows={4}
414
+ />
415
+ </Box>
416
+ <Box>
417
+ <Typography variant="h6" gutterBottom>Valid Data Source</Typography>
418
+ <HtmlInputField dataSource="htmlInputFields.blog-content" />
419
+ </Box>
420
+ </Box>
421
+
422
+ </Box>
423
+ </QwickApp>
424
+ ),
425
+ parameters: {
426
+ docs: {
427
+ description: {
428
+ story: 'HtmlInputField with fallback configuration when dataSource is missing or unavailable.',
429
+ },
430
+ },
431
+ },
432
432
  };
433
433
 
434
434
  export const RealWorldExample: Story = {
435
- render: () => (
436
- <QwickApp appId="html-input-real-world" appName='Real World HtmlInputField Example' dataSource={{ dataProvider }}>
437
- <Box>
438
-
439
- {/* Content Management System */}
440
- <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
441
- <Typography variant="h3" gutterBottom>Content Management</Typography>
442
- <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
443
- Create and manage rich content with HTML formatting capabilities
444
- </Typography>
445
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
446
- <HtmlInputField dataSource="htmlInputFields.blog-content" />
447
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 3 }}>
448
- <HtmlInputField dataSource="htmlInputFields.product-description" />
449
- <HtmlInputField dataSource="htmlInputFields.announcement-banner" />
450
- </Box>
451
- </Box>
452
- </Box>
453
-
454
- {/* Documentation Platform */}
455
- <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
456
- <Typography variant="h3" gutterBottom>Documentation & Support</Typography>
457
- <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
458
- Create technical documentation and support content with code formatting
459
- </Typography>
460
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
461
- <HtmlInputField dataSource="htmlInputFields.code-snippet" />
462
- <HtmlInputField dataSource="htmlInputFields.feature-highlight" />
463
- </Box>
464
- </Box>
465
-
466
- {/* Event Management */}
467
- <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
468
- <Typography variant="h3" gutterBottom>Event & Communication</Typography>
469
- <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
470
- Manage event details, newsletters, and customer communications
471
- </Typography>
472
- <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
473
- <HtmlInputField dataSource="htmlInputFields.event-details" />
474
- <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 3 }}>
475
- <HtmlInputField dataSource="htmlInputFields.newsletter-intro" />
476
- <HtmlInputField dataSource="htmlInputFields.email-signature" />
477
- </Box>
478
- </Box>
479
- </Box>
480
-
481
- {/* Customer Testimonials */}
482
- <Box sx={{ p: 4, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 2 }}>
483
- <Typography variant="h3" gutterBottom>Customer Success</Typography>
484
- <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
485
- Showcase customer testimonials and success stories
486
- </Typography>
487
- <Box sx={{ maxWidth: 700 }}>
488
- <HtmlInputField dataSource="htmlInputFields.testimonial-quote" />
489
- </Box>
490
- </Box>
491
-
492
- </Box>
493
- </QwickApp>
494
- ),
495
- parameters: {
496
- docs: {
497
- description: {
498
- story: 'Real-world example showing HtmlInputField in various contexts: content management, documentation, events, and testimonials.',
499
- },
500
- },
501
- },
435
+ render: () => (
436
+ <QwickApp appId="html-input-real-world" appName='Real World HtmlInputField Example' dataSource={{ dataProvider }}>
437
+ <Box>
438
+
439
+ {/* Content Management System */}
440
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
441
+ <Typography variant="h3" gutterBottom>Content Management</Typography>
442
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
443
+ Create and manage rich content with HTML formatting capabilities
444
+ </Typography>
445
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
446
+ <HtmlInputField dataSource="htmlInputFields.blog-content" />
447
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 3 }}>
448
+ <HtmlInputField dataSource="htmlInputFields.product-description" />
449
+ <HtmlInputField dataSource="htmlInputFields.announcement-banner" />
450
+ </Box>
451
+ </Box>
452
+ </Box>
453
+
454
+ {/* Documentation Platform */}
455
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'primary.main', color: 'primary.contrastText', borderRadius: 2 }}>
456
+ <Typography variant="h3" gutterBottom>Documentation & Support</Typography>
457
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
458
+ Create technical documentation and support content with code formatting
459
+ </Typography>
460
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
461
+ <HtmlInputField dataSource="htmlInputFields.code-snippet" />
462
+ <HtmlInputField dataSource="htmlInputFields.feature-highlight" />
463
+ </Box>
464
+ </Box>
465
+
466
+ {/* Event Management */}
467
+ <Box sx={{ mb: 6, p: 4, backgroundColor: 'background.paper', borderRadius: 2 }}>
468
+ <Typography variant="h3" gutterBottom>Event & Communication</Typography>
469
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.8 }}>
470
+ Manage event details, newsletters, and customer communications
471
+ </Typography>
472
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 4, maxWidth: 900 }}>
473
+ <HtmlInputField dataSource="htmlInputFields.event-details" />
474
+ <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', md: '1fr 1fr' }, gap: 3 }}>
475
+ <HtmlInputField dataSource="htmlInputFields.newsletter-intro" />
476
+ <HtmlInputField dataSource="htmlInputFields.email-signature" />
477
+ </Box>
478
+ </Box>
479
+ </Box>
480
+
481
+ {/* Customer Testimonials */}
482
+ <Box sx={{ p: 4, backgroundColor: 'secondary.main', color: 'secondary.contrastText', borderRadius: 2 }}>
483
+ <Typography variant="h3" gutterBottom>Customer Success</Typography>
484
+ <Typography variant="body1" sx={{ mb: 4, opacity: 0.9 }}>
485
+ Showcase customer testimonials and success stories
486
+ </Typography>
487
+ <Box sx={{ maxWidth: 700 }}>
488
+ <HtmlInputField dataSource="htmlInputFields.testimonial-quote" />
489
+ </Box>
490
+ </Box>
491
+
492
+ </Box>
493
+ </QwickApp>
494
+ ),
495
+ parameters: {
496
+ docs: {
497
+ description: {
498
+ story: 'Real-world example showing HtmlInputField in various contexts: content management, documentation, events, and testimonials.',
499
+ },
500
+ },
501
+ },
502
502
  };
503
503
 
504
504
  export const EditorFeatureShowcase: Story = {
505
- render: () => (
506
- <QwickApp appId="html-input-features" appName='HTML Editor Features Showcase' dataSource={{ dataProvider }}>
507
- <Box>
508
-
509
- <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
510
- <Typography variant="h5" gutterBottom>🎨 Editor Features</Typography>
511
- <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
512
- Comprehensive showcase of HtmlInputField features including formatting, preview, and various content types.
513
- </Typography>
514
- </Box>
505
+ render: () => (
506
+ <QwickApp appId="html-input-features" appName='HTML Editor Features Showcase' dataSource={{ dataProvider }}>
507
+ <Box>
508
+
509
+ <Box sx={{ p: 4, backgroundColor: 'background.paper' }}>
510
+ <Typography variant="h5" gutterBottom> Editor Features</Typography>
511
+ <Typography variant="body1" sx={{ mb: 3, opacity: 0.8 }}>
512
+ Comprehensive showcase of HtmlInputField features including formatting, preview, and various content types.
513
+ </Typography>
514
+ </Box>
515
515
 
516
- <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(400px, 1fr))', gap: 4 }}>
517
- <Box>
518
- <Typography variant="h6" gutterBottom>Rich Blog Content</Typography>
519
- <HtmlInputField dataSource="htmlInputFields.blog-content" />
520
- </Box>
521
-
522
- <Box>
523
- <Typography variant="h6" gutterBottom>Product Marketing</Typography>
524
- <HtmlInputField dataSource="htmlInputFields.product-description" />
525
- </Box>
526
-
527
- <Box>
528
- <Typography variant="h6" gutterBottom>Code Documentation</Typography>
529
- <HtmlInputField dataSource="htmlInputFields.code-snippet" />
530
- </Box>
531
-
532
- <Box>
533
- <Typography variant="h6" gutterBottom>Event Information</Typography>
534
- <HtmlInputField dataSource="htmlInputFields.event-details" />
535
- </Box>
536
-
537
- <Box>
538
- <Typography variant="h6" gutterBottom>Email Templates</Typography>
539
- <HtmlInputField dataSource="htmlInputFields.email-signature" />
540
- </Box>
541
-
542
- <Box>
543
- <Typography variant="h6" gutterBottom>Customer Feedback</Typography>
544
- <HtmlInputField dataSource="htmlInputFields.testimonial-quote" />
545
- </Box>
546
- </Box>
547
-
548
- </Box>
549
- </QwickApp>
550
- ),
551
- parameters: {
552
- docs: {
553
- description: {
554
- story: 'Comprehensive showcase of HtmlInputField capabilities across different content types and use cases.',
555
- },
556
- },
557
- },
516
+ <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(400px, 1fr))', gap: 4 }}>
517
+ <Box>
518
+ <Typography variant="h6" gutterBottom>Rich Blog Content</Typography>
519
+ <HtmlInputField dataSource="htmlInputFields.blog-content" />
520
+ </Box>
521
+
522
+ <Box>
523
+ <Typography variant="h6" gutterBottom>Product Marketing</Typography>
524
+ <HtmlInputField dataSource="htmlInputFields.product-description" />
525
+ </Box>
526
+
527
+ <Box>
528
+ <Typography variant="h6" gutterBottom>Code Documentation</Typography>
529
+ <HtmlInputField dataSource="htmlInputFields.code-snippet" />
530
+ </Box>
531
+
532
+ <Box>
533
+ <Typography variant="h6" gutterBottom>Event Information</Typography>
534
+ <HtmlInputField dataSource="htmlInputFields.event-details" />
535
+ </Box>
536
+
537
+ <Box>
538
+ <Typography variant="h6" gutterBottom>Email Templates</Typography>
539
+ <HtmlInputField dataSource="htmlInputFields.email-signature" />
540
+ </Box>
541
+
542
+ <Box>
543
+ <Typography variant="h6" gutterBottom>Customer Feedback</Typography>
544
+ <HtmlInputField dataSource="htmlInputFields.testimonial-quote" />
545
+ </Box>
546
+ </Box>
547
+
548
+ </Box>
549
+ </QwickApp>
550
+ ),
551
+ parameters: {
552
+ docs: {
553
+ description: {
554
+ story: 'Comprehensive showcase of HtmlInputField capabilities across different content types and use cases.',
555
+ },
556
+ },
557
+ },
558
558
  };