@wordpress/block-editor 15.8.1-next.16d95556a.0 → 15.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/block-inspector/edit-contents.js +19 -23
  3. package/build/components/block-inspector/edit-contents.js.map +3 -3
  4. package/build/components/block-inspector/index.js +7 -1
  5. package/build/components/block-inspector/index.js.map +2 -2
  6. package/build/components/block-list/block.js +4 -0
  7. package/build/components/block-list/block.js.map +2 -2
  8. package/build/components/block-list/index.js +2 -1
  9. package/build/components/block-list/index.js.map +2 -2
  10. package/build/components/block-list/use-block-props/index.js +3 -1
  11. package/build/components/block-list/use-block-props/index.js.map +2 -2
  12. package/build/components/block-list/use-block-props/use-is-hovered.js +16 -10
  13. package/build/components/block-list/use-block-props/use-is-hovered.js.map +2 -2
  14. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +27 -5
  15. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +2 -2
  16. package/build/components/block-lock/modal.js +5 -5
  17. package/build/components/block-lock/modal.js.map +2 -2
  18. package/build/components/block-lock/use-block-lock.js +10 -13
  19. package/build/components/block-lock/use-block-lock.js.map +2 -2
  20. package/build/components/block-settings-menu-controls/edit-section-menu-item.js +64 -0
  21. package/build/components/block-settings-menu-controls/edit-section-menu-item.js.map +7 -0
  22. package/build/components/block-settings-menu-controls/index.js +9 -1
  23. package/build/components/block-settings-menu-controls/index.js.map +2 -2
  24. package/build/components/block-toolbar/block-toolbar-icon.js +9 -9
  25. package/build/components/block-toolbar/block-toolbar-icon.js.map +2 -2
  26. package/build/components/block-tools/index.js +56 -45
  27. package/build/components/block-tools/index.js.map +3 -3
  28. package/build/components/block-variation-transforms/index.js +32 -5
  29. package/build/components/block-variation-transforms/index.js.map +2 -2
  30. package/build/components/block-visibility/toolbar.js +1 -1
  31. package/build/components/block-visibility/toolbar.js.map +1 -1
  32. package/build/components/border-radius-control/single-input-control.js +1 -0
  33. package/build/components/border-radius-control/single-input-control.js.map +2 -2
  34. package/build/components/content-only-controls/fields-dropdown-menu.js +66 -0
  35. package/build/components/content-only-controls/fields-dropdown-menu.js.map +7 -0
  36. package/build/components/content-only-controls/index.js +444 -0
  37. package/build/components/content-only-controls/index.js.map +7 -0
  38. package/build/components/content-only-controls/link/index.js +193 -0
  39. package/build/components/content-only-controls/link/index.js.map +7 -0
  40. package/build/components/content-only-controls/media/index.js +264 -0
  41. package/build/components/content-only-controls/media/index.js.map +7 -0
  42. package/build/components/content-only-controls/rich-text/index.js +188 -0
  43. package/build/components/content-only-controls/rich-text/index.js.map +7 -0
  44. package/build/components/content-only-controls/use-inspector-popover-placement.js +41 -0
  45. package/build/components/content-only-controls/use-inspector-popover-placement.js.map +7 -0
  46. package/build/components/font-family/index.js +1 -15
  47. package/build/components/font-family/index.js.map +2 -2
  48. package/build/components/global-styles/dimensions-panel.js +35 -2
  49. package/build/components/global-styles/dimensions-panel.js.map +2 -2
  50. package/build/components/global-styles/hooks.js +1 -1
  51. package/build/components/global-styles/hooks.js.map +2 -2
  52. package/build/components/global-styles/typography-panel.js +1 -2
  53. package/build/components/global-styles/typography-panel.js.map +2 -2
  54. package/build/components/inserter/media-tab/media-tab.js +1 -33
  55. package/build/components/inserter/media-tab/media-tab.js.map +3 -3
  56. package/build/components/inspector-controls-tabs/content-tab.js +6 -2
  57. package/build/components/inspector-controls-tabs/content-tab.js.map +3 -3
  58. package/build/components/inspector-controls-tabs/index.js +7 -1
  59. package/build/components/inspector-controls-tabs/index.js.map +2 -2
  60. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -1
  61. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +2 -2
  62. package/build/components/link-control/index.js +15 -7
  63. package/build/components/link-control/index.js.map +2 -2
  64. package/build/components/list-view/block-select-button.js +7 -8
  65. package/build/components/list-view/block-select-button.js.map +2 -2
  66. package/build/components/list-view/block.js +9 -7
  67. package/build/components/list-view/block.js.map +2 -2
  68. package/build/components/media-placeholder/index.js +18 -35
  69. package/build/components/media-placeholder/index.js.map +3 -3
  70. package/build/components/media-placeholder/utils.js +60 -0
  71. package/build/components/media-placeholder/utils.js.map +7 -0
  72. package/build/components/media-replace-flow/index.js +24 -33
  73. package/build/components/media-replace-flow/index.js.map +3 -3
  74. package/build/components/use-block-commands/index.js +1 -1
  75. package/build/components/use-block-commands/index.js.map +2 -2
  76. package/build/components/use-block-display-information/index.js +21 -1
  77. package/build/components/use-block-display-information/index.js.map +3 -3
  78. package/build/components/use-block-drop-zone/index.js +1 -5
  79. package/build/components/use-block-drop-zone/index.js.map +2 -2
  80. package/build/hooks/block-bindings.js +52 -61
  81. package/build/hooks/block-bindings.js.map +3 -3
  82. package/build/hooks/dimensions.js +3 -3
  83. package/build/hooks/dimensions.js.map +2 -2
  84. package/build/hooks/metadata.js +1 -1
  85. package/build/hooks/metadata.js.map +2 -2
  86. package/build/hooks/use-content-only-section-edit.js +67 -0
  87. package/build/hooks/use-content-only-section-edit.js.map +7 -0
  88. package/build/hooks/utils.js +5 -1
  89. package/build/hooks/utils.js.map +2 -2
  90. package/build/layouts/constrained.js +2 -2
  91. package/build/layouts/constrained.js.map +2 -2
  92. package/build/private-apis.js +2 -3
  93. package/build/private-apis.js.map +3 -3
  94. package/build/store/private-keys.js +3 -0
  95. package/build/store/private-keys.js.map +2 -2
  96. package/build/store/private-selectors.js +41 -2
  97. package/build/store/private-selectors.js.map +2 -2
  98. package/build/store/selectors.js +6 -4
  99. package/build/store/selectors.js.map +2 -2
  100. package/build/utils/fit-text-utils.js +9 -1
  101. package/build/utils/fit-text-utils.js.map +2 -2
  102. package/build-module/components/block-inspector/edit-contents.js +9 -23
  103. package/build-module/components/block-inspector/edit-contents.js.map +2 -2
  104. package/build-module/components/block-inspector/index.js +7 -1
  105. package/build-module/components/block-inspector/index.js.map +2 -2
  106. package/build-module/components/block-list/block.js +4 -0
  107. package/build-module/components/block-list/block.js.map +2 -2
  108. package/build-module/components/block-list/index.js +2 -1
  109. package/build-module/components/block-list/index.js.map +2 -2
  110. package/build-module/components/block-list/use-block-props/index.js +3 -1
  111. package/build-module/components/block-list/use-block-props/index.js.map +2 -2
  112. package/build-module/components/block-list/use-block-props/use-is-hovered.js +16 -10
  113. package/build-module/components/block-list/use-block-props/use-is-hovered.js.map +2 -2
  114. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +27 -5
  115. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +2 -2
  116. package/build-module/components/block-lock/modal.js +5 -5
  117. package/build-module/components/block-lock/modal.js.map +2 -2
  118. package/build-module/components/block-lock/use-block-lock.js +10 -13
  119. package/build-module/components/block-lock/use-block-lock.js.map +2 -2
  120. package/build-module/components/block-settings-menu-controls/edit-section-menu-item.js +29 -0
  121. package/build-module/components/block-settings-menu-controls/edit-section-menu-item.js.map +7 -0
  122. package/build-module/components/block-settings-menu-controls/index.js +9 -1
  123. package/build-module/components/block-settings-menu-controls/index.js.map +2 -2
  124. package/build-module/components/block-toolbar/block-toolbar-icon.js +10 -10
  125. package/build-module/components/block-toolbar/block-toolbar-icon.js.map +2 -2
  126. package/build-module/components/block-tools/index.js +56 -45
  127. package/build-module/components/block-tools/index.js.map +2 -2
  128. package/build-module/components/block-variation-transforms/index.js +32 -5
  129. package/build-module/components/block-variation-transforms/index.js.map +2 -2
  130. package/build-module/components/block-visibility/toolbar.js +1 -1
  131. package/build-module/components/block-visibility/toolbar.js.map +1 -1
  132. package/build-module/components/border-radius-control/single-input-control.js +1 -0
  133. package/build-module/components/border-radius-control/single-input-control.js.map +2 -2
  134. package/build-module/components/content-only-controls/fields-dropdown-menu.js +45 -0
  135. package/build-module/components/content-only-controls/fields-dropdown-menu.js.map +7 -0
  136. package/build-module/components/content-only-controls/index.js +420 -0
  137. package/build-module/components/content-only-controls/index.js.map +7 -0
  138. package/build-module/components/content-only-controls/link/index.js +160 -0
  139. package/build-module/components/content-only-controls/link/index.js.map +7 -0
  140. package/build-module/components/content-only-controls/media/index.js +242 -0
  141. package/build-module/components/content-only-controls/media/index.js.map +7 -0
  142. package/build-module/components/content-only-controls/rich-text/index.js +160 -0
  143. package/build-module/components/content-only-controls/rich-text/index.js.map +7 -0
  144. package/build-module/components/content-only-controls/use-inspector-popover-placement.js +16 -0
  145. package/build-module/components/content-only-controls/use-inspector-popover-placement.js.map +7 -0
  146. package/build-module/components/font-family/index.js +1 -15
  147. package/build-module/components/font-family/index.js.map +2 -2
  148. package/build-module/components/global-styles/dimensions-panel.js +35 -2
  149. package/build-module/components/global-styles/dimensions-panel.js.map +2 -2
  150. package/build-module/components/global-styles/hooks.js +1 -1
  151. package/build-module/components/global-styles/hooks.js.map +2 -2
  152. package/build-module/components/global-styles/typography-panel.js +1 -2
  153. package/build-module/components/global-styles/typography-panel.js.map +2 -2
  154. package/build-module/components/inserter/media-tab/media-tab.js +2 -34
  155. package/build-module/components/inserter/media-tab/media-tab.js.map +2 -2
  156. package/build-module/components/inspector-controls-tabs/content-tab.js +7 -3
  157. package/build-module/components/inspector-controls-tabs/content-tab.js.map +2 -2
  158. package/build-module/components/inspector-controls-tabs/index.js +7 -1
  159. package/build-module/components/inspector-controls-tabs/index.js.map +2 -2
  160. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -1
  161. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +2 -2
  162. package/build-module/components/link-control/index.js +16 -8
  163. package/build-module/components/link-control/index.js.map +2 -2
  164. package/build-module/components/list-view/block-select-button.js +14 -9
  165. package/build-module/components/list-view/block-select-button.js.map +2 -2
  166. package/build-module/components/list-view/block.js +9 -7
  167. package/build-module/components/list-view/block.js.map +2 -2
  168. package/build-module/components/media-placeholder/index.js +19 -36
  169. package/build-module/components/media-placeholder/index.js.map +2 -2
  170. package/build-module/components/media-placeholder/utils.js +35 -0
  171. package/build-module/components/media-placeholder/utils.js.map +7 -0
  172. package/build-module/components/media-replace-flow/index.js +24 -33
  173. package/build-module/components/media-replace-flow/index.js.map +2 -2
  174. package/build-module/components/use-block-commands/index.js +1 -1
  175. package/build-module/components/use-block-commands/index.js.map +2 -2
  176. package/build-module/components/use-block-display-information/index.js +21 -1
  177. package/build-module/components/use-block-display-information/index.js.map +3 -3
  178. package/build-module/components/use-block-drop-zone/index.js +1 -5
  179. package/build-module/components/use-block-drop-zone/index.js.map +2 -2
  180. package/build-module/hooks/block-bindings.js +57 -62
  181. package/build-module/hooks/block-bindings.js.map +2 -2
  182. package/build-module/hooks/dimensions.js +3 -3
  183. package/build-module/hooks/dimensions.js.map +2 -2
  184. package/build-module/hooks/metadata.js +1 -1
  185. package/build-module/hooks/metadata.js.map +2 -2
  186. package/build-module/hooks/use-content-only-section-edit.js +46 -0
  187. package/build-module/hooks/use-content-only-section-edit.js.map +7 -0
  188. package/build-module/hooks/utils.js +5 -1
  189. package/build-module/hooks/utils.js.map +2 -2
  190. package/build-module/layouts/constrained.js +2 -2
  191. package/build-module/layouts/constrained.js.map +2 -2
  192. package/build-module/private-apis.js +3 -3
  193. package/build-module/private-apis.js.map +2 -2
  194. package/build-module/store/private-keys.js +2 -0
  195. package/build-module/store/private-keys.js.map +2 -2
  196. package/build-module/store/private-selectors.js +37 -2
  197. package/build-module/store/private-selectors.js.map +2 -2
  198. package/build-module/store/selectors.js +6 -4
  199. package/build-module/store/selectors.js.map +2 -2
  200. package/build-module/utils/fit-text-utils.js +9 -1
  201. package/build-module/utils/fit-text-utils.js.map +2 -2
  202. package/build-style/content-rtl.css +3 -0
  203. package/build-style/content.css +3 -0
  204. package/build-style/style-rtl.css +145 -4
  205. package/build-style/style.css +145 -4
  206. package/package.json +38 -37
  207. package/src/components/block-inspector/edit-contents.js +10 -29
  208. package/src/components/block-inspector/index.js +4 -2
  209. package/src/components/block-list/block.js +6 -0
  210. package/src/components/block-list/content.scss +5 -0
  211. package/src/components/block-list/index.js +3 -1
  212. package/src/components/block-list/use-block-props/index.js +3 -1
  213. package/src/components/block-list/use-block-props/use-is-hovered.js +24 -12
  214. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +34 -3
  215. package/src/components/block-lock/modal.js +6 -5
  216. package/src/components/block-lock/use-block-lock.js +10 -14
  217. package/src/components/block-patterns-list/stories/{index.story.js → index.story.jsx} +3 -1
  218. package/src/components/block-settings-menu-controls/edit-section-menu-item.js +39 -0
  219. package/src/components/block-settings-menu-controls/index.js +8 -1
  220. package/src/components/block-toolbar/block-toolbar-icon.js +14 -10
  221. package/src/components/block-tools/index.js +15 -2
  222. package/src/components/block-tools/style.scss +4 -0
  223. package/src/components/block-variation-transforms/index.js +96 -35
  224. package/src/components/block-visibility/toolbar.js +1 -1
  225. package/src/components/border-radius-control/single-input-control.js +1 -0
  226. package/src/components/content-only-controls/fields-dropdown-menu.js +53 -0
  227. package/src/components/content-only-controls/index.js +560 -0
  228. package/src/components/content-only-controls/link/index.js +200 -0
  229. package/src/components/content-only-controls/link/styles.scss +23 -0
  230. package/src/components/content-only-controls/media/index.js +306 -0
  231. package/src/components/content-only-controls/media/styles.scss +47 -0
  232. package/src/components/content-only-controls/rich-text/index.js +179 -0
  233. package/src/components/content-only-controls/rich-text/styles.scss +24 -0
  234. package/src/components/content-only-controls/styles.scss +44 -0
  235. package/src/components/content-only-controls/use-inspector-popover-placement.js +19 -0
  236. package/src/components/font-family/README.md +0 -9
  237. package/src/components/font-family/index.js +1 -16
  238. package/src/components/font-family/stories/{index.story.js → index.story.jsx} +0 -1
  239. package/src/components/global-styles/dimensions-panel.js +36 -0
  240. package/src/components/global-styles/hooks.js +1 -1
  241. package/src/components/global-styles/typography-panel.js +0 -1
  242. package/src/components/inserter/media-tab/media-tab.js +2 -44
  243. package/src/components/inspector-controls-tabs/content-tab.js +12 -4
  244. package/src/components/inspector-controls-tabs/index.js +4 -1
  245. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -5
  246. package/src/components/link-control/index.js +36 -12
  247. package/src/components/list-view/block-select-button.js +15 -10
  248. package/src/components/list-view/block.js +9 -7
  249. package/src/components/media-placeholder/index.js +21 -46
  250. package/src/components/media-placeholder/test/get-computed-accept-attribute.js +164 -0
  251. package/src/components/media-placeholder/utils.js +65 -0
  252. package/src/components/media-replace-flow/index.js +25 -42
  253. package/src/components/use-block-commands/index.js +1 -1
  254. package/src/components/use-block-display-information/index.js +30 -2
  255. package/src/components/use-block-drop-zone/index.js +1 -5
  256. package/src/hooks/block-bindings.js +71 -82
  257. package/src/hooks/dimensions.js +8 -3
  258. package/src/hooks/metadata.js +1 -1
  259. package/src/hooks/test/metadata.js +1 -1
  260. package/src/hooks/use-content-only-section-edit.js +63 -0
  261. package/src/hooks/utils.js +4 -0
  262. package/src/layouts/constrained.js +8 -2
  263. package/src/private-apis.js +2 -2
  264. package/src/store/private-keys.js +1 -0
  265. package/src/store/private-selectors.js +121 -5
  266. package/src/store/selectors.js +6 -4
  267. package/src/store/test/private-selectors.js +242 -0
  268. package/src/style.scss +1 -1
  269. package/src/utils/fit-text-utils.js +19 -1
  270. package/tsconfig.json +1 -0
  271. package/build/components/media-upload-modal/index.js +0 -29
  272. package/build/components/media-upload-modal/index.js.map +0 -7
  273. package/build-module/components/media-upload-modal/index.js +0 -8
  274. package/build-module/components/media-upload-modal/index.js.map +0 -7
  275. package/src/components/font-family/style.scss +0 -7
  276. package/src/components/media-upload-modal/index.js +0 -18
  277. /package/src/components/alignment-control/stories/{aliginment-toolbar.story.js → aliginment-toolbar.story.jsx} +0 -0
  278. /package/src/components/alignment-control/stories/{index.story.js → index.story.jsx} +0 -0
  279. /package/src/components/block-alignment-matrix-control/stories/{index.story.js → index.story.jsx} +0 -0
  280. /package/src/components/block-draggable/stories/{index.story.js → index.story.jsx} +0 -0
  281. /package/src/components/block-heading-level-dropdown/stories/{index.story.js → index.story.jsx} +0 -0
  282. /package/src/components/block-mover/stories/{index.story.js → index.story.jsx} +0 -0
  283. /package/src/components/block-title/stories/{index.story.js → index.story.jsx} +0 -0
  284. /package/src/components/border-radius-control/stories/{index.story.js → index.story.jsx} +0 -0
  285. /package/src/components/date-format-picker/stories/{index.story.js → index.story.jsx} +0 -0
  286. /package/src/components/dimensions-tool/stories/{aspect-ratio-tool.story.js → aspect-ratio-tool.story.jsx} +0 -0
  287. /package/src/components/dimensions-tool/stories/{index.story.js → index.story.jsx} +0 -0
  288. /package/src/components/dimensions-tool/stories/{scale-tool.story.js → scale-tool.story.jsx} +0 -0
  289. /package/src/components/dimensions-tool/stories/{width-height-tool.story.js → width-height-tool.story.jsx} +0 -0
  290. /package/src/components/height-control/stories/{index.story.js → index.story.jsx} +0 -0
  291. /package/src/components/inserter/stories/{index.story.js → index.story.jsx} +0 -0
  292. /package/src/components/line-height-control/stories/{index.story.js → index.story.jsx} +0 -0
  293. /package/src/components/plain-text/stories/{index.story.js → index.story.jsx} +0 -0
  294. /package/src/components/resolution-tool/stories/{index.story.js → index.story.jsx} +0 -0
  295. /package/src/components/tabbed-sidebar/stories/{index.story.js → index.story.jsx} +0 -0
  296. /package/src/components/text-alignment-control/stories/{index.story.js → index.story.jsx} +0 -0
  297. /package/src/components/text-decoration-control/stories/{index.story.js → index.story.jsx} +0 -0
  298. /package/src/components/text-transform-control/stories/{index.story.js → index.story.jsx} +0 -0
  299. /package/src/components/unit-control/stories/{index.story.js → index.story.jsx} +0 -0
  300. /package/src/components/url-popover/stories/{index.story.js → index.story.jsx} +0 -0
  301. /package/src/components/warning/stories/{index.story.js → index.story.jsx} +0 -0
  302. /package/src/components/writing-mode-control/stories/{index.story.js → index.story.jsx} +0 -0
