@gravity-ui/page-constructor 3.5.0-alpha.0 → 3.6.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 (311) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +2 -0
  3. package/build/cjs/blocks/Banner/schema.d.ts +63 -21
  4. package/build/cjs/blocks/CardLayout/schema.d.ts +10 -4
  5. package/build/cjs/blocks/Companies/schema.d.ts +5 -2
  6. package/build/cjs/blocks/ContentLayout/ContentLayout.js +3 -2
  7. package/build/cjs/blocks/ContentLayout/schema.d.ts +107 -61
  8. package/build/cjs/blocks/ContentLayout/schema.js +23 -18
  9. package/build/cjs/blocks/ExtendedFeatures/schema.d.ts +31 -4
  10. package/build/cjs/blocks/ExtendedFeatures/schema.js +2 -3
  11. package/build/cjs/blocks/FilterBlock/schema.d.ts +13 -5
  12. package/build/cjs/blocks/FilterBlock/schema.js +13 -2
  13. package/build/cjs/blocks/Header/Header.css +6 -7
  14. package/build/cjs/blocks/Header/schema.d.ts +92 -36
  15. package/build/cjs/blocks/Header/schema.js +1 -0
  16. package/build/cjs/blocks/HeaderSlider/schema.d.ts +48 -53
  17. package/build/cjs/blocks/HeaderSlider/schema.js +3 -1
  18. package/build/cjs/blocks/Icons/schema.d.ts +3 -1
  19. package/build/cjs/blocks/Icons/schema.js +2 -1
  20. package/build/cjs/blocks/Info/schema.d.ts +19 -8
  21. package/build/cjs/blocks/Map/schema.d.ts +17 -6
  22. package/build/cjs/blocks/Media/schema.d.ts +204 -152
  23. package/build/cjs/blocks/Media/schema.js +1 -1
  24. package/build/cjs/blocks/PromoFeaturesBlock/schema.d.ts +22 -8
  25. package/build/cjs/blocks/PromoFeaturesBlock/schema.js +1 -0
  26. package/build/cjs/blocks/Questions/schema.d.ts +7 -3
  27. package/build/cjs/blocks/Slider/schema.d.ts +13 -18
  28. package/build/cjs/blocks/Slider/schema.js +4 -5
  29. package/build/cjs/blocks/Table/schema.d.ts +5 -2
  30. package/build/cjs/blocks/Table/schema.js +12 -2
  31. package/build/cjs/blocks/Tabs/schema.d.ts +43 -16
  32. package/build/cjs/components/BlockBase/BlockBase.js +2 -2
  33. package/build/cjs/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
  34. package/build/cjs/components/Image/schema.d.ts +1 -0
  35. package/build/cjs/components/Image/schema.js +3 -2
  36. package/build/cjs/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
  37. package/build/cjs/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
  38. package/build/cjs/customization/BlockDecoration.d.ts +1 -1
  39. package/build/cjs/customization/BlockDecoration.js +5 -6
  40. package/build/cjs/editor/{Components → components}/AddBlock/AddBlock.css +1 -1
  41. package/build/cjs/editor/components/AddBlock/AddBlock.d.ts +7 -0
  42. package/build/cjs/editor/{Components → components}/AddBlock/AddBlock.js +2 -2
  43. package/build/cjs/editor/components/BlockForm/BlockForm.d.ts +12 -0
  44. package/build/cjs/editor/components/BlockForm/BlockForm.js +33 -0
  45. package/build/cjs/editor/components/ControlPanel/ControlPanel.css +26 -0
  46. package/build/cjs/editor/components/ControlPanel/ControlPanel.d.ts +8 -0
  47. package/build/cjs/editor/components/ControlPanel/ControlPanel.js +25 -0
  48. package/build/cjs/editor/components/ControlPanel/i18n/en.json +3 -0
  49. package/build/cjs/editor/components/ControlPanel/i18n/index.d.ts +2 -0
  50. package/build/cjs/editor/components/ControlPanel/i18n/index.js +8 -0
  51. package/build/cjs/editor/components/ControlPanel/i18n/ru.json +3 -0
  52. package/build/cjs/editor/components/EditBlock/EditBlock.d.ts +13 -0
  53. package/build/cjs/editor/components/EditBlock/EditBlock.js +44 -0
  54. package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.css +27 -0
  55. package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.d.ts +13 -0
  56. package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.js +35 -0
  57. package/build/cjs/editor/components/ErrorBoundary/i18n/en.json +4 -0
  58. package/build/cjs/editor/components/ErrorBoundary/i18n/index.d.ts +2 -0
  59. package/build/cjs/editor/components/ErrorBoundary/i18n/index.js +8 -0
  60. package/build/cjs/editor/components/ErrorBoundary/i18n/ru.json +4 -0
  61. package/build/cjs/editor/components/Layout/Layout.css +39 -0
  62. package/build/cjs/editor/components/Layout/Layout.d.ts +16 -0
  63. package/build/cjs/editor/components/Layout/Layout.js +34 -0
  64. package/build/cjs/editor/components/PagePropsForm/PagePropsForm.d.ts +10 -0
  65. package/build/cjs/editor/components/PagePropsForm/PagePropsForm.js +17 -0
  66. package/build/cjs/editor/containers/Editor/Editor.d.ts +2 -0
  67. package/build/cjs/editor/containers/Editor/Editor.js +40 -0
  68. package/build/cjs/editor/containers/Form/Form.css +94 -0
  69. package/build/cjs/editor/containers/Form/Form.d.ts +11 -0
  70. package/build/cjs/editor/containers/Form/Form.js +47 -0
  71. package/build/cjs/editor/containers/Form/dynamic-form-custom.css +0 -0
  72. package/build/cjs/editor/data/templates/banner-block.json +25 -0
  73. package/build/cjs/editor/data/templates/card-layout-block.json +39 -0
  74. package/build/cjs/editor/data/templates/companies-block.json +20 -0
  75. package/build/cjs/editor/data/templates/content-layout-block.json +56 -0
  76. package/build/cjs/editor/data/templates/extended-features-block.json +56 -0
  77. package/build/cjs/editor/data/templates/filter-block.json +62 -0
  78. package/build/cjs/editor/data/templates/header-block.json +19 -0
  79. package/build/cjs/editor/data/templates/header-slider-block.json +69 -0
  80. package/build/cjs/editor/data/templates/icons-block.json +32 -0
  81. package/build/cjs/editor/data/templates/info-block.json +40 -0
  82. package/build/cjs/editor/data/templates/link-table-block.json +10 -0
  83. package/build/cjs/editor/data/templates/map-block.json +48 -0
  84. package/build/cjs/editor/data/templates/media-block.json +15 -0
  85. package/build/cjs/editor/data/templates/preview-block.json +38 -0
  86. package/build/cjs/editor/data/templates/promo-features-block.json +52 -0
  87. package/build/cjs/editor/data/templates/questions-block.json +105 -0
  88. package/build/cjs/editor/data/templates/security-block.json +36 -0
  89. package/build/cjs/editor/data/templates/share-block.json +6 -0
  90. package/build/cjs/editor/data/templates/simple-block.json +7 -0
  91. package/build/cjs/editor/data/templates/slider-block.json +46 -0
  92. package/build/cjs/editor/data/templates/table-block.json +18 -0
  93. package/build/cjs/editor/data/templates/tabs-block.json +90 -0
  94. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +27 -0
  95. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +19 -0
  96. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +72 -0
  97. package/build/cjs/editor/dynamic-forms-custom/config.d.ts +2 -0
  98. package/build/cjs/editor/dynamic-forms-custom/config.js +13 -0
  99. package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +12 -0
  100. package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.js +75 -0
  101. package/build/cjs/editor/dynamic-forms-custom/parser/detect.d.ts +9 -0
  102. package/build/cjs/editor/dynamic-forms-custom/parser/detect.js +36 -0
  103. package/build/cjs/editor/dynamic-forms-custom/parser/index.d.ts +28 -0
  104. package/build/cjs/editor/dynamic-forms-custom/parser/index.js +188 -0
  105. package/build/cjs/editor/dynamic-forms-custom/parser/types.d.ts +29 -0
  106. package/build/cjs/editor/dynamic-forms-custom/parser/types.js +2 -0
  107. package/build/cjs/editor/dynamic-forms-custom/parser/views.d.ts +37 -0
  108. package/build/cjs/editor/dynamic-forms-custom/parser/views.js +46 -0
  109. package/build/cjs/editor/hooks/useFormSpec.d.ts +2 -0
  110. package/build/cjs/editor/hooks/useFormSpec.js +13 -0
  111. package/build/cjs/editor/hooks/usePreviousValue.d.ts +1 -0
  112. package/build/cjs/editor/hooks/usePreviousValue.js +11 -0
  113. package/build/cjs/editor/index.d.ts +1 -1
  114. package/build/cjs/editor/index.js +1 -1
  115. package/build/cjs/editor/store/index.d.ts +10 -11
  116. package/build/cjs/editor/store/index.js +66 -15
  117. package/build/cjs/editor/store/reducer.d.ts +24 -9
  118. package/build/cjs/editor/store/reducer.js +17 -31
  119. package/build/cjs/editor/store/utils.d.ts +1 -0
  120. package/build/cjs/editor/store/utils.js +3 -1
  121. package/build/cjs/editor/styles/root.css +5 -0
  122. package/build/cjs/editor/types/index.d.ts +15 -9
  123. package/build/cjs/editor/types/index.js +6 -0
  124. package/build/cjs/editor/utils/index.d.ts +4 -3
  125. package/build/cjs/editor/utils/index.js +6 -4
  126. package/build/cjs/grid/Col/Col.d.ts +1 -1
  127. package/build/cjs/models/constructor-items/blocks.d.ts +13 -8
  128. package/build/cjs/models/constructor.d.ts +2 -2
  129. package/build/cjs/models/customization.d.ts +3 -8
  130. package/build/cjs/models/navigation.d.ts +1 -0
  131. package/build/cjs/navigation/components/Header/Header.css +2 -0
  132. package/build/cjs/navigation/components/Header/Header.js +15 -4
  133. package/build/cjs/navigation/schema.d.ts +1 -0
  134. package/build/cjs/schema/constants.d.ts +908 -0
  135. package/build/cjs/schema/constants.js +42 -0
  136. package/build/cjs/schema/index.d.ts +9 -228
  137. package/build/cjs/schema/index.js +8 -46
  138. package/build/cjs/schema/validators/common.d.ts +71 -27
  139. package/build/cjs/schema/validators/common.js +50 -17
  140. package/build/cjs/sub-blocks/BackgroundCard/schema.d.ts +12 -5
  141. package/build/cjs/sub-blocks/BasicCard/schema.d.ts +8 -3
  142. package/build/cjs/sub-blocks/Content/schema.d.ts +14 -6
  143. package/build/cjs/sub-blocks/Content/schema.js +9 -1
  144. package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +23 -9
  145. package/build/cjs/sub-blocks/MediaCard/schema.d.ts +16 -6
  146. package/build/cjs/sub-blocks/PriceDetailed/schema.d.ts +1 -0
  147. package/build/cjs/sub-blocks/PriceDetailed/schema.js +5 -1
  148. package/build/cjs/sub-blocks/Quote/schema.d.ts +6 -2
  149. package/build/esm/blocks/Banner/schema.d.ts +63 -21
  150. package/build/esm/blocks/CardLayout/schema.d.ts +10 -4
  151. package/build/esm/blocks/Companies/schema.d.ts +5 -2
  152. package/build/esm/blocks/ContentLayout/ContentLayout.js +3 -2
  153. package/build/esm/blocks/ContentLayout/schema.d.ts +107 -61
  154. package/build/esm/blocks/ContentLayout/schema.js +23 -18
  155. package/build/esm/blocks/ExtendedFeatures/schema.d.ts +31 -4
  156. package/build/esm/blocks/ExtendedFeatures/schema.js +3 -4
  157. package/build/esm/blocks/FilterBlock/schema.d.ts +13 -5
  158. package/build/esm/blocks/FilterBlock/schema.js +13 -2
  159. package/build/esm/blocks/Header/Header.css +6 -7
  160. package/build/esm/blocks/Header/schema.d.ts +92 -36
  161. package/build/esm/blocks/Header/schema.js +1 -0
  162. package/build/esm/blocks/HeaderSlider/schema.d.ts +48 -53
  163. package/build/esm/blocks/HeaderSlider/schema.js +2 -1
  164. package/build/esm/blocks/Icons/schema.d.ts +3 -1
  165. package/build/esm/blocks/Icons/schema.js +2 -1
  166. package/build/esm/blocks/Info/schema.d.ts +19 -8
  167. package/build/esm/blocks/Map/schema.d.ts +17 -6
  168. package/build/esm/blocks/Media/schema.d.ts +204 -152
  169. package/build/esm/blocks/Media/schema.js +2 -2
  170. package/build/esm/blocks/PromoFeaturesBlock/schema.d.ts +22 -8
  171. package/build/esm/blocks/PromoFeaturesBlock/schema.js +1 -0
  172. package/build/esm/blocks/Questions/schema.d.ts +7 -3
  173. package/build/esm/blocks/Slider/schema.d.ts +13 -18
  174. package/build/esm/blocks/Slider/schema.js +4 -5
  175. package/build/esm/blocks/Table/schema.d.ts +5 -2
  176. package/build/esm/blocks/Table/schema.js +12 -2
  177. package/build/esm/blocks/Tabs/schema.d.ts +43 -16
  178. package/build/esm/components/BlockBase/BlockBase.js +2 -2
  179. package/build/esm/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
  180. package/build/esm/components/Image/schema.d.ts +1 -0
  181. package/build/esm/components/Image/schema.js +3 -2
  182. package/build/esm/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
  183. package/build/esm/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
  184. package/build/esm/customization/BlockDecoration.d.ts +1 -1
  185. package/build/esm/customization/BlockDecoration.js +6 -6
  186. package/build/esm/editor/{Components → components}/AddBlock/AddBlock.css +1 -1
  187. package/build/esm/editor/components/AddBlock/AddBlock.d.ts +8 -0
  188. package/build/esm/editor/{Components → components}/AddBlock/AddBlock.js +2 -2
  189. package/build/esm/editor/components/BlockForm/BlockForm.d.ts +12 -0
  190. package/build/esm/editor/components/BlockForm/BlockForm.js +30 -0
  191. package/build/esm/editor/components/ControlPanel/ControlPanel.css +26 -0
  192. package/build/esm/editor/components/ControlPanel/ControlPanel.d.ts +9 -0
  193. package/build/esm/editor/components/ControlPanel/ControlPanel.js +23 -0
  194. package/build/esm/editor/components/ControlPanel/i18n/en.json +3 -0
  195. package/build/esm/editor/components/ControlPanel/i18n/index.d.ts +2 -0
  196. package/build/esm/editor/components/ControlPanel/i18n/index.js +5 -0
  197. package/build/esm/editor/components/ControlPanel/i18n/ru.json +3 -0
  198. package/build/esm/editor/components/EditBlock/EditBlock.d.ts +14 -0
  199. package/build/esm/editor/components/EditBlock/EditBlock.js +41 -0
  200. package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.css +27 -0
  201. package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.d.ts +14 -0
  202. package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.js +31 -0
  203. package/build/esm/editor/components/ErrorBoundary/i18n/en.json +4 -0
  204. package/build/esm/editor/components/ErrorBoundary/i18n/index.d.ts +2 -0
  205. package/build/esm/editor/components/ErrorBoundary/i18n/index.js +5 -0
  206. package/build/esm/editor/components/ErrorBoundary/i18n/ru.json +4 -0
  207. package/build/esm/editor/components/Layout/Layout.css +39 -0
  208. package/build/esm/editor/components/Layout/Layout.d.ts +17 -0
  209. package/build/esm/editor/components/Layout/Layout.js +32 -0
  210. package/build/esm/editor/components/PagePropsForm/PagePropsForm.d.ts +10 -0
  211. package/build/esm/editor/components/PagePropsForm/PagePropsForm.js +13 -0
  212. package/build/esm/editor/containers/Editor/Editor.d.ts +2 -0
  213. package/build/esm/editor/containers/Editor/Editor.js +36 -0
  214. package/build/esm/editor/containers/Form/Form.css +94 -0
  215. package/build/esm/editor/containers/Form/Form.d.ts +12 -0
  216. package/build/esm/editor/containers/Form/Form.js +45 -0
  217. package/build/esm/editor/containers/Form/dynamic-form-custom.css +0 -0
  218. package/build/esm/editor/data/templates/banner-block.json +25 -0
  219. package/build/esm/editor/data/templates/card-layout-block.json +39 -0
  220. package/build/esm/editor/data/templates/companies-block.json +20 -0
  221. package/build/esm/editor/data/templates/content-layout-block.json +56 -0
  222. package/build/esm/editor/data/templates/extended-features-block.json +56 -0
  223. package/build/esm/editor/data/templates/filter-block.json +62 -0
  224. package/build/esm/editor/data/templates/header-block.json +19 -0
  225. package/build/esm/editor/data/templates/header-slider-block.json +69 -0
  226. package/build/esm/editor/data/templates/icons-block.json +32 -0
  227. package/build/esm/editor/data/templates/info-block.json +40 -0
  228. package/build/esm/editor/data/templates/link-table-block.json +10 -0
  229. package/build/esm/editor/data/templates/map-block.json +48 -0
  230. package/build/esm/editor/data/templates/media-block.json +15 -0
  231. package/build/esm/editor/data/templates/preview-block.json +38 -0
  232. package/build/esm/editor/data/templates/promo-features-block.json +52 -0
  233. package/build/esm/editor/data/templates/questions-block.json +105 -0
  234. package/build/esm/editor/data/templates/security-block.json +36 -0
  235. package/build/esm/editor/data/templates/share-block.json +6 -0
  236. package/build/esm/editor/data/templates/simple-block.json +7 -0
  237. package/build/esm/editor/data/templates/slider-block.json +46 -0
  238. package/build/esm/editor/data/templates/table-block.json +18 -0
  239. package/build/esm/editor/data/templates/tabs-block.json +90 -0
  240. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +27 -0
  241. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +20 -0
  242. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +68 -0
  243. package/build/esm/editor/dynamic-forms-custom/config.d.ts +2 -0
  244. package/build/esm/editor/dynamic-forms-custom/config.js +9 -0
  245. package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +12 -0
  246. package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.js +69 -0
  247. package/build/esm/editor/dynamic-forms-custom/parser/detect.d.ts +9 -0
  248. package/build/esm/editor/dynamic-forms-custom/parser/detect.js +32 -0
  249. package/build/esm/editor/dynamic-forms-custom/parser/index.d.ts +28 -0
  250. package/build/esm/editor/dynamic-forms-custom/parser/index.js +186 -0
  251. package/build/esm/editor/dynamic-forms-custom/parser/types.d.ts +29 -0
  252. package/build/esm/editor/dynamic-forms-custom/parser/types.js +1 -0
  253. package/build/esm/editor/dynamic-forms-custom/parser/views.d.ts +37 -0
  254. package/build/esm/editor/dynamic-forms-custom/parser/views.js +39 -0
  255. package/build/esm/editor/hooks/useFormSpec.d.ts +2 -0
  256. package/build/esm/editor/hooks/useFormSpec.js +9 -0
  257. package/build/esm/editor/hooks/usePreviousValue.d.ts +1 -0
  258. package/build/esm/editor/hooks/usePreviousValue.js +8 -0
  259. package/build/esm/editor/index.d.ts +1 -1
  260. package/build/esm/editor/index.js +1 -1
  261. package/build/esm/editor/store/index.d.ts +10 -11
  262. package/build/esm/editor/store/index.js +68 -17
  263. package/build/esm/editor/store/reducer.d.ts +24 -9
  264. package/build/esm/editor/store/reducer.js +15 -29
  265. package/build/esm/editor/store/utils.d.ts +1 -0
  266. package/build/esm/editor/store/utils.js +1 -0
  267. package/build/esm/editor/styles/root.css +5 -0
  268. package/build/esm/editor/types/index.d.ts +15 -9
  269. package/build/esm/editor/types/index.js +5 -1
  270. package/build/esm/editor/utils/index.d.ts +4 -3
  271. package/build/esm/editor/utils/index.js +4 -3
  272. package/build/esm/grid/Col/Col.d.ts +1 -1
  273. package/build/esm/models/constructor-items/blocks.d.ts +13 -8
  274. package/build/esm/models/constructor.d.ts +2 -2
  275. package/build/esm/models/customization.d.ts +3 -8
  276. package/build/esm/models/navigation.d.ts +1 -0
  277. package/build/esm/navigation/components/Header/Header.css +2 -0
  278. package/build/esm/navigation/components/Header/Header.js +16 -5
  279. package/build/esm/navigation/schema.d.ts +1 -0
  280. package/build/esm/schema/constants.d.ts +908 -0
  281. package/build/esm/schema/constants.js +39 -0
  282. package/build/esm/schema/index.d.ts +9 -228
  283. package/build/esm/schema/index.js +4 -42
  284. package/build/esm/schema/validators/common.d.ts +71 -27
  285. package/build/esm/schema/validators/common.js +49 -16
  286. package/build/esm/sub-blocks/BackgroundCard/schema.d.ts +12 -5
  287. package/build/esm/sub-blocks/BasicCard/schema.d.ts +8 -3
  288. package/build/esm/sub-blocks/Content/schema.d.ts +14 -6
  289. package/build/esm/sub-blocks/Content/schema.js +9 -1
  290. package/build/esm/sub-blocks/LayoutItem/schema.d.ts +23 -9
  291. package/build/esm/sub-blocks/MediaCard/schema.d.ts +16 -6
  292. package/build/esm/sub-blocks/PriceDetailed/schema.d.ts +1 -0
  293. package/build/esm/sub-blocks/PriceDetailed/schema.js +5 -1
  294. package/build/esm/sub-blocks/Quote/schema.d.ts +6 -2
  295. package/package.json +39 -7
  296. package/server/models/constructor-items/blocks.d.ts +13 -8
  297. package/server/models/constructor.d.ts +2 -2
  298. package/server/models/customization.d.ts +3 -8
  299. package/server/models/navigation.d.ts +1 -0
  300. package/build/cjs/editor/Components/AddBlock/AddBlock.d.ts +0 -7
  301. package/build/cjs/editor/Components/EditBlock/EditBlock.d.ts +0 -4
  302. package/build/cjs/editor/Components/EditBlock/EditBlock.js +0 -32
  303. package/build/cjs/editor/Containers/Editor.d.ts +0 -2
  304. package/build/cjs/editor/Containers/Editor.js +0 -24
  305. package/build/esm/editor/Components/AddBlock/AddBlock.d.ts +0 -8
  306. package/build/esm/editor/Components/EditBlock/EditBlock.d.ts +0 -5
  307. package/build/esm/editor/Components/EditBlock/EditBlock.js +0 -30
  308. package/build/esm/editor/Containers/Editor.d.ts +0 -2
  309. package/build/esm/editor/Containers/Editor.js +0 -20
  310. /package/build/cjs/editor/{Components → components}/EditBlock/EditBlock.css +0 -0
  311. /package/build/esm/editor/{Components → components}/EditBlock/EditBlock.css +0 -0
