@strapi/content-manager 0.0.0-next.990615b2ed4dd2f0589b4fda91418246d7b9450e → 0.0.0-next.9b24f8f26a4217f9f2873c24ebbdfdcb25de62d3

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 (488) hide show
  1. package/dist/admin/components/ComponentIcon.js +3 -0
  2. package/dist/admin/components/ComponentIcon.js.map +1 -1
  3. package/dist/admin/components/ComponentIcon.mjs +3 -0
  4. package/dist/admin/components/ComponentIcon.mjs.map +1 -1
  5. package/dist/admin/components/ConfigurationForm/EditFieldForm.js +4 -2
  6. package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
  7. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +4 -2
  8. package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
  9. package/dist/admin/components/ConfigurationForm/Fields.js +306 -205
  10. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  11. package/dist/admin/components/ConfigurationForm/Fields.mjs +311 -211
  12. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  13. package/dist/admin/components/ConfigurationForm/Form.js +2 -2
  14. package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
  15. package/dist/admin/components/ConfigurationForm/Form.mjs +4 -4
  16. package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
  17. package/dist/admin/components/DragPreviews/CardDragPreview.js +3 -1
  18. package/dist/admin/components/DragPreviews/CardDragPreview.js.map +1 -1
  19. package/dist/admin/components/DragPreviews/CardDragPreview.mjs +3 -1
  20. package/dist/admin/components/DragPreviews/CardDragPreview.mjs.map +1 -1
  21. package/dist/admin/components/DragPreviews/ComponentDragPreview.js +3 -1
  22. package/dist/admin/components/DragPreviews/ComponentDragPreview.js.map +1 -1
  23. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs +3 -1
  24. package/dist/admin/components/DragPreviews/ComponentDragPreview.mjs.map +1 -1
  25. package/dist/admin/components/DragPreviews/RelationDragPreview.js +3 -1
  26. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  27. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +3 -1
  28. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  29. package/dist/admin/components/LeftMenu.js +94 -50
  30. package/dist/admin/components/LeftMenu.js.map +1 -1
  31. package/dist/admin/components/LeftMenu.mjs +97 -53
  32. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  33. package/dist/admin/components/RelativeTime.js.map +1 -1
  34. package/dist/admin/components/RelativeTime.mjs.map +1 -1
  35. package/dist/admin/components/Widgets.js +287 -11
  36. package/dist/admin/components/Widgets.js.map +1 -1
  37. package/dist/admin/components/Widgets.mjs +270 -14
  38. package/dist/admin/components/Widgets.mjs.map +1 -1
  39. package/dist/admin/content-manager.js.map +1 -1
  40. package/dist/admin/content-manager.mjs.map +1 -1
  41. package/dist/admin/history/components/HistoryAction.js.map +1 -1
  42. package/dist/admin/history/components/HistoryAction.mjs.map +1 -1
  43. package/dist/admin/history/components/VersionContent.js +24 -6
  44. package/dist/admin/history/components/VersionContent.js.map +1 -1
  45. package/dist/admin/history/components/VersionContent.mjs +25 -7
  46. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  47. package/dist/admin/history/components/VersionHeader.js +7 -0
  48. package/dist/admin/history/components/VersionHeader.js.map +1 -1
  49. package/dist/admin/history/components/VersionHeader.mjs +8 -1
  50. package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
  51. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  52. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  53. package/dist/admin/history/components/VersionsList.js +1 -1
  54. package/dist/admin/history/components/VersionsList.js.map +1 -1
  55. package/dist/admin/history/components/VersionsList.mjs +1 -1
  56. package/dist/admin/history/components/VersionsList.mjs.map +1 -1
  57. package/dist/admin/history/pages/History.js +7 -7
  58. package/dist/admin/history/pages/History.js.map +1 -1
  59. package/dist/admin/history/pages/History.mjs +7 -7
  60. package/dist/admin/history/pages/History.mjs.map +1 -1
  61. package/dist/admin/history/services/historyVersion.js.map +1 -1
  62. package/dist/admin/history/services/historyVersion.mjs.map +1 -1
  63. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  64. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  65. package/dist/admin/hooks/useDocumentActions.js +31 -11
  66. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  67. package/dist/admin/hooks/useDocumentActions.mjs +32 -12
  68. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  69. package/dist/admin/index.js +47 -8
  70. package/dist/admin/index.js.map +1 -1
  71. package/dist/admin/index.mjs +47 -9
  72. package/dist/admin/index.mjs.map +1 -1
  73. package/dist/admin/layout.js +28 -33
  74. package/dist/admin/layout.js.map +1 -1
  75. package/dist/admin/layout.mjs +29 -15
  76. package/dist/admin/layout.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/EditViewPage.js +98 -77
  78. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  79. package/dist/admin/pages/EditView/EditViewPage.mjs +100 -79
  80. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  81. package/dist/admin/pages/EditView/components/Blocker.js +18 -0
  82. package/dist/admin/pages/EditView/components/Blocker.js.map +1 -0
  83. package/dist/admin/pages/EditView/components/Blocker.mjs +16 -0
  84. package/dist/admin/pages/EditView/components/Blocker.mjs.map +1 -0
  85. package/dist/admin/pages/EditView/components/DocumentActions.js +150 -126
  86. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/DocumentActions.mjs +153 -129
  88. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  90. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.js.map +1 -1
  92. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Code.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +66 -2
  94. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +66 -2
  96. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.js.map +1 -1
  98. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Quote.mjs.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js +16 -19
  100. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.js.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs +16 -19
  102. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksContent.mjs.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js +54 -14
  104. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.js.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs +55 -15
  106. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.mjs.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js +22 -35
  108. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.js.map +1 -1
  109. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs +22 -35
  110. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.mjs.map +1 -1
  111. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +2 -2
  112. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  113. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +2 -2
  114. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  115. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.js.map +1 -1
  116. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Modifiers.mjs.map +1 -1
  117. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js +7 -3
  118. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.js.map +1 -1
  119. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs +7 -3
  120. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/utils/links.mjs.map +1 -1
  121. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  122. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  123. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  124. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  125. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +15 -3
  126. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  127. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +16 -4
  128. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  129. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.js.map +1 -1
  130. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/AddComponentButton.mjs.map +1 -1
  131. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +1 -2
  132. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  133. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +1 -2
  134. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  135. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +22 -9
  136. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  137. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +24 -11
  138. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  139. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  140. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  141. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +2 -0
  142. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  143. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +2 -0
  144. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  145. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +160 -107
  146. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  147. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +163 -110
  148. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  149. package/dist/admin/pages/EditView/components/FormInputs/UID.js +6 -3
  150. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  151. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +6 -3
  152. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  153. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js +1 -1
  154. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.js.map +1 -1
  155. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs +1 -1
  156. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/Editor.mjs.map +1 -1
  157. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js +2 -2
  158. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.js.map +1 -1
  159. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs +2 -2
  160. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/EditorLayout.mjs.map +1 -1
  161. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.js.map +1 -1
  162. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/PreviewWysiwyg.mjs.map +1 -1
  163. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  164. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  165. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  166. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  167. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.js.map +1 -1
  168. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.mjs.map +1 -1
  169. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.js.map +1 -1
  170. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/utils.mjs.map +1 -1
  171. package/dist/admin/pages/EditView/components/FormLayout.js +59 -34
  172. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  173. package/dist/admin/pages/EditView/components/FormLayout.mjs +60 -34
  174. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  175. package/dist/admin/pages/EditView/components/Header.js +92 -27
  176. package/dist/admin/pages/EditView/components/Header.js.map +1 -1
  177. package/dist/admin/pages/EditView/components/Header.mjs +94 -29
  178. package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
  179. package/dist/admin/pages/EditView/components/InputRenderer.js +42 -25
  180. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  181. package/dist/admin/pages/EditView/components/InputRenderer.mjs +42 -25
  182. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  183. package/dist/admin/pages/EditView/utils/data.js +214 -11
  184. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  185. package/dist/admin/pages/EditView/utils/data.mjs +214 -12
  186. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  187. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js +1 -0
  188. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.js.map +1 -1
  189. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs +1 -0
  190. package/dist/admin/pages/ListConfiguration/ListConfigurationPage.mjs.map +1 -1
  191. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +1 -0
  192. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  193. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +1 -0
  194. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  195. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +1 -1
  196. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  197. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +1 -1
  198. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
  199. package/dist/admin/pages/ListConfiguration/components/Header.js.map +1 -1
  200. package/dist/admin/pages/ListConfiguration/components/Header.mjs.map +1 -1
  201. package/dist/admin/pages/ListConfiguration/components/Settings.js +1 -1
  202. package/dist/admin/pages/ListConfiguration/components/Settings.js.map +1 -1
  203. package/dist/admin/pages/ListConfiguration/components/Settings.mjs +1 -1
  204. package/dist/admin/pages/ListConfiguration/components/Settings.mjs.map +1 -1
  205. package/dist/admin/pages/ListView/ListViewPage.js +225 -132
  206. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  207. package/dist/admin/pages/ListView/ListViewPage.mjs +227 -134
  208. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  209. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.js.map +1 -1
  210. package/dist/admin/pages/ListView/components/AutoCloneFailureModal.mjs.map +1 -1
  211. package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
  212. package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
  213. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
  214. package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
  215. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +20 -32
  216. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
  217. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +21 -33
  218. package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
  219. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +13 -3
  220. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
  221. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +13 -3
  222. package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
  223. package/dist/admin/pages/ListView/components/Filters.js +8 -2
  224. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  225. package/dist/admin/pages/ListView/components/Filters.mjs +8 -2
  226. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  227. package/dist/admin/pages/ListView/components/TableActions.js +13 -3
  228. package/dist/admin/pages/ListView/components/TableActions.js.map +1 -1
  229. package/dist/admin/pages/ListView/components/TableActions.mjs +13 -3
  230. package/dist/admin/pages/ListView/components/TableActions.mjs.map +1 -1
  231. package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
  232. package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
  233. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
  234. package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
  235. package/dist/admin/pages/ListView/components/TableCells/Media.js +5 -3
  236. package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
  237. package/dist/admin/pages/ListView/components/TableCells/Media.mjs +5 -3
  238. package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
  239. package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
  240. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  241. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
  242. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  243. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
  244. package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
  245. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
  246. package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
  247. package/dist/admin/preview/components/InputPopover.js +189 -0
  248. package/dist/admin/preview/components/InputPopover.js.map +1 -0
  249. package/dist/admin/preview/components/InputPopover.mjs +167 -0
  250. package/dist/admin/preview/components/InputPopover.mjs.map +1 -0
  251. package/dist/admin/preview/components/PreviewHeader.js +0 -2
  252. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  253. package/dist/admin/preview/components/PreviewHeader.mjs +0 -2
  254. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  255. package/dist/admin/preview/components/PreviewSidePanel.js +31 -4
  256. package/dist/admin/preview/components/PreviewSidePanel.js.map +1 -1
  257. package/dist/admin/preview/components/PreviewSidePanel.mjs +32 -5
  258. package/dist/admin/preview/components/PreviewSidePanel.mjs.map +1 -1
  259. package/dist/admin/preview/hooks/usePreviewInputManager.js +77 -0
  260. package/dist/admin/preview/hooks/usePreviewInputManager.js.map +1 -0
  261. package/dist/admin/preview/hooks/usePreviewInputManager.mjs +56 -0
  262. package/dist/admin/preview/hooks/usePreviewInputManager.mjs.map +1 -0
  263. package/dist/admin/preview/pages/Preview.js +178 -74
  264. package/dist/admin/preview/pages/Preview.js.map +1 -1
  265. package/dist/admin/preview/pages/Preview.mjs +180 -76
  266. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  267. package/dist/admin/preview/services/preview.js.map +1 -1
  268. package/dist/admin/preview/services/preview.mjs.map +1 -1
  269. package/dist/admin/preview/utils/constants.js +56 -0
  270. package/dist/admin/preview/utils/constants.js.map +1 -0
  271. package/dist/admin/preview/utils/constants.mjs +52 -0
  272. package/dist/admin/preview/utils/constants.mjs.map +1 -0
  273. package/dist/admin/preview/utils/fieldUtils.js +107 -0
  274. package/dist/admin/preview/utils/fieldUtils.js.map +1 -0
  275. package/dist/admin/preview/utils/fieldUtils.mjs +102 -0
  276. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -0
  277. package/dist/admin/preview/utils/getSendMessage.js +22 -0
  278. package/dist/admin/preview/utils/getSendMessage.js.map +1 -0
  279. package/dist/admin/preview/utils/getSendMessage.mjs +20 -0
  280. package/dist/admin/preview/utils/getSendMessage.mjs.map +1 -0
  281. package/dist/admin/preview/utils/previewScript.js +534 -0
  282. package/dist/admin/preview/utils/previewScript.js.map +1 -0
  283. package/dist/admin/preview/utils/previewScript.mjs +532 -0
  284. package/dist/admin/preview/utils/previewScript.mjs.map +1 -0
  285. package/dist/admin/router.js.map +1 -1
  286. package/dist/admin/router.mjs.map +1 -1
  287. package/dist/admin/services/api.js +5 -1
  288. package/dist/admin/services/api.js.map +1 -1
  289. package/dist/admin/services/api.mjs +5 -1
  290. package/dist/admin/services/api.mjs.map +1 -1
  291. package/dist/admin/services/documents.js +59 -17
  292. package/dist/admin/services/documents.js.map +1 -1
  293. package/dist/admin/services/documents.mjs +59 -17
  294. package/dist/admin/services/documents.mjs.map +1 -1
  295. package/dist/admin/services/homepage.js.map +1 -1
  296. package/dist/admin/services/homepage.mjs.map +1 -1
  297. package/dist/admin/services/relations.js.map +1 -1
  298. package/dist/admin/services/relations.mjs.map +1 -1
  299. package/dist/admin/src/components/ConfigurationForm/Fields.d.ts +6 -4
  300. package/dist/admin/src/components/LeftMenu.d.ts +3 -1
  301. package/dist/admin/src/components/Widgets.d.ts +8 -3
  302. package/dist/admin/src/exports.d.ts +1 -0
  303. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  304. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -0
  305. package/dist/admin/src/pages/EditView/components/Blocker.d.ts +5 -0
  306. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +2 -1
  307. package/dist/admin/src/pages/EditView/components/FormInputs/BlocksInput/utils/links.d.ts +2 -0
  308. package/dist/admin/src/pages/EditView/components/FormInputs/UID.d.ts +1 -0
  309. package/dist/admin/src/pages/EditView/components/FormInputs/Wysiwyg/WysiwygStyles.d.ts +1 -1
  310. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +7 -11
  311. package/dist/admin/src/pages/EditView/components/Header.d.ts +15 -0
  312. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  313. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  314. package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
  315. package/dist/admin/src/preview/components/InputPopover.d.ts +6 -0
  316. package/dist/admin/src/preview/hooks/usePreviewInputManager.d.ts +5 -0
  317. package/dist/admin/src/preview/pages/Preview.d.ts +12 -0
  318. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  319. package/dist/admin/src/preview/utils/constants.d.ts +55 -0
  320. package/dist/admin/src/preview/utils/fieldUtils.d.ts +22 -0
  321. package/dist/admin/src/preview/utils/getSendMessage.d.ts +11 -0
  322. package/dist/admin/src/preview/utils/previewScript.d.ts +24 -0
  323. package/dist/admin/src/services/api.d.ts +1 -1
  324. package/dist/admin/src/services/components.d.ts +2 -2
  325. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  326. package/dist/admin/src/services/documents.d.ts +23 -17
  327. package/dist/admin/src/services/homepage.d.ts +1 -1
  328. package/dist/admin/src/services/init.d.ts +1 -1
  329. package/dist/admin/src/services/relations.d.ts +2 -2
  330. package/dist/admin/src/services/uid.d.ts +3 -3
  331. package/dist/admin/src/utils/api.d.ts +1 -1
  332. package/dist/admin/src/utils/validation.d.ts +1 -0
  333. package/dist/admin/translations/en.json.js +14 -0
  334. package/dist/admin/translations/en.json.js.map +1 -1
  335. package/dist/admin/translations/en.json.mjs +14 -0
  336. package/dist/admin/translations/en.json.mjs.map +1 -1
  337. package/dist/admin/translations/es.json.js +7 -2
  338. package/dist/admin/translations/es.json.js.map +1 -1
  339. package/dist/admin/translations/es.json.mjs +7 -2
  340. package/dist/admin/translations/es.json.mjs.map +1 -1
  341. package/dist/admin/translations/fr.json.js +13 -3
  342. package/dist/admin/translations/fr.json.js.map +1 -1
  343. package/dist/admin/translations/fr.json.mjs +13 -3
  344. package/dist/admin/translations/fr.json.mjs.map +1 -1
  345. package/dist/admin/utils/api.js +1 -1
  346. package/dist/admin/utils/api.js.map +1 -1
  347. package/dist/admin/utils/api.mjs +1 -1
  348. package/dist/admin/utils/api.mjs.map +1 -1
  349. package/dist/admin/utils/translations.js.map +1 -1
  350. package/dist/admin/utils/translations.mjs.map +1 -1
  351. package/dist/admin/utils/urls.js.map +1 -1
  352. package/dist/admin/utils/urls.mjs.map +1 -1
  353. package/dist/admin/utils/users.js.map +1 -1
  354. package/dist/admin/utils/users.mjs.map +1 -1
  355. package/dist/admin/utils/validation.js +20 -8
  356. package/dist/admin/utils/validation.js.map +1 -1
  357. package/dist/admin/utils/validation.mjs +20 -8
  358. package/dist/admin/utils/validation.mjs.map +1 -1
  359. package/dist/server/controllers/collection-types.js +2 -1
  360. package/dist/server/controllers/collection-types.js.map +1 -1
  361. package/dist/server/controllers/collection-types.mjs +2 -1
  362. package/dist/server/controllers/collection-types.mjs.map +1 -1
  363. package/dist/server/controllers/content-types.js +11 -1
  364. package/dist/server/controllers/content-types.js.map +1 -1
  365. package/dist/server/controllers/content-types.mjs +11 -1
  366. package/dist/server/controllers/content-types.mjs.map +1 -1
  367. package/dist/server/controllers/relations.js +8 -6
  368. package/dist/server/controllers/relations.js.map +1 -1
  369. package/dist/server/controllers/relations.mjs +8 -6
  370. package/dist/server/controllers/relations.mjs.map +1 -1
  371. package/dist/server/controllers/single-types.js +3 -1
  372. package/dist/server/controllers/single-types.js.map +1 -1
  373. package/dist/server/controllers/single-types.mjs +3 -1
  374. package/dist/server/controllers/single-types.mjs.map +1 -1
  375. package/dist/server/controllers/validation/dimensions.js.map +1 -1
  376. package/dist/server/controllers/validation/dimensions.mjs.map +1 -1
  377. package/dist/server/controllers/validation/index.js +14 -2
  378. package/dist/server/controllers/validation/index.js.map +1 -1
  379. package/dist/server/controllers/validation/index.mjs +14 -2
  380. package/dist/server/controllers/validation/index.mjs.map +1 -1
  381. package/dist/server/controllers/validation/model-configuration.js +2 -2
  382. package/dist/server/controllers/validation/model-configuration.js.map +1 -1
  383. package/dist/server/controllers/validation/model-configuration.mjs +2 -2
  384. package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
  385. package/dist/server/history/services/lifecycles.js +23 -19
  386. package/dist/server/history/services/lifecycles.js.map +1 -1
  387. package/dist/server/history/services/lifecycles.mjs +23 -19
  388. package/dist/server/history/services/lifecycles.mjs.map +1 -1
  389. package/dist/server/history/utils.js.map +1 -1
  390. package/dist/server/history/utils.mjs.map +1 -1
  391. package/dist/server/homepage/controllers/homepage.js +5 -0
  392. package/dist/server/homepage/controllers/homepage.js.map +1 -1
  393. package/dist/server/homepage/controllers/homepage.mjs +5 -0
  394. package/dist/server/homepage/controllers/homepage.mjs.map +1 -1
  395. package/dist/server/homepage/routes/homepage.js +11 -0
  396. package/dist/server/homepage/routes/homepage.js.map +1 -1
  397. package/dist/server/homepage/routes/homepage.mjs +11 -0
  398. package/dist/server/homepage/routes/homepage.mjs.map +1 -1
  399. package/dist/server/homepage/services/homepage.js +87 -46
  400. package/dist/server/homepage/services/homepage.js.map +1 -1
  401. package/dist/server/homepage/services/homepage.mjs +87 -46
  402. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  403. package/dist/server/middlewares/routing.js.map +1 -1
  404. package/dist/server/middlewares/routing.mjs.map +1 -1
  405. package/dist/server/preview/services/preview-config.js +11 -32
  406. package/dist/server/preview/services/preview-config.js.map +1 -1
  407. package/dist/server/preview/services/preview-config.mjs +12 -33
  408. package/dist/server/preview/services/preview-config.mjs.map +1 -1
  409. package/dist/server/preview/services/preview.js +4 -0
  410. package/dist/server/preview/services/preview.js.map +1 -1
  411. package/dist/server/preview/services/preview.mjs +4 -0
  412. package/dist/server/preview/services/preview.mjs.map +1 -1
  413. package/dist/server/preview/utils.js.map +1 -1
  414. package/dist/server/preview/utils.mjs.map +1 -1
  415. package/dist/server/services/configuration.js.map +1 -1
  416. package/dist/server/services/configuration.mjs.map +1 -1
  417. package/dist/server/services/data-mapper.js +4 -1
  418. package/dist/server/services/data-mapper.js.map +1 -1
  419. package/dist/server/services/data-mapper.mjs +4 -1
  420. package/dist/server/services/data-mapper.mjs.map +1 -1
  421. package/dist/server/services/document-manager.js +8 -1
  422. package/dist/server/services/document-manager.js.map +1 -1
  423. package/dist/server/services/document-manager.mjs +8 -1
  424. package/dist/server/services/document-manager.mjs.map +1 -1
  425. package/dist/server/services/document-metadata.js +26 -2
  426. package/dist/server/services/document-metadata.js.map +1 -1
  427. package/dist/server/services/document-metadata.mjs +26 -2
  428. package/dist/server/services/document-metadata.mjs.map +1 -1
  429. package/dist/server/services/field-sizes.js.map +1 -1
  430. package/dist/server/services/field-sizes.mjs.map +1 -1
  431. package/dist/server/services/uid.js.map +1 -1
  432. package/dist/server/services/uid.mjs.map +1 -1
  433. package/dist/server/services/utils/configuration/attributes.js +1 -1
  434. package/dist/server/services/utils/configuration/attributes.js.map +1 -1
  435. package/dist/server/services/utils/configuration/attributes.mjs +1 -1
  436. package/dist/server/services/utils/configuration/attributes.mjs.map +1 -1
  437. package/dist/server/services/utils/configuration/layouts.js +1 -1
  438. package/dist/server/services/utils/configuration/layouts.js.map +1 -1
  439. package/dist/server/services/utils/configuration/layouts.mjs +1 -1
  440. package/dist/server/services/utils/configuration/layouts.mjs.map +1 -1
  441. package/dist/server/services/utils/configuration/metadatas.js +8 -0
  442. package/dist/server/services/utils/configuration/metadatas.js.map +1 -1
  443. package/dist/server/services/utils/configuration/metadatas.mjs +8 -0
  444. package/dist/server/services/utils/configuration/metadatas.mjs.map +1 -1
  445. package/dist/server/services/utils/populate.js +11 -0
  446. package/dist/server/services/utils/populate.js.map +1 -1
  447. package/dist/server/services/utils/populate.mjs +11 -0
  448. package/dist/server/services/utils/populate.mjs.map +1 -1
  449. package/dist/server/services/utils/store.js.map +1 -1
  450. package/dist/server/services/utils/store.mjs.map +1 -1
  451. package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
  452. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  453. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  454. package/dist/server/src/controllers/single-types.d.ts.map +1 -1
  455. package/dist/server/src/controllers/validation/index.d.ts +6 -1
  456. package/dist/server/src/controllers/validation/index.d.ts.map +1 -1
  457. package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
  458. package/dist/server/src/homepage/controllers/homepage.d.ts +2 -1
  459. package/dist/server/src/homepage/controllers/homepage.d.ts.map +1 -1
  460. package/dist/server/src/homepage/index.d.ts +7 -0
  461. package/dist/server/src/homepage/index.d.ts.map +1 -1
  462. package/dist/server/src/homepage/routes/homepage.d.ts.map +1 -1
  463. package/dist/server/src/homepage/services/homepage.d.ts +4 -1
  464. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  465. package/dist/server/src/homepage/services/index.d.ts +7 -0
  466. package/dist/server/src/homepage/services/index.d.ts.map +1 -1
  467. package/dist/server/src/index.d.ts +8 -0
  468. package/dist/server/src/index.d.ts.map +1 -1
  469. package/dist/server/src/preview/services/index.d.ts +1 -0
  470. package/dist/server/src/preview/services/index.d.ts.map +1 -1
  471. package/dist/server/src/preview/services/preview-config.d.ts +1 -0
  472. package/dist/server/src/preview/services/preview-config.d.ts.map +1 -1
  473. package/dist/server/src/preview/services/preview.d.ts.map +1 -1
  474. package/dist/server/src/preview/utils.d.ts +1 -0
  475. package/dist/server/src/preview/utils.d.ts.map +1 -1
  476. package/dist/server/src/services/data-mapper.d.ts +1 -0
  477. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  478. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  479. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  480. package/dist/server/src/services/index.d.ts +8 -0
  481. package/dist/server/src/services/index.d.ts.map +1 -1
  482. package/dist/server/src/services/utils/configuration/metadatas.d.ts.map +1 -1
  483. package/dist/server/src/services/utils/populate.d.ts.map +1 -1
  484. package/dist/shared/contracts/collection-types.d.ts +0 -1
  485. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  486. package/dist/shared/contracts/homepage.d.ts +13 -0
  487. package/dist/shared/contracts/homepage.d.ts.map +1 -1
  488. package/package.json +13 -11
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksEditor.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n return { key, incrementSlateUpdatesCount: () => (slateUpdatesCount.current += 1) };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, handleToggleExpand] = React.useReducer((prev) => !prev, false);\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const handleSlateChange = (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n incrementSlateUpdatesCount();\n\n onChange(name, state as Schema.Attribute.BlocksValue);\n }\n };\n\n const blocks: BlocksStore = {\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n };\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onToggleExpand={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </IconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n};\n"],"names":["selectorBlockKeys","isSelectorBlockKey","key","includes","BlocksEditorProvider","usePartialBlocksEditorContext","createContext","useBlocksEditorContext","consumerName","context","state","editor","useSlate","EditorDivider","styled","Divider","theme","colors","neutral200","useResetKey","value","slateUpdatesCount","React","useRef","valueUpdatesCount","setKey","useState","useEffect","current","previousKey","incrementSlateUpdatesCount","pipe","fns","reduce","prev","fn","BlocksEditor","forwardRef","disabled","name","onChange","error","contentProps","forwardedRef","formatMessage","useIntl","withHistory","withImages","withStrapiSchema","withReact","withLinks","createEditor","liveText","setLiveText","ariaDescriptionId","useId","isExpandedMode","handleToggleExpand","useReducer","useImperativeHandle","focus","ReactEditor","handleSlateChange","isAstChange","operations","some","op","type","blocks","paragraphBlocks","headingBlocks","listBlocks","linkBlocks","imageBlocks","quoteBlocks","codeBlocks","_jsxs","_Fragment","_jsx","VisuallyHidden","id","getTranslation","defaultMessage","aria-live","Slate","initialValue","children","text","modifiers","EditorLayout","onToggleExpand","BlocksToolbar","width","BlocksContent","IconButton","position","bottom","right","shadow","label","onClick","Expand"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksEditor.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor, Transforms } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n const incrementSlateUpdatesCount = React.useCallback(() => {\n slateUpdatesCount.current += 1;\n }, []);\n\n return { key, incrementSlateUpdatesCount };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, handleToggleExpand] = React.useReducer((prev) => !prev, false);\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const debounceTimeout = React.useRef<NodeJS.Timeout | null>(null);\n\n const handleSlateChange = React.useCallback(\n (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n /**\n * Slate handles the state of the editor internally. We just need to keep Strapi's form\n * state in sync with it in order to make sure that things like the \"modified\" state\n * isn't broken. Updating the whole state on every change is very expensive however,\n * so we debounce calls to onChange to mitigate input lag.\n */\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n\n // Set a new debounce timeout\n debounceTimeout.current = setTimeout(() => {\n incrementSlateUpdatesCount();\n onChange(name, state as Schema.Attribute.BlocksValue);\n debounceTimeout.current = null;\n }, 300);\n }\n },\n [editor.operations, incrementSlateUpdatesCount, name, onChange]\n );\n\n // Clean up the timeout on unmount\n React.useEffect(() => {\n return () => {\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n };\n }, []);\n\n // Ensure the editor is in sync after discard\n React.useEffect(() => {\n // Compare the field value with the editor state to check for a stale selection\n if (value && JSON.stringify(editor.children) !== JSON.stringify(value)) {\n // When there is a diff, unset selection to avoid an invalid state\n Transforms.deselect(editor);\n }\n }, [editor, value]);\n\n const blocks = React.useMemo(\n () => ({\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n }),\n []\n ) satisfies BlocksStore;\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onToggleExpand={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </IconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n};\n"],"names":["selectorBlockKeys","isSelectorBlockKey","key","includes","BlocksEditorProvider","usePartialBlocksEditorContext","createContext","useBlocksEditorContext","consumerName","context","state","editor","useSlate","EditorDivider","styled","Divider","theme","colors","neutral200","useResetKey","value","slateUpdatesCount","React","useRef","valueUpdatesCount","setKey","useState","useEffect","current","previousKey","incrementSlateUpdatesCount","useCallback","pipe","fns","reduce","prev","fn","BlocksEditor","forwardRef","disabled","name","onChange","error","contentProps","forwardedRef","formatMessage","useIntl","withHistory","withImages","withStrapiSchema","withReact","withLinks","createEditor","liveText","setLiveText","ariaDescriptionId","useId","isExpandedMode","handleToggleExpand","useReducer","useImperativeHandle","focus","ReactEditor","debounceTimeout","handleSlateChange","isAstChange","operations","some","op","type","clearTimeout","setTimeout","JSON","stringify","children","Transforms","deselect","blocks","useMemo","paragraphBlocks","headingBlocks","listBlocks","linkBlocks","imageBlocks","quoteBlocks","codeBlocks","_jsxs","_Fragment","_jsx","VisuallyHidden","id","getTranslation","defaultMessage","aria-live","Slate","initialValue","text","modifiers","EditorLayout","onToggleExpand","BlocksToolbar","width","BlocksContent","IconButton","position","bottom","right","shadow","label","onClick","Expand"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { createContext } from '@strapi/admin/strapi-admin';
4
4
  import { Divider, VisuallyHidden, IconButton } from '@strapi/design-system';
5
5
  import { Expand } from '@strapi/icons';
6
6
  import { useIntl } from 'react-intl';
7
- import { createEditor } from 'slate';
7
+ import { createEditor, Transforms } from 'slate';
8
8
  import { withHistory } from 'slate-history';
9
9
  import { ReactEditor, Slate, useSlate, withReact } from 'slate-react';
10
10
  import { styled } from 'styled-components';
@@ -82,9 +82,12 @@ function useBlocksEditorContext(consumerName) {
82
82
  }, [
83
83
  value
84
84
  ]);