@@ -10,6 +10,10 @@ import {
10
10
  getExpandedBlock,
11
11
  isDragging,
12
12
  getBlockStyles,
13
+ isEditLockedBlock,
14
+ isMoveLockedBlock,
15
+ isRemoveLockedBlock,
16
+ isLockedBlock,
13
17
  } from '../private-selectors';
14
18
  import { getBlockEditingMode } from '../selectors';
15
19
 
@@ -681,4 +685,242 @@ describe( 'private selectors', () => {
681
685
  } );
682
686
  } );
683
687
  } );
688
+
689
+ describe( 'isEditLockedBlock', () => {
690
+ it( 'returns false when block has no lock attribute', () => {
691
+ const state = {
692
+ blocks: {
693
+ byClientId: new Map( [
694
+ [ 'block-1', { clientId: 'block-1' } ],
695
+ ] ),
696
+ attributes: new Map( [ [ 'block-1', {} ] ] ),
697
+ },
698
+ };
699
+ expect( isEditLockedBlock( state, 'block-1' ) ).toBe( false );
700
+ } );
701
+
702
+ it( 'returns false when block has lock attribute but edit is false', () => {
703
+ const state = {
704
+ blocks: {
705
+ byClientId: new Map( [
706
+ [ 'block-1', { clientId: 'block-1' } ],
707
+ ] ),
708
+ attributes: new Map( [
709
+ [ 'block-1', { lock: { edit: false, move: true } } ],
710
+ ] ),
711
+ },
712
+ };
713
+ expect( isEditLockedBlock( state, 'block-1' ) ).toBe( false );
714
+ } );
715
+
716
+ it( 'returns true when block has lock attribute with edit set to true', () => {
717
+ const state = {
718
+ blocks: {
719
+ byClientId: new Map( [
720
+ [ 'block-1', { clientId: 'block-1' } ],
721
+ ] ),
722
+ attributes: new Map( [
723
+ [ 'block-1', { lock: { edit: true } } ],
724
+ ] ),
725
+ },
726
+ };
727
+ expect( isEditLockedBlock( state, 'block-1' ) ).toBe( true );
728
+ } );
729
+
730
+ it( 'returns false when block has no attributes', () => {
731
+ const state = {
732
+ blocks: {
733
+ byClientId: new Map(),
734
+ attributes: new Map(),
735
+ },
736
+ };
737
+ expect( isEditLockedBlock( state, 'block-1' ) ).toBe( false );
738
+ } );
739
+ } );
740
+
741
+ describe( 'isMoveLockedBlock', () => {
742
+ const createState = ( templateLock, blockLock ) => ( {
743
+ blocks: {
744
+ byClientId: new Map( [
745
+ [ 'block-1', { clientId: 'block-1' } ],
746
+ [ 'parent-block', { clientId: 'parent-block' } ],
747
+ ] ),
748
+ attributes: new Map( [
749
+ [ 'block-1', blockLock ? { lock: blockLock } : {} ],
750
+ [ 'parent-block', {} ],
751
+ ] ),
752
+ parents: new Map( [
753
+ [ 'block-1', 'parent-block' ],
754
+ [ 'parent-block', '' ],
755
+ ] ),
756
+ },
757
+ settings: {},
758
+ blockListSettings: {
759
+ 'parent-block': templateLock ? { templateLock } : {},
760
+ },
761
+ } );
762
+
763
+ it( 'returns false when block has no lock and no templateLock', () => {
764
+ const state = createState( null, null );
765
+ expect( isMoveLockedBlock( state, 'block-1' ) ).toBe( false );
766
+ } );
767
+
768
+ it( 'returns true when parent has templateLock set to "all"', () => {
769
+ const state = createState( 'all', null );
770
+ expect( isMoveLockedBlock( state, 'block-1' ) ).toBe( true );
771
+ } );
772
+
773
+ it( 'returns false when parent has templateLock set to "contentOnly"', () => {
774
+ const state = createState( 'contentOnly', null );
775
+ expect( isMoveLockedBlock( state, 'block-1' ) ).toBe( false );
776
+ } );
777
+
778
+ it( 'returns true when block has lock.move set to true', () => {
779
+ const state = createState( null, { move: true } );
780
+ expect( isMoveLockedBlock( state, 'block-1' ) ).toBe( true );
781
+ } );
782
+
783
+ it( 'returns false when block has lock.move set to false', () => {
784
+ const state = createState( null, { move: false } );
785
+ expect( isMoveLockedBlock( state, 'block-1' ) ).toBe( false );
786
+ } );
787
+
788
+ it( 'prioritizes block lock over template lock', () => {
789
+ const state = createState( 'all', { move: false } );
790
+ expect( isMoveLockedBlock( state, 'block-1' ) ).toBe( false );
791
+ } );
792
+ } );
793
+
794
+ describe( 'isRemoveLockedBlock', () => {
795
+ const createState = ( templateLock, blockLock ) => ( {
796
+ blocks: {
797
+ byClientId: new Map( [
798
+ [ 'block-1', { clientId: 'block-1' } ],
799
+ [ 'parent-block', { clientId: 'parent-block' } ],
800
+ ] ),
801
+ attributes: new Map( [
802
+ [ 'block-1', blockLock ? { lock: blockLock } : {} ],
803
+ [ 'parent-block', {} ],
804
+ ] ),
805
+ parents: new Map( [
806
+ [ 'block-1', 'parent-block' ],
807
+ [ 'parent-block', '' ],
808
+ ] ),
809
+ },
810
+ settings: {},
811
+ blockListSettings: {
812
+ 'parent-block': templateLock ? { templateLock } : {},
813
+ },
814
+ } );
815
+
816
+ it( 'returns false when block has no lock and no templateLock', () => {
817
+ const state = createState( null, null );
818
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( false );
819
+ } );
820
+
821
+ it( 'returns true when parent has templateLock set to "all"', () => {
822
+ const state = createState( 'all', null );
823
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( true );
824
+ } );
825
+
826
+ it( 'returns true when parent has templateLock set to "insert"', () => {
827
+ const state = createState( 'insert', null );
828
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( true );
829
+ } );
830
+
831
+ it( 'returns false when parent has templateLock set to "contentOnly"', () => {
832
+ const state = createState( 'contentOnly', null );
833
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( false );
834
+ } );
835
+
836
+ it( 'returns true when block has lock.remove set to true', () => {
837
+ const state = createState( null, { remove: true } );
838
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( true );
839
+ } );
840
+
841
+ it( 'returns false when block has lock.remove set to false', () => {
842
+ const state = createState( null, { remove: false } );
843
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( false );
844
+ } );
845
+
846
+ it( 'prioritizes block lock over template lock', () => {
847
+ const state = createState( 'all', { remove: false } );
848
+ expect( isRemoveLockedBlock( state, 'block-1' ) ).toBe( false );
849
+ } );
850
+ } );
851
+
852
+ describe( 'isLockedBlock', () => {
853
+ const createState = ( templateLock, blockLock ) => ( {
854
+ blocks: {
855
+ byClientId: new Map( [
856
+ [ 'block-1', { clientId: 'block-1' } ],
857
+ [ 'parent-block', { clientId: 'parent-block' } ],
858
+ ] ),
859
+ attributes: new Map( [
860
+ [ 'block-1', blockLock ? { lock: blockLock } : {} ],
861
+ [ 'parent-block', {} ],
862
+ ] ),
863
+ parents: new Map( [
864
+ [ 'block-1', 'parent-block' ],
865
+ [ 'parent-block', '' ],
866
+ ] ),
867
+ },
868
+ settings: {},
869
+ blockListSettings: {
870
+ 'parent-block': templateLock ? { templateLock } : {},
871
+ },
872
+ } );
873
+
874
+ it( 'returns false when block is not locked in any way', () => {
875
+ const state = createState( null, null );
876
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( false );
877
+ } );
878
+
879
+ it( 'returns true when block has lock.edit set to true', () => {
880
+ const state = createState( null, { edit: true } );
881
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( true );
882
+ } );
883
+
884
+ it( 'returns true when block has lock.move set to true', () => {
885
+ const state = createState( null, { move: true } );
886
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( true );
887
+ } );
888
+
889
+ it( 'returns true when block has lock.remove set to true', () => {
890
+ const state = createState( null, { remove: true } );
891
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( true );
892
+ } );
893
+
894
+ it( 'returns true when parent has templateLock set to "all"', () => {
895
+ const state = createState( 'all', null );
896
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( true );
897
+ } );
898
+
899
+ it( 'returns true when block has multiple locks', () => {
900
+ const state = createState( null, {
901
+ edit: true,
902
+ move: true,
903
+ remove: true,
904
+ } );
905
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( true );
906
+ } );
907
+
908
+ it( 'returns true when only one lock type is active', () => {
909
+ const state = createState( null, {
910
+ edit: false,
911
+ move: true,
912
+ remove: false,
913
+ } );
914
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( true );
915
+ } );
916
+
917
+ it( 'returns false when all lock types are explicitly false', () => {
918
+ const state = createState( null, {
919
+ edit: false,
920
+ move: false,
921
+ remove: false,
922
+ } );
923
+ expect( isLockedBlock( state, 'block-1' ) ).toBe( false );
924
+ } );
925
+ } );
684
926
  } );