@@ -0,0 +1,186 @@
1
+ import { __rest } from "tslib";
2
+ /* eslint-disable no-param-reassign */
3
+ /* eslint-disable no-not-accumulator-reassign/no-not-accumulator-reassign */
4
+ import { SpecTypes } from '@gravity-ui/dynamic-forms';
5
+ import { BlockType } from '../../../models';
6
+ import { ParserType, detectParserType } from './detect';
7
+ import { getArrayViewSpec, getObjectViewSpec, getOneOfViewSpec, getPrimitiveViewSpec } from './views';
8
+ class FormSpecParser {
9
+ constructor() {
10
+ this.schema = {};
11
+ this.definitions = {};
12
+ this.getChildrenSpec = (data) => {
13
+ var _a, _b, _c;
14
+ const childrenType = (_c = (_b = (_a = data.items) === null || _a === void 0 ? void 0 : _a.$ref) === null || _b === void 0 ? void 0 : _b.split('/')) === null || _c === void 0 ? void 0 : _c.pop();
15
+ return this.definitions[childrenType];
16
+ };
17
+ this.getRequiredProperties = (data) => Array.isArray(data.required) ? data.required : [];
18
+ this.childrenParser = ({ data, name, required }) => {
19
+ const childSpec = this.getChildrenSpec(data);
20
+ const properties = childSpec &&
21
+ Object.entries(childSpec).reduce((parsedChildSpecProperties, [childName, childSchema]) => {
22
+ const childRequiredProperties = this.getRequiredProperties(childSchema);
23
+ const childProperies = childSchema.properties &&
24
+ Object.entries(childSchema.properties).reduce((parsedChildProperties, [childPropertyName, childPropertyData]) => {
25
+ parsedChildProperties[childPropertyName] = this.parseSchemaProperty({
26
+ data: childPropertyData,
27
+ name: childPropertyName,
28
+ required: childRequiredProperties.includes(childPropertyName),
29
+ });
30
+ return parsedChildProperties;
31
+ }, {});
32
+ const childJsonSchema = Object.assign(Object.assign({}, childSchema), { properties: Object.assign(Object.assign({}, childSchema.properties), { type: {
33
+ type: SpecTypes.String,
34
+ enum: [childName],
35
+ } }) });
36
+ parsedChildSpecProperties[childName] = {
37
+ type: SpecTypes.Array,
38
+ items: Object.assign(Object.assign({}, childSchema), { type: SpecTypes.Object, properties: Object.assign(Object.assign({}, childProperies), { type: {
39
+ type: SpecTypes.String,
40
+ defaultValue: childName,
41
+ viewSpec: {
42
+ type: 'hidden',
43
+ },
44
+ } }), viewSpec: childProperies &&
45
+ getObjectViewSpec({
46
+ properties: childProperies,
47
+ layoutTitle: childName,
48
+ }), __schema: childJsonSchema }),
49
+ required: false,
50
+ viewSpec: getArrayViewSpec({ layoutTitle: childName }),
51
+ __schema: {
52
+ type: SpecTypes.Array,
53
+ items: childJsonSchema,
54
+ },
55
+ };
56
+ return parsedChildSpecProperties;
57
+ }, {});
58
+ return {
59
+ type: SpecTypes.Object,
60
+ properties,
61
+ viewSpec: {
62
+ type: 'oneof_custom',
63
+ layout: 'row',
64
+ layoutTitle: name,
65
+ oneOfParams: {
66
+ toggler: 'select',
67
+ },
68
+ },
69
+ required,
70
+ };
71
+ };
72
+ this.oneOfParser = ({ data, name, required }) => {
73
+ const requiredProperties = this.getRequiredProperties(data);
74
+ const properties = data.oneOf &&
75
+ data.oneOf.reduce((result, propertyData, index) => {
76
+ const propertyName = (propertyData === null || propertyData === void 0 ? void 0 : propertyData.optionName)
77
+ ? propertyData === null || propertyData === void 0 ? void 0 : propertyData.optionName
78
+ : `${name}_${index}`;
79
+ result[propertyName] = this.parseSchemaProperty({
80
+ data: propertyData,
81
+ name: propertyName,
82
+ required: requiredProperties.includes(propertyName),
83
+ });
84
+ return result;
85
+ }, {});
86
+ return {
87
+ type: SpecTypes.Object,
88
+ properties,
89
+ required,
90
+ viewSpec: getOneOfViewSpec({ layoutTitle: name }),
91
+ };
92
+ };
93
+ this.arrayParser = ({ data, name }) => {
94
+ const items = data.items && this.parseSchemaProperty({ data: data.items, name });
95
+ return Object.assign(Object.assign({}, data), { type: SpecTypes.Array, items, viewSpec: getArrayViewSpec({ layoutTitle: name }) });
96
+ };
97
+ this.objectParser = ({ data, name, required }) => {
98
+ const requiredProperties = this.getRequiredProperties(data);
99
+ const properties = data.properties &&
100
+ Object.entries(data.properties).reduce((result, [propertyName, propertyData]) => {
101
+ result[propertyName] = this.parseSchemaProperty({
102
+ data: propertyData,
103
+ name: propertyName,
104
+ required: requiredProperties.includes(propertyName),
105
+ });
106
+ return result;
107
+ }, {});
108
+ return Object.assign(Object.assign({}, data), { type: SpecTypes.Object, properties, viewSpec: getObjectViewSpec({ properties, layoutTitle: name }), required });
109
+ };
110
+ this.primitiveParser = ({ data, name, required }) => {
111
+ return Object.assign(Object.assign({}, data), { type: data.type, required, defaultValue: data.default, viewSpec: getPrimitiveViewSpec({ layoutTitle: name, data }), validator: 'base' });
112
+ };
113
+ //eslint-disable-next-line @typescript-eslint/member-ordering
114
+ this.schemaParserMap = {
115
+ [ParserType.Object]: this.objectParser,
116
+ [ParserType.Array]: this.arrayParser,
117
+ [ParserType.Primitive]: this.primitiveParser,
118
+ [ParserType.OneOf]: this.oneOfParser,
119
+ [ParserType.Children]: this.childrenParser,
120
+ };
121
+ }
122
+ /**
123
+ * Transforms page-constructor json schema into dynamic-forms specs for each block
124
+ *
125
+ * @param schema {Schema} - page-constructor json schema
126
+ * @returns {FormSpecs} - object containig dynamic-forms specs for each constructor block
127
+ */
128
+ parse(schema) {
129
+ this.init(schema);
130
+ return this.getFormSpec();
131
+ }
132
+ parseSchemaProperty({ data, name, required }) {
133
+ const parserType = detectParserType(data);
134
+ const parser = this.schemaParserMap[parserType];
135
+ return Object.assign(Object.assign({}, parser({ data, name, required })), {
136
+ //save json schema from constructor to compare with incoming intial data inside oneOf form fields
137
+ __schema: data });
138
+ }
139
+ getBlocksSpec() {
140
+ const blocks = this.definitions.children;
141
+ return Object.values(BlockType).reduce((result, blockName) => {
142
+ result[blockName] = this.parseSchemaProperty({
143
+ name: blockName,
144
+ data: Object.assign({}, blocks[blockName]),
145
+ required: true,
146
+ });
147
+ return result;
148
+ }, {});
149
+ }
150
+ getPageSpec() {
151
+ var _a;
152
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
153
+ const _b = ((_a = this.schema) === null || _a === void 0 ? void 0 : _a.properties) || {}, { blocks } = _b, pageSchema = __rest(_b, ["blocks"]);
154
+ const requiredProperties = this.getRequiredProperties(this.schema);
155
+ const properties = Object.entries(pageSchema).reduce((result, [propertyName, propertyData]) => {
156
+ result[propertyName] = this.parseSchemaProperty({
157
+ name: propertyName,
158
+ data: propertyData,
159
+ required: requiredProperties.includes(propertyName),
160
+ });
161
+ return result;
162
+ }, {});
163
+ return {
164
+ type: SpecTypes.Object,
165
+ properties,
166
+ viewSpec: getObjectViewSpec({ properties, layout: 'section' }),
167
+ required: true,
168
+ };
169
+ }
170
+ getFormSpec() {
171
+ return {
172
+ blocks: this.getBlocksSpec(),
173
+ page: this.getPageSpec(),
174
+ };
175
+ }
176
+ init(schema) {
177
+ this.schema = schema;
178
+ if (schema.definitions) {
179
+ this.definitions = Object.entries(schema.definitions).reduce((result, [childType, childSpec]) => {
180
+ result[childType] = childSpec === null || childSpec === void 0 ? void 0 : childSpec.selectCases;
181
+ return result;
182
+ }, {});
183
+ }
184
+ }
185
+ }
186
+ export default new FormSpecParser();
@@ -0,0 +1,29 @@
1
+ import { Spec as DynamicFormSpec, ObjectSpec } from '@gravity-ui/dynamic-forms';
2
+ import { BlockType } from '../../../models';
3
+ import { Schema } from '../../../schema';
4
+ export type OneOfSpec = {
5
+ oneOf: DynamicFormSpec[];
6
+ viewSpec: ObjectSpec['viewSpec'];
7
+ };
8
+ export type CustomObjectSpec = Omit<ObjectSpec, 'properties'> & {
9
+ properties: Record<string, CustomSpec>;
10
+ };
11
+ export interface SpecCustomProps {
12
+ disabled?: boolean;
13
+ inputType?: string;
14
+ __schema?: Schema;
15
+ }
16
+ export type Spec = Exclude<DynamicFormSpec, 'ObjectSpec'> | CustomObjectSpec | OneOfSpec;
17
+ export type CustomSpec = Spec & SpecCustomProps;
18
+ export type BlocksSpec = Record<BlockType, CustomSpec>;
19
+ export type PageSpec = CustomSpec;
20
+ export interface FormSpecs {
21
+ blocks: BlocksSpec;
22
+ page: PageSpec;
23
+ }
24
+ export interface SchemaParserParams {
25
+ data: Schema;
26
+ name: string;
27
+ required?: Schema['required'];
28
+ }
29
+ export type SchemaParser = (params: SchemaParserParams) => CustomSpec;
@@ -0,0 +1,37 @@
1
+ import { Schema } from '../../../schema';
2
+ import { CustomObjectSpec, CustomSpec } from './types';
3
+ interface BaseParams {
4
+ layoutTitle?: string;
5
+ }
6
+ interface GetObjectViewSpecParams extends BaseParams, Partial<Extract<CustomSpec, CustomObjectSpec>> {
7
+ layout?: string;
8
+ }
9
+ type GetPrimitiveViewSpecParams = BaseParams & Schema;
10
+ export declare const getOneOfViewSpec: ({ layoutTitle }: BaseParams) => {
11
+ type: string;
12
+ layout: string;
13
+ layoutTitle: string | undefined;
14
+ oneOfParams: {
15
+ toggler: "select";
16
+ };
17
+ };
18
+ export declare const getObjectViewSpec: ({ properties, disabled, layoutTitle, layout, }: GetObjectViewSpecParams) => {
19
+ layoutTitle: string | undefined;
20
+ type: string;
21
+ layout: string;
22
+ order: string[] | undefined;
23
+ disabled: boolean | undefined;
24
+ };
25
+ export declare const getArrayViewSpec: ({ layoutTitle }: BaseParams) => {
26
+ layoutTitle: string | undefined;
27
+ type: string;
28
+ layout: string;
29
+ layoutOpen: boolean;
30
+ itemLabel: string;
31
+ };
32
+ export declare const getPrimitiveViewSpec: ({ layoutTitle, ...data }: GetPrimitiveViewSpecParams) => {
33
+ layout: string;
34
+ type: any;
35
+ layoutTitle: string | undefined;
36
+ };
37
+ export {};
@@ -0,0 +1,39 @@
1
+ import { __rest } from "tslib";
2
+ export const getOneOfViewSpec = ({ layoutTitle }) => {
3
+ return {
4
+ type: 'oneof_custom',
5
+ layout: 'row',
6
+ layoutTitle,
7
+ oneOfParams: {
8
+ toggler: 'select',
9
+ },
10
+ };
11
+ };
12
+ export const getObjectViewSpec = ({ properties, disabled, layoutTitle, layout = 'accordeon', }) => {
13
+ return {
14
+ layoutTitle,
15
+ type: 'base',
16
+ layout,
17
+ order: properties && Object.keys(properties).sort(),
18
+ disabled,
19
+ };
20
+ };
21
+ export const getArrayViewSpec = ({ layoutTitle }) => ({
22
+ layoutTitle,
23
+ type: 'base',
24
+ layout: 'accordeon',
25
+ layoutOpen: true,
26
+ itemLabel: 'Add Item',
27
+ });
28
+ export const getPrimitiveViewSpec = (_a) => {
29
+ var { layoutTitle } = _a, data = __rest(_a, ["layoutTitle"]);
30
+ let type = (data === null || data === void 0 ? void 0 : data.inputType) || 'base';
31
+ if (data && 'enum' in data && data.enum) {
32
+ type = 'select';
33
+ }
34
+ return {
35
+ layout: 'row',
36
+ type,
37
+ layoutTitle,
38
+ };
39
+ };
@@ -0,0 +1,2 @@
1
+ import { SchemaCustomConfig } from '../../schema';
2
+ export default function useFormSpec(customSchema?: SchemaCustomConfig): import("../dynamic-forms-custom/parser/types").FormSpecs;
@@ -0,0 +1,9 @@
1
+ import { useMemo } from 'react';
2
+ import { generateDefaultSchema } from '../../schema';
3
+ import formSpecParser from '../dynamic-forms-custom/parser';
4
+ export default function useFormSpec(customSchema) {
5
+ return useMemo(() => {
6
+ const schema = generateDefaultSchema(customSchema);
7
+ return formSpecParser.parse(schema);
8
+ }, [customSchema]);
9
+ }
@@ -0,0 +1 @@
1
+ export default function usePreviousValue<T>(value: T): T | undefined;
@@ -0,0 +1,8 @@
1
+ import { useEffect, useRef } from 'react';
2
+ export default function usePreviousValue(value) {
3
+ const ref = useRef();
4
+ useEffect(() => {
5
+ ref.current = value;
6
+ }, [value]);
7
+ return ref.current;
8
+ }
@@ -1,2 +1,2 @@
1
- export { Editor } from './Containers/Editor';
1
+ export { Editor } from './containers/Editor/Editor';
2
2
  export * from './types';
