@wordpress/block-editor 15.8.1-next.dc3f6d3c1.0 → 15.9.1-next.6deb34194.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/README.md +12 -0
  3. package/build/components/block-alignment-matrix-control/index.js +1 -8
  4. package/build/components/block-alignment-matrix-control/index.js.map +2 -2
  5. package/build/components/block-bindings/attribute-control.js +172 -0
  6. package/build/components/block-bindings/attribute-control.js.map +7 -0
  7. package/build/components/block-bindings/index.js +47 -0
  8. package/build/components/block-bindings/index.js.map +7 -0
  9. package/build/components/block-bindings/source-fields-list.js +135 -0
  10. package/build/components/block-bindings/source-fields-list.js.map +7 -0
  11. package/build/components/block-bindings/use-block-bindings-utils.js +66 -0
  12. package/build/components/block-bindings/use-block-bindings-utils.js.map +7 -0
  13. package/build/components/block-edit/edit.js +1 -3
  14. package/build/components/block-edit/edit.js.map +2 -2
  15. package/build/components/block-list/index.js +2 -1
  16. package/build/components/block-list/index.js.map +2 -2
  17. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +27 -5
  18. package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +2 -2
  19. package/build/components/block-lock/modal.js +5 -5
  20. package/build/components/block-lock/modal.js.map +2 -2
  21. package/build/components/block-lock/use-block-lock.js +10 -13
  22. package/build/components/block-lock/use-block-lock.js.map +2 -2
  23. package/build/components/block-settings-menu-controls/index.js +1 -1
  24. package/build/components/block-settings-menu-controls/index.js.map +2 -2
  25. package/build/components/block-styles/preview-panel.js +3 -5
  26. package/build/components/block-styles/preview-panel.js.map +2 -2
  27. package/build/components/block-styles/use-styles-for-block.js +2 -2
  28. package/build/components/block-styles/use-styles-for-block.js.map +2 -2
  29. package/build/components/block-toolbar/index.js +1 -8
  30. package/build/components/block-toolbar/index.js.map +3 -3
  31. package/build/components/block-tools/index.js +56 -45
  32. package/build/components/block-tools/index.js.map +3 -3
  33. package/build/components/block-visibility/toolbar.js +1 -1
  34. package/build/components/block-visibility/toolbar.js.map +1 -1
  35. package/build/components/content-only-controls/fields-dropdown-menu.js +66 -0
  36. package/build/components/content-only-controls/fields-dropdown-menu.js.map +7 -0
  37. package/build/components/content-only-controls/index.js +202 -44
  38. package/build/components/content-only-controls/index.js.map +3 -3
  39. package/build/components/content-only-controls/link/index.js +92 -103
  40. package/build/components/content-only-controls/link/index.js.map +3 -3
  41. package/build/components/content-only-controls/media/index.js +134 -134
  42. package/build/components/content-only-controls/media/index.js.map +3 -3
  43. package/build/components/content-only-controls/rich-text/index.js +66 -74
  44. package/build/components/content-only-controls/rich-text/index.js.map +3 -3
  45. package/build/components/dimensions-tool/width-height-tool.js +4 -16
  46. package/build/components/dimensions-tool/width-height-tool.js.map +3 -3
  47. package/build/components/font-family/index.js +1 -15
  48. package/build/components/font-family/index.js.map +2 -2
  49. package/build/components/global-styles/dimensions-panel.js +35 -2
  50. package/build/components/global-styles/dimensions-panel.js.map +2 -2
  51. package/build/components/global-styles/hooks.js +1 -1
  52. package/build/components/global-styles/hooks.js.map +2 -2
  53. package/build/components/global-styles/typography-panel.js +1 -2
  54. package/build/components/global-styles/typography-panel.js.map +2 -2
  55. package/build/components/image-editor/cropper.js +3 -34
  56. package/build/components/image-editor/cropper.js.map +3 -3
  57. package/build/components/image-editor/index.js +9 -3
  58. package/build/components/image-editor/index.js.map +2 -2
  59. package/build/components/image-editor/use-transform-image.js +62 -32
  60. package/build/components/image-editor/use-transform-image.js.map +2 -2
  61. package/build/components/image-editor/zoom-dropdown.js +2 -2
  62. package/build/components/image-editor/zoom-dropdown.js.map +2 -2
  63. package/build/components/index.js +10 -3
  64. package/build/components/index.js.map +2 -2
  65. package/build/components/inserter-draggable-blocks/index.js +8 -4
  66. package/build/components/inserter-draggable-blocks/index.js.map +2 -2
  67. package/build/components/inspector-controls-tabs/content-tab.js +3 -2
  68. package/build/components/inspector-controls-tabs/content-tab.js.map +2 -2
  69. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -1
  70. package/build/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +2 -2
  71. package/build/components/link-control/index.js +15 -7
  72. package/build/components/link-control/index.js.map +2 -2
  73. package/build/components/list-view/block-select-button.js +3 -11
  74. package/build/components/list-view/block-select-button.js.map +2 -2
  75. package/build/components/list-view/block.js +9 -7
  76. package/build/components/list-view/block.js.map +2 -2
  77. package/build/components/media-placeholder/index.js +17 -4
  78. package/build/components/media-placeholder/index.js.map +2 -2
  79. package/build/components/media-placeholder/utils.js +60 -0
  80. package/build/components/media-placeholder/utils.js.map +7 -0
  81. package/build/components/media-replace-flow/index.js +20 -3
  82. package/build/components/media-replace-flow/index.js.map +2 -2
  83. package/build/components/tool-selector/index.js +46 -0
  84. package/build/components/tool-selector/index.js.map +7 -0
  85. package/build/components/use-block-commands/index.js +1 -1
  86. package/build/components/use-block-commands/index.js.map +2 -2
  87. package/build/components/use-block-drop-zone/index.js +1 -5
  88. package/build/components/use-block-drop-zone/index.js.map +2 -2
  89. package/build/hooks/block-bindings.js +22 -260
  90. package/build/hooks/block-bindings.js.map +3 -3
  91. package/build/hooks/dimensions.js +3 -3
  92. package/build/hooks/dimensions.js.map +2 -2
  93. package/build/hooks/metadata.js +1 -1
  94. package/build/hooks/metadata.js.map +2 -2
  95. package/build/hooks/utils.js +5 -1
  96. package/build/hooks/utils.js.map +2 -2
  97. package/build/layouts/grid.js +23 -28
  98. package/build/layouts/grid.js.map +2 -2
  99. package/build/store/private-selectors.js +43 -3
  100. package/build/store/private-selectors.js.map +2 -2
  101. package/build/store/reducer.js +2 -1
  102. package/build/store/reducer.js.map +2 -2
  103. package/build/store/selectors.js +6 -4
  104. package/build/store/selectors.js.map +2 -2
  105. package/build/utils/block-bindings.js +2 -44
  106. package/build/utils/block-bindings.js.map +3 -3
  107. package/build/utils/index.js +2 -5
  108. package/build/utils/index.js.map +2 -2
  109. package/build-module/components/block-alignment-matrix-control/index.js +1 -8
  110. package/build-module/components/block-alignment-matrix-control/index.js.map +2 -2
  111. package/build-module/components/block-bindings/attribute-control.js +150 -0
  112. package/build-module/components/block-bindings/attribute-control.js.map +7 -0
  113. package/build-module/components/block-bindings/index.js +10 -0
  114. package/build-module/components/block-bindings/index.js.map +7 -0
  115. package/build-module/components/block-bindings/source-fields-list.js +104 -0
  116. package/build-module/components/block-bindings/source-fields-list.js.map +7 -0
  117. package/build-module/components/block-bindings/use-block-bindings-utils.js +45 -0
  118. package/build-module/components/block-bindings/use-block-bindings-utils.js.map +7 -0
  119. package/build-module/components/block-edit/edit.js +1 -3
  120. package/build-module/components/block-edit/edit.js.map +2 -2
  121. package/build-module/components/block-list/index.js +2 -1
  122. package/build-module/components/block-list/index.js.map +2 -2
  123. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +27 -5
  124. package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +2 -2
  125. package/build-module/components/block-lock/modal.js +5 -5
  126. package/build-module/components/block-lock/modal.js.map +2 -2
  127. package/build-module/components/block-lock/use-block-lock.js +10 -13
  128. package/build-module/components/block-lock/use-block-lock.js.map +2 -2
  129. package/build-module/components/block-settings-menu-controls/index.js +1 -1
  130. package/build-module/components/block-settings-menu-controls/index.js.map +2 -2
  131. package/build-module/components/block-styles/preview-panel.js +3 -5
  132. package/build-module/components/block-styles/preview-panel.js.map +2 -2
  133. package/build-module/components/block-styles/use-styles-for-block.js +2 -2
  134. package/build-module/components/block-styles/use-styles-for-block.js.map +2 -2
  135. package/build-module/components/block-toolbar/index.js +1 -8
  136. package/build-module/components/block-toolbar/index.js.map +2 -2
  137. package/build-module/components/block-tools/index.js +56 -45
  138. package/build-module/components/block-tools/index.js.map +2 -2
  139. package/build-module/components/block-visibility/toolbar.js +1 -1
  140. package/build-module/components/block-visibility/toolbar.js.map +1 -1
  141. package/build-module/components/content-only-controls/fields-dropdown-menu.js +45 -0
  142. package/build-module/components/content-only-controls/fields-dropdown-menu.js.map +7 -0
  143. package/build-module/components/content-only-controls/index.js +206 -46
  144. package/build-module/components/content-only-controls/index.js.map +2 -2
  145. package/build-module/components/content-only-controls/link/index.js +92 -104
  146. package/build-module/components/content-only-controls/link/index.js.map +2 -2
  147. package/build-module/components/content-only-controls/media/index.js +134 -135
  148. package/build-module/components/content-only-controls/media/index.js.map +2 -2
  149. package/build-module/components/content-only-controls/rich-text/index.js +68 -81
  150. package/build-module/components/content-only-controls/rich-text/index.js.map +2 -2
  151. package/build-module/components/dimensions-tool/width-height-tool.js +4 -6
  152. package/build-module/components/dimensions-tool/width-height-tool.js.map +2 -2
  153. package/build-module/components/font-family/index.js +1 -15
  154. package/build-module/components/font-family/index.js.map +2 -2
  155. package/build-module/components/global-styles/dimensions-panel.js +35 -2
  156. package/build-module/components/global-styles/dimensions-panel.js.map +2 -2
  157. package/build-module/components/global-styles/hooks.js +1 -1
  158. package/build-module/components/global-styles/hooks.js.map +2 -2
  159. package/build-module/components/global-styles/typography-panel.js +1 -2
  160. package/build-module/components/global-styles/typography-panel.js.map +2 -2
  161. package/build-module/components/image-editor/cropper.js +3 -34
  162. package/build-module/components/image-editor/cropper.js.map +2 -2
  163. package/build-module/components/image-editor/index.js +9 -3
  164. package/build-module/components/image-editor/index.js.map +2 -2
  165. package/build-module/components/image-editor/use-transform-image.js +63 -33
  166. package/build-module/components/image-editor/use-transform-image.js.map +2 -2
  167. package/build-module/components/image-editor/zoom-dropdown.js +2 -2
  168. package/build-module/components/image-editor/zoom-dropdown.js.map +2 -2
  169. package/build-module/components/index.js +74 -66
  170. package/build-module/components/index.js.map +2 -2
  171. package/build-module/components/inserter-draggable-blocks/index.js +8 -4
  172. package/build-module/components/inserter-draggable-blocks/index.js.map +2 -2
  173. package/build-module/components/inspector-controls-tabs/content-tab.js +3 -2
  174. package/build-module/components/inspector-controls-tabs/content-tab.js.map +2 -2
  175. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -1
  176. package/build-module/components/inspector-controls-tabs/use-inspector-controls-tabs.js.map +2 -2
  177. package/build-module/components/link-control/index.js +16 -8
  178. package/build-module/components/link-control/index.js.map +2 -2
  179. package/build-module/components/list-view/block-select-button.js +3 -11
  180. package/build-module/components/list-view/block-select-button.js.map +2 -2
  181. package/build-module/components/list-view/block.js +9 -7
  182. package/build-module/components/list-view/block.js.map +2 -2
  183. package/build-module/components/media-placeholder/index.js +18 -5
  184. package/build-module/components/media-placeholder/index.js.map +2 -2
  185. package/build-module/components/media-placeholder/utils.js +35 -0
  186. package/build-module/components/media-placeholder/utils.js.map +7 -0
  187. package/build-module/components/media-replace-flow/index.js +20 -3
  188. package/build-module/components/media-replace-flow/index.js.map +2 -2
  189. package/build-module/components/tool-selector/index.js +15 -0
  190. package/build-module/components/tool-selector/index.js.map +7 -0
  191. package/build-module/components/use-block-commands/index.js +1 -1
  192. package/build-module/components/use-block-commands/index.js.map +2 -2
  193. package/build-module/components/use-block-drop-zone/index.js +1 -5
  194. package/build-module/components/use-block-drop-zone/index.js.map +2 -2
  195. package/build-module/hooks/block-bindings.js +27 -270
  196. package/build-module/hooks/block-bindings.js.map +2 -2
  197. package/build-module/hooks/dimensions.js +3 -3
  198. package/build-module/hooks/dimensions.js.map +2 -2
  199. package/build-module/hooks/metadata.js +1 -1
  200. package/build-module/hooks/metadata.js.map +2 -2
  201. package/build-module/hooks/utils.js +5 -1
  202. package/build-module/hooks/utils.js.map +2 -2
  203. package/build-module/layouts/grid.js +23 -28
  204. package/build-module/layouts/grid.js.map +2 -2
  205. package/build-module/store/private-selectors.js +39 -3
  206. package/build-module/store/private-selectors.js.map +2 -2
  207. package/build-module/store/reducer.js +2 -1
  208. package/build-module/store/reducer.js.map +2 -2
  209. package/build-module/store/selectors.js +6 -4
  210. package/build-module/store/selectors.js.map +2 -2
  211. package/build-module/utils/block-bindings.js +1 -42
  212. package/build-module/utils/block-bindings.js.map +2 -2
  213. package/build-module/utils/index.js +1 -3
  214. package/build-module/utils/index.js.map +2 -2
  215. package/build-style/content-rtl.css +3 -0
  216. package/build-style/content.css +3 -0
  217. package/build-style/style-rtl.css +20 -11
  218. package/build-style/style.css +20 -11
  219. package/package.json +39 -39
  220. package/src/components/block-alignment-matrix-control/index.js +1 -5
  221. package/src/components/block-bindings/attribute-control.js +174 -0
  222. package/src/components/block-bindings/index.js +6 -0
  223. package/src/components/block-bindings/source-fields-list.js +130 -0
  224. package/src/components/block-bindings/use-block-bindings-utils.js +156 -0
  225. package/src/components/block-edit/edit.js +1 -3
  226. package/src/components/block-list/content.scss +5 -0
  227. package/src/components/block-list/index.js +3 -1
  228. package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +34 -3
  229. package/src/components/block-lock/modal.js +6 -5
  230. package/src/components/block-lock/use-block-lock.js +10 -14
  231. package/src/components/block-patterns-list/stories/{index.story.js → index.story.jsx} +3 -1
  232. package/src/components/block-settings-menu-controls/index.js +1 -1
  233. package/src/components/block-styles/preview-panel.js +3 -5
  234. package/src/components/block-styles/use-styles-for-block.js +2 -2
  235. package/src/components/block-toolbar/index.js +1 -6
  236. package/src/components/block-toolbar/style.scss +6 -6
  237. package/src/components/block-tools/index.js +15 -2
  238. package/src/components/block-tools/style.scss +4 -0
  239. package/src/components/block-visibility/toolbar.js +1 -1
  240. package/src/components/content-only-controls/fields-dropdown-menu.js +53 -0
  241. package/src/components/content-only-controls/index.js +289 -50
  242. package/src/components/content-only-controls/link/index.js +62 -57
  243. package/src/components/content-only-controls/media/index.js +177 -156
  244. package/src/components/content-only-controls/rich-text/index.js +31 -44
  245. package/src/components/content-only-controls/styles.scss +10 -1
  246. package/src/components/dimensions-tool/width-height-tool.js +6 -13
  247. package/src/components/font-family/README.md +0 -9
  248. package/src/components/font-family/index.js +1 -16
  249. package/src/components/font-family/stories/{index.story.js → index.story.jsx} +0 -1
  250. package/src/components/global-styles/dimensions-panel.js +36 -0
  251. package/src/components/global-styles/hooks.js +1 -1
  252. package/src/components/global-styles/typography-panel.js +0 -1
  253. package/src/components/image-editor/cropper.js +3 -32
  254. package/src/components/image-editor/index.js +34 -29
  255. package/src/components/image-editor/use-transform-image.js +80 -34
  256. package/src/components/image-editor/zoom-dropdown.js +2 -2
  257. package/src/components/index.js +9 -1
  258. package/src/components/inserter/style.scss +1 -1
  259. package/src/components/inserter-draggable-blocks/index.js +19 -8
  260. package/src/components/inspector-controls-tabs/content-tab.js +6 -2
  261. package/src/components/inspector-controls-tabs/use-inspector-controls-tabs.js +1 -5
  262. package/src/components/link-control/index.js +36 -12
  263. package/src/components/list-view/block-select-button.js +22 -30
  264. package/src/components/list-view/block.js +9 -7
  265. package/src/components/media-placeholder/index.js +20 -5
  266. package/src/components/media-placeholder/test/get-computed-accept-attribute.js +164 -0
  267. package/src/components/media-placeholder/utils.js +65 -0
  268. package/src/components/media-replace-flow/index.js +22 -3
  269. package/src/components/tool-selector/index.js +19 -0
  270. package/src/components/use-block-commands/index.js +1 -1
  271. package/src/components/use-block-drop-zone/index.js +1 -5
  272. package/src/hooks/block-bindings.js +27 -347
  273. package/src/hooks/dimensions.js +8 -3
  274. package/src/hooks/metadata.js +1 -1
  275. package/src/hooks/test/metadata.js +1 -1
  276. package/src/hooks/utils.js +4 -0
  277. package/src/layouts/grid.js +40 -72
  278. package/src/layouts/test/grid.js +14 -0
  279. package/src/store/private-selectors.js +123 -6
  280. package/src/store/reducer.js +3 -0
  281. package/src/store/selectors.js +6 -4
  282. package/src/store/test/private-selectors.js +242 -0
  283. package/src/store/test/reducer.js +17 -7
  284. package/src/style.scss +0 -1
  285. package/src/utils/block-bindings.js +0 -157
  286. package/src/utils/index.js +0 -1
  287. package/tsconfig.json +2 -0
  288. package/build/components/block-toolbar/block-name-context.js +0 -30
  289. package/build/components/block-toolbar/block-name-context.js.map +0 -7
  290. package/build/components/content-only-controls/plain-text/index.js +0 -68
  291. package/build/components/content-only-controls/plain-text/index.js.map +0 -7
  292. package/build-module/components/block-toolbar/block-name-context.js +0 -9
  293. package/build-module/components/block-toolbar/block-name-context.js.map +0 -7
  294. package/build-module/components/content-only-controls/plain-text/index.js +0 -50
  295. package/build-module/components/content-only-controls/plain-text/index.js.map +0 -7
  296. package/src/components/block-toolbar/block-name-context.js +0 -9
  297. package/src/components/content-only-controls/plain-text/index.js +0 -49
  298. package/src/components/font-family/style.scss +0 -7
  299. /package/src/components/alignment-control/stories/{aliginment-toolbar.story.js → aliginment-toolbar.story.jsx} +0 -0
  300. /package/src/components/alignment-control/stories/{index.story.js → index.story.jsx} +0 -0
  301. /package/src/components/block-alignment-matrix-control/stories/{index.story.js → index.story.jsx} +0 -0
  302. /package/src/{utils → components/block-bindings}/test/use-block-bindings-utils.js +0 -0
  303. /package/src/components/block-draggable/stories/{index.story.js → index.story.jsx} +0 -0
  304. /package/src/components/block-heading-level-dropdown/stories/{index.story.js → index.story.jsx} +0 -0
  305. /package/src/components/block-mover/stories/{index.story.js → index.story.jsx} +0 -0
  306. /package/src/components/block-title/stories/{index.story.js → index.story.jsx} +0 -0
  307. /package/src/components/border-radius-control/stories/{index.story.js → index.story.jsx} +0 -0
  308. /package/src/components/date-format-picker/stories/{index.story.js → index.story.jsx} +0 -0
  309. /package/src/components/dimensions-tool/stories/{aspect-ratio-tool.story.js → aspect-ratio-tool.story.jsx} +0 -0
  310. /package/src/components/dimensions-tool/stories/{index.story.js → index.story.jsx} +0 -0
  311. /package/src/components/dimensions-tool/stories/{scale-tool.story.js → scale-tool.story.jsx} +0 -0
  312. /package/src/components/dimensions-tool/stories/{width-height-tool.story.js → width-height-tool.story.jsx} +0 -0
  313. /package/src/components/height-control/stories/{index.story.js → index.story.jsx} +0 -0
  314. /package/src/components/inserter/stories/{index.story.js → index.story.jsx} +0 -0
  315. /package/src/components/line-height-control/stories/{index.story.js → index.story.jsx} +0 -0
  316. /package/src/components/plain-text/stories/{index.story.js → index.story.jsx} +0 -0
  317. /package/src/components/resolution-tool/stories/{index.story.js → index.story.jsx} +0 -0
  318. /package/src/components/tabbed-sidebar/stories/{index.story.js → index.story.jsx} +0 -0
  319. /package/src/components/text-alignment-control/stories/{index.story.js → index.story.jsx} +0 -0
  320. /package/src/components/text-decoration-control/stories/{index.story.js → index.story.jsx} +0 -0
  321. /package/src/components/text-transform-control/stories/{index.story.js → index.story.jsx} +0 -0
  322. /package/src/components/unit-control/stories/{index.story.js → index.story.jsx} +0 -0
  323. /package/src/components/url-popover/stories/{index.story.js → index.story.jsx} +0 -0
  324. /package/src/components/warning/stories/{index.story.js → index.story.jsx} +0 -0
  325. /package/src/components/writing-mode-control/stories/{index.story.js → index.story.jsx} +0 -0