package/src/style.scss CHANGED
@@ -29,10 +29,10 @@
29
29
  @use "./components/block-variation-transforms/style.scss" as *;
30
30
  @use "./components/border-radius-control/style.scss" as *;
31
31
  @use "./components/colors-gradients/style.scss" as *;
32
+ @use "./components/content-only-controls/styles.scss" as *;
32
33
  @use "./components/date-format-picker/style.scss" as *;
33
34
  @use "./components/duotone-control/style.scss" as *;
34
35
  @use "./components/font-appearance-control/style.scss" as *;
35
- @use "./components/font-family/style.scss" as *;
36
36
  @use "./components/global-styles/style.scss" as *;
37
37
  @use "./components/grid/style.scss" as *;
38
38
  @use "./components/height-control/style.scss" as *;
@@ -17,11 +17,28 @@ function findOptimalFontSize( textElement, applyFontSize ) {
17
17
  let maxSize = 2400;
18
18
  let bestSize = minSize;
19
19
 
20
+ const computedStyle = window.getComputedStyle( textElement );
21
+ const paddingLeft = parseFloat( computedStyle.paddingLeft ) || 0;
22
+ const paddingRight = parseFloat( computedStyle.paddingRight ) || 0;
23
+ const range = document.createRange();
24
+ range.selectNodeContents( textElement );
25
+
20
26
  while ( minSize <= maxSize ) {
21
27
  const midSize = Math.floor( ( minSize + maxSize ) / 2 );
22
28
  applyFontSize( midSize );
23
29
 
24
- const fitsWidth = textElement.scrollWidth <= textElement.clientWidth;
30
+ // When there is padding if the text overflows to the
31
+ // padding area, it should be considered overflowing.
32
+ // Use Range API to measure actual text content dimensions.
33
+ const rect = range.getBoundingClientRect();
34
+ const textWidth = rect.width;
35
+
36
+ // Check if text fits within the element's width and is not
37
+ // overflowing into the padding area.
38
+ const fitsWidth =
39
+ textElement.scrollWidth <= textElement.clientWidth &&
40
+ textWidth <= textElement.clientWidth - paddingLeft - paddingRight;
41
+ // Check if text fits within the element's height.
25
42
  const fitsHeight =
26
43
  alreadyHasScrollableHeight ||
27
44
  textElement.scrollHeight <= textElement.clientHeight;
@@ -33,6 +50,7 @@ function findOptimalFontSize( textElement, applyFontSize ) {
33
50
  maxSize = midSize - 1;
34
51
  }
35
52
  }
53
+ range.detach();
36
54
 
37
55
  return bestSize;
38
56
  }