@@ -1,2 +1,2 @@
1
- export { Editor } from './Containers/Editor';
1
+ export { Editor } from './containers/Editor/Editor';
2
2
  export * from './types';
@@ -1,15 +1,14 @@
1
- import { Block } from '../../models';
2
- import { EditorProps } from '../types';
1
+ import { Block, BlockDecorationProps, PageContent } from '../../models';
2
+ import { EditBlockProps, EditorProps, ViewModeItem } from '../types';
3
3
  export type EditorBlockId = number | string;
4
4
  export declare function useEditorState({ content: intialContent, custom }: Omit<EditorProps, 'children'>): {
5
- content: import("../../models").PageContent;
6
- editControlsProps: {
7
- activeBlockId: import("./reducer").EditorBlockId;
8
- orderedBlocksCount: number;
9
- onDelete: (id: EditorBlockId) => void;
10
- onSelect: (id: EditorBlockId) => void;
11
- onCopy: (index: number) => void;
12
- onOrderChange: (oldIndex: number, newIndex: number) => void;
13
- };
5
+ activeBlockIndex: number;
6
+ content: PageContent;
7
+ errorBoundaryState: number;
8
+ viewMode: ViewModeItem;
9
+ injectEditBlockProps: ({ type, index: relativeIndex, children, }: BlockDecorationProps) => EditBlockProps;
14
10
  onAdd: (block: Block) => void;
11
+ onSelect: (index: number) => void;
12
+ onContentUpdate: (newContent: PageContent) => void;
13
+ onViewModeUpdate: (newViewMode: ViewModeItem) => void;
15
14
  };