@@ -21,18 +21,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var block_bindings_exports = {};
22
22
  __export(block_bindings_exports, {
23
23
  hasPatternOverridesDefaultBinding: () => hasPatternOverridesDefaultBinding,
24
- replacePatternOverridesDefaultBinding: () => replacePatternOverridesDefaultBinding,
25
- useBlockBindingsUtils: () => useBlockBindingsUtils
24
+ replacePatternOverridesDefaultBinding: () => replacePatternOverridesDefaultBinding
26
25
  });
27
26
  module.exports = __toCommonJS(block_bindings_exports);
28
- var import_data = require("@wordpress/data");
29
- var import_store = require("../store");
30
- var import_block_edit = require("../components/block-edit");
31
27
  var DEFAULT_ATTRIBUTE = "__default";
32
28
  var PATTERN_OVERRIDES_SOURCE = "core/pattern-overrides";
33
- function isObjectEmpty(object) {
34
- return !object || Object.keys(object).length === 0;
35
- }
36
29
  function hasPatternOverridesDefaultBinding(bindings) {
37
30
  return bindings?.[DEFAULT_ATTRIBUTE]?.source === PATTERN_OVERRIDES_SOURCE;
38
31
  }
@@ -47,44 +40,9 @@ function replacePatternOverridesDefaultBinding(bindings, supportedAttributes) {
47
40
  }