package/tsconfig.json CHANGED
@@ -9,6 +9,7 @@
9
9
  { "path": "../components" },
10
10
  { "path": "../compose" },
11
11
  { "path": "../data" },
12
+ { "path": "../dataviews" },
12
13
  { "path": "../date" },
13
14
  { "path": "../deprecated" },
14
15
  { "path": "../dom" },
@@ -1,29 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // packages/block-editor/src/components/media-upload-modal/index.js
21
- var media_upload_modal_exports = {};
22
- __export(media_upload_modal_exports, {
23
- default: () => media_upload_modal_default
24
- });
25
- module.exports = __toCommonJS(media_upload_modal_exports);
26
- var import_components = require("@wordpress/components");
27
- var MediaUploadModal = () => null;
28
- var media_upload_modal_default = (0, import_components.withFilters)("editor.MediaUploadModal")(MediaUploadModal);
29
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/media-upload-modal/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { withFilters } from '@wordpress/components';\n\n/**\n * This is a placeholder for the media upload modal component necessary to make it possible to provide\n * an integration with the core blocks that handle media files. By default it renders nothing but\n * it provides a way to have it overridden with the `editor.MediaUploadModal` filter.\n *\n * @return {Component} The component to be rendered.\n */\nconst MediaUploadModal = () => null;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload-modal/README.md\n */\nexport default withFilters( 'editor.MediaUploadModal' )( MediaUploadModal );\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAA4B;AAS5B,IAAM,mBAAmB,MAAM;AAK/B,IAAO,iCAAQ,+BAAa,yBAA0B,EAAG,gBAAiB;",
6
- "names": []
7
- }
@@ -1,8 +0,0 @@
1
- // packages/block-editor/src/components/media-upload-modal/index.js
2
- import { withFilters } from "@wordpress/components";
3
- var MediaUploadModal = () => null;
4
- var media_upload_modal_default = withFilters("editor.MediaUploadModal")(MediaUploadModal);
5
- export {
6
- media_upload_modal_default as default
7
- };
8
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/media-upload-modal/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { withFilters } from '@wordpress/components';\n\n/**\n * This is a placeholder for the media upload modal component necessary to make it possible to provide\n * an integration with the core blocks that handle media files. By default it renders nothing but\n * it provides a way to have it overridden with the `editor.MediaUploadModal` filter.\n *\n * @return {Component} The component to be rendered.\n */\nconst MediaUploadModal = () => null;\n\n/**\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload-modal/README.md\n */\nexport default withFilters( 'editor.MediaUploadModal' )( MediaUploadModal );\n"],
5
- "mappings": ";AAGA,SAAS,mBAAmB;AAS5B,IAAM,mBAAmB,MAAM;AAK/B,IAAO,6BAAQ,YAAa,yBAA0B,EAAG,gBAAiB;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- @use "@wordpress/base-styles/variables" as *;
2
-
3
- .block-editor-font-family-control {
4
- &:not(.is-next-has-no-margin-bottom) {
5
- margin-bottom: $grid-unit-10;
6
- }
7
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * WordPress dependencies
3
- */
4
- import { withFilters } from '@wordpress/components';
5
-
6
- /**
7
- * This is a placeholder for the media upload modal component necessary to make it possible to provide
8
- * an integration with the core blocks that handle media files. By default it renders nothing but
9
- * it provides a way to have it overridden with the `editor.MediaUploadModal` filter.
10
- *
11
- * @return {Component} The component to be rendered.
12
- */
13
- const MediaUploadModal = () => null;
14
-
15
- /**
16
- * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/media-upload-modal/README.md
17
- */
18
- export default withFilters( 'editor.MediaUploadModal' )( MediaUploadModal );