@@ -1,28 +1,79 @@
1
1
  import { useMemo, useReducer } from 'react';
2
2
  import { HeaderBlockTypes } from '../../models';
3
- import { getCustomHeaderTypes, getOrderedBlocks } from '../../utils';
4
- import { ADD_BLOCK, COPY_BLOCK, DELETE_BLOCK, ORDER_BLOCK, SELECT_BLOCK, getReducer, } from './reducer';
3
+ import { getCustomHeaderTypes, getHeaderBlock } from '../../utils';
4
+ import { EditBlockControls } from '../components/EditBlock/EditBlock';
5
+ import { ViewModeItem } from '../types';
6
+ import { ADD_BLOCK, COPY_BLOCK, DELETE_BLOCK, ORDER_BLOCK, SELECT_BLOCK, UPDATE_CONTENT, UPDATE_VIEW_MODE, reducer, } from './reducer';
5
7
  import { addEditorProps } from './utils';
6
8
  export function useEditorState({ content: intialContent, custom }) {
7
- const headerBlockTypes = useMemo(() => [...HeaderBlockTypes, ...getCustomHeaderTypes(custom)], [custom]);
8
- const reducer = useMemo(() => getReducer(headerBlockTypes), [headerBlockTypes]);
9
- const [{ activeBlockId, content, orderedBlocksCount }, dispatch] = useReducer(reducer, {
10
- activeBlockId: 0,
11
- orderedBlocksCount: getOrderedBlocks(intialContent.blocks, headerBlockTypes).length,
9
+ const [{ activeBlockIndex, content, errorBoundaryState, viewMode }, dispatch] = useReducer(reducer, {
10
+ activeBlockIndex: 0,
11
+ errorBoundaryState: 0,
12
12
  content: addEditorProps(intialContent),
13
+ viewMode: ViewModeItem.Edititng,
13
14
  });
14
15
  return useMemo(() => {
16
+ const headerBlockTypes = [...HeaderBlockTypes, ...getCustomHeaderTypes(custom)];
17
+ const contentHasHeader = Boolean(getHeaderBlock(content.blocks, headerBlockTypes));
18
+ const checkIsHeader = (type) => headerBlockTypes.includes(type);
19
+ const onAdd = (block) => {
20
+ const isHeader = checkIsHeader(block.type);
21
+ if (contentHasHeader && isHeader) {
22
+ //TODO: add warning that it should be only one header block
23
+ return;
24
+ }
25
+ // eslint-disable-next-line no-nested-ternary
26
+ const index = isHeader
27
+ ? 0
28
+ : activeBlockIndex === -1
29
+ ? content.blocks.length
30
+ : activeBlockIndex + 1;
31
+ dispatch({ type: ADD_BLOCK, payload: { block, index } });
32
+ };
33
+ const onSelect = (index) => dispatch({ type: SELECT_BLOCK, payload: index });
34
+ const onContentUpdate = (newContent) => dispatch({ type: UPDATE_CONTENT, payload: newContent });
35
+ const onViewModeUpdate = (newViewMode) => dispatch({ type: UPDATE_VIEW_MODE, payload: newViewMode });
36
+ const injectEditBlockProps = ({ type, index: relativeIndex = 0, children, }) => {
37
+ const orderedBlocksStartIndex = contentHasHeader ? 1 : 0;
38
+ const isHeader = checkIsHeader(type);
39
+ const index = isHeader ? 0 : relativeIndex + orderedBlocksStartIndex;
40
+ const isActive = activeBlockIndex === index;
41
+ const actions = {
42
+ [EditBlockControls.Delete]: () => dispatch({ type: DELETE_BLOCK, payload: index }),
43
+ };
44
+ if (!isHeader) {
45
+ actions[EditBlockControls.Copy] = () => dispatch({ type: COPY_BLOCK, payload: index });
46
+ if (index > orderedBlocksStartIndex) {
47
+ actions[EditBlockControls.Up] = () => dispatch({
48
+ type: ORDER_BLOCK,
49
+ payload: { oldIndex: index, newIndex: index - 1 },
50
+ });
51
+ }
52
+ if (index < content.blocks.length - 1) {
53
+ actions[EditBlockControls.Down] = () => dispatch({
54
+ type: ORDER_BLOCK,
55
+ payload: { oldIndex: index, newIndex: index + 1 },
56
+ });
57
+ }
58
+ }
59
+ return {
60
+ children,
61
+ isHeader,
62
+ isActive,
63
+ actions,
64
+ onSelect: () => onSelect(index),
65
+ };
66
+ };
15
67
  return {
68
+ activeBlockIndex,
16
69
  content,
17
- editControlsProps: {
18
- activeBlockId,
19
- orderedBlocksCount,
20
- onDelete: (id) => dispatch({ type: DELETE_BLOCK, payload: id }),
21
- onSelect: (id) => dispatch({ type: SELECT_BLOCK, payload: id }),
22
- onCopy: (index) => dispatch({ type: COPY_BLOCK, payload: index }),
23
- onOrderChange: (oldIndex, newIndex) => dispatch({ type: ORDER_BLOCK, payload: { oldIndex, newIndex } }),
24
- },
25
- onAdd: (block) => dispatch({ type: ADD_BLOCK, payload: block }),
70
+ errorBoundaryState,
71
+ viewMode,
72
+ injectEditBlockProps,
73
+ onAdd,
74
+ onSelect,
75
+ onContentUpdate,
76
+ onViewModeUpdate,
26
77
  };
27
- }, [content, activeBlockId, orderedBlocksCount]);
78
+ }, [content, activeBlockIndex, errorBoundaryState, custom, viewMode]);
28
79
  }