48
41
  return bindings;
49
42
  }
50
- function useBlockBindingsUtils(clientId) {
51
- const { clientId: contextClientId } = (0, import_block_edit.useBlockEditContext)();
52
- const blockClientId = clientId || contextClientId;
53
- const { updateBlockAttributes } = (0, import_data.useDispatch)(import_store.store);
54
- const { getBlockAttributes } = (0, import_data.useRegistry)().select(import_store.store);
55
- const updateBlockBindings = (bindings) => {
56
- const { metadata: { bindings: currentBindings, ...metadata } = {} } = getBlockAttributes(blockClientId);
57
- const newBindings = { ...currentBindings };
58
- Object.entries(bindings).forEach(([attribute, binding]) => {
59
- if (!binding && newBindings[attribute]) {
60
- delete newBindings[attribute];
61
- return;
62
- }
63
- newBindings[attribute] = binding;
64
- });
65
- const newMetadata = {
66
- ...metadata,
67
- bindings: newBindings
68
- };
69
- if (isObjectEmpty(newMetadata.bindings)) {
70
- delete newMetadata.bindings;
71
- }
72
- updateBlockAttributes(blockClientId, {
73
- metadata: isObjectEmpty(newMetadata) ? void 0 : newMetadata
74
- });
75
- };
76
- const removeAllBlockBindings = () => {
77
- const { metadata: { bindings, ...metadata } = {} } = getBlockAttributes(blockClientId);
78
- updateBlockAttributes(blockClientId, {
79
- metadata: isObjectEmpty(metadata) ? void 0 : metadata
80
- });
81
- };
82
- return { updateBlockBindings, removeAllBlockBindings };
83
- }
84
43
  // Annotate the CommonJS export names for ESM import in node:
85
44
  0 && (module.exports = {
86
45
  hasPatternOverridesDefaultBinding,
87
- replacePatternOverridesDefaultBinding,
88
- useBlockBindingsUtils
46
+ replacePatternOverridesDefaultBinding
89
47
  });
90
48
  //# sourceMappingURL=block-bindings.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/block-bindings.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useBlockEditContext } from '../components/block-edit';\n\nconst DEFAULT_ATTRIBUTE = '__default';\nconst PATTERN_OVERRIDES_SOURCE = 'core/pattern-overrides';\n\n/**\n * Checks if the given object is empty.\n *\n * @param {?Object} object The object to check.\n *\n * @return {boolean} Whether the object is empty.\n */\nfunction isObjectEmpty( object ) {\n\treturn ! object || Object.keys( object ).length === 0;\n}\n\n/**\n * Checks if the block has the `__default` binding for pattern overrides.\n *\n * @param {?Record<string, object>} bindings A block's bindings from the metadata attribute.\n *\n * @return {boolean} Whether the block has the `__default` binding for pattern overrides.\n */\nexport function hasPatternOverridesDefaultBinding( bindings ) {\n\treturn bindings?.[ DEFAULT_ATTRIBUTE ]?.source === PATTERN_OVERRIDES_SOURCE;\n}\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * - bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * - bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param {?Record<string, object>} bindings A block's bindings from the metadata attribute.\n * @param {string[]} supportedAttributes The block's attributes which are supported by block bindings.\n *\n * @return {Object} The bindings with default replaced for pattern overrides.\n */\nexport function replacePatternOverridesDefaultBinding(\n\tbindings,\n\tsupportedAttributes\n) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif ( hasPatternOverridesDefaultBinding( bindings ) ) {\n\t\tconst bindingsWithDefaults = {};\n\t\tfor ( const attributeName of supportedAttributes ) {\n\t\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t\t? bindings[ attributeName ]\n\t\t\t\t: { source: PATTERN_OVERRIDES_SOURCE };\n\t\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t\t}\n\n\t\treturn bindingsWithDefaults;\n\t}\n\n\treturn bindings;\n}\n\n/**\n * Contains utils to update the block `bindings` metadata.\n *\n * @typedef {Object} WPBlockBindingsUtils\n *\n * @property {Function} updateBlockBindings Updates the value of the bindings connected to block attributes.\n * @property {Function} removeAllBlockBindings Removes the bindings property of the `metadata` attribute.\n */\n\n/**\n * Retrieves the existing utils needed to update the block `bindings` metadata.\n * They can be used to create, modify, or remove connections from the existing block attributes.\n *\n * It contains the following utils:\n * - `updateBlockBindings`: Updates the value of the bindings connected to block attributes. It can be used to remove a specific binding by setting the value to `undefined`.\n * - `removeAllBlockBindings`: Removes the bindings property of the `metadata` attribute.\n *\n * @since 6.7.0 Introduced in WordPress core.\n *\n * @param {?string} clientId Optional block client ID. If not set, it will use the current block client ID from the context.\n *\n * @return {?WPBlockBindingsUtils} Object containing the block bindings utils.\n *\n * @example\n * ```js\n * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n * const { updateBlockBindings, removeAllBlockBindings } = useBlockBindingsUtils();\n *\n * // Update url and alt attributes.\n * updateBlockBindings( {\n * url: {\n * source: 'core/post-meta',\n * args: {\n * key: 'url_custom_field',\n * },\n * },\n * alt: {\n * source: 'core/post-meta',\n * args: {\n * key: 'text_custom_field',\n * },\n * },\n * } );\n *\n * // Remove binding from url attribute.\n * updateBlockBindings( { url: undefined } );\n *\n * // Remove bindings from all attributes.\n * removeAllBlockBindings();\n * ```\n */\nexport function useBlockBindingsUtils( clientId ) {\n\tconst { clientId: contextClientId } = useBlockEditContext();\n\tconst blockClientId = clientId || contextClientId;\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { getBlockAttributes } = useRegistry().select( blockEditorStore );\n\n\t/**\n\t * Updates the value of the bindings connected to block attributes.\n\t * It removes the binding when the new value is `undefined`.\n\t *\n\t * @param {Object} bindings Bindings including the attributes to update and the new object.\n\t * @param {string} bindings.source The source name to connect to.\n\t * @param {Object} [bindings.args] Object containing the arguments needed by the source.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { updateBlockBindings } = useBlockBindingsUtils();\n\t * updateBlockBindings( {\n\t * url: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'url_custom_field',\n\t * },\n\t * \t },\n\t * alt: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'text_custom_field',\n\t * },\n\t * \t }\n\t * } );\n\t * ```\n\t */\n\tconst updateBlockBindings = ( bindings ) => {\n\t\tconst { metadata: { bindings: currentBindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( blockClientId );\n\t\tconst newBindings = { ...currentBindings };\n\n\t\tObject.entries( bindings ).forEach( ( [ attribute, binding ] ) => {\n\t\t\tif ( ! binding && newBindings[ attribute ] ) {\n\t\t\t\tdelete newBindings[ attribute ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnewBindings[ attribute ] = binding;\n\t\t} );\n\n\t\tconst newMetadata = {\n\t\t\t...metadata,\n\t\t\tbindings: newBindings,\n\t\t};\n\n\t\tif ( isObjectEmpty( newMetadata.bindings ) ) {\n\t\t\tdelete newMetadata.bindings;\n\t\t}\n\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\tmetadata: isObjectEmpty( newMetadata ) ? undefined : newMetadata,\n\t\t} );\n\t};\n\n\t/**\n\t * Removes the bindings property of the `metadata` attribute.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { removeAllBlockBindings } = useBlockBindingsUtils();\n\t * removeAllBlockBindings();\n\t * ```\n\t */\n\tconst removeAllBlockBindings = () => {\n\t\tconst { metadata: { bindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( blockClientId );\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\tmetadata: isObjectEmpty( metadata ) ? undefined : metadata,\n\t\t} );\n\t};\n\n\treturn { updateBlockBindings, removeAllBlockBindings };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAyC;AAKzC,mBAA0C;AAC1C,wBAAoC;AAEpC,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AASjC,SAAS,cAAe,QAAS;AAChC,SAAO,CAAE,UAAU,OAAO,KAAM,MAAO,EAAE,WAAW;AACrD;AASO,SAAS,kCAAmC,UAAW;AAC7D,SAAO,WAAY,iBAAkB,GAAG,WAAW;AACpD;AAcO,SAAS,sCACf,UACA,qBACC;AAED,MAAK,kCAAmC,QAAS,GAAI;AACpD,UAAM,uBAAuB,CAAC;AAC9B,eAAY,iBAAiB,qBAAsB;AAElD,YAAM,gBAAgB,SAAU,aAAc,IAC3C,SAAU,aAAc,IACxB,EAAE,QAAQ,yBAAyB;AACtC,2BAAsB,aAAc,IAAI;AAAA,IACzC;AAEA,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAqDO,SAAS,sBAAuB,UAAW;AACjD,QAAM,EAAE,UAAU,gBAAgB,QAAI,uCAAoB;AAC1D,QAAM,gBAAgB,YAAY;AAClC,QAAM,EAAE,sBAAsB,QAAI,yBAAa,aAAAA,KAAiB;AAChE,QAAM,EAAE,mBAAmB,QAAI,yBAAY,EAAE,OAAQ,aAAAA,KAAiB;AA+BtE,QAAM,sBAAsB,CAAE,aAAc;AAC3C,UAAM,EAAE,UAAU,EAAE,UAAU,iBAAiB,GAAG,SAAS,IAAI,CAAC,EAAE,IACjE,mBAAoB,aAAc;AACnC,UAAM,cAAc,EAAE,GAAG,gBAAgB;AAEzC,WAAO,QAAS,QAAS,EAAE,QAAS,CAAE,CAAE,WAAW,OAAQ,MAAO;AACjE,UAAK,CAAE,WAAW,YAAa,SAAU,GAAI;AAC5C,eAAO,YAAa,SAAU;AAC9B;AAAA,MACD;AACA,kBAAa,SAAU,IAAI;AAAA,IAC5B,CAAE;AAEF,UAAM,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,UAAU;AAAA,IACX;AAEA,QAAK,cAAe,YAAY,QAAS,GAAI;AAC5C,aAAO,YAAY;AAAA,IACpB;AAEA,0BAAuB,eAAe;AAAA,MACrC,UAAU,cAAe,WAAY,IAAI,SAAY;AAAA,IACtD,CAAE;AAAA,EACH;AAaA,QAAM,yBAAyB,MAAM;AACpC,UAAM,EAAE,UAAU,EAAE,UAAU,GAAG,SAAS,IAAI,CAAC,EAAE,IAChD,mBAAoB,aAAc;AACnC,0BAAuB,eAAe;AAAA,MACrC,UAAU,cAAe,QAAS,IAAI,SAAY;AAAA,IACnD,CAAE;AAAA,EACH;AAEA,SAAO,EAAE,qBAAqB,uBAAuB;AACtD;",
