@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":"BlocksToolbar.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { useElementOnScreen } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n IconButton,\n} from '@strapi/design-system';\nimport { Link, More } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { EditorToolbarObserver } from '../../EditorToolbarObserver';\n\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n >\n <Icon fill={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n const Icon = blocks[blockSelected].icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon />}\n onChange={handleSelect}\n placeholder={formatMessage(blocks[blockSelected].label)}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon fill={isSelected ? 'primary600' : 'neutral600'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n const { formatMessage } = useIntl();\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n <Icon />\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem onSelect={addLink} isActive={isLinkActive()} disabled={isLinkDisabled()}>\n <Link />\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\ninterface ObservedToolbarComponentProps {\n index: number;\n lastVisibleIndex: number;\n setLastVisibleIndex: React.Dispatch<React.SetStateAction<number>>;\n rootRef: React.RefObject<HTMLElement>;\n children: React.ReactNode;\n}\n\nconst ObservedToolbarComponent = ({\n index,\n lastVisibleIndex,\n setLastVisibleIndex,\n rootRef,\n children,\n}: ObservedToolbarComponentProps) => {\n const isVisible = index <= lastVisibleIndex;\n\n const containerRef = useElementOnScreen<HTMLDivElement>(\n (isVisible) => {\n /**\n * It's the MoreMenu's job to make an item not visible when there's not room for it.\n * But we need to react here to the element becoming visible again.\n */\n if (isVisible) {\n setLastVisibleIndex((prev) => Math.max(prev, index));\n }\n },\n { threshold: 1, root: rootRef.current }\n );\n\n return (\n <div\n ref={containerRef}\n style={{\n /**\n * Use visibility so that the element occupies the space if requires even when there's not\n * enough room for it to be visible. The empty reserved space will be clipped by the\n * overflow:hidden rule on the parent, so it doesn't affect the UI.\n * This way we can keep observing its visiblity and react to browser resize events.\n */\n visibility: isVisible ? 'visible' : 'hidden',\n }}\n >\n {children}\n </div>\n );\n};\n\ninterface ObservedComponent {\n toolbar: React.ReactNode;\n menu: React.ReactNode;\n key: string;\n}\n\ninterface MoreMenuProps {\n setLastVisibleIndex: React.Dispatch<React.SetStateAction<number>>;\n hasHiddenItems: boolean;\n rootRef: React.RefObject<HTMLElement>;\n children: React.ReactNode;\n}\n\nconst MoreMenu = ({ setLastVisibleIndex, hasHiddenItems, rootRef, children }: MoreMenuProps) => {\n const { formatMessage } = useIntl();\n const containerRef = useElementOnScreen<HTMLButtonElement>(\n (isVisible) => {\n // We only react to the menu becoming invisible. When that happens, we hide the last item.\n if (!isVisible) {\n /**\n * If there's no room for any item, the index can be -1.\n * This is intentional, in that case only the more menu will be visible.\n **/\n setLastVisibleIndex((prev) => prev - 1);\n }\n },\n { threshold: 1, root: rootRef.current }\n );\n\n return (\n <Menu.Root defaultOpen={false}>\n <Menu.Trigger\n endIcon={null}\n paddingLeft={0}\n paddingRight={0}\n ref={containerRef}\n style={{ visibility: hasHiddenItems ? 'visible' : 'hidden' }}\n >\n <IconButton\n variant=\"ghost\"\n label={formatMessage({ id: 'global.more', defaultMessage: 'More' })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content onCloseAutoFocus={(e) => e.preventDefault()}>{children}</Menu.Content>\n </Menu.Root>\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n }\n\n ${(props) =>\n props.isActive &&\n css`\n font-weight: bold;\n background-color: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: bold;\n `}\n\n > span {\n display: inline-flex;\n gap: ${({ theme }) => theme.spaces[2]};\n align-items: center;\n }\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral600};\n }\n`;\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem onSelect={handleSelect} isActive={isActive}>\n <Icon />\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\" gap={1}>\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper gap={2} padding={2} width=\"100%\">\n <BlocksDropdown />\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onMouseDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","fill","BlocksDropdown","blocks","blockKeysToInclude","getEntries","reduce","currentKeys","entry","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","isSelectorBlockKey","editorIsEmpty","children","length","Editor","isEmpty","selection","Transforms","insertNodes","type","text","select","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","_jsxs","_Fragment","SingleSelect","startIcon","onChange","placeholder","onCloseAutoFocus","id","defaultMessage","map","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","last","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","spaces","BlocksToolbar","modifiers","checkButtonDisabled","path","isButtonDisabled","observedComponents","Object","entries","modifier","checkIsActive","handleToggle","toolbar","menu","direction","gap","ToggleGroup","Root","padding","grow","overflow","EditorToolbarObserver"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksToolbar.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { EditorToolbarObserver, type ObservedComponent } from '../../EditorToolbarObserver';\n\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n margin-left: 0.8rem;\n margin-right: 0.8rem;\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <Icon fill={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n const Icon = blocks[blockSelected].icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon />}\n onChange={handleSelect}\n placeholder={formatMessage(blocks[blockSelected].label)}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon fill={isSelected ? 'primary600' : 'neutral500'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { formatMessage } = useIntl();\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n startIcon={<Icon />}\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem\n startIcon={<Link />}\n onSelect={addLink}\n isActive={isLinkActive()}\n disabled={isLinkDisabled()}\n >\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n ${(props) =>\n props.isActive &&\n css`\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 600;\n `}\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral500};\n }\n`;\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n if (!selectedNode) return true;\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem startIcon={<Icon />} onSelect={handleSelect} isActive={isActive}>\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\">\n <ToolbarSeparator style={{ marginLeft: '0.4rem' }} />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper padding={2} width=\"100%\">\n <BlocksDropdown />\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onMouseDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","type","fill","BlocksDropdown","blocks","blockKeysToInclude","getEntries","reduce","currentKeys","entry","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","isSelectorBlockKey","editorIsEmpty","children","length","Editor","isEmpty","selection","Transforms","insertNodes","text","select","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","_jsxs","_Fragment","SingleSelect","startIcon","onChange","placeholder","onCloseAutoFocus","id","defaultMessage","map","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","last","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","neutral500","BlocksToolbar","modifiers","checkButtonDisabled","path","isButtonDisabled","observedComponents","Object","entries","modifier","checkIsActive","handleToggle","toolbar","menu","direction","style","marginLeft","ToggleGroup","gap","Root","padding","grow","overflow","EditorToolbarObserver"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import * as Toolbar from '@radix-ui/react-toolbar';
4
- import '@strapi/admin/strapi-admin';
5
4
  import { Flex, Box, Menu, Tooltip, SingleSelect, SingleSelectOption } from '@strapi/design-system';
6
5
  import { Link } from '@strapi/icons';
7
6
  import { useIntl } from 'react-intl';
@@ -23,6 +22,8 @@ const ToolbarSeparator = styled(Toolbar.Separator)`
23
22
  background: ${({ theme })=>theme.colors.neutral150};
24
23
  width: 1px;
25
24
  height: 2.4rem;
25
+ margin-left: 0.8rem;
26
+ margin-right: 0.8rem;
26
27
  `;
27
28
  const FlexButton = styled(Flex)`
28
29
  // Inherit the not-allowed cursor from ToolbarWrapper when disabled
@@ -110,6 +111,7 @@ const ToolbarButton = ({ icon: Icon, name, label, isActive, disabled, handleClic
110
111
  width: 7,
111
112
  height: 7,
112
113
  hasRadius: true,
114
+ type: "button",
113
115
  children: /*#__PURE__*/ jsx(Icon, {
114
116
  fill: disabled ? 'neutral300' : enabledColor
115
117
  })
@@ -272,7 +274,7 @@ const BlockOption = ({ value, icon: Icon, label, blockSelected })=>{
272
274
  const isSelected = value === blockSelected;
273
275
  return /*#__PURE__*/ jsx(SingleSelectOption, {
274
276
  startIcon: /*#__PURE__*/ jsx(Icon, {
275
- fill: isSelected ? 'primary600' : 'neutral600'
277
+ fill: isSelected ? 'primary600' : 'neutral500'
276
278
  }),
277
279
  value: value,
278
280
  children: formatMessage(label)
@@ -282,8 +284,8 @@ const isListNode = (node)=>{
282
284
  return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';
283
285
  };
284
286
  const ListButton = ({ block, format, location = 'toolbar' })=>{
285
- const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');
286
287
  const { formatMessage } = useIntl();
288
+ const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');
287
289
  const isListActive = ()=>{
288
290
  if (!editor.selection) return false;
289
291
  // Get the parent list at selection anchor node
@@ -361,14 +363,12 @@ const ListButton = ({ block, format, location = 'toolbar' })=>{
361
363
  };
362
364
  if (location === 'menu') {
363
365
  const Icon = block.icon;
364
- return /*#__PURE__*/ jsxs(StyledMenuItem, {
366
+ return /*#__PURE__*/ jsx(StyledMenuItem, {
367
+ startIcon: /*#__PURE__*/ jsx(Icon, {}),
365
368
  onSelect: ()=>toggleList(format),
366
369
  isActive: isListActive(),
367
370
  disabled: isListDisabled(),
368
- children: [
369
- /*#__PURE__*/ jsx(Icon, {}),
370
- formatMessage(block.label)
371
- ]
371
+ children: formatMessage(block.label)
372
372
  });
373
373
  }
374
374
  return /*#__PURE__*/ jsx(ToolbarButton, {
@@ -428,14 +428,12 @@ const LinkButton = ({ disabled, location = 'toolbar' })=>{
428
428
  defaultMessage: 'Link'
429
429
  };
430
430
  if (location === 'menu') {
431
- return /*#__PURE__*/ jsxs(StyledMenuItem, {
431
+ return /*#__PURE__*/ jsx(StyledMenuItem, {
432
+ startIcon: /*#__PURE__*/ jsx(Link, {}),
432
433
  onSelect: addLink,
433
434
  isActive: isLinkActive(),
434
435
  disabled: isLinkDisabled(),
435
- children: [
436
- /*#__PURE__*/ jsx(Link, {}),
437
- formatMessage(label)
438
- ]
436
+ children: formatMessage(label)
439
437
  });
440
438
  }
441
439
  return /*#__PURE__*/ jsx(ToolbarButton, {
@@ -448,25 +446,13 @@ const LinkButton = ({ disabled, location = 'toolbar' })=>{
448
446
  });
449
447
  };
450
448
  const StyledMenuItem = styled(Menu.Item)`
451
- &:hover {
452
- background-color: ${({ theme })=>theme.colors.primary100};
453
- }
454
-
455
449
  ${(props)=>props.isActive && css`
456
- font-weight: bold;
457
- background-color: ${({ theme })=>theme.colors.primary100};
458
450
  color: ${({ theme })=>theme.colors.primary600};
459
- font-weight: bold;
451
+ font-weight: 600;
460
452
  `}
461
453
 
462
- > span {
463
- display: inline-flex;
464
- gap: ${({ theme })=>theme.spaces[2]};
465
- align-items: center;
466
- }
467
-
468
454
  svg {
469
- fill: ${({ theme, isActive })=>isActive ? theme.colors.primary600 : theme.colors.neutral600};
455
+ fill: ${({ theme, isActive })=>isActive ? theme.colors.primary600 : theme.colors.neutral500};
470
456
  }
471
457
  `;
472
458
  const BlocksToolbar = ()=>{
@@ -483,6 +469,7 @@ const BlocksToolbar = ()=>{
483
469
  return false;
484
470
  }
485
471
  const selectedNode = editor.children[editor.selection.anchor.path[0]];
472
+ if (!selectedNode) return true;
486
473
  if ([
487
474
  'image',
488
475
  'code'
@@ -512,13 +499,11 @@ const BlocksToolbar = ()=>{
512
499
  handleClick: handleSelect,
513
500
  disabled: isButtonDisabled
514
501
  }, name),
515
- menu: /*#__PURE__*/ jsxs(StyledMenuItem, {
502
+ menu: /*#__PURE__*/ jsx(StyledMenuItem, {
503
+ startIcon: /*#__PURE__*/ jsx(Icon, {}),
516
504
  onSelect: handleSelect,
517
505
  isActive: isActive,
518
- children: [
519
- /*#__PURE__*/ jsx(Icon, {}),
520
- formatMessage(modifier.label)
521
- ]
506
+ children: formatMessage(modifier.label)
522
507
  }),
523
508
  key: `modifier.${name}`
524
509
  };
@@ -538,9 +523,12 @@ const BlocksToolbar = ()=>{
538
523
  // List buttons can only be rendered together when in the toolbar
539
524
  toolbar: /*#__PURE__*/ jsxs(Flex, {
540
525
  direction: "row",
541
- gap: 1,
542
526
  children: [
543
- /*#__PURE__*/ jsx(ToolbarSeparator, {}),
527
+ /*#__PURE__*/ jsx(ToolbarSeparator, {
528
+ style: {
529
+ marginLeft: '0.4rem'
530
+ }
531
+ }),
544
532
  /*#__PURE__*/ jsx(Toolbar.ToggleGroup, {
545
533
  type: "single",
546
534
  asChild: true,
@@ -584,7 +572,6 @@ const BlocksToolbar = ()=>{
584
572
  "aria-disabled": disabled,
585
573
  asChild: true,
586
574
  children: /*#__PURE__*/ jsxs(ToolbarWrapper, {
587
- gap: 2,
588
575
  padding: 2,
589
576
  width: "100%",
590
577
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"BlocksToolbar.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { useElementOnScreen } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n IconButton,\n} from '@strapi/design-system';\nimport { Link, More } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { EditorToolbarObserver } from '../../EditorToolbarObserver';\n\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n >\n <Icon fill={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n const Icon = blocks[blockSelected].icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon />}\n onChange={handleSelect}\n placeholder={formatMessage(blocks[blockSelected].label)}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon fill={isSelected ? 'primary600' : 'neutral600'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n const { formatMessage } = useIntl();\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n <Icon />\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem onSelect={addLink} isActive={isLinkActive()} disabled={isLinkDisabled()}>\n <Link />\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\ninterface ObservedToolbarComponentProps {\n index: number;\n lastVisibleIndex: number;\n setLastVisibleIndex: React.Dispatch<React.SetStateAction<number>>;\n rootRef: React.RefObject<HTMLElement>;\n children: React.ReactNode;\n}\n\nconst ObservedToolbarComponent = ({\n index,\n lastVisibleIndex,\n setLastVisibleIndex,\n rootRef,\n children,\n}: ObservedToolbarComponentProps) => {\n const isVisible = index <= lastVisibleIndex;\n\n const containerRef = useElementOnScreen<HTMLDivElement>(\n (isVisible) => {\n /**\n * It's the MoreMenu's job to make an item not visible when there's not room for it.\n * But we need to react here to the element becoming visible again.\n */\n if (isVisible) {\n setLastVisibleIndex((prev) => Math.max(prev, index));\n }\n },\n { threshold: 1, root: rootRef.current }\n );\n\n return (\n <div\n ref={containerRef}\n style={{\n /**\n * Use visibility so that the element occupies the space if requires even when there's not\n * enough room for it to be visible. The empty reserved space will be clipped by the\n * overflow:hidden rule on the parent, so it doesn't affect the UI.\n * This way we can keep observing its visiblity and react to browser resize events.\n */\n visibility: isVisible ? 'visible' : 'hidden',\n }}\n >\n {children}\n </div>\n );\n};\n\ninterface ObservedComponent {\n toolbar: React.ReactNode;\n menu: React.ReactNode;\n key: string;\n}\n\ninterface MoreMenuProps {\n setLastVisibleIndex: React.Dispatch<React.SetStateAction<number>>;\n hasHiddenItems: boolean;\n rootRef: React.RefObject<HTMLElement>;\n children: React.ReactNode;\n}\n\nconst MoreMenu = ({ setLastVisibleIndex, hasHiddenItems, rootRef, children }: MoreMenuProps) => {\n const { formatMessage } = useIntl();\n const containerRef = useElementOnScreen<HTMLButtonElement>(\n (isVisible) => {\n // We only react to the menu becoming invisible. When that happens, we hide the last item.\n if (!isVisible) {\n /**\n * If there's no room for any item, the index can be -1.\n * This is intentional, in that case only the more menu will be visible.\n **/\n setLastVisibleIndex((prev) => prev - 1);\n }\n },\n { threshold: 1, root: rootRef.current }\n );\n\n return (\n <Menu.Root defaultOpen={false}>\n <Menu.Trigger\n endIcon={null}\n paddingLeft={0}\n paddingRight={0}\n ref={containerRef}\n style={{ visibility: hasHiddenItems ? 'visible' : 'hidden' }}\n >\n <IconButton\n variant=\"ghost\"\n label={formatMessage({ id: 'global.more', defaultMessage: 'More' })}\n tag=\"span\"\n >\n <More aria-hidden focusable={false} />\n </IconButton>\n </Menu.Trigger>\n <Menu.Content onCloseAutoFocus={(e) => e.preventDefault()}>{children}</Menu.Content>\n </Menu.Root>\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n }\n\n ${(props) =>\n props.isActive &&\n css`\n font-weight: bold;\n background-color: ${({ theme }) => theme.colors.primary100};\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: bold;\n `}\n\n > span {\n display: inline-flex;\n gap: ${({ theme }) => theme.spaces[2]};\n align-items: center;\n }\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral600};\n }\n`;\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem onSelect={handleSelect} isActive={isActive}>\n <Icon />\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\" gap={1}>\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper gap={2} padding={2} width=\"100%\">\n <BlocksDropdown />\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onMouseDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","fill","BlocksDropdown","blocks","blockKeysToInclude","getEntries","reduce","currentKeys","entry","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","isSelectorBlockKey","editorIsEmpty","children","length","Editor","isEmpty","selection","Transforms","insertNodes","type","text","select","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","_jsxs","_Fragment","SingleSelect","startIcon","onChange","placeholder","onCloseAutoFocus","id","defaultMessage","map","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","last","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","spaces","BlocksToolbar","modifiers","checkButtonDisabled","path","isButtonDisabled","observedComponents","Object","entries","modifier","checkIsActive","handleToggle","toolbar","menu","direction","gap","ToggleGroup","Root","padding","grow","overflow","EditorToolbarObserver"],"mappings":"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"}
1
+ {"version":3,"file":"BlocksToolbar.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/BlocksInput/BlocksToolbar.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport {\n Flex,\n Tooltip,\n SingleSelect,\n SingleSelectOption,\n Box,\n FlexComponent,\n BoxComponent,\n Menu,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { Editor, Transforms, Element as SlateElement, Node, type Ancestor } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { css, styled } from 'styled-components';\n\nimport { EditorToolbarObserver, type ObservedComponent } from '../../EditorToolbarObserver';\n\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksEditorContext,\n} from './BlocksEditor';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled<FlexComponent>(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n background: ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst ToolbarSeparator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: 2.4rem;\n margin-left: 0.8rem;\n margin-right: 0.8rem;\n`;\n\nconst FlexButton = styled<FlexComponent<'button'>>(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: not-allowed;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled<BoxComponent>(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\n/**\n * Handles the modal component that may be returned by a block when converting it\n */\nfunction useConversionModal() {\n const [modalElement, setModalComponent] = React.useState<React.JSX.Element | null>(null);\n\n const handleConversionResult = (renderModal: void | (() => React.JSX.Element) | undefined) => {\n // Not all blocks return a modal\n if (renderModal) {\n // Use cloneElement to apply a key because to create a new instance of the component\n // Without the new key, the state is kept from previous times that option was picked\n setModalComponent(React.cloneElement(renderModal(), { key: Date.now() }));\n }\n };\n\n return { modalElement, handleConversionResult };\n}\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon: Icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip label={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n ReactEditor.focus(editor);\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n tag=\"button\"\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n type=\"button\"\n >\n <Icon fill={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, blocks, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const { modalElement, handleConversionResult } = useConversionModal();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const handleSelect = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n const editorIsEmpty =\n editor.children.length === 1 && Editor.isEmpty(editor, editor.children[0]);\n\n if (!editor.selection && !editorIsEmpty) {\n // When there is no selection, create an empty block at the end of the editor\n // so that it can be converted to the selected block\n Transforms.insertNodes(\n editor,\n {\n type: 'quote',\n children: [{ type: 'text', text: '' }],\n },\n {\n select: true,\n // Since there's no selection, Slate will automatically insert the node at the end\n }\n );\n } else if (!editor.selection && editorIsEmpty) {\n // When there is no selection and the editor is empty,\n // select the empty paragraph from Slate's initialValue so it gets converted\n Transforms.select(editor, Editor.start(editor, [0, 0]));\n }\n\n // If selection is already a list block, toggle its format\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (currentListEntry && ['list-ordered', 'list-unordered'].includes(optionKey)) {\n const [currentList, currentListPath] = currentListEntry;\n const format = optionKey === 'list-ordered' ? 'ordered' : 'unordered';\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n // Format is different, toggle list format\n if (currentList.format !== format) {\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n }\n }\n return;\n }\n\n // Let the block handle the Slate conversion logic\n const maybeRenderModal = blocks[optionKey].handleConvert?.(editor);\n handleConversionResult(maybeRenderModal);\n\n setBlockSelected(optionKey);\n\n ReactEditor.focus(editor);\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n let selectedNode: Ancestor;\n\n // If selection anchor is a list-item, get its parent\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n selectedNode = currentList;\n } else {\n // Get the parent node of the anchor other than list-item\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n\n // @ts-expect-error slate's delete behaviour creates an exceptional type\n if (anchorNode.type === 'list-item') {\n // When the last node in the selection is a list item,\n // slate's default delete operation leaves an empty list-item instead of converting it into a paragraph.\n // Issue: https://github.com/ianstormtaylor/slate/issues/2500\n\n Transforms.setNodes(editor, { type: 'paragraph' });\n // @ts-expect-error convert explicitly type to paragraph\n selectedNode = { ...anchorNode, type: 'paragraph' };\n } else {\n selectedNode = anchorNode;\n }\n }\n\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(selectedNode) && blocks[blockKey].matchNode(selectedNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n const Icon = blocks[blockSelected].icon;\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon />}\n onChange={handleSelect}\n placeholder={formatMessage(blocks[blockSelected].label)}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {modalElement}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType<React.SVGProps<SVGElement>>;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon: Icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon fill={isSelected ? 'primary600' : 'neutral500'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n format: Block<'list'>['format'];\n location?: 'toolbar' | 'menu';\n}\n\nconst ListButton = ({ block, format, location = 'toolbar' }: ListButtonProps) => {\n const { formatMessage } = useIntl();\n const { editor, disabled, blocks } = useBlocksEditorContext('ListButton');\n\n const isListActive = () => {\n if (!editor.selection) return false;\n\n // Get the parent list at selection anchor node\n const currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: editor.selection.anchor,\n });\n\n if (currentListEntry) {\n const [currentList] = currentListEntry;\n if (!Editor.isEditor(currentList) && isListNode(currentList) && currentList.format === format)\n return true;\n }\n\n return false;\n };\n\n /**\n * @TODO: Currently, applying list while multiple blocks are selected is not supported.\n * We should implement this feature in the future.\n */\n const isListDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const toggleList = (format: Block<'list'>['format']) => {\n let currentListEntry;\n if (editor.selection) {\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n } else {\n // If no selection, toggle last inserted node\n const [_, lastNodePath] = Editor.last(editor, []);\n currentListEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n at: lastNodePath,\n });\n }\n\n if (!currentListEntry) {\n // If selection is not a list then convert it to list\n blocks[`list-${format}`].handleConvert!(editor);\n return;\n }\n\n // If selection is already a list then toggle format\n const [currentList, currentListPath] = currentListEntry;\n\n if (!Editor.isEditor(currentList) && isListNode(currentList)) {\n if (currentList.format !== format) {\n // Format is different, toggle list format\n Transforms.setNodes(editor, { format }, { at: currentListPath });\n } else {\n // Format is same, convert selected list-item to paragraph\n blocks['paragraph'].handleConvert!(editor);\n }\n }\n };\n\n if (location === 'menu') {\n const Icon = block.icon;\n\n return (\n <StyledMenuItem\n startIcon={<Icon />}\n onSelect={() => toggleList(format)}\n isActive={isListActive()}\n disabled={isListDisabled()}\n >\n {formatMessage(block.label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={block.icon}\n name={format}\n label={block.label}\n isActive={isListActive()}\n disabled={isListDisabled()}\n handleClick={() => toggleList(format)}\n />\n );\n};\n\nconst LinkButton = ({\n disabled,\n location = 'toolbar',\n}: {\n disabled: boolean;\n location?: 'toolbar' | 'menu';\n}) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n const { formatMessage } = useIntl();\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n editor.shouldSaveLinkPath = true;\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n const label = {\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n } as MessageDescriptor;\n\n if (location === 'menu') {\n return (\n <StyledMenuItem\n startIcon={<Link />}\n onSelect={addLink}\n isActive={isLinkActive()}\n disabled={isLinkDisabled()}\n >\n {formatMessage(label)}\n </StyledMenuItem>\n );\n }\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={label}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst StyledMenuItem = styled(Menu.Item)<{ isActive: boolean }>`\n ${(props) =>\n props.isActive &&\n css`\n color: ${({ theme }) => theme.colors.primary600};\n font-weight: 600;\n `}\n\n svg {\n fill: ${({ theme, isActive }) =>\n isActive ? theme.colors.primary600 : theme.colors.neutral500};\n }\n`;\n\nconst BlocksToolbar = () => {\n const { editor, blocks, modifiers, disabled } = useBlocksEditorContext('BlocksToolbar');\n const { formatMessage } = useIntl();\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n if (!selectedNode) return true;\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n /**\n * Observed components are ones that may or may not be visible in the toolbar, depending on the\n * available space. They provide two render props:\n * - renderInToolbar: for when we try to render the component in the toolbar (may be hidden)\n * - renderInMenu: for when the component didn't fit in the toolbar and is relegated\n * to the \"more\" menu\n */\n const observedComponents: ObservedComponent[] = [\n ...Object.entries(modifiers).map(([name, modifier]) => {\n const Icon = modifier.icon;\n const isActive = modifier.checkIsActive(editor);\n const handleSelect = () => modifier.handleToggle(editor);\n\n return {\n toolbar: (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive(editor)}\n handleClick={handleSelect}\n disabled={isButtonDisabled}\n />\n ),\n menu: (\n <StyledMenuItem startIcon={<Icon />} onSelect={handleSelect} isActive={isActive}>\n {formatMessage(modifier.label)}\n </StyledMenuItem>\n ),\n key: `modifier.${name}`,\n };\n }),\n {\n toolbar: <LinkButton disabled={isButtonDisabled} location=\"toolbar\" />,\n menu: <LinkButton disabled={isButtonDisabled} location=\"menu\" />,\n key: 'block.link',\n },\n {\n // List buttons can only be rendered together when in the toolbar\n toolbar: (\n <Flex direction=\"row\">\n <ToolbarSeparator style={{ marginLeft: '0.4rem' }} />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"toolbar\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"toolbar\" />\n </Flex>\n </Toolbar.ToggleGroup>\n </Flex>\n ),\n menu: (\n <>\n <Menu.Separator />\n <ListButton block={blocks['list-unordered']} format=\"unordered\" location=\"menu\" />\n <ListButton block={blocks['list-ordered']} format=\"ordered\" location=\"menu\" />\n </>\n ),\n key: 'block.list',\n },\n ];\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper padding={2} width=\"100%\">\n <BlocksDropdown />\n <ToolbarSeparator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex direction=\"row\" gap={1} grow={1} overflow=\"hidden\">\n <EditorToolbarObserver observedComponents={observedComponents} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar, useConversionModal };\n"],"names":["ToolbarWrapper","styled","Flex","theme","colors","neutral150","ToolbarSeparator","Toolbar","Separator","FlexButton","primary100","SelectWrapper","Box","neutral600","useConversionModal","modalElement","setModalComponent","React","useState","handleConversionResult","renderModal","cloneElement","key","Date","now","ToolbarButton","icon","Icon","name","label","isActive","disabled","handleClick","editor","useBlocksEditorContext","formatMessage","useIntl","labelMessage","enabledColor","_jsx","Tooltip","ToggleItem","value","data-state","onMouseDown","e","preventDefault","ReactEditor","focus","aria-disabled","aria-label","asChild","tag","background","alignItems","justifyContent","width","height","hasRadius","type","fill","BlocksDropdown","blocks","blockKeysToInclude","getEntries","reduce","currentKeys","entry","block","isInBlocksSelector","blockSelected","setBlockSelected","handleSelect","optionKey","isSelectorBlockKey","editorIsEmpty","children","length","Editor","isEmpty","selection","Transforms","insertNodes","text","select","start","currentListEntry","above","match","node","isEditor","includes","currentList","currentListPath","format","isListNode","setNodes","at","maybeRenderModal","handleConvert","preventSelectFocus","useEffect","selectedNode","anchor","anchorNode","parent","edge","depth","anchorBlockKey","getKeys","find","blockKey","matchNode","_jsxs","_Fragment","SingleSelect","startIcon","onChange","placeholder","onCloseAutoFocus","id","defaultMessage","map","BlockOption","isSelected","SingleSelectOption","Node","isNode","ListButton","location","isListActive","isListDisabled","anchorNodeEntry","focusNodeEntry","toggleList","_","lastNodePath","last","StyledMenuItem","onSelect","LinkButton","isLinkActive","Array","from","nodes","unhangRange","SlateElement","isElement","Boolean","isLinkDisabled","addLink","shouldSaveLinkPath","insertLink","url","Link","Menu","Item","props","css","primary600","neutral500","BlocksToolbar","modifiers","checkButtonDisabled","path","isButtonDisabled","observedComponents","Object","entries","modifier","checkIsActive","handleToggle","toolbar","menu","direction","style","marginLeft","ToggleGroup","gap","Root","padding","grow","overflow","EditorToolbarObserver"],"mappings":"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"}
@@ -23,8 +23,8 @@ const EditorLayout = ({ children, error, disabled, onToggleExpand, ariaDescripti
23
23
  width: 'unset'
24
24
  },
25
25
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
26
- height: "90vh",
27
- width: "90vw",
26
+ height: "90dvh",
27
+ width: "90dvw",
28
28
  alignItems: "flex-start",
29
29
  direction: "column",
30
30
  children: [