@@ -1,28 +1,35 @@
1
- import { Block, CustomConfig, PageContent } from '../../models';
1
+ import { Block, PageContent } from '../../models';
2
+ import { ViewModeItem } from '../types';
2
3
  export type EditorBlockId = number | string;
3
4
  interface EditorState {
4
5
  content: PageContent;
5
- activeBlockId: EditorBlockId;
6
- orderedBlocksCount: number;
7
- custom?: CustomConfig;
6
+ activeBlockIndex: number;
7
+ errorBoundaryState: number;
8
+ viewMode: ViewModeItem;
8
9
  }
9
10
  interface OrderBlockParams {
10
11
  oldIndex: number;
11
12
  newIndex: number;
12
13
  }
14
+ interface AddBlockParams {
15
+ block: Block;
16
+ index: number;
17
+ }
13
18
  export declare const SELECT_BLOCK = "SELECT_BLOCK";
14
19
  export declare const DELETE_BLOCK = "DELETE_BLOCK";
15
20
  export declare const COPY_BLOCK = "COPY_BLOCK";
16
21
  export declare const ADD_BLOCK = "ADD_BLOCK";
17
22
  export declare const SET_REGION = "SET_REGION";
18
23
  export declare const ORDER_BLOCK = "ORDER_BLOCK";