6
- "names": ["blockEditorStore"]
4
+ "sourcesContent": ["const DEFAULT_ATTRIBUTE = '__default';\nconst PATTERN_OVERRIDES_SOURCE = 'core/pattern-overrides';\n\n/**\n * Checks if the block has the `__default` binding for pattern overrides.\n *\n * @param {?Record<string, object>} bindings A block's bindings from the metadata attribute.\n *\n * @return {boolean} Whether the block has the `__default` binding for pattern overrides.\n */\nexport function hasPatternOverridesDefaultBinding( bindings ) {\n\treturn bindings?.[ DEFAULT_ATTRIBUTE ]?.source === PATTERN_OVERRIDES_SOURCE;\n}\n\n/**\n * Returns the bindings with the `__default` binding for pattern overrides\n * replaced with the full-set of supported attributes. e.g.:\n *\n * - bindings passed in: `{ __default: { source: 'core/pattern-overrides' } }`\n * - bindings returned: `{ content: { source: 'core/pattern-overrides' } }`\n *\n * @param {?Record<string, object>} bindings A block's bindings from the metadata attribute.\n * @param {string[]} supportedAttributes The block's attributes which are supported by block bindings.\n *\n * @return {Object} The bindings with default replaced for pattern overrides.\n */\nexport function replacePatternOverridesDefaultBinding(\n\tbindings,\n\tsupportedAttributes\n) {\n\t// The `__default` binding currently only works for pattern overrides.\n\tif ( hasPatternOverridesDefaultBinding( bindings ) ) {\n\t\tconst bindingsWithDefaults = {};\n\t\tfor ( const attributeName of supportedAttributes ) {\n\t\t\t// If the block has mixed binding sources, retain any non pattern override bindings.\n\t\t\tconst bindingSource = bindings[ attributeName ]\n\t\t\t\t? bindings[ attributeName ]\n\t\t\t\t: { source: PATTERN_OVERRIDES_SOURCE };\n\t\t\tbindingsWithDefaults[ attributeName ] = bindingSource;\n\t\t}\n\n\t\treturn bindingsWithDefaults;\n\t}\n\n\treturn bindings;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AAS1B,SAAS,kCAAmC,UAAW;AAC7D,SAAO,WAAY,iBAAkB,GAAG,WAAW;AACpD;AAcO,SAAS,sCACf,UACA,qBACC;AAED,MAAK,kCAAmC,QAAS,GAAI;AACpD,UAAM,uBAAuB,CAAC;AAC9B,eAAY,iBAAiB,qBAAsB;AAElD,YAAM,gBAAgB,SAAU,aAAc,IAC3C,SAAU,aAAc,IACxB,EAAE,QAAQ,yBAAyB;AACtC,2BAAsB,aAAc,IAAI;AAAA,IACzC;AAEA,WAAO;AAAA,EACR;AAEA,SAAO;AACR;",
6
+ "names": []
7
7
  }
@@ -31,17 +31,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var utils_exports = {};
32
32
  __export(utils_exports, {
33
33
  getPxFromCssUnit: () => import_get_px_from_css_unit.default,
34
- transformStyles: () => import_transform_styles.default,
35
- useBlockBindingsUtils: () => import_block_bindings.useBlockBindingsUtils
34
+ transformStyles: () => import_transform_styles.default
36
35
  });
37
36
  module.exports = __toCommonJS(utils_exports);
38
37
  var import_transform_styles = __toESM(require("./transform-styles"));
39
38
  var import_get_px_from_css_unit = __toESM(require("./get-px-from-css-unit"));
40
- var import_block_bindings = require("./block-bindings");
41
39
  // Annotate the CommonJS export names for ESM import in node:
42
40
  0 && (module.exports = {
43
41
  getPxFromCssUnit,
44
- transformStyles,
45
- useBlockBindingsUtils
42
+ transformStyles
46
43
  });
47
44
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/index.js"],
4
- "sourcesContent": ["export { default as transformStyles } from './transform-styles';\nexport { default as getPxFromCssUnit } from './get-px-from-css-unit';\nexport { useBlockBindingsUtils } from './block-bindings';\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA2C;AAC3C,kCAA4C;AAC5C,4BAAsC;",
4
+ "sourcesContent": ["export { default as transformStyles } from './transform-styles';\nexport { default as getPxFromCssUnit } from './get-px-from-css-unit';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAA2C;AAC3C,kCAA4C;",
6
6
  "names": []
7
7
  }
@@ -42,14 +42,7 @@ function BlockAlignmentMatrixControl(props) {
42
42
  }
43
43
  );
44
44
  },
45
- renderContent: () => /* @__PURE__ */ jsx(
46
- AlignmentMatrixControl,
47
- {
48
- hasFocusBorder: false,
49
- onChange,
50
- value
51
- }
52
- )
45
+ renderContent: () => /* @__PURE__ */ jsx(AlignmentMatrixControl, { onChange, value })
53
46
  }
54
47
  );