85
+ const incrementSlateUpdatesCount = React.useCallback(()=>{
86
+ slateUpdatesCount.current += 1;
87
+ }, []);
85
88
  return {
86
89
  key,
87
- incrementSlateUpdatesCount: ()=>slateUpdatesCount.current += 1
90
+ incrementSlateUpdatesCount
88
91
  };
89
92
  }
90
93
  const pipe = (...fns)=>(value)=>fns.reduce((prev, fn)=>fn(prev), value);
@@ -106,22 +109,59 @@ const BlocksEditor = /*#__PURE__*/ React.forwardRef(({ disabled = false, name, o
106
109
  editor
107
110
  ]);
108
111
  const { key, incrementSlateUpdatesCount } = useResetKey(value);
109
- const handleSlateChange = (state)=>{
112
+ const debounceTimeout = React.useRef(null);
113
+ const handleSlateChange = React.useCallback((state)=>{
110
114
  const isAstChange = editor.operations.some((op)=>op.type !== 'set_selection');
111
115
  if (isAstChange) {
112
- incrementSlateUpdatesCount();
113
- onChange(name, state);
116
+ /**
117
+ * Slate handles the state of the editor internally. We just need to keep Strapi's form
118
+ * state in sync with it in order to make sure that things like the "modified" state
119
+ * isn't broken. Updating the whole state on every change is very expensive however,
120
+ * so we debounce calls to onChange to mitigate input lag.
121
+ */ if (debounceTimeout.current) {
122
+ clearTimeout(debounceTimeout.current);
123
+ }
124
+ // Set a new debounce timeout
125
+ debounceTimeout.current = setTimeout(()=>{
126
+ incrementSlateUpdatesCount();
127
+ onChange(name, state);
128
+ debounceTimeout.current = null;
129
+ }, 300);
114
130
  }
115
- };
116
- const blocks = {
117
- ...paragraphBlocks,
118
- ...headingBlocks,
119
- ...listBlocks,
120
- ...linkBlocks,
121
- ...imageBlocks,
122
- ...quoteBlocks,
123
- ...codeBlocks
124
- };
131
+ }, [
132
+ editor.operations,
133
+ incrementSlateUpdatesCount,
134
+ name,
135
+ onChange
136
+ ]);
137
+ // Clean up the timeout on unmount
138
+ React.useEffect(()=>{
139
+ return ()=>{
140
+ if (debounceTimeout.current) {
141
+ clearTimeout(debounceTimeout.current);
142
+ }
143
+ };
144
+ }, []);
145
+ // Ensure the editor is in sync after discard
146
+ React.useEffect(()=>{
147
+ // Compare the field value with the editor state to check for a stale selection
148
+ if (value && JSON.stringify(editor.children) !== JSON.stringify(value)) {
149
+ // When there is a diff, unset selection to avoid an invalid state
150
+ Transforms.deselect(editor);
151
+ }
152
+ }, [
153
+ editor,
154
+ value
155
+ ]);
156
+ const blocks = React.useMemo(()=>({
157
+ ...paragraphBlocks,
158
+ ...headingBlocks,
159
+ ...listBlocks,
160
+ ...linkBlocks,
161
+ ...imageBlocks,
162
+ ...quoteBlocks,
163
+ ...codeBlocks
164
+ }), []);
125
165
  return /*#__PURE__*/ jsxs(Fragment, {
126
166
  children: [
127
167
  /*#__PURE__*/ jsx(VisuallyHidden, {
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksEditor.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n return { key, incrementSlateUpdatesCount: () => (slateUpdatesCount.current += 1) };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, handleToggleExpand] = React.useReducer((prev) => !prev, false);\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const handleSlateChange = (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n incrementSlateUpdatesCount();\n\n onChange(name, state as Schema.Attribute.BlocksValue);\n }\n };\n\n const blocks: BlocksStore = {\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n };\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onToggleExpand={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </IconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n};\n"],"names":["selectorBlockKeys","isSelectorBlockKey","key","includes","BlocksEditorProvider","usePartialBlocksEditorContext","createContext","useBlocksEditorContext","consumerName","context","state","editor","useSlate","EditorDivider","styled","Divider","theme","colors","neutral200","useResetKey","value","slateUpdatesCount","React","useRef","valueUpdatesCount","setKey","useState","useEffect","current","previousKey","incrementSlateUpdatesCount","pipe","fns","reduce","prev","fn","BlocksEditor","forwardRef","disabled","name","onChange","error","contentProps","forwardedRef","formatMessage","useIntl","withHistory","withImages","withStrapiSchema","withReact","withLinks","createEditor","liveText","setLiveText","ariaDescriptionId","useId","isExpandedMode","handleToggleExpand","useReducer","useImperativeHandle","focus","ReactEditor","handleSlateChange","isAstChange","operations","some","op","type","blocks","paragraphBlocks","headingBlocks","listBlocks","linkBlocks","imageBlocks","quoteBlocks","codeBlocks","_jsxs","_Fragment","_jsx","VisuallyHidden","id","getTranslation","defaultMessage","aria-live","Slate","initialValue","children","text","modifiers","EditorLayout","onToggleExpand","BlocksToolbar","width","BlocksContent","IconButton","position","bottom","right","shadow","label","onClick","Expand"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksEditor.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksEditor.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, type FieldValue } from '@strapi/admin/strapi-admin';\nimport { IconButton, Divider, VisuallyHidden } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, type Descendant, createEditor, Transforms } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { type RenderElementProps, Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport { styled, type CSSProperties } from 'styled-components';\n\nimport { getTranslation } from '../../../../../utils/translations';\n\nimport { codeBlocks } from './Blocks/Code';\nimport { headingBlocks } from './Blocks/Heading';\nimport { imageBlocks } from './Blocks/Image';\nimport { linkBlocks } from './Blocks/Link';\nimport { listBlocks } from './Blocks/List';\nimport { paragraphBlocks } from './Blocks/Paragraph';\nimport { quoteBlocks } from './Blocks/Quote';\nimport { BlocksContent, type BlocksContentProps } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { EditorLayout } from './EditorLayout';\nimport { type ModifiersStore, modifiers } from './Modifiers';\nimport { withImages } from './plugins/withImages';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BaseBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n matchNode: (node: Schema.Attribute.BlocksNode) => boolean;\n handleConvert?: (editor: Editor) => void | (() => React.JSX.Element);\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n handleTab?: (editor: Editor) => void;\n snippets?: string[];\n dragHandleTopMargin?: CSSProperties['marginTop'];\n}\n\ninterface NonSelectorBlock extends BaseBlock {\n isInBlocksSelector: false;\n}\n\ninterface SelectorBlock extends BaseBlock {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n}\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\ninterface BlocksEditorContextValue {\n blocks: BlocksStore;\n modifiers: ModifiersStore;\n disabled: boolean;\n name: string;\n setLiveText: (text: string) => void;\n isExpandedMode: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName, (state) => state);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Schema.Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n const incrementSlateUpdatesCount = React.useCallback(() => {\n slateUpdatesCount.current += 1;\n }, []);\n\n return { key, incrementSlateUpdatesCount };\n}\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps\n extends Pick<FieldValue<Schema.Attribute.BlocksValue>, 'onChange' | 'value' | 'error'>,\n BlocksContentProps {\n disabled?: boolean;\n name: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, onChange, value, error, ...contentProps }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const [liveText, setLiveText] = React.useState('');\n const ariaDescriptionId = React.useId();\n const [isExpandedMode, handleToggleExpand] = React.useReducer((prev) => !prev, false);\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const debounceTimeout = React.useRef<NodeJS.Timeout | null>(null);\n\n const handleSlateChange = React.useCallback(\n (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n /**\n * Slate handles the state of the editor internally. We just need to keep Strapi's form\n * state in sync with it in order to make sure that things like the \"modified\" state\n * isn't broken. Updating the whole state on every change is very expensive however,\n * so we debounce calls to onChange to mitigate input lag.\n */\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n\n // Set a new debounce timeout\n debounceTimeout.current = setTimeout(() => {\n incrementSlateUpdatesCount();\n onChange(name, state as Schema.Attribute.BlocksValue);\n debounceTimeout.current = null;\n }, 300);\n }\n },\n [editor.operations, incrementSlateUpdatesCount, name, onChange]\n );\n\n // Clean up the timeout on unmount\n React.useEffect(() => {\n return () => {\n if (debounceTimeout.current) {\n clearTimeout(debounceTimeout.current);\n }\n };\n }, []);\n\n // Ensure the editor is in sync after discard\n React.useEffect(() => {\n // Compare the field value with the editor state to check for a stale selection\n if (value && JSON.stringify(editor.children) !== JSON.stringify(value)) {\n // When there is a diff, unset selection to avoid an invalid state\n Transforms.deselect(editor);\n }\n }, [editor, value]);\n\n const blocks = React.useMemo(\n () => ({\n ...paragraphBlocks,\n ...headingBlocks,\n ...listBlocks,\n ...linkBlocks,\n ...imageBlocks,\n ...quoteBlocks,\n ...codeBlocks,\n }),\n []\n ) satisfies BlocksStore;\n\n return (\n <>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTranslation('components.Blocks.dnd.instruction'),\n defaultMessage: `To reorder blocks, press Command or Control along with Shift and the Up or Down arrow keys`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider\n blocks={blocks}\n modifiers={modifiers}\n disabled={disabled}\n name={name}\n setLiveText={setLiveText}\n isExpandedMode={isExpandedMode}\n >\n <EditorLayout\n error={error}\n disabled={disabled}\n onToggleExpand={handleToggleExpand}\n ariaDescriptionId={ariaDescriptionId}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent {...contentProps} />\n {!isExpandedMode && (\n <IconButton\n position=\"absolute\"\n bottom=\"1.2rem\"\n right=\"1.2rem\"\n shadow=\"filterShadow\"\n label={formatMessage({\n id: getTranslation('components.Blocks.expand'),\n defaultMessage: 'Expand',\n })}\n onClick={handleToggleExpand}\n >\n <Expand />\n </IconButton>\n )}\n </EditorLayout>\n </BlocksEditorProvider>\n </Slate>\n </>\n );\n }\n);\n\nexport {\n type BlocksStore,\n type SelectorBlockKey,\n BlocksEditor,\n BlocksEditorProvider,\n useBlocksEditorContext,\n isSelectorBlockKey,\n};\n"],"names":["selectorBlockKeys","isSelectorBlockKey","key","includes","BlocksEditorProvider","usePartialBlocksEditorContext","createContext","useBlocksEditorContext","consumerName","context","state","editor","useSlate","EditorDivider","styled","Divider","theme","colors","neutral200","useResetKey","value","slateUpdatesCount","React","useRef","valueUpdatesCount","setKey","useState","useEffect","current","previousKey","incrementSlateUpdatesCount","useCallback","pipe","fns","reduce","prev","fn","BlocksEditor","forwardRef","disabled","name","onChange","error","contentProps","forwardedRef","formatMessage","useIntl","withHistory","withImages","withStrapiSchema","withReact","withLinks","createEditor","liveText","setLiveText","ariaDescriptionId","useId","isExpandedMode","handleToggleExpand","useReducer","useImperativeHandle","focus","ReactEditor","debounceTimeout","handleSlateChange","isAstChange","operations","some","op","type","clearTimeout","setTimeout","JSON","stringify","children","Transforms","deselect","blocks","useMemo","paragraphBlocks","headingBlocks","listBlocks","linkBlocks","imageBlocks","quoteBlocks","codeBlocks","_jsxs","_Fragment","_jsx","VisuallyHidden","id","getTranslation","defaultMessage","aria-live","Slate","initialValue","text","modifiers","EditorLayout","onToggleExpand","BlocksToolbar","width","BlocksContent","IconButton","position","bottom","right","shadow","label","onClick","Expand"],"mappings":"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"}
@@ -3,7 +3,6 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var Toolbar = require('@radix-ui/react-toolbar');
6
- require('@strapi/admin/strapi-admin');
7
6
  var designSystem = require('@strapi/design-system');
8
7
  var Icons = require('@strapi/icons');
9
8
  var reactIntl = require('react-intl');
@@ -45,6 +44,8 @@ const ToolbarSeparator = styledComponents.styled(Toolbar__namespace.Separator)`
45
44
  background: ${({ theme })=>theme.colors.neutral150};
46
45
  width: 1px;
47
46
  height: 2.4rem;
47
+ margin-left: 0.8rem;
48
+ margin-right: 0.8rem;
48
49
  `;
49
50
  const FlexButton = styledComponents.styled(designSystem.Flex)`
50
51
  // Inherit the not-allowed cursor from ToolbarWrapper when disabled
@@ -132,6 +133,7 @@ const ToolbarButton = ({ icon: Icon, name, label, isActive, disabled, handleClic
132
133
  width: 7,
133
134
  height: 7,
134
135
  hasRadius: true,
136
+ type: "button",
135
137
  children: /*#__PURE__*/ jsxRuntime.jsx(Icon, {
136
138
  fill: disabled ? 'neutral300' : enabledColor
137
139
  })
@@ -294,7 +296,7 @@ const BlockOption = ({ value, icon: Icon, label, blockSelected })=>{
294
296
  const isSelected = value === blockSelected;
295
297
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.SingleSelectOption, {
296
298
  startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icon, {
297
- fill: isSelected ? 'primary600' : 'neutral600'
299
+ fill: isSelected ? 'primary600' : 'neutral500'
298
300
  }),
299
301
  value: value,
300
302
  children: formatMessage(label)
@@ -304,8 +306,8 @@ const isListNode = (node)=>{
304
306
  return slate.Node.isNode(node) && !slate.Editor.isEditor(node) && node.type === 'list';
305
307
  };
306
308
  const ListButton = ({ block, format, location = 'toolbar' })=>{
307
- const { editor, disabled, blocks } = BlocksEditor.useBlocksEditorContext('ListButton');
308
309
  const { formatMessage } = reactIntl.useIntl();
310
+ const { editor, disabled, blocks } = BlocksEditor.useBlocksEditorContext('ListButton');
309
311
  const isListActive = ()=>{
310
312
  if (!editor.selection) return false;
311
313
  // Get the parent list at selection anchor node
@@ -383,14 +385,12 @@ const ListButton = ({ block, format, location = 'toolbar' })=>{
383
385
  };
384
386
  if (location === 'menu') {
385
387
  const Icon = block.icon;
386
- return /*#__PURE__*/ jsxRuntime.jsxs(StyledMenuItem, {
388
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
389
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
387
390
  onSelect: ()=>toggleList(format),
388
391
  isActive: isListActive(),
389
392
  disabled: isListDisabled(),
390
- children: [
391
- /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
392
- formatMessage(block.label)
393
- ]
393
+ children: formatMessage(block.label)
394
394
  });
395
395
  }
396
396
  return /*#__PURE__*/ jsxRuntime.jsx(ToolbarButton, {
@@ -450,14 +450,12 @@ const LinkButton = ({ disabled, location = 'toolbar' })=>{
450
450
  defaultMessage: 'Link'
451
451
  };
452
452
  if (location === 'menu') {
453
- return /*#__PURE__*/ jsxRuntime.jsxs(StyledMenuItem, {
453
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
454
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {}),
454
455
  onSelect: addLink,
455
456
  isActive: isLinkActive(),
456
457
  disabled: isLinkDisabled(),
457
- children: [
458
- /*#__PURE__*/ jsxRuntime.jsx(Icons.Link, {}),
459
- formatMessage(label)
460
- ]
458
+ children: formatMessage(label)
461
459
  });
462
460
  }
463
461
  return /*#__PURE__*/ jsxRuntime.jsx(ToolbarButton, {
@@ -470,25 +468,13 @@ const LinkButton = ({ disabled, location = 'toolbar' })=>{
470
468
  });
471
469
  };
472
470
  const StyledMenuItem = styledComponents.styled(designSystem.Menu.Item)`
473
- &:hover {
474
- background-color: ${({ theme })=>theme.colors.primary100};
475
- }
476
-
477
471
  ${(props)=>props.isActive && styledComponents.css`
478
- font-weight: bold;
479
- background-color: ${({ theme })=>theme.colors.primary100};
480
472
  color: ${({ theme })=>theme.colors.primary600};
481
- font-weight: bold;
473
+ font-weight: 600;
482
474
  `}
483
475
 
484
- > span {
485
- display: inline-flex;
486
- gap: ${({ theme })=>theme.spaces[2]};
487
- align-items: center;
488
- }
489
-
490
476
  svg {
491
- fill: ${({ theme, isActive })=>isActive ? theme.colors.primary600 : theme.colors.neutral600};
477
+ fill: ${({ theme, isActive })=>isActive ? theme.colors.primary600 : theme.colors.neutral500};
492
478
  }
493
479
  `;
494
480
  const BlocksToolbar = ()=>{
@@ -505,6 +491,7 @@ const BlocksToolbar = ()=>{
505
491
  return false;
506
492
  }
507
493
  const selectedNode = editor.children[editor.selection.anchor.path[0]];
494
+ if (!selectedNode) return true;
508
495
  if ([
509
496
  'image',
510
497
  'code'
@@ -534,13 +521,11 @@ const BlocksToolbar = ()=>{
534
521
  handleClick: handleSelect,
535
522
  disabled: isButtonDisabled
536
523
  }, name),
537
- menu: /*#__PURE__*/ jsxRuntime.jsxs(StyledMenuItem, {
524
+ menu: /*#__PURE__*/ jsxRuntime.jsx(StyledMenuItem, {
525
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
538
526
  onSelect: handleSelect,
539
527
  isActive: isActive,
540
- children: [
541
- /*#__PURE__*/ jsxRuntime.jsx(Icon, {}),
542
- formatMessage(modifier.label)
543
- ]
528
+ children: formatMessage(modifier.label)
544
529
  }),
545
530
  key: `modifier.${name}`
546
531
  };
@@ -560,9 +545,12 @@ const BlocksToolbar = ()=>{
560
545
  // List buttons can only be rendered together when in the toolbar
561
546
  toolbar: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
562
547
  direction: "row",
563
- gap: 1,
564
548
  children: [
565
- /*#__PURE__*/ jsxRuntime.jsx(ToolbarSeparator, {}),
549
+ /*#__PURE__*/ jsxRuntime.jsx(ToolbarSeparator, {
550
+ style: {
551
+ marginLeft: '0.4rem'
552
+ }
553
+ }),
566
554
  /*#__PURE__*/ jsxRuntime.jsx(Toolbar__namespace.ToggleGroup, {
567
555
  type: "single",
568
556
  asChild: true,
@@ -606,7 +594,6 @@ const BlocksToolbar = ()=>{
606
594
  "aria-disabled": disabled,
607
595
  asChild: true,
608
596
  children: /*#__PURE__*/ jsxRuntime.jsxs(ToolbarWrapper, {
609
- gap: 2,
610
597
  padding: 2,
611
598
  width: "100%",
612
599
  children: [