24
+ export declare const UPDATE_CONTENT = "UPDATE_CONTENT";
25
+ export declare const UPDATE_VIEW_MODE = "UPDATE_VIEW_MODE";
19
26
  interface SelectBlock {
20
27
  type: typeof SELECT_BLOCK;
21
- payload: EditorBlockId;
28
+ payload: number;
22
29
  }
23
30
  interface DeleteBlock {
24
31
  type: typeof DELETE_BLOCK;
25
- payload: EditorBlockId;
32
+ payload: number;
26
33
  }
27
34
  interface CopyBlock {
28
35
  type: typeof COPY_BLOCK;
@@ -30,12 +37,20 @@ interface CopyBlock {
30
37
  }
31
38
  interface AddBlock {
32
39
  type: typeof ADD_BLOCK;
33
- payload: Block;
40
+ payload: AddBlockParams;
34
41
  }
35
42
  interface OrderBlock {
36
43
  type: typeof ORDER_BLOCK;
37
44
  payload: OrderBlockParams;
38
45
  }
39
- export type EditorAction = SelectBlock | DeleteBlock | CopyBlock | AddBlock | OrderBlock;
40
- export declare const getReducer: (headerBlockTypes: string[]) => (state: EditorState, action: EditorAction) => EditorState;
46
+ interface UpdateContent {
47
+ type: typeof UPDATE_CONTENT;
48
+ payload: PageContent;
49
+ }
50
+ interface UpdateViewMode {
51
+ type: typeof UPDATE_VIEW_MODE;
52
+ payload: ViewModeItem;
53
+ }
54
+ export type EditorAction = SelectBlock | DeleteBlock | CopyBlock | AddBlock | OrderBlock | UpdateContent | UpdateViewMode;
55
+ export declare const reducer: (state: EditorState, action: EditorAction) => EditorState;
41
56
  export {};
@@ -1,5 +1,4 @@
1
- import { getHeaderBlock, getOrderedBlocks } from '../../utils';
2
- import { addBlock, changeBlocksOrder, duplicateBlock, getNewBlockIndex } from './utils';
1
+ import { addBlock, changeBlocksOrder, duplicateBlock, getErrorBoundaryState } from './utils';
3
2
  // actions
4
3
  export const SELECT_BLOCK = 'SELECT_BLOCK';
5
4
  export const DELETE_BLOCK = 'DELETE_BLOCK';
@@ -7,48 +6,35 @@ export const COPY_BLOCK = 'COPY_BLOCK';
7
6
  export const ADD_BLOCK = 'ADD_BLOCK';
8
7
  export const SET_REGION = 'SET_REGION';
9
8
  export const ORDER_BLOCK = 'ORDER_BLOCK';
9
+ export const UPDATE_CONTENT = 'UPDATE_CONTENT';
10
+ export const UPDATE_VIEW_MODE = 'UPDATE_VIEW_MODE';
10
11
  // reducer
11
- export const getReducer = (headerBlockTypes) => (state, action) => {
12
+ export const reducer = (state, action) => {
12
13
  const { content } = state;
13
- const header = getHeaderBlock(content.blocks, headerBlockTypes);
14
- const orderedBlocks = getOrderedBlocks(content.blocks, headerBlockTypes);
15
- const withHeader = (blocks) => [header, ...blocks].filter(Boolean);
16
- const getNewState = (blocks, activeBlockId) => (Object.assign(Object.assign({}, state), { content: Object.assign(Object.assign({}, content), { blocks }), activeBlockId, orderedBlocksCount: orderedBlocks.length }));
14
+ const getNewState = (blocks, activeBlockIndex) => (Object.assign(Object.assign({}, state), { content: Object.assign(Object.assign({}, content), { blocks }), activeBlockIndex }));
17
15
  switch (action.type) {
16
+ case UPDATE_CONTENT:
17
+ return Object.assign(Object.assign({}, state), { content: action.payload, errorBoundaryState: getErrorBoundaryState(state.errorBoundaryState) });
18
18
  case SELECT_BLOCK:
19
- return getNewState(content.blocks, action.payload);
19
+ return Object.assign(Object.assign({}, state), { activeBlockIndex: action.payload });
20
20
  case DELETE_BLOCK: {
21
21
  const blockId = action.payload;
22
- return getNewState(typeof blockId === 'string'
23
- ? content.blocks.filter(({ type }) => type !== blockId)
24
- : withHeader(orderedBlocks.filter((_block, index) => index !== blockId)), -1);
22
+ return getNewState(content.blocks.filter((_block, index) => index !== blockId), -1);
25
23
  }
26
24
  case COPY_BLOCK: {
27
25
  const index = action.payload;
28
- return getNewState(withHeader(duplicateBlock(orderedBlocks, index)), index + 1);
26
+ return getNewState(duplicateBlock(content.blocks, index), index + 1);
29
27
  }
30
28
  case ADD_BLOCK: {
31
- let blocks;
32
- let activeBlockId;
33
- const block = action.payload;
34
- if (headerBlockTypes.includes(block.type)) {
35
- blocks = header ? blocks : [block, ...orderedBlocks];
36
- activeBlockId = block.type;
37
- }
38
- else {
39
- const newBlockIndex = getNewBlockIndex(state.activeBlockId, orderedBlocks.length);
40
- blocks = withHeader(addBlock(orderedBlocks, block, newBlockIndex));
41
- activeBlockId = newBlockIndex;
42
- }
43
- if (blocks) {
44
- return getNewState(blocks, activeBlockId);
45
- }
46
- return state;
29
+ const { block, index } = action.payload;
30
+ return getNewState(addBlock(content.blocks, block, index), index);
47
31
  }
48
32
  case ORDER_BLOCK: {
49
33
  const { oldIndex, newIndex } = action.payload;
50
- return getNewState(withHeader(changeBlocksOrder(orderedBlocks, oldIndex, newIndex)), newIndex);
34
+ return getNewState(changeBlocksOrder(content.blocks, oldIndex, newIndex), newIndex);
51
35
  }
36
+ case UPDATE_VIEW_MODE:
37
+ return Object.assign(Object.assign({}, state), { viewMode: action.payload });
52
38
  default:
53
39
  return state;
54
40
  }
@@ -10,3 +10,4 @@ export declare const addEditorProps: (content: PageContent) => {
10
10
  menu?: import("../../models").Menu | undefined;
11
11
  background?: import("../../models").ThemedMediaProps | undefined;
12
12
  };
13
+ export declare const getErrorBoundaryState: (prevState: number) => number;
@@ -24,3 +24,4 @@ export const addBlock = (array, block, index) => {
24
24
  export const addEditorProps = (content) => {
25
25
  return Object.assign(Object.assign({}, content), { animated: false });
26
26
  };
27
+ export const getErrorBoundaryState = (prevState) => prevState === Number.MAX_SAFE_INTEGER ? 0 : prevState + 1;
@@ -0,0 +1,5 @@
1
+ :root {
2
+ --editor-header-height: 48px;
3
+ --editor-divider-width: 12px;
4
+ --editor-left-column-width: calc(400px + var(--editor-divider-width));
5
+ }
@@ -1,17 +1,23 @@
1
1
  /// <reference types="react" />
2
2
  import { PageConstructorProps } from '../../containers/PageConstructor';
3
- import { BlockDecoratorProps, PageData } from '../../models';
3
+ import { BlockDecorationProps, PageContent } from '../../models';
4
+ import { SchemaCustomConfig } from '../../schema';
5
+ import { EditBlockActions } from '../components/EditBlock/EditBlock';
4
6
  export type EditorBlockId = number | string;
5
7
  export interface EditorProps extends Required<Pick<PageConstructorProps, 'content'>>, Partial<Omit<PageConstructorProps, 'content'>> {
6
8
  children: (props: Partial<PageConstructorProps>) => React.ReactNode;
7
- onChange?: (data: PageData) => void;
9
+ onChange?: (data: PageContent) => void;
10
+ customSchema?: SchemaCustomConfig;
8
11
  }
9
12
  export interface EditBlockEditorProps {
10
- activeBlockId: EditorBlockId;
11
- orderedBlocksCount: number;
12
- onSelect: (index: EditorBlockId) => void;
13
- onDelete: (index: EditorBlockId) => void;
14
- onCopy: (index: number) => void;
15
- onOrderChange: (index: number, newIndex: number) => void;
13
+ isActive?: boolean;
14
+ onSelect: () => void;
15
+ actions: EditBlockActions;
16
+ }
17
+ export interface EditBlockProps extends EditBlockEditorProps, BlockDecorationProps {
18
+ isHeader?: boolean;
19
+ }
20
+ export declare enum ViewModeItem {
21
+ Edititng = "editing",
22
+ View = "view"
16
23
  }
17
- export type EditBlockProps = EditBlockEditorProps & BlockDecoratorProps;
@@ -1 +1,5 @@
1
- export {};
1
+ export var ViewModeItem;
2
+ (function (ViewModeItem) {
3
+ ViewModeItem["Edititng"] = "editing";
4
+ ViewModeItem["View"] = "view";
5
+ })(ViewModeItem || (ViewModeItem = {}));