55
48
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/block-alignment-matrix-control/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport {\n\tToolbarButton,\n\tDropdown,\n\tAlignmentMatrixControl,\n} from '@wordpress/components';\n\nconst noop = () => {};\n\n/**\n * The alignment matrix control allows users to quickly adjust inner block alignment.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-alignment-matrix-control/README.md\n *\n * @example\n * ```jsx\n * function Example() {\n * return (\n * <BlockControls>\n * <BlockAlignmentMatrixControl\n * label={ __( 'Change content position' ) }\n * value=\"center\"\n * onChange={ ( nextPosition ) =>\n * setAttributes( { contentPosition: nextPosition } )\n * }\n * />\n * </BlockControls>\n * );\n * }\n * ```\n *\n * @param {Object} props Component props.\n * @param {string} props.label Label for the control. Defaults to 'Change matrix alignment'.\n * @param {Function} props.onChange Function to execute upon change of matrix state.\n * @param {string} props.value Content alignment location. One of: 'center', 'center center',\n * 'center left', 'center right', 'top center', 'top left',\n * 'top right', 'bottom center', 'bottom left', 'bottom right'.\n * @param {boolean} props.isDisabled Whether the control should be disabled.\n * @return {Element} The BlockAlignmentMatrixControl component.\n */\nfunction BlockAlignmentMatrixControl( props ) {\n\tconst {\n\t\tlabel = __( 'Change matrix alignment' ),\n\t\tonChange = noop,\n\t\tvalue = 'center',\n\t\tisDisabled,\n\t} = props;\n\n\tconst icon = <AlignmentMatrixControl.Icon value={ value } />;\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ { placement: 'bottom-start' } }\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => {\n\t\t\t\tconst openOnArrowDown = ( event ) => {\n\t\t\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonToggle();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\tonKeyDown={ openOnArrowDown }\n\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\tdisabled={ isDisabled }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t<AlignmentMatrixControl\n\t\t\t\t\thasFocusBorder={ false }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t/>\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default BlockAlignmentMatrixControl;\n"],
5
- "mappings": ";AAGA,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AA2CO;AAzCd,IAAM,OAAO,MAAM;AAAC;AAiCpB,SAAS,4BAA6B,OAAQ;AAC7C,QAAM;AAAA,IACL,QAAQ,GAAI,yBAA0B;AAAA,IACtC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,EACD,IAAI;AAEJ,QAAM,OAAO,oBAAC,uBAAuB,MAAvB,EAA4B,OAAgB;AAE1D,SACC;AAAA,IAAC;AAAA;AAAA,MACA,cAAe,EAAE,WAAW,eAAe;AAAA,MAC3C,cAAe,CAAE,EAAE,UAAU,OAAO,MAAO;AAC1C,cAAM,kBAAkB,CAAE,UAAW;AACpC,cAAK,CAAE,UAAU,MAAM,YAAY,MAAO;AACzC,kBAAM,eAAe;AACrB,qBAAS;AAAA,UACV;AAAA,QACD;AAEA,eACC;AAAA,UAAC;AAAA;AAAA,YACA,SAAU;AAAA,YACV,iBAAc;AAAA,YACd,iBAAgB;AAAA,YAChB,WAAY;AAAA,YACZ;AAAA,YACA;AAAA,YACA,aAAW;AAAA,YACX,UAAW;AAAA;AAAA,QACZ;AAAA,MAEF;AAAA,MACA,eAAgB,MACf;AAAA,QAAC;AAAA;AAAA,UACA,gBAAiB;AAAA,UACjB;AAAA,UACA;AAAA;AAAA,MACD;AAAA;AAAA,EAEF;AAEF;AAEA,IAAO,yCAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { DOWN } from '@wordpress/keycodes';\nimport {\n\tToolbarButton,\n\tDropdown,\n\tAlignmentMatrixControl,\n} from '@wordpress/components';\n\nconst noop = () => {};\n\n/**\n * The alignment matrix control allows users to quickly adjust inner block alignment.\n *\n * @see https://github.com/WordPress/gutenberg/blob/HEAD/packages/block-editor/src/components/block-alignment-matrix-control/README.md\n *\n * @example\n * ```jsx\n * function Example() {\n * return (\n * <BlockControls>\n * <BlockAlignmentMatrixControl\n * label={ __( 'Change content position' ) }\n * value=\"center\"\n * onChange={ ( nextPosition ) =>\n * setAttributes( { contentPosition: nextPosition } )\n * }\n * />\n * </BlockControls>\n * );\n * }\n * ```\n *\n * @param {Object} props Component props.\n * @param {string} props.label Label for the control. Defaults to 'Change matrix alignment'.\n * @param {Function} props.onChange Function to execute upon change of matrix state.\n * @param {string} props.value Content alignment location. One of: 'center', 'center center',\n * 'center left', 'center right', 'top center', 'top left',\n * 'top right', 'bottom center', 'bottom left', 'bottom right'.\n * @param {boolean} props.isDisabled Whether the control should be disabled.\n * @return {Element} The BlockAlignmentMatrixControl component.\n */\nfunction BlockAlignmentMatrixControl( props ) {\n\tconst {\n\t\tlabel = __( 'Change matrix alignment' ),\n\t\tonChange = noop,\n\t\tvalue = 'center',\n\t\tisDisabled,\n\t} = props;\n\n\tconst icon = <AlignmentMatrixControl.Icon value={ value } />;\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ { placement: 'bottom-start' } }\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => {\n\t\t\t\tconst openOnArrowDown = ( event ) => {\n\t\t\t\t\tif ( ! isOpen && event.keyCode === DOWN ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tonToggle();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn (\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tonClick={ onToggle }\n\t\t\t\t\t\taria-haspopup=\"true\"\n\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\tonKeyDown={ openOnArrowDown }\n\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\ticon={ icon }\n\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\tdisabled={ isDisabled }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t<AlignmentMatrixControl onChange={ onChange } value={ value } />\n\t\t\t) }\n\t\t/>\n\t);\n}\n\nexport default BlockAlignmentMatrixControl;\n"],
5
+ "mappings": ";AAGA,SAAS,UAAU;AACnB,SAAS,YAAY;AACrB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AA2CO;AAzCd,IAAM,OAAO,MAAM;AAAC;AAiCpB,SAAS,4BAA6B,OAAQ;AAC7C,QAAM;AAAA,IACL,QAAQ,GAAI,yBAA0B;AAAA,IACtC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,EACD,IAAI;AAEJ,QAAM,OAAO,oBAAC,uBAAuB,MAAvB,EAA4B,OAAgB;AAE1D,SACC;AAAA,IAAC;AAAA;AAAA,MACA,cAAe,EAAE,WAAW,eAAe;AAAA,MAC3C,cAAe,CAAE,EAAE,UAAU,OAAO,MAAO;AAC1C,cAAM,kBAAkB,CAAE,UAAW;AACpC,cAAK,CAAE,UAAU,MAAM,YAAY,MAAO;AACzC,kBAAM,eAAe;AACrB,qBAAS;AAAA,UACV;AAAA,QACD;AAEA,eACC;AAAA,UAAC;AAAA;AAAA,YACA,SAAU;AAAA,YACV,iBAAc;AAAA,YACd,iBAAgB;AAAA,YAChB,WAAY;AAAA,YACZ;AAAA,YACA;AAAA,YACA,aAAW;AAAA,YACX,UAAW;AAAA;AAAA,QACZ;AAAA,MAEF;AAAA,MACA,eAAgB,MACf,oBAAC,0BAAuB,UAAsB,OAAgB;AAAA;AAAA,EAEhE;AAEF;AAEA,IAAO,yCAAQ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,150 @@
1
+ // packages/block-editor/src/components/block-bindings/attribute-control.js
2
+ import fastDeepEqual from "fast-deep-equal/es6";
3
+ import { __ } from "@wordpress/i18n";
4
+ import {
5
+ getBlockBindingsSource,
6
+ store as blocksStore
7
+ } from "@wordpress/blocks";
8
+ import {
9
+ __experimentalItem as Item,
10
+ __experimentalText as Text,
11
+ __experimentalToolsPanelItem as ToolsPanelItem,
12
+ __experimentalVStack as VStack,
13
+ privateApis as componentsPrivateApis
14
+ } from "@wordpress/components";
15
+ import { useSelect } from "@wordpress/data";
16
+ import { useContext } from "@wordpress/element";
17
+ import { useViewportMatch } from "@wordpress/compose";
18
+ import BlockContext from "../block-context";
19
+ import BlockBindingsSourceFieldsList from "./source-fields-list";
20
+ import useBlockBindingsUtils from "./use-block-bindings-utils";
21
+ import { unlock } from "../../lock-unlock";
22
+ import { store as blockEditorStore } from "../../store";
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ var { Menu } = unlock(componentsPrivateApis);
25
+ function BlockBindingsAttributeControl({
26
+ attribute,
27
+ binding,
28
+ blockName
29
+ }) {
30
+ const { updateBlockBindings } = useBlockBindingsUtils();
31
+ const isMobile = useViewportMatch("medium", "<");
32
+ const blockContext = useContext(BlockContext);
33
+ const compatibleFields = useSelect(
34
+ (select) => {
35
+ const {
36
+ getAllBlockBindingsSources,
37
+ getBlockBindingsSourceFieldsList,
38
+ getBlockType
39
+ } = unlock(select(blocksStore));
40
+ const _attributeType = getBlockType(blockName).attributes?.[attribute]?.type;
41
+ const attributeType = _attributeType === "rich-text" ? "string" : _attributeType;
42
+ const sourceFields = {};
43
+ Object.entries(getAllBlockBindingsSources()).forEach(
44
+ ([sourceName, source2]) => {
45
+ const fieldsList = getBlockBindingsSourceFieldsList(
46
+ source2,
47
+ blockContext
48
+ );
49
+ if (!fieldsList?.length) {
50
+ return;
51
+ }
52
+ const compatibleFieldsList = fieldsList.filter(
53
+ (field) => field.type === attributeType
54
+ );
55
+ if (compatibleFieldsList.length) {
56
+ sourceFields[sourceName] = compatibleFieldsList;
57
+ }
58
+ }
59
+ );
60
+ return sourceFields;
61
+ },
62
+ [attribute, blockName, blockContext]
63
+ );
64
+ const { canUpdateBlockBindings } = useSelect((select) => ({
65
+ canUpdateBlockBindings: select(blockEditorStore).getSettings().canUpdateBlockBindings
66
+ }));
67
+ const hasCompatibleFields = Object.keys(compatibleFields).length > 0;
68
+ const isAttributeReadOnly = !canUpdateBlockBindings || !hasCompatibleFields;
69
+ const { source: boundSourceName, args } = binding || {};
70
+ const source = getBlockBindingsSource(boundSourceName);
71
+ let displayText;
72
+ let isValid = true;
73
+ if (binding === void 0) {
74
+ if (!hasCompatibleFields) {
75
+ displayText = __("No sources available");
76
+ } else {
77
+ displayText = __("Not connected");
78
+ }
79
+ isValid = true;
80
+ } else if (!source) {
81
+ isValid = false;
82
+ displayText = __("Source not registered");
83
+ } else {
84
+ displayText = compatibleFields?.[boundSourceName]?.find(
85
+ (field) => fastDeepEqual(field.args, args)
86
+ )?.label || source?.label || boundSourceName;
87
+ }
88
+ return /* @__PURE__ */ jsx(
89
+ ToolsPanelItem,
90
+ {
91
+ hasValue: () => !!binding,
92
+ label: attribute,
93
+ onDeselect: !!hasCompatibleFields && (() => {
94
+ updateBlockBindings({
95
+ [attribute]: void 0
96
+ });
97
+ }),
98
+ children: /* @__PURE__ */ jsxs(Menu, { placement: isMobile ? "bottom-start" : "left-start", children: [
99
+ /* @__PURE__ */ jsx(
100
+ Menu.TriggerButton,
101
+ {
102
+ render: /* @__PURE__ */ jsx(Item, {}),
103
+ disabled: !hasCompatibleFields,
104
+ children: /* @__PURE__ */ jsxs(
105
+ VStack,
106
+ {
107
+ className: "block-editor-bindings__item",
108
+ spacing: 0,
109
+ children: [
110
+ /* @__PURE__ */ jsx(Text, { truncate: true, children: attribute }),
111
+ /* @__PURE__ */ jsx(
112
+ Text,
113
+ {
114
+ truncate: true,
115
+ variant: isValid ? "muted" : void 0,
116
+ isDestructive: !isValid,
117
+ children: displayText
118
+ }
119
+ )
120
+ ]
121
+ }
122
+ )
123
+ }
124
+ ),
125
+ !isAttributeReadOnly && /* @__PURE__ */ jsx(Menu.Popover, { gutter: isMobile ? 8 : 36, children: /* @__PURE__ */ jsx(
126
+ Menu,
127
+ {
128
+ placement: isMobile ? "bottom-start" : "left-start",
129
+ children: Object.entries(compatibleFields).map(
130
+ ([sourceKey, fields]) => /* @__PURE__ */ jsx(
131
+ BlockBindingsSourceFieldsList,
132
+ {
133
+ args: binding?.args,
134
+ attribute,
135
+ sourceKey,
136
+ fields
137
+ },
138
+ sourceKey
139
+ )
140
+ )
141
+ }
142
+ ) })
143
+ ] })
144
+ }
145
+ );
146
+ }
147
+ export {
148
+ BlockBindingsAttributeControl as default
149
+ };
150
+ //# sourceMappingURL=attribute-control.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/block-bindings/attribute-control.js"],
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport {\n\tgetBlockBindingsSource,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\nimport {\n\t__experimentalItem as Item,\n\t__experimentalText as Text,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n\t__experimentalVStack as VStack,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useContext } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport BlockContext from '../block-context';\nimport BlockBindingsSourceFieldsList from './source-fields-list';\nimport useBlockBindingsUtils from './use-block-bindings-utils';\nimport { unlock } from '../../lock-unlock';\nimport { store as blockEditorStore } from '../../store';\n\nconst { Menu } = unlock( componentsPrivateApis );\n\nexport default function BlockBindingsAttributeControl( {\n\tattribute,\n\tbinding,\n\tblockName,\n} ) {\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\n\tconst blockContext = useContext( BlockContext );\n\tconst compatibleFields = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetAllBlockBindingsSources,\n\t\t\t\tgetBlockBindingsSourceFieldsList,\n\t\t\t\tgetBlockType,\n\t\t\t} = unlock( select( blocksStore ) );\n\n\t\t\tconst _attributeType =\n\t\t\t\tgetBlockType( blockName ).attributes?.[ attribute ]?.type;\n\t\t\tconst attributeType =\n\t\t\t\t_attributeType === 'rich-text' ? 'string' : _attributeType;\n\n\t\t\tconst sourceFields = {};\n\t\t\tObject.entries( getAllBlockBindingsSources() ).forEach(\n\t\t\t\t( [ sourceName, source ] ) => {\n\t\t\t\t\tconst fieldsList = getBlockBindingsSourceFieldsList(\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tblockContext\n\t\t\t\t\t);\n\t\t\t\t\tif ( ! fieldsList?.length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst compatibleFieldsList = fieldsList.filter(\n\t\t\t\t\t\t( field ) => field.type === attributeType\n\t\t\t\t\t);\n\t\t\t\t\tif ( compatibleFieldsList.length ) {\n\t\t\t\t\t\tsourceFields[ sourceName ] = compatibleFieldsList;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\treturn sourceFields;\n\t\t},\n\t\t[ attribute, blockName, blockContext ]\n\t);\n\n\tconst { canUpdateBlockBindings } = useSelect( ( select ) => ( {\n\t\tcanUpdateBlockBindings:\n\t\t\tselect( blockEditorStore ).getSettings().canUpdateBlockBindings,\n\t} ) );\n\n\tconst hasCompatibleFields = Object.keys( compatibleFields ).length > 0;\n\n\t// Lock the UI when the user can't update bindings or there are no fields to connect to.\n\tconst isAttributeReadOnly =\n\t\t! canUpdateBlockBindings || ! hasCompatibleFields;\n\n\tconst { source: boundSourceName, args } = binding || {};\n\tconst source = getBlockBindingsSource( boundSourceName );\n\n\tlet displayText;\n\tlet isValid = true;\n\n\tif ( binding === undefined ) {\n\t\tif ( ! hasCompatibleFields ) {\n\t\t\tdisplayText = __( 'No sources available' );\n\t\t} else {\n\t\t\tdisplayText = __( 'Not connected' );\n\t\t}\n\t\tisValid = true;\n\t} else if ( ! source ) {\n\t\t// If there's a binding but the source is not found, it's invalid.\n\t\tisValid = false;\n\t\tdisplayText = __( 'Source not registered' );\n\t} else {\n\t\tdisplayText =\n\t\t\tcompatibleFields?.[ boundSourceName ]?.find( ( field ) =>\n\t\t\t\tfastDeepEqual( field.args, args )\n\t\t\t)?.label ||\n\t\t\tsource?.label ||\n\t\t\tboundSourceName;\n\t}\n\n\treturn (\n\t\t<ToolsPanelItem\n\t\t\thasValue={ () => !! binding }\n\t\t\tlabel={ attribute }\n\t\t\tonDeselect={\n\t\t\t\t!! hasCompatibleFields &&\n\t\t\t\t( () => {\n\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t[ attribute ]: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t}\n\t\t>\n\t\t\t<Menu placement={ isMobile ? 'bottom-start' : 'left-start' }>\n\t\t\t\t<Menu.TriggerButton\n\t\t\t\t\trender={ <Item /> }\n\t\t\t\t\tdisabled={ ! hasCompatibleFields }\n\t\t\t\t>\n\t\t\t\t\t<VStack\n\t\t\t\t\t\tclassName=\"block-editor-bindings__item\"\n\t\t\t\t\t\tspacing={ 0 }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text truncate>{ attribute }</Text>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttruncate\n\t\t\t\t\t\t\tvariant={ isValid ? 'muted' : undefined }\n\t\t\t\t\t\t\tisDestructive={ ! isValid }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ displayText }\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</VStack>\n\t\t\t\t</Menu.TriggerButton>\n\t\t\t\t{ ! isAttributeReadOnly && (\n\t\t\t\t\t<Menu.Popover gutter={ isMobile ? 8 : 36 }>\n\t\t\t\t\t\t<Menu\n\t\t\t\t\t\t\tplacement={\n\t\t\t\t\t\t\t\tisMobile ? 'bottom-start' : 'left-start'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ Object.entries( compatibleFields ).map(\n\t\t\t\t\t\t\t\t( [ sourceKey, fields ] ) => (\n\t\t\t\t\t\t\t\t\t<BlockBindingsSourceFieldsList\n\t\t\t\t\t\t\t\t\t\tkey={ sourceKey }\n\t\t\t\t\t\t\t\t\t\targs={ binding?.args }\n\t\t\t\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\t\t\t\tsourceKey={ sourceKey }\n\t\t\t\t\t\t\t\t\t\tfields={ fields }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Menu>\n\t\t\t\t\t</Menu.Popover>\n\t\t\t\t) }\n\t\t\t</Menu>\n\t\t</ToolsPanelItem>\n\t);\n}\n"],
5
+ "mappings": ";AAGA,OAAO,mBAAmB;AAK1B,SAAS,UAAU;AACnB;AAAA,EACC;AAAA,EACA,SAAS;AAAA,OACH;AACP;AAAA,EACC,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,gCAAgC;AAAA,EAChC,wBAAwB;AAAA,EACxB,eAAe;AAAA,OACT;AACP,SAAS,iBAAiB;AAC1B,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AAKjC,OAAO,kBAAkB;AACzB,OAAO,mCAAmC;AAC1C,OAAO,2BAA2B;AAClC,SAAS,cAAc;AACvB,SAAS,SAAS,wBAAwB;AAqG5B,cAGT,YAHS;AAnGd,IAAM,EAAE,KAAK,IAAI,OAAQ,qBAAsB;AAEhC,SAAR,8BAAgD;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,EAAE,oBAAoB,IAAI,sBAAsB;AACtD,QAAM,WAAW,iBAAkB,UAAU,GAAI;AAEjD,QAAM,eAAe,WAAY,YAAa;AAC9C,QAAM,mBAAmB;AAAA,IACxB,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,OAAQ,WAAY,CAAE;AAElC,YAAM,iBACL,aAAc,SAAU,EAAE,aAAc,SAAU,GAAG;AACtD,YAAM,gBACL,mBAAmB,cAAc,WAAW;AAE7C,YAAM,eAAe,CAAC;AACtB,aAAO,QAAS,2BAA2B,CAAE,EAAE;AAAA,QAC9C,CAAE,CAAE,YAAYA,OAAO,MAAO;AAC7B,gBAAM,aAAa;AAAA,YAClBA;AAAA,YACA;AAAA,UACD;AACA,cAAK,CAAE,YAAY,QAAS;AAC3B;AAAA,UACD;AACA,gBAAM,uBAAuB,WAAW;AAAA,YACvC,CAAE,UAAW,MAAM,SAAS;AAAA,UAC7B;AACA,cAAK,qBAAqB,QAAS;AAClC,yBAAc,UAAW,IAAI;AAAA,UAC9B;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAAA,IACA,CAAE,WAAW,WAAW,YAAa;AAAA,EACtC;AAEA,QAAM,EAAE,uBAAuB,IAAI,UAAW,CAAE,YAAc;AAAA,IAC7D,wBACC,OAAQ,gBAAiB,EAAE,YAAY,EAAE;AAAA,EAC3C,EAAI;AAEJ,QAAM,sBAAsB,OAAO,KAAM,gBAAiB,EAAE,SAAS;AAGrE,QAAM,sBACL,CAAE,0BAA0B,CAAE;AAE/B,QAAM,EAAE,QAAQ,iBAAiB,KAAK,IAAI,WAAW,CAAC;AACtD,QAAM,SAAS,uBAAwB,eAAgB;AAEvD,MAAI;AACJ,MAAI,UAAU;AAEd,MAAK,YAAY,QAAY;AAC5B,QAAK,CAAE,qBAAsB;AAC5B,oBAAc,GAAI,sBAAuB;AAAA,IAC1C,OAAO;AACN,oBAAc,GAAI,eAAgB;AAAA,IACnC;AACA,cAAU;AAAA,EACX,WAAY,CAAE,QAAS;AAEtB,cAAU;AACV,kBAAc,GAAI,uBAAwB;AAAA,EAC3C,OAAO;AACN,kBACC,mBAAoB,eAAgB,GAAG;AAAA,MAAM,CAAE,UAC9C,cAAe,MAAM,MAAM,IAAK;AAAA,IACjC,GAAG,SACH,QAAQ,SACR;AAAA,EACF;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAW,MAAM,CAAC,CAAE;AAAA,MACpB,OAAQ;AAAA,MACR,YACC,CAAC,CAAE,wBACD,MAAM;AACP,4BAAqB;AAAA,UACpB,CAAE,SAAU,GAAG;AAAA,QAChB,CAAE;AAAA,MACH;AAAA,MAGD,+BAAC,QAAK,WAAY,WAAW,iBAAiB,cAC7C;AAAA;AAAA,UAAC,KAAK;AAAA,UAAL;AAAA,YACA,QAAS,oBAAC,QAAK;AAAA,YACf,UAAW,CAAE;AAAA,YAEb;AAAA,cAAC;AAAA;AAAA,gBACA,WAAU;AAAA,gBACV,SAAU;AAAA,gBAEV;AAAA,sCAAC,QAAK,UAAQ,MAAG,qBAAW;AAAA,kBAC5B;AAAA,oBAAC;AAAA;AAAA,sBACA,UAAQ;AAAA,sBACR,SAAU,UAAU,UAAU;AAAA,sBAC9B,eAAgB,CAAE;AAAA,sBAEhB;AAAA;AAAA,kBACH;AAAA;AAAA;AAAA,YACD;AAAA;AAAA,QACD;AAAA,QACE,CAAE,uBACH,oBAAC,KAAK,SAAL,EAAa,QAAS,WAAW,IAAI,IACrC;AAAA,UAAC;AAAA;AAAA,YACA,WACC,WAAW,iBAAiB;AAAA,YAG3B,iBAAO,QAAS,gBAAiB,EAAE;AAAA,cACpC,CAAE,CAAE,WAAW,MAAO,MACrB;AAAA,gBAAC;AAAA;AAAA,kBAEA,MAAO,SAAS;AAAA,kBAChB;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,gBAJM;AAAA,cAKP;AAAA,YAEF;AAAA;AAAA,QACD,GACD;AAAA,SAEF;AAAA;AAAA,EACD;AAEF;",
6
+ "names": ["source"]
7
+ }
@@ -0,0 +1,10 @@
1
+ // packages/block-editor/src/components/block-bindings/index.js
2
+ import { default as default2 } from "./attribute-control";
3
+ import { default as default3 } from "./source-fields-list";
4
+ import { default as default4 } from "./use-block-bindings-utils";
5
+ export {
6
+ default2 as BlockBindingsAttributeControl,
7
+ default3 as BlockBindingsSourceFieldsList,
8
+ default4 as useBlockBindingsUtils
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/block-bindings/index.js"],
4
+ "sourcesContent": ["/**\n * Internal dependencies\n */\nexport { default as BlockBindingsAttributeControl } from './attribute-control';\nexport { default as BlockBindingsSourceFieldsList } from './source-fields-list';\nexport { default as useBlockBindingsUtils } from './use-block-bindings-utils';\n"],
5
+ "mappings": ";AAGA,SAAoB,WAAXA,gBAAgD;AACzD,SAAoB,WAAXA,gBAAgD;AACzD,SAAoB,WAAXA,gBAAwC;",
6
+ "names": ["default"]
7
+ }
@@ -0,0 +1,104 @@
1
+ // packages/block-editor/src/components/block-bindings/source-fields-list.js
2
+ import fastDeepEqual from "fast-deep-equal/es6";
3
+ import { getBlockBindingsSource } from "@wordpress/blocks";
4
+ import { privateApis as componentsPrivateApis } from "@wordpress/components";
5
+ import { useSelect } from "@wordpress/data";
6
+ import { useContext, useMemo } from "@wordpress/element";
7
+ import { useViewportMatch } from "@wordpress/compose";
8
+ import useBlockBindingsUtils from "./use-block-bindings-utils";
9
+ import { unlock } from "../../lock-unlock";
10
+ import BlockContext from "../block-context";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ var { Menu } = unlock(componentsPrivateApis);
13
+ function BlockBindingsSourceFieldsListItem({
14
+ args,
15
+ attribute,
16
+ field,
17
+ source,
18
+ sourceKey
19
+ }) {
20
+ const itemBindings = useMemo(
21
+ () => ({
22
+ source: sourceKey,
23
+ args: field.args || {
24
+ key: field.key
25
+ }
26
+ }),
27
+ [field.args, field.key, sourceKey]
28
+ );
29
+ const blockContext = useContext(BlockContext);
30
+ const values = useSelect(
31
+ (select) => source.getValues({
32
+ select,
33
+ context: blockContext,
34
+ bindings: {
35
+ [attribute]: itemBindings
36
+ }
37
+ }),
38
+ [attribute, blockContext, itemBindings, source]
39
+ );
40
+ const { updateBlockBindings } = useBlockBindingsUtils();
41
+ return /* @__PURE__ */ jsxs(
42
+ Menu.CheckboxItem,
43
+ {
44
+ onChange: () => {
45
+ const isCurrentlySelected = fastDeepEqual(args, field.args) ?? // Deprecate key dependency in 7.0.
46
+ field.key === args?.key;
47
+ if (isCurrentlySelected) {
48
+ updateBlockBindings({
49
+ [attribute]: void 0
50
+ });
51
+ } else {
52
+ updateBlockBindings({
53
+ [attribute]: itemBindings
54
+ });
55
+ }
56
+ },
57
+ name: attribute + "-binding",
58
+ value: values[attribute],
59
+ checked: fastDeepEqual(args, field.args) ?? // Deprecate key dependency in 7.0.
60
+ field.key === args?.key,
61
+ children: [
62
+ /* @__PURE__ */ jsx(Menu.ItemLabel, { children: field.label }),
63
+ /* @__PURE__ */ jsx(Menu.ItemHelpText, { children: values[attribute] })
64
+ ]
65
+ }
66
+ );
67
+ }
68
+ function BlockBindingsSourceFieldsList({
69
+ args,
70
+ attribute,
71
+ sourceKey,
72
+ fields
73
+ }) {
74
+ const isMobile = useViewportMatch("medium", "<");
75
+ if (!fields || fields.length === 0) {
76
+ return null;
77
+ }
78
+ const source = getBlockBindingsSource(sourceKey);
79
+ return /* @__PURE__ */ jsxs(
80
+ Menu,
81
+ {
82
+ placement: isMobile ? "bottom-start" : "left-start",
83
+ children: [
84
+ /* @__PURE__ */ jsx(Menu.SubmenuTriggerItem, { children: /* @__PURE__ */ jsx(Menu.ItemLabel, { children: source.label }) }),
85
+ /* @__PURE__ */ jsx(Menu.Popover, { gutter: 8, children: /* @__PURE__ */ jsx(Menu.Group, { children: fields.map((field) => /* @__PURE__ */ jsx(
86
+ BlockBindingsSourceFieldsListItem,
87
+ {
88
+ args,
89
+ attribute,
90
+ field,
91
+ source,
92
+ sourceKey
93
+ },
94
+ sourceKey + JSON.stringify(field.args) || field.key
95
+ )) }) })
96
+ ]
97
+ },
98
+ sourceKey
99
+ );
100
+ }
101
+ export {
102
+ BlockBindingsSourceFieldsList as default
103
+ };
104
+ //# sourceMappingURL=source-fields-list.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/block-bindings/source-fields-list.js"],
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport fastDeepEqual from 'fast-deep-equal/es6';\n\n/**\n * WordPress dependencies\n */\nimport { getBlockBindingsSource } from '@wordpress/blocks';\nimport { privateApis as componentsPrivateApis } from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { useContext, useMemo } from '@wordpress/element';\nimport { useViewportMatch } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport useBlockBindingsUtils from './use-block-bindings-utils';\nimport { unlock } from '../../lock-unlock';\nimport BlockContext from '../block-context';\n\nconst { Menu } = unlock( componentsPrivateApis );\n\nfunction BlockBindingsSourceFieldsListItem( {\n\targs,\n\tattribute,\n\tfield,\n\tsource,\n\tsourceKey,\n} ) {\n\tconst itemBindings = useMemo(\n\t\t() => ( {\n\t\t\tsource: sourceKey,\n\t\t\targs: field.args || {\n\t\t\t\tkey: field.key,\n\t\t\t},\n\t\t} ),\n\t\t[ field.args, field.key, sourceKey ]\n\t);\n\n\tconst blockContext = useContext( BlockContext );\n\tconst values = useSelect(\n\t\t( select ) =>\n\t\t\tsource.getValues( {\n\t\t\t\tselect,\n\t\t\t\tcontext: blockContext,\n\t\t\t\tbindings: {\n\t\t\t\t\t[ attribute ]: itemBindings,\n\t\t\t\t},\n\t\t\t} ),\n\t\t[ attribute, blockContext, itemBindings, source ]\n\t);\n\tconst { updateBlockBindings } = useBlockBindingsUtils();\n\n\treturn (\n\t\t<Menu.CheckboxItem\n\t\t\tonChange={ () => {\n\t\t\t\tconst isCurrentlySelected =\n\t\t\t\t\tfastDeepEqual( args, field.args ) ??\n\t\t\t\t\t// Deprecate key dependency in 7.0.\n\t\t\t\t\tfield.key === args?.key;\n\n\t\t\t\tif ( isCurrentlySelected ) {\n\t\t\t\t\t// Unset if the same field is selected again.\n\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t[ attribute ]: undefined,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tupdateBlockBindings( {\n\t\t\t\t\t\t[ attribute ]: itemBindings,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} }\n\t\t\tname={ attribute + '-binding' }\n\t\t\tvalue={ values[ attribute ] }\n\t\t\tchecked={\n\t\t\t\tfastDeepEqual( args, field.args ) ??\n\t\t\t\t// Deprecate key dependency in 7.0.\n\t\t\t\tfield.key === args?.key\n\t\t\t}\n\t\t>\n\t\t\t<Menu.ItemLabel>{ field.label }</Menu.ItemLabel>\n\t\t\t<Menu.ItemHelpText>{ values[ attribute ] }</Menu.ItemHelpText>\n\t\t</Menu.CheckboxItem>\n\t);\n}\n\nexport default function BlockBindingsSourceFieldsList( {\n\targs,\n\tattribute,\n\tsourceKey,\n\tfields,\n} ) {\n\tconst isMobile = useViewportMatch( 'medium', '<' );\n\n\t// Only render source if it has compatible fields.\n\tif ( ! fields || fields.length === 0 ) {\n\t\treturn null;\n\t}\n\n\tconst source = getBlockBindingsSource( sourceKey );\n\n\treturn (\n\t\t<Menu\n\t\t\tkey={ sourceKey }\n\t\t\tplacement={ isMobile ? 'bottom-start' : 'left-start' }\n\t\t>\n\t\t\t<Menu.SubmenuTriggerItem>\n\t\t\t\t<Menu.ItemLabel>{ source.label }</Menu.ItemLabel>\n\t\t\t</Menu.SubmenuTriggerItem>\n\t\t\t<Menu.Popover gutter={ 8 }>\n\t\t\t\t<Menu.Group>\n\t\t\t\t\t{ fields.map( ( field ) => (\n\t\t\t\t\t\t<BlockBindingsSourceFieldsListItem\n\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\tsourceKey + JSON.stringify( field.args ) ||\n\t\t\t\t\t\t\t\tfield.key\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\targs={ args }\n\t\t\t\t\t\t\tattribute={ attribute }\n\t\t\t\t\t\t\tfield={ field }\n\t\t\t\t\t\t\tsource={ source }\n\t\t\t\t\t\t\tsourceKey={ sourceKey }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t</Menu.Group>\n\t\t\t</Menu.Popover>\n\t\t</Menu>\n\t);\n}\n"],
5
+ "mappings": ";AAGA,OAAO,mBAAmB;AAK1B,SAAS,8BAA8B;AACvC,SAAS,eAAe,6BAA6B;AACrD,SAAS,iBAAiB;AAC1B,SAAS,YAAY,eAAe;AACpC,SAAS,wBAAwB;AAKjC,OAAO,2BAA2B;AAClC,SAAS,cAAc;AACvB,OAAO,kBAAkB;AAoCvB,SA0BC,KA1BD;AAlCF,IAAM,EAAE,KAAK,IAAI,OAAQ,qBAAsB;AAE/C,SAAS,kCAAmC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,eAAe;AAAA,IACpB,OAAQ;AAAA,MACP,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ;AAAA,QACnB,KAAK,MAAM;AAAA,MACZ;AAAA,IACD;AAAA,IACA,CAAE,MAAM,MAAM,MAAM,KAAK,SAAU;AAAA,EACpC;AAEA,QAAM,eAAe,WAAY,YAAa;AAC9C,QAAM,SAAS;AAAA,IACd,CAAE,WACD,OAAO,UAAW;AAAA,MACjB;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,QACT,CAAE,SAAU,GAAG;AAAA,MAChB;AAAA,IACD,CAAE;AAAA,IACH,CAAE,WAAW,cAAc,cAAc,MAAO;AAAA,EACjD;AACA,QAAM,EAAE,oBAAoB,IAAI,sBAAsB;AAEtD,SACC;AAAA,IAAC,KAAK;AAAA,IAAL;AAAA,MACA,UAAW,MAAM;AAChB,cAAM,sBACL,cAAe,MAAM,MAAM,IAAK;AAAA,QAEhC,MAAM,QAAQ,MAAM;AAErB,YAAK,qBAAsB;AAE1B,8BAAqB;AAAA,YACpB,CAAE,SAAU,GAAG;AAAA,UAChB,CAAE;AAAA,QACH,OAAO;AACN,8BAAqB;AAAA,YACpB,CAAE,SAAU,GAAG;AAAA,UAChB,CAAE;AAAA,QACH;AAAA,MACD;AAAA,MACA,MAAO,YAAY;AAAA,MACnB,OAAQ,OAAQ,SAAU;AAAA,MAC1B,SACC,cAAe,MAAM,MAAM,IAAK;AAAA,MAEhC,MAAM,QAAQ,MAAM;AAAA,MAGrB;AAAA,4BAAC,KAAK,WAAL,EAAiB,gBAAM,OAAO;AAAA,QAC/B,oBAAC,KAAK,cAAL,EAAoB,iBAAQ,SAAU,GAAG;AAAA;AAAA;AAAA,EAC3C;AAEF;AAEe,SAAR,8BAAgD;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM,WAAW,iBAAkB,UAAU,GAAI;AAGjD,MAAK,CAAE,UAAU,OAAO,WAAW,GAAI;AACtC,WAAO;AAAA,EACR;AAEA,QAAM,SAAS,uBAAwB,SAAU;AAEjD,SACC;AAAA,IAAC;AAAA;AAAA,MAEA,WAAY,WAAW,iBAAiB;AAAA,MAExC;AAAA,4BAAC,KAAK,oBAAL,EACA,8BAAC,KAAK,WAAL,EAAiB,iBAAO,OAAO,GACjC;AAAA,QACA,oBAAC,KAAK,SAAL,EAAa,QAAS,GACtB,8BAAC,KAAK,OAAL,EACE,iBAAO,IAAK,CAAE,UACf;AAAA,UAAC;AAAA;AAAA,YAKA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAPC,YAAY,KAAK,UAAW,MAAM,IAAK,KACvC,MAAM;AAAA,QAOR,CACC,GACH,GACD;AAAA;AAAA;AAAA,IAtBM;AAAA,EAuBP;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,45 @@
1
+ // packages/block-editor/src/components/block-bindings/use-block-bindings-utils.js
2
+ import { useDispatch, useRegistry } from "@wordpress/data";
3
+ import { store as blockEditorStore } from "../../store";
4
+ import { useBlockEditContext } from "../block-edit";
5
+ function isObjectEmpty(object) {
6
+ return !object || Object.keys(object).length === 0;
7
+ }
8
+ function useBlockBindingsUtils(clientId) {
9
+ const { clientId: contextClientId } = useBlockEditContext();
10
+ const blockClientId = clientId || contextClientId;
11
+ const { updateBlockAttributes } = useDispatch(blockEditorStore);
12
+ const { getBlockAttributes } = useRegistry().select(blockEditorStore);
13
+ const updateBlockBindings = (bindings) => {
14
+ const { metadata: { bindings: currentBindings, ...metadata } = {} } = getBlockAttributes(blockClientId);
15
+ const newBindings = { ...currentBindings };
16
+ Object.entries(bindings).forEach(([attribute, binding]) => {
17
+ if (!binding && newBindings[attribute]) {
18
+ delete newBindings[attribute];
19
+ return;
20
+ }
21
+ newBindings[attribute] = binding;
22
+ });
23
+ const newMetadata = {
24
+ ...metadata,
25
+ bindings: newBindings
26
+ };
27
+ if (isObjectEmpty(newMetadata.bindings)) {
28
+ delete newMetadata.bindings;
29
+ }
30
+ updateBlockAttributes(blockClientId, {
31
+ metadata: isObjectEmpty(newMetadata) ? void 0 : newMetadata
32
+ });
33
+ };
34
+ const removeAllBlockBindings = () => {
35
+ const { metadata: { bindings, ...metadata } = {} } = getBlockAttributes(blockClientId);
36
+ updateBlockAttributes(blockClientId, {
37
+ metadata: isObjectEmpty(metadata) ? void 0 : metadata
38
+ });
39
+ };
40
+ return { updateBlockBindings, removeAllBlockBindings };
41
+ }
42
+ export {
43
+ useBlockBindingsUtils as default
44
+ };
45
+ //# sourceMappingURL=use-block-bindings-utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/block-bindings/use-block-bindings-utils.js"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useDispatch, useRegistry } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport { useBlockEditContext } from '../block-edit';\n\n/**\n * Checks if the given object is empty.\n *\n * @param {?Object} object The object to check.\n *\n * @return {boolean} Whether the object is empty.\n */\nfunction isObjectEmpty( object ) {\n\treturn ! object || Object.keys( object ).length === 0;\n}\n\n/**\n * Contains utils to update the block `bindings` metadata.\n *\n * @typedef {Object} WPBlockBindingsUtils\n *\n * @property {Function} updateBlockBindings Updates the value of the bindings connected to block attributes.\n * @property {Function} removeAllBlockBindings Removes the bindings property of the `metadata` attribute.\n */\n\n/**\n * Retrieves the existing utils needed to update the block `bindings` metadata.\n * They can be used to create, modify, or remove connections from the existing block attributes.\n *\n * It contains the following utils:\n * - `updateBlockBindings`: Updates the value of the bindings connected to block attributes. It can be used to remove a specific binding by setting the value to `undefined`.\n * - `removeAllBlockBindings`: Removes the bindings property of the `metadata` attribute.\n *\n * @since 6.7.0 Introduced in WordPress core.\n *\n * @param {?string} clientId Optional block client ID. If not set, it will use the current block client ID from the context.\n *\n * @return {?WPBlockBindingsUtils} Object containing the block bindings utils.\n *\n * @example\n * ```js\n * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n * const { updateBlockBindings, removeAllBlockBindings } = useBlockBindingsUtils();\n *\n * // Update url and alt attributes.\n * updateBlockBindings( {\n * url: {\n * source: 'core/post-meta',\n * args: {\n * key: 'url_custom_field',\n * },\n * },\n * alt: {\n * source: 'core/post-meta',\n * args: {\n * key: 'text_custom_field',\n * },\n * },\n * } );\n *\n * // Remove binding from url attribute.\n * updateBlockBindings( { url: undefined } );\n *\n * // Remove bindings from all attributes.\n * removeAllBlockBindings();\n * ```\n */\nexport default function useBlockBindingsUtils( clientId ) {\n\tconst { clientId: contextClientId } = useBlockEditContext();\n\tconst blockClientId = clientId || contextClientId;\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst { getBlockAttributes } = useRegistry().select( blockEditorStore );\n\n\t/**\n\t * Updates the value of the bindings connected to block attributes.\n\t * It removes the binding when the new value is `undefined`.\n\t *\n\t * @param {Object} bindings Bindings including the attributes to update and the new object.\n\t * @param {string} bindings.source The source name to connect to.\n\t * @param {Object} [bindings.args] Object containing the arguments needed by the source.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { updateBlockBindings } = useBlockBindingsUtils();\n\t * updateBlockBindings( {\n\t * url: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'url_custom_field',\n\t * },\n\t * \t },\n\t * alt: {\n\t * source: 'core/post-meta',\n\t * args: {\n\t * key: 'text_custom_field',\n\t * },\n\t * \t }\n\t * } );\n\t * ```\n\t */\n\tconst updateBlockBindings = ( bindings ) => {\n\t\tconst { metadata: { bindings: currentBindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( blockClientId );\n\t\tconst newBindings = { ...currentBindings };\n\n\t\tObject.entries( bindings ).forEach( ( [ attribute, binding ] ) => {\n\t\t\tif ( ! binding && newBindings[ attribute ] ) {\n\t\t\t\tdelete newBindings[ attribute ];\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnewBindings[ attribute ] = binding;\n\t\t} );\n\n\t\tconst newMetadata = {\n\t\t\t...metadata,\n\t\t\tbindings: newBindings,\n\t\t};\n\n\t\tif ( isObjectEmpty( newMetadata.bindings ) ) {\n\t\t\tdelete newMetadata.bindings;\n\t\t}\n\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\tmetadata: isObjectEmpty( newMetadata ) ? undefined : newMetadata,\n\t\t} );\n\t};\n\n\t/**\n\t * Removes the bindings property of the `metadata` attribute.\n\t *\n\t * @example\n\t * ```js\n\t * import { useBlockBindingsUtils } from '@wordpress/block-editor'\n\t *\n\t * const { removeAllBlockBindings } = useBlockBindingsUtils();\n\t * removeAllBlockBindings();\n\t * ```\n\t */\n\tconst removeAllBlockBindings = () => {\n\t\tconst { metadata: { bindings, ...metadata } = {} } =\n\t\t\tgetBlockAttributes( blockClientId );\n\t\tupdateBlockAttributes( blockClientId, {\n\t\t\tmetadata: isObjectEmpty( metadata ) ? undefined : metadata,\n\t\t} );\n\t};\n\n\treturn { updateBlockBindings, removeAllBlockBindings };\n}\n"],
5
+ "mappings": ";AAGA,SAAS,aAAa,mBAAmB;AAKzC,SAAS,SAAS,wBAAwB;AAC1C,SAAS,2BAA2B;AASpC,SAAS,cAAe,QAAS;AAChC,SAAO,CAAE,UAAU,OAAO,KAAM,MAAO,EAAE,WAAW;AACrD;AAqDe,SAAR,sBAAwC,UAAW;AACzD,QAAM,EAAE,UAAU,gBAAgB,IAAI,oBAAoB;AAC1D,QAAM,gBAAgB,YAAY;AAClC,QAAM,EAAE,sBAAsB,IAAI,YAAa,gBAAiB;AAChE,QAAM,EAAE,mBAAmB,IAAI,YAAY,EAAE,OAAQ,gBAAiB;AA+BtE,QAAM,sBAAsB,CAAE,aAAc;AAC3C,UAAM,EAAE,UAAU,EAAE,UAAU,iBAAiB,GAAG,SAAS,IAAI,CAAC,EAAE,IACjE,mBAAoB,aAAc;AACnC,UAAM,cAAc,EAAE,GAAG,gBAAgB;AAEzC,WAAO,QAAS,QAAS,EAAE,QAAS,CAAE,CAAE,WAAW,OAAQ,MAAO;AACjE,UAAK,CAAE,WAAW,YAAa,SAAU,GAAI;AAC5C,eAAO,YAAa,SAAU;AAC9B;AAAA,MACD;AACA,kBAAa,SAAU,IAAI;AAAA,IAC5B,CAAE;AAEF,UAAM,cAAc;AAAA,MACnB,GAAG;AAAA,MACH,UAAU;AAAA,IACX;AAEA,QAAK,cAAe,YAAY,QAAS,GAAI;AAC5C,aAAO,YAAY;AAAA,IACpB;AAEA,0BAAuB,eAAe;AAAA,MACrC,UAAU,cAAe,WAAY,IAAI,SAAY;AAAA,IACtD,CAAE;AAAA,EACH;AAaA,QAAM,yBAAyB,MAAM;AACpC,UAAM,EAAE,UAAU,EAAE,UAAU,GAAG,SAAS,IAAI,CAAC,EAAE,IAChD,mBAAoB,aAAc;AACnC,0BAAuB,eAAe;AAAA,MACrC,UAAU,cAAe,QAAS,IAAI,SAAY;AAAA,IACnD,CAAE;AAAA,EACH;AAEA,SAAO,EAAE,qBAAqB,uBAAuB;AACtD;",
6
+ "names": []
7
+ }
@@ -67,10 +67,10 @@ var EditWithGeneratedProps = (props) => {
67
67
  )
68
68
  };
69
69
  }, [
70
- name,
71
70
  blockType?.usesContext,
72
71
  blockContext,
73
72
  attributes?.metadata?.bindings,
73
+ bindableAttributes,
74
74
  registeredSources
75
75
  ]);
76
76
  const computedAttributes = useSelect(
@@ -132,7 +132,6 @@ var EditWithGeneratedProps = (props) => {
132
132
  blockBindings,
133
133
  clientId,
134
134
  context,
135
- name,
136
135
  registeredSources
137
136
  ]
138
137
  );
@@ -201,7 +200,6 @@ var EditWithGeneratedProps = (props) => {
201
200
  hasPatternOverrides,
202
201
  setAttributes,
203
202
  registeredSources,
204
- name,
205
203
  registry
206
204
  ]
207
205
  );