@wordpress/block-library 8.10.0 → 8.11.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 (278) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/block/edit.native.js +17 -10
  3. package/build/block/edit.native.js.map +1 -1
  4. package/build/code/index.js +1 -0
  5. package/build/code/index.js.map +1 -1
  6. package/build/column/index.js +1 -1
  7. package/build/columns/transforms.js +1 -5
  8. package/build/columns/transforms.js.map +1 -1
  9. package/build/cover/edit/resizable-cover-popover.js +3 -3
  10. package/build/cover/edit/resizable-cover-popover.js.map +1 -1
  11. package/build/file/interactivity.js +19 -0
  12. package/build/file/interactivity.js.map +1 -0
  13. package/build/file/{utils.js → utils/index.js} +1 -1
  14. package/build/file/utils/index.js.map +1 -0
  15. package/build/freeform/modal.js +20 -17
  16. package/build/freeform/modal.js.map +1 -1
  17. package/build/gallery/v1/edit.js +1 -7
  18. package/build/gallery/v1/edit.js.map +1 -1
  19. package/build/gallery/v1/gallery-image.native.js +1 -3
  20. package/build/gallery/v1/gallery-image.native.js.map +1 -1
  21. package/build/group/transforms.js +0 -5
  22. package/build/group/transforms.js.map +1 -1
  23. package/build/image/deprecated.js +2 -4
  24. package/build/image/deprecated.js.map +1 -1
  25. package/build/image/edit.js +13 -11
  26. package/build/image/edit.js.map +1 -1
  27. package/build/image/image.js +7 -12
  28. package/build/image/image.js.map +1 -1
  29. package/build/image/index.js +3 -0
  30. package/build/image/index.js.map +1 -1
  31. package/build/image/interactivity.js +102 -0
  32. package/build/image/interactivity.js.map +1 -0
  33. package/build/image/save.js +2 -4
  34. package/build/image/save.js.map +1 -1
  35. package/build/image/utils.js +10 -18
  36. package/build/image/utils.js.map +1 -1
  37. package/build/latest-posts/edit.native.js +1 -3
  38. package/build/latest-posts/edit.native.js.map +1 -1
  39. package/build/list/edit.js +1 -1
  40. package/build/list/edit.js.map +1 -1
  41. package/build/list-item/edit.native.js +1 -1
  42. package/build/list-item/edit.native.js.map +1 -1
  43. package/build/list-item/transforms.js +4 -1
  44. package/build/list-item/transforms.js.map +1 -1
  45. package/build/media-text/deprecated.js +4 -6
  46. package/build/media-text/deprecated.js.map +1 -1
  47. package/build/media-text/edit.js +13 -11
  48. package/build/media-text/edit.js.map +1 -1
  49. package/build/media-text/media-container.js +3 -3
  50. package/build/media-text/media-container.js.map +1 -1
  51. package/build/media-text/save.js +1 -3
  52. package/build/media-text/save.js.map +1 -1
  53. package/build/navigation/constants.js +3 -1
  54. package/build/navigation/constants.js.map +1 -1
  55. package/build/navigation/edit/inner-blocks.js +1 -0
  56. package/build/navigation/edit/inner-blocks.js.map +1 -1
  57. package/build/navigation/edit/leaf-more-menu.js +148 -0
  58. package/build/navigation/edit/leaf-more-menu.js.map +1 -0
  59. package/build/navigation/edit/menu-inspector-controls.js +53 -8
  60. package/build/navigation/edit/menu-inspector-controls.js.map +1 -1
  61. package/build/navigation/edit/navigation-menu-delete-control.js +6 -6
  62. package/build/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  63. package/build/navigation/edit/unsaved-inner-blocks.js +8 -19
  64. package/build/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  65. package/build/navigation/interactivity.js +24 -6
  66. package/build/navigation/interactivity.js.map +1 -1
  67. package/build/navigation-link/edit.js +6 -4
  68. package/build/navigation-link/edit.js.map +1 -1
  69. package/build/navigation-link/update-attributes.js +5 -5
  70. package/build/navigation-link/update-attributes.js.map +1 -1
  71. package/build/navigation-submenu/edit.js +6 -4
  72. package/build/navigation-submenu/edit.js.map +1 -1
  73. package/build/pattern/edit.js +42 -8
  74. package/build/pattern/edit.js.map +1 -1
  75. package/build/pattern/index.js +12 -5
  76. package/build/pattern/index.js.map +1 -1
  77. package/build/pattern/v1/edit.js +57 -0
  78. package/build/pattern/v1/edit.js.map +1 -0
  79. package/build/post-title/edit.js +10 -3
  80. package/build/post-title/edit.js.map +1 -1
  81. package/build/quote/transforms.js +9 -12
  82. package/build/quote/transforms.js.map +1 -1
  83. package/build/social-link/edit.js +21 -4
  84. package/build/social-link/edit.js.map +1 -1
  85. package/build/template-part/edit/index.js +1 -7
  86. package/build/template-part/edit/index.js.map +1 -1
  87. package/build/template-part/edit/utils/hooks.js +2 -2
  88. package/build/template-part/edit/utils/hooks.js.map +1 -1
  89. package/build/utils/interactivity/directives.js +50 -22
  90. package/build/utils/interactivity/directives.js.map +1 -1
  91. package/build/utils/interactivity/hooks.js +76 -12
  92. package/build/utils/interactivity/hooks.js.map +1 -1
  93. package/build/utils/interactivity/portals.js +108 -0
  94. package/build/utils/interactivity/portals.js.map +1 -0
  95. package/build-module/block/edit.native.js +7 -1
  96. package/build-module/block/edit.native.js.map +1 -1
  97. package/build-module/code/index.js +1 -0
  98. package/build-module/code/index.js.map +1 -1
  99. package/build-module/column/index.js +1 -1
  100. package/build-module/columns/transforms.js +1 -5
  101. package/build-module/columns/transforms.js.map +1 -1
  102. package/build-module/cover/edit/resizable-cover-popover.js +3 -3
  103. package/build-module/cover/edit/resizable-cover-popover.js.map +1 -1
  104. package/build-module/file/interactivity.js +15 -0
  105. package/build-module/file/interactivity.js.map +1 -0
  106. package/build-module/file/{utils.js → utils/index.js} +1 -1
  107. package/build-module/file/utils/index.js.map +1 -0
  108. package/build-module/freeform/modal.js +19 -18
  109. package/build-module/freeform/modal.js.map +1 -1
  110. package/build-module/gallery/v1/edit.js +1 -6
  111. package/build-module/gallery/v1/edit.js.map +1 -1
  112. package/build-module/gallery/v1/gallery-image.native.js +1 -2
  113. package/build-module/gallery/v1/gallery-image.native.js.map +1 -1
  114. package/build-module/group/transforms.js +0 -5
  115. package/build-module/group/transforms.js.map +1 -1
  116. package/build-module/image/deprecated.js +2 -3
  117. package/build-module/image/deprecated.js.map +1 -1
  118. package/build-module/image/edit.js +12 -11
  119. package/build-module/image/edit.js.map +1 -1
  120. package/build-module/image/image.js +7 -11
  121. package/build-module/image/image.js.map +1 -1
  122. package/build-module/image/index.js +3 -0
  123. package/build-module/image/index.js.map +1 -1
  124. package/build-module/image/interactivity.js +99 -0
  125. package/build-module/image/interactivity.js.map +1 -0
  126. package/build-module/image/save.js +2 -3
  127. package/build-module/image/save.js.map +1 -1
  128. package/build-module/image/utils.js +10 -17
  129. package/build-module/image/utils.js.map +1 -1
  130. package/build-module/latest-posts/edit.native.js +1 -2
  131. package/build-module/latest-posts/edit.native.js.map +1 -1
  132. package/build-module/list/edit.js +1 -1
  133. package/build-module/list/edit.js.map +1 -1
  134. package/build-module/list-item/edit.native.js +1 -1
  135. package/build-module/list-item/edit.native.js.map +1 -1
  136. package/build-module/list-item/transforms.js +5 -2
  137. package/build-module/list-item/transforms.js.map +1 -1
  138. package/build-module/media-text/deprecated.js +4 -5
  139. package/build-module/media-text/deprecated.js.map +1 -1
  140. package/build-module/media-text/edit.js +13 -12
  141. package/build-module/media-text/edit.js.map +1 -1
  142. package/build-module/media-text/media-container.js +3 -3
  143. package/build-module/media-text/media-container.js.map +1 -1
  144. package/build-module/media-text/save.js +1 -2
  145. package/build-module/media-text/save.js.map +1 -1
  146. package/build-module/navigation/constants.js +1 -0
  147. package/build-module/navigation/constants.js.map +1 -1
  148. package/build-module/navigation/edit/inner-blocks.js +2 -1
  149. package/build-module/navigation/edit/inner-blocks.js.map +1 -1
  150. package/build-module/navigation/edit/leaf-more-menu.js +132 -0
  151. package/build-module/navigation/edit/leaf-more-menu.js.map +1 -0
  152. package/build-module/navigation/edit/menu-inspector-controls.js +52 -9
  153. package/build-module/navigation/edit/menu-inspector-controls.js.map +1 -1
  154. package/build-module/navigation/edit/navigation-menu-delete-control.js +7 -7
  155. package/build-module/navigation/edit/navigation-menu-delete-control.js.map +1 -1
  156. package/build-module/navigation/edit/unsaved-inner-blocks.js +8 -16
  157. package/build-module/navigation/edit/unsaved-inner-blocks.js.map +1 -1
  158. package/build-module/navigation/interactivity.js +24 -6
  159. package/build-module/navigation/interactivity.js.map +1 -1
  160. package/build-module/navigation-link/edit.js +6 -4
  161. package/build-module/navigation-link/edit.js.map +1 -1
  162. package/build-module/navigation-link/update-attributes.js +4 -4
  163. package/build-module/navigation-link/update-attributes.js.map +1 -1
  164. package/build-module/navigation-submenu/edit.js +6 -4
  165. package/build-module/navigation-submenu/edit.js.map +1 -1
  166. package/build-module/pattern/edit.js +42 -9
  167. package/build-module/pattern/edit.js.map +1 -1
  168. package/build-module/pattern/index.js +12 -3
  169. package/build-module/pattern/index.js.map +1 -1
  170. package/build-module/pattern/v1/edit.js +48 -0
  171. package/build-module/pattern/v1/edit.js.map +1 -0
  172. package/build-module/post-title/edit.js +10 -3
  173. package/build-module/post-title/edit.js.map +1 -1
  174. package/build-module/quote/transforms.js +9 -12
  175. package/build-module/quote/transforms.js.map +1 -1
  176. package/build-module/social-link/edit.js +20 -5
  177. package/build-module/social-link/edit.js.map +1 -1
  178. package/build-module/template-part/edit/index.js +1 -6
  179. package/build-module/template-part/edit/index.js.map +1 -1
  180. package/build-module/template-part/edit/utils/hooks.js +1 -1
  181. package/build-module/template-part/edit/utils/hooks.js.map +1 -1
  182. package/build-module/utils/interactivity/directives.js +49 -22
  183. package/build-module/utils/interactivity/directives.js.map +1 -1
  184. package/build-module/utils/interactivity/hooks.js +77 -13
  185. package/build-module/utils/interactivity/hooks.js.map +1 -1
  186. package/build-module/utils/interactivity/portals.js +100 -0
  187. package/build-module/utils/interactivity/portals.js.map +1 -0
  188. package/build-style/common-rtl.css +1 -1
  189. package/build-style/common.css +1 -1
  190. package/build-style/cover/style-rtl.css +1 -2
  191. package/build-style/cover/style.css +1 -2
  192. package/build-style/editor-rtl.css +68 -0
  193. package/build-style/editor.css +68 -0
  194. package/build-style/file/editor-rtl.css +3 -0
  195. package/build-style/file/editor.css +3 -0
  196. package/build-style/freeform/editor-rtl.css +29 -0
  197. package/build-style/freeform/editor.css +29 -0
  198. package/build-style/gallery/style-rtl.css +2 -4
  199. package/build-style/gallery/style.css +2 -4
  200. package/build-style/image/style-rtl.css +98 -0
  201. package/build-style/image/style.css +98 -0
  202. package/build-style/navigation/editor-rtl.css +36 -0
  203. package/build-style/navigation/editor.css +36 -0
  204. package/build-style/post-comments-form/style-rtl.css +1 -1
  205. package/build-style/post-comments-form/style.css +1 -1
  206. package/build-style/style-rtl.css +103 -9
  207. package/build-style/style.css +103 -9
  208. package/build-style/video/style-rtl.css +1 -2
  209. package/build-style/video/style.css +1 -2
  210. package/package.json +32 -32
  211. package/src/block/edit.native.js +18 -4
  212. package/src/buttons/test/edit.native.js +0 -9
  213. package/src/code/block.json +1 -0
  214. package/src/column/block.json +1 -1
  215. package/src/columns/test/__snapshots__/transforms.native.js.snap +1 -1
  216. package/src/columns/test/transforms.native.js +3 -5
  217. package/src/columns/transforms.js +2 -8
  218. package/src/comments/index.php +1 -6
  219. package/src/cover/edit/resizable-cover-popover.js +2 -1
  220. package/src/file/editor.scss +4 -0
  221. package/src/file/interactivity.js +15 -0
  222. package/src/freeform/editor.scss +45 -0
  223. package/src/freeform/modal.js +22 -19
  224. package/src/gallery/v1/edit.js +1 -6
  225. package/src/gallery/v1/gallery-image.native.js +1 -2
  226. package/src/group/test/__snapshots__/transforms.native.js.snap +1 -1
  227. package/src/group/test/transforms.native.js +3 -5
  228. package/src/group/transforms.js +0 -7
  229. package/src/image/block.json +3 -0
  230. package/src/image/deprecated.js +2 -3
  231. package/src/image/edit.js +18 -18
  232. package/src/image/image.js +8 -11
  233. package/src/image/index.php +75 -2
  234. package/src/image/interactivity.js +113 -0
  235. package/src/image/save.js +4 -3
  236. package/src/image/style.scss +113 -0
  237. package/src/image/utils.js +11 -18
  238. package/src/latest-posts/edit.native.js +1 -4
  239. package/src/list/edit.js +1 -1
  240. package/src/list/test/edit.native.js +80 -1
  241. package/src/list-item/edit.native.js +1 -1
  242. package/src/list-item/transforms.js +4 -2
  243. package/src/media-text/deprecated.js +4 -5
  244. package/src/media-text/edit.js +12 -10
  245. package/src/media-text/media-container.js +3 -3
  246. package/src/media-text/save.js +1 -2
  247. package/src/navigation/constants.js +5 -0
  248. package/src/navigation/edit/inner-blocks.js +6 -1
  249. package/src/navigation/edit/leaf-more-menu.js +170 -0
  250. package/src/navigation/edit/menu-inspector-controls.js +78 -10
  251. package/src/navigation/edit/navigation-menu-delete-control.js +29 -29
  252. package/src/navigation/edit/unsaved-inner-blocks.js +11 -24
  253. package/src/navigation/editor.scss +10 -0
  254. package/src/navigation/index.php +4 -1
  255. package/src/navigation/interactivity.js +9 -2
  256. package/src/navigation-link/edit.js +8 -2
  257. package/src/navigation-link/update-attributes.js +2 -2
  258. package/src/navigation-submenu/edit.js +8 -2
  259. package/src/pattern/block.json +4 -0
  260. package/src/pattern/edit.js +53 -16
  261. package/src/pattern/index.js +5 -4
  262. package/src/pattern/index.php +14 -1
  263. package/src/pattern/v1/edit.js +57 -0
  264. package/src/post-comments-form/style.scss +3 -1
  265. package/src/post-title/edit.js +50 -44
  266. package/src/quote/test/__snapshots__/transforms.native.js.snap +1 -1
  267. package/src/quote/test/transforms.native.js +3 -5
  268. package/src/quote/transforms.js +9 -13
  269. package/src/social-link/edit.js +51 -26
  270. package/src/template-part/edit/index.js +4 -6
  271. package/src/template-part/edit/utils/hooks.js +1 -1
  272. package/src/template-part/index.php +2 -2
  273. package/src/utils/interactivity/directives.js +27 -6
  274. package/src/utils/interactivity/hooks.js +83 -14
  275. package/src/utils/interactivity/portals.js +98 -0
  276. package/build/file/utils.js.map +0 -1
  277. package/build-module/file/utils.js.map +0 -1
  278. /package/src/file/{utils.js → utils/index.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/social-link/edit.js"],"names":["classNames","InspectorControls","URLPopover","URLInput","useBlockProps","useState","Button","PanelBody","PanelRow","TextControl","__","sprintf","keyboardReturn","getIconBySite","getNameBySite","SocialLinkURLPopover","url","setAttributes","setPopover","popoverAnchor","event","preventDefault","nextURL","SocialLinkEdit","attributes","context","isSelected","service","label","rel","showLabels","iconColorValue","iconBackgroundColorValue","showURLPopover","classes","setPopoverAnchor","IconComponent","socialLinkName","socialLinkLabel","blockProps","className","style","color","backgroundColor","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tInspectorControls,\n\tURLPopover,\n\tURLInput,\n\tuseBlockProps,\n} from '@wordpress/block-editor';\nimport { useState } from '@wordpress/element';\nimport {\n\tButton,\n\tPanelBody,\n\tPanelRow,\n\tTextControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { getIconBySite, getNameBySite } from './social-list';\n\nconst SocialLinkURLPopover = ( {\n\turl,\n\tsetAttributes,\n\tsetPopover,\n\tpopoverAnchor,\n} ) => (\n\t<URLPopover anchor={ popoverAnchor } onClose={ () => setPopover( false ) }>\n\t\t<form\n\t\t\tclassName=\"block-editor-url-popover__link-editor\"\n\t\t\tonSubmit={ ( event ) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetPopover( false );\n\t\t\t} }\n\t\t>\n\t\t\t<div className=\"block-editor-url-input\">\n\t\t\t\t<URLInput\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tvalue={ url }\n\t\t\t\t\tonChange={ ( nextURL ) =>\n\t\t\t\t\t\tsetAttributes( { url: nextURL } )\n\t\t\t\t\t}\n\t\t\t\t\tplaceholder={ __( 'Enter address' ) }\n\t\t\t\t\tdisableSuggestions={ true }\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\ticon={ keyboardReturn }\n\t\t\t\tlabel={ __( 'Apply' ) }\n\t\t\t\ttype=\"submit\"\n\t\t\t/>\n\t\t</form>\n\t</URLPopover>\n);\n\nconst SocialLinkEdit = ( {\n\tattributes,\n\tcontext,\n\tisSelected,\n\tsetAttributes,\n} ) => {\n\tconst { url, service, label, rel } = attributes;\n\tconst { showLabels, iconColorValue, iconBackgroundColorValue } = context;\n\tconst [ showURLPopover, setPopover ] = useState( false );\n\tconst classes = classNames( 'wp-social-link', 'wp-social-link-' + service, {\n\t\t'wp-social-link__is-incomplete': ! url,\n\t} );\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\n\tconst IconComponent = getIconBySite( service );\n\tconst socialLinkName = getNameBySite( service );\n\tconst socialLinkLabel = label ?? socialLinkName;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classes,\n\t\tstyle: {\n\t\t\tcolor: iconColorValue,\n\t\t\tbackgroundColor: iconBackgroundColorValue,\n\t\t},\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: name of the social service. */\n\t\t\t\t\t\t__( '%s label' ),\n\t\t\t\t\t\tsocialLinkName\n\t\t\t\t\t) }\n\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t>\n\t\t\t\t\t<PanelRow>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Link label' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Briefly describe the link to help screen reader users.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ label || '' }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { label: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Link rel' ) }\n\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\tonChange={ ( value ) => setAttributes( { rel: value } ) }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<li { ...blockProps }>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"wp-block-social-link-anchor\"\n\t\t\t\t\tref={ setPopoverAnchor }\n\t\t\t\t\tonClick={ () => setPopover( true ) }\n\t\t\t\t>\n\t\t\t\t\t<IconComponent />\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ classNames( 'wp-block-social-link-label', {\n\t\t\t\t\t\t\t'screen-reader-text': ! showLabels,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ socialLinkLabel }\n\t\t\t\t\t</span>\n\t\t\t\t\t{ isSelected && showURLPopover && (\n\t\t\t\t\t\t<SocialLinkURLPopover\n\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tsetPopover={ setPopover }\n\t\t\t\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</Button>\n\t\t\t</li>\n\t\t</>\n\t);\n};\n\nexport default SocialLinkEdit;\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/social-link/edit.js"],"names":["classNames","DELETE","BACKSPACE","useDispatch","InspectorControls","URLPopover","URLInput","useBlockProps","store","blockEditorStore","useState","Button","PanelBody","PanelRow","TextControl","__","sprintf","keyboardReturn","getIconBySite","getNameBySite","SocialLinkURLPopover","url","setAttributes","setPopover","popoverAnchor","clientId","removeBlock","event","preventDefault","nextURL","defaultPrevented","includes","keyCode","SocialLinkEdit","attributes","context","isSelected","service","label","rel","showLabels","iconColorValue","iconBackgroundColorValue","showURLPopover","classes","setPopoverAnchor","IconComponent","socialLinkName","socialLinkLabel","blockProps","className","style","color","backgroundColor","value"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classNames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { DELETE, BACKSPACE } from '@wordpress/keycodes';\nimport { useDispatch } from '@wordpress/data';\n\nimport {\n\tInspectorControls,\n\tURLPopover,\n\tURLInput,\n\tuseBlockProps,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useState } from '@wordpress/element';\nimport {\n\tButton,\n\tPanelBody,\n\tPanelRow,\n\tTextControl,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { keyboardReturn } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { getIconBySite, getNameBySite } from './social-list';\n\nconst SocialLinkURLPopover = ( {\n\turl,\n\tsetAttributes,\n\tsetPopover,\n\tpopoverAnchor,\n\tclientId,\n} ) => {\n\tconst { removeBlock } = useDispatch( blockEditorStore );\n\treturn (\n\t\t<URLPopover\n\t\t\tanchor={ popoverAnchor }\n\t\t\tonClose={ () => setPopover( false ) }\n\t\t>\n\t\t\t<form\n\t\t\t\tclassName=\"block-editor-url-popover__link-editor\"\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetPopover( false );\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<div className=\"block-editor-url-input\">\n\t\t\t\t\t<URLInput\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tvalue={ url }\n\t\t\t\t\t\tonChange={ ( nextURL ) =>\n\t\t\t\t\t\t\tsetAttributes( { url: nextURL } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tplaceholder={ __( 'Enter address' ) }\n\t\t\t\t\t\tdisableSuggestions={ true }\n\t\t\t\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!! url ||\n\t\t\t\t\t\t\t\tevent.defaultPrevented ||\n\t\t\t\t\t\t\t\t! [ BACKSPACE, DELETE ].includes(\n\t\t\t\t\t\t\t\t\tevent.keyCode\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tremoveBlock( clientId );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<Button\n\t\t\t\t\ticon={ keyboardReturn }\n\t\t\t\t\tlabel={ __( 'Apply' ) }\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t/>\n\t\t\t</form>\n\t\t</URLPopover>\n\t);\n};\n\nconst SocialLinkEdit = ( {\n\tattributes,\n\tcontext,\n\tisSelected,\n\tsetAttributes,\n\tclientId,\n} ) => {\n\tconst { url, service, label, rel } = attributes;\n\tconst { showLabels, iconColorValue, iconBackgroundColorValue } = context;\n\tconst [ showURLPopover, setPopover ] = useState( false );\n\tconst classes = classNames( 'wp-social-link', 'wp-social-link-' + service, {\n\t\t'wp-social-link__is-incomplete': ! url,\n\t} );\n\n\t// Use internal state instead of a ref to make sure that the component\n\t// re-renders when the popover's anchor updates.\n\tconst [ popoverAnchor, setPopoverAnchor ] = useState( null );\n\n\tconst IconComponent = getIconBySite( service );\n\tconst socialLinkName = getNameBySite( service );\n\tconst socialLinkLabel = label ?? socialLinkName;\n\tconst blockProps = useBlockProps( {\n\t\tclassName: classes,\n\t\tstyle: {\n\t\t\tcolor: iconColorValue,\n\t\t\tbackgroundColor: iconBackgroundColorValue,\n\t\t},\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls>\n\t\t\t\t<PanelBody\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: name of the social service. */\n\t\t\t\t\t\t__( '%s label' ),\n\t\t\t\t\t\tsocialLinkName\n\t\t\t\t\t) }\n\t\t\t\t\tinitialOpen={ false }\n\t\t\t\t>\n\t\t\t\t\t<PanelRow>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Link label' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'Briefly describe the link to help screen reader users.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tvalue={ label || '' }\n\t\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\t\tsetAttributes( { label: value } )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</PanelRow>\n\t\t\t\t</PanelBody>\n\t\t\t</InspectorControls>\n\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t<TextControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Link rel' ) }\n\t\t\t\t\tvalue={ rel || '' }\n\t\t\t\t\tonChange={ ( value ) => setAttributes( { rel: value } ) }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<li { ...blockProps }>\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"wp-block-social-link-anchor\"\n\t\t\t\t\tref={ setPopoverAnchor }\n\t\t\t\t\tonClick={ () => setPopover( true ) }\n\t\t\t\t>\n\t\t\t\t\t<IconComponent />\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={ classNames( 'wp-block-social-link-label', {\n\t\t\t\t\t\t\t'screen-reader-text': ! showLabels,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ socialLinkLabel }\n\t\t\t\t\t</span>\n\t\t\t\t\t{ isSelected && showURLPopover && (\n\t\t\t\t\t\t<SocialLinkURLPopover\n\t\t\t\t\t\t\turl={ url }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tsetPopover={ setPopover }\n\t\t\t\t\t\t\tpopoverAnchor={ popoverAnchor }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</Button>\n\t\t\t</li>\n\t\t</>\n\t);\n};\n\nexport default SocialLinkEdit;\n"]}
@@ -1,13 +1,8 @@
1
1
  import { createElement, Fragment } from "@wordpress/element";
2
2
 
3
- /**
4
- * External dependencies
5
- */
6
- import { isEmpty } from 'lodash';
7
3
  /**
8
4
  * WordPress dependencies
9
5
  */
10
-
11
6
  import { useSelect } from '@wordpress/data';
12
7
  import { BlockSettingsMenuControls, BlockTitle, useBlockProps, Warning, store as blockEditorStore, __experimentalRecursionProvider as RecursionProvider, __experimentalUseHasRecursion as useHasRecursion } from '@wordpress/block-editor';
13
8
  import { Spinner, Modal, MenuItem } from '@wordpress/components';
@@ -65,7 +60,7 @@ export default function TemplatePartEdit(_ref) {
65
60
  return {
66
61
  innerBlocks: getBlocks(clientId),
67
62
  isResolved: hasResolvedEntity,
68
- isMissing: hasResolvedEntity && isEmpty(entityRecord),
63
+ isMissing: hasResolvedEntity && (!entityRecord || Object.keys(entityRecord).length === 0),
69
64
  area: _area
70
65
  };
71
66
  }, [templatePartId, clientId]);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/template-part/edit/index.js"],"names":["isEmpty","useSelect","BlockSettingsMenuControls","BlockTitle","useBlockProps","Warning","store","blockEditorStore","__experimentalRecursionProvider","RecursionProvider","__experimentalUseHasRecursion","useHasRecursion","Spinner","Modal","MenuItem","__","sprintf","coreStore","useState","createInterpolateElement","TemplatePartPlaceholder","TemplatePartSelectionModal","TemplatePartAdvancedControls","TemplatePartInnerBlocks","createTemplatePartId","useAlternativeBlockPatterns","useAlternativeTemplateParts","useTemplatePartArea","TemplatePartEdit","attributes","setAttributes","clientId","isSelected","slug","theme","tagName","layout","templatePartId","hasAlreadyRendered","isTemplatePartSelectionOpen","setIsTemplatePartSelectionOpen","isResolved","innerBlocks","isMissing","area","select","getEditedEntityRecord","hasFinishedResolution","getBlocks","getEntityArgs","entityRecord","_area","hasResolvedEntity","templateParts","blockPatterns","hasReplacements","length","areaObject","blockProps","isPlaceholder","isEntityAvailable","TagName","canReplace","label","toLowerCase"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { isEmpty } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tBlockSettingsMenuControls,\n\tBlockTitle,\n\tuseBlockProps,\n\tWarning,\n\tstore as blockEditorStore,\n\t__experimentalRecursionProvider as RecursionProvider,\n\t__experimentalUseHasRecursion as useHasRecursion,\n} from '@wordpress/block-editor';\nimport { Spinner, Modal, MenuItem } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, createInterpolateElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartPlaceholder from './placeholder';\nimport TemplatePartSelectionModal from './selection-modal';\nimport { TemplatePartAdvancedControls } from './advanced-controls';\nimport TemplatePartInnerBlocks from './inner-blocks';\nimport { createTemplatePartId } from './utils/create-template-part-id';\nimport {\n\tuseAlternativeBlockPatterns,\n\tuseAlternativeTemplateParts,\n\tuseTemplatePartArea,\n} from './utils/hooks';\n\nexport default function TemplatePartEdit( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n\tisSelected,\n} ) {\n\tconst { slug, theme, tagName, layout = {} } = attributes;\n\tconst templatePartId = createTemplatePartId( theme, slug );\n\tconst hasAlreadyRendered = useHasRecursion( templatePartId );\n\tconst [ isTemplatePartSelectionOpen, setIsTemplatePartSelectionOpen ] =\n\t\tuseState( false );\n\n\t// Set the postId block attribute if it did not exist,\n\t// but wait until the inner blocks have loaded to allow\n\t// new edits to trigger this.\n\tconst { isResolved, innerBlocks, isMissing, area } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst { getBlocks } = select( blockEditorStore );\n\n\t\t\tconst getEntityArgs = [\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\ttemplatePartId,\n\t\t\t];\n\t\t\tconst entityRecord = templatePartId\n\t\t\t\t? getEditedEntityRecord( ...getEntityArgs )\n\t\t\t\t: null;\n\t\t\tconst _area = entityRecord?.area || attributes.area;\n\t\t\tconst hasResolvedEntity = templatePartId\n\t\t\t\t? hasFinishedResolution(\n\t\t\t\t\t\t'getEditedEntityRecord',\n\t\t\t\t\t\tgetEntityArgs\n\t\t\t\t )\n\t\t\t\t: false;\n\n\t\t\treturn {\n\t\t\t\tinnerBlocks: getBlocks( clientId ),\n\t\t\t\tisResolved: hasResolvedEntity,\n\t\t\t\tisMissing: hasResolvedEntity && isEmpty( entityRecord ),\n\t\t\t\tarea: _area,\n\t\t\t};\n\t\t},\n\t\t[ templatePartId, clientId ]\n\t);\n\tconst { templateParts } = useAlternativeTemplateParts(\n\t\tarea,\n\t\ttemplatePartId\n\t);\n\tconst blockPatterns = useAlternativeBlockPatterns( area, clientId );\n\tconst hasReplacements = !! templateParts.length || !! blockPatterns.length;\n\tconst areaObject = useTemplatePartArea( area );\n\tconst blockProps = useBlockProps();\n\tconst isPlaceholder = ! slug;\n\tconst isEntityAvailable = ! isPlaceholder && ! isMissing && isResolved;\n\tconst TagName = tagName || areaObject.tagName;\n\n\t// The `isSelected` check ensures the `BlockSettingsMenuControls` fill\n\t// doesn't render multiple times. The block controls has similar internal check.\n\tconst canReplace =\n\t\tisSelected &&\n\t\tisEntityAvailable &&\n\t\thasReplacements &&\n\t\t( area === 'header' || area === 'footer' );\n\n\t// We don't want to render a missing state if we have any inner blocks.\n\t// A new template part is automatically created if we have any inner blocks but no entity.\n\tif (\n\t\tinnerBlocks.length === 0 &&\n\t\t( ( slug && ! theme ) || ( slug && isMissing ) )\n\t) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %s: Template part slug */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Template part has been deleted or is unavailable: %s'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tslug\n\t\t\t\t\t) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\tif ( isEntityAvailable && hasAlreadyRendered ) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RecursionProvider uniqueId={ templatePartId }>\n\t\t\t\t<TemplatePartAdvancedControls\n\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisEntityAvailable={ isEntityAvailable }\n\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\tdefaultWrapper={ areaObject.tagName }\n\t\t\t\t\thasInnerBlocks={ innerBlocks.length > 0 }\n\t\t\t\t/>\n\t\t\t\t{ isPlaceholder && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<TemplatePartPlaceholder\n\t\t\t\t\t\t\tarea={ attributes.area }\n\t\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tonOpenSelectionModal={ () =>\n\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( true )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t\t{ canReplace && (\n\t\t\t\t\t<BlockSettingsMenuControls>\n\t\t\t\t\t\t{ () => (\n\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( true );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\t\t\t\t__( 'Replace <BlockTitle />' ),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tBlockTitle: (\n\t\t\t\t\t\t\t\t\t\t\t<BlockTitle\n\t\t\t\t\t\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\t\t\t\t\t\tmaximumLength={ 25 }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t),\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</MenuItem>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</BlockSettingsMenuControls>\n\t\t\t\t) }\n\t\t\t\t{ isEntityAvailable && (\n\t\t\t\t\t<TemplatePartInnerBlocks\n\t\t\t\t\t\ttagName={ TagName }\n\t\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\t\tpostId={ templatePartId }\n\t\t\t\t\t\thasInnerBlocks={ innerBlocks.length > 0 }\n\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! isPlaceholder && ! isResolved && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t</RecursionProvider>\n\t\t\t{ isTemplatePartSelectionOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\toverlayClassName=\"block-editor-template-part__selection-modal\"\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t// Translators: %s as template part area title (\"Header\", \"Footer\", etc.).\n\t\t\t\t\t\t__( 'Choose a %s' ),\n\t\t\t\t\t\tareaObject.label.toLowerCase()\n\t\t\t\t\t) }\n\t\t\t\t\tonRequestClose={ () =>\n\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t}\n\t\t\t\t\tisFullScreen={ true }\n\t\t\t\t>\n\t\t\t\t\t<TemplatePartSelectionModal\n\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tarea={ area }\n\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\tonClose={ () =>\n\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/template-part/edit/index.js"],"names":["useSelect","BlockSettingsMenuControls","BlockTitle","useBlockProps","Warning","store","blockEditorStore","__experimentalRecursionProvider","RecursionProvider","__experimentalUseHasRecursion","useHasRecursion","Spinner","Modal","MenuItem","__","sprintf","coreStore","useState","createInterpolateElement","TemplatePartPlaceholder","TemplatePartSelectionModal","TemplatePartAdvancedControls","TemplatePartInnerBlocks","createTemplatePartId","useAlternativeBlockPatterns","useAlternativeTemplateParts","useTemplatePartArea","TemplatePartEdit","attributes","setAttributes","clientId","isSelected","slug","theme","tagName","layout","templatePartId","hasAlreadyRendered","isTemplatePartSelectionOpen","setIsTemplatePartSelectionOpen","isResolved","innerBlocks","isMissing","area","select","getEditedEntityRecord","hasFinishedResolution","getBlocks","getEntityArgs","entityRecord","_area","hasResolvedEntity","Object","keys","length","templateParts","blockPatterns","hasReplacements","areaObject","blockProps","isPlaceholder","isEntityAvailable","TagName","canReplace","label","toLowerCase"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport {\n\tBlockSettingsMenuControls,\n\tBlockTitle,\n\tuseBlockProps,\n\tWarning,\n\tstore as blockEditorStore,\n\t__experimentalRecursionProvider as RecursionProvider,\n\t__experimentalUseHasRecursion as useHasRecursion,\n} from '@wordpress/block-editor';\nimport { Spinner, Modal, MenuItem } from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState, createInterpolateElement } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartPlaceholder from './placeholder';\nimport TemplatePartSelectionModal from './selection-modal';\nimport { TemplatePartAdvancedControls } from './advanced-controls';\nimport TemplatePartInnerBlocks from './inner-blocks';\nimport { createTemplatePartId } from './utils/create-template-part-id';\nimport {\n\tuseAlternativeBlockPatterns,\n\tuseAlternativeTemplateParts,\n\tuseTemplatePartArea,\n} from './utils/hooks';\n\nexport default function TemplatePartEdit( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n\tisSelected,\n} ) {\n\tconst { slug, theme, tagName, layout = {} } = attributes;\n\tconst templatePartId = createTemplatePartId( theme, slug );\n\tconst hasAlreadyRendered = useHasRecursion( templatePartId );\n\tconst [ isTemplatePartSelectionOpen, setIsTemplatePartSelectionOpen ] =\n\t\tuseState( false );\n\n\t// Set the postId block attribute if it did not exist,\n\t// but wait until the inner blocks have loaded to allow\n\t// new edits to trigger this.\n\tconst { isResolved, innerBlocks, isMissing, area } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst { getBlocks } = select( blockEditorStore );\n\n\t\t\tconst getEntityArgs = [\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\ttemplatePartId,\n\t\t\t];\n\t\t\tconst entityRecord = templatePartId\n\t\t\t\t? getEditedEntityRecord( ...getEntityArgs )\n\t\t\t\t: null;\n\t\t\tconst _area = entityRecord?.area || attributes.area;\n\t\t\tconst hasResolvedEntity = templatePartId\n\t\t\t\t? hasFinishedResolution(\n\t\t\t\t\t\t'getEditedEntityRecord',\n\t\t\t\t\t\tgetEntityArgs\n\t\t\t\t )\n\t\t\t\t: false;\n\n\t\t\treturn {\n\t\t\t\tinnerBlocks: getBlocks( clientId ),\n\t\t\t\tisResolved: hasResolvedEntity,\n\t\t\t\tisMissing:\n\t\t\t\t\thasResolvedEntity &&\n\t\t\t\t\t( ! entityRecord ||\n\t\t\t\t\t\tObject.keys( entityRecord ).length === 0 ),\n\t\t\t\tarea: _area,\n\t\t\t};\n\t\t},\n\t\t[ templatePartId, clientId ]\n\t);\n\tconst { templateParts } = useAlternativeTemplateParts(\n\t\tarea,\n\t\ttemplatePartId\n\t);\n\tconst blockPatterns = useAlternativeBlockPatterns( area, clientId );\n\tconst hasReplacements = !! templateParts.length || !! blockPatterns.length;\n\tconst areaObject = useTemplatePartArea( area );\n\tconst blockProps = useBlockProps();\n\tconst isPlaceholder = ! slug;\n\tconst isEntityAvailable = ! isPlaceholder && ! isMissing && isResolved;\n\tconst TagName = tagName || areaObject.tagName;\n\n\t// The `isSelected` check ensures the `BlockSettingsMenuControls` fill\n\t// doesn't render multiple times. The block controls has similar internal check.\n\tconst canReplace =\n\t\tisSelected &&\n\t\tisEntityAvailable &&\n\t\thasReplacements &&\n\t\t( area === 'header' || area === 'footer' );\n\n\t// We don't want to render a missing state if we have any inner blocks.\n\t// A new template part is automatically created if we have any inner blocks but no entity.\n\tif (\n\t\tinnerBlocks.length === 0 &&\n\t\t( ( slug && ! theme ) || ( slug && isMissing ) )\n\t) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %s: Template part slug */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Template part has been deleted or is unavailable: %s'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tslug\n\t\t\t\t\t) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\tif ( isEntityAvailable && hasAlreadyRendered ) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RecursionProvider uniqueId={ templatePartId }>\n\t\t\t\t<TemplatePartAdvancedControls\n\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\tisEntityAvailable={ isEntityAvailable }\n\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\tdefaultWrapper={ areaObject.tagName }\n\t\t\t\t\thasInnerBlocks={ innerBlocks.length > 0 }\n\t\t\t\t/>\n\t\t\t\t{ isPlaceholder && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<TemplatePartPlaceholder\n\t\t\t\t\t\t\tarea={ attributes.area }\n\t\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tonOpenSelectionModal={ () =>\n\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( true )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t\t{ canReplace && (\n\t\t\t\t\t<BlockSettingsMenuControls>\n\t\t\t\t\t\t{ () => (\n\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( true );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ createInterpolateElement(\n\t\t\t\t\t\t\t\t\t__( 'Replace <BlockTitle />' ),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tBlockTitle: (\n\t\t\t\t\t\t\t\t\t\t\t<BlockTitle\n\t\t\t\t\t\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\t\t\t\t\t\tmaximumLength={ 25 }\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t),\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</MenuItem>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</BlockSettingsMenuControls>\n\t\t\t\t) }\n\t\t\t\t{ isEntityAvailable && (\n\t\t\t\t\t<TemplatePartInnerBlocks\n\t\t\t\t\t\ttagName={ TagName }\n\t\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\t\tpostId={ templatePartId }\n\t\t\t\t\t\thasInnerBlocks={ innerBlocks.length > 0 }\n\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! isPlaceholder && ! isResolved && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t</RecursionProvider>\n\t\t\t{ isTemplatePartSelectionOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\toverlayClassName=\"block-editor-template-part__selection-modal\"\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t// Translators: %s as template part area title (\"Header\", \"Footer\", etc.).\n\t\t\t\t\t\t__( 'Choose a %s' ),\n\t\t\t\t\t\tareaObject.label.toLowerCase()\n\t\t\t\t\t) }\n\t\t\t\t\tonRequestClose={ () =>\n\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t}\n\t\t\t\t\tisFullScreen={ true }\n\t\t\t\t>\n\t\t\t\t\t<TemplatePartSelectionModal\n\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tarea={ area }\n\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\tonClose={ () =>\n\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * External dependencies
3
3
  */
4
- import { kebabCase } from 'lodash';
4
+ import { paramCase as kebabCase } from 'change-case';
5
5
  /**
6
6
  * WordPress dependencies
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/template-part/edit/utils/hooks.js"],"names":["kebabCase","useDispatch","useSelect","store","coreStore","blockEditorStore","useMemo","serialize","__","createTemplatePartId","useAlternativeTemplateParts","area","excludedId","templateParts","isResolving","select","getEntityRecords","_isResolving","query","per_page","filteredTemplateParts","filter","templatePart","theme","slug","useAlternativeBlockPatterns","clientId","blockNameWithArea","getBlockRootClientId","getPatternsByBlockTypes","rootClientId","useCreateTemplatePartFromBlocks","setAttributes","saveEntityRecord","blocks","title","cleanSlug","replace","record","content","undefined","useTemplatePartArea","definedAreas","__experimentalGetDefaultTemplatePartAreas","selectedArea","find","definedArea","defaultArea","icon","label","tagName","area_tag"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,QAA1B;AAEA;AACA;AACA;;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AACA,SAASD,KAAK,IAAIE,gBAAlB,QAA0C,yBAA1C;AACA,SAASC,OAAT,QAAwB,oBAAxB;AACA,SAASC,SAAT,QAA0B,mBAA1B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AAEA;AACA;AACA;;AACA,SAASC,oBAAT,QAAqC,2BAArC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,2BAAT,CAAsCC,IAAtC,EAA4CC,UAA5C,EAAyD;AAC/D,QAAM;AAAEC,IAAAA,aAAF;AAAiBC,IAAAA;AAAjB,MAAiCZ,SAAS,CAAIa,MAAF,IAAc;AAC/D,UAAM;AAAEC,MAAAA,gBAAF;AAAoBF,MAAAA,WAAW,EAAEG;AAAjC,QACLF,MAAM,CAAEX,SAAF,CADP;AAEA,UAAMc,KAAK,GAAG;AAAEC,MAAAA,QAAQ,EAAE,CAAC;AAAb,KAAd;AACA,WAAO;AACNN,MAAAA,aAAa,EAAEG,gBAAgB,CAC9B,UAD8B,EAE9B,kBAF8B,EAG9BE,KAH8B,CADzB;AAMNJ,MAAAA,WAAW,EAAEG,YAAY,CAAE,kBAAF,EAAsB,CAC9C,UAD8C,EAE9C,kBAF8C,EAG9CC,KAH8C,CAAtB;AANnB,KAAP;AAYA,GAhB+C,EAgB7C,EAhB6C,CAAhD;AAkBA,QAAME,qBAAqB,GAAGd,OAAO,CAAE,MAAM;AAC5C,QAAK,CAAEO,aAAP,EAAuB;AACtB,aAAO,EAAP;AACA;;AACD,WACCA,aAAa,CAACQ,MAAd,CACGC,YAAF,IACCb,oBAAoB,CACnBa,YAAY,CAACC,KADM,EAEnBD,YAAY,CAACE,IAFM,CAApB,KAGMZ,UAHN,KAIE,CAAED,IAAF,IACD,oBAAoBA,IADnB,IAEDW,YAAY,CAACX,IAAb,KAAsBA,IANvB,CAFF,KASK,EAVN;AAYA,GAhBoC,EAgBlC,CAAEE,aAAF,EAAiBF,IAAjB,EAAuBC,UAAvB,CAhBkC,CAArC;AAkBA,SAAO;AACNC,IAAAA,aAAa,EAAEO,qBADT;AAENN,IAAAA;AAFM,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASW,2BAAT,CAAsCd,IAAtC,EAA4Ce,QAA5C,EAAuD;AAC7D,SAAOxB,SAAS,CACba,MAAF,IAAc;AACb,UAAMY,iBAAiB,GAAGhB,IAAI,GAC1B,sBAAsBA,IAAM,EADF,GAE3B,oBAFH;AAGA,UAAM;AAAEiB,MAAAA,oBAAF;AAAwBC,MAAAA;AAAxB,QACLd,MAAM,CAAEV,gBAAF,CADP;AAEA,UAAMyB,YAAY,GAAGF,oBAAoB,CAAEF,QAAF,CAAzC;AACA,WAAOG,uBAAuB,CAAEF,iBAAF,EAAqBG,YAArB,CAA9B;AACA,GATc,EAUf,CAAEnB,IAAF,EAAQe,QAAR,CAVe,CAAhB;AAYA;AAED,OAAO,SAASK,+BAAT,CAA0CpB,IAA1C,EAAgDqB,aAAhD,EAAgE;AACtE,QAAM;AAAEC,IAAAA;AAAF,MAAuBhC,WAAW,CAAEG,SAAF,CAAxC;AAEA,SAAO,kBAAiE;AAAA,QAAzD8B,MAAyD,uEAAhD,EAAgD;AAAA,QAA5CC,KAA4C,uEAApC3B,EAAE,CAAE,wBAAF,CAAkC;AACvE;AACA;AACA,UAAM4B,SAAS,GACdpC,SAAS,CAAEmC,KAAF,CAAT,CAAmBE,OAAnB,CAA4B,UAA5B,EAAwC,EAAxC,KAAgD,gBADjD,CAHuE,CAMvE;AACA;AACA;AACA;;AACA,UAAMC,MAAM,GAAG;AACdH,MAAAA,KADc;AAEdX,MAAAA,IAAI,EAAEY,SAFQ;AAGdG,MAAAA,OAAO,EAAEhC,SAAS,CAAE2B,MAAF,CAHJ;AAId;AACA;AACAvB,MAAAA;AANc,KAAf;AAQA,UAAMW,YAAY,GAAG,MAAMW,gBAAgB,CAC1C,UAD0C,EAE1C,kBAF0C,EAG1CK,MAH0C,CAA3C;AAKAN,IAAAA,aAAa,CAAE;AACdR,MAAAA,IAAI,EAAEF,YAAY,CAACE,IADL;AAEdD,MAAAA,KAAK,EAAED,YAAY,CAACC,KAFN;AAGdZ,MAAAA,IAAI,EAAE6B;AAHQ,KAAF,CAAb;AAKA,GA5BD;AA6BA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,mBAAT,CAA8B9B,IAA9B,EAAqC;AAC3C,SAAOT,SAAS,CACba,MAAF,IAAc;AAAA;;AACb;AACA;;AACA;AACA,UAAM2B,YAAY,GACjB3B,MAAM,CACL,aADK,CAAN,CAEE4B,yCAFF,EADD;AAIA;;;AAEA,UAAMC,YAAY,GAAGF,YAAY,CAACG,IAAb,CAClBC,WAAF,IAAmBA,WAAW,CAACnC,IAAZ,KAAqBA,IADpB,CAArB;AAGA,UAAMoC,WAAW,GAAGL,YAAY,CAACG,IAAb,CACjBC,WAAF,IAAmBA,WAAW,CAACnC,IAAZ,KAAqB,eADrB,CAApB;AAIA,WAAO;AACNqC,MAAAA,IAAI,EAAE,CAAAJ,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEI,IAAd,MAAsBD,WAAtB,aAAsBA,WAAtB,uBAAsBA,WAAW,CAAEC,IAAnC,CADA;AAENC,MAAAA,KAAK,EAAE,CAAAL,YAAY,SAAZ,IAAAA,YAAY,WAAZ,YAAAA,YAAY,CAAEK,KAAd,KAAuBzC,EAAE,CAAE,eAAF,CAF1B;AAGN0C,MAAAA,OAAO,2BAAEN,YAAF,aAAEA,YAAF,uBAAEA,YAAY,CAAEO,QAAhB,yEAA4B;AAH7B,KAAP;AAKA,GAvBc,EAwBf,CAAExC,IAAF,CAxBe,CAAhB;AA0BA","sourcesContent":["/**\n * External dependencies\n */\nimport { kebabCase } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useMemo } from '@wordpress/element';\nimport { serialize } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { createTemplatePartId } from './create-template-part-id';\n\n/**\n * Retrieves the available template parts for the given area.\n *\n * @param {string} area Template part area.\n * @param {string} excludedId Template part ID to exclude.\n *\n * @return {{ templateParts: Array, isResolving: boolean }} array of template parts.\n */\nexport function useAlternativeTemplateParts( area, excludedId ) {\n\tconst { templateParts, isResolving } = useSelect( ( select ) => {\n\t\tconst { getEntityRecords, isResolving: _isResolving } =\n\t\t\tselect( coreStore );\n\t\tconst query = { per_page: -1 };\n\t\treturn {\n\t\t\ttemplateParts: getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\tquery\n\t\t\t),\n\t\t\tisResolving: _isResolving( 'getEntityRecords', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\tquery,\n\t\t\t] ),\n\t\t};\n\t}, [] );\n\n\tconst filteredTemplateParts = useMemo( () => {\n\t\tif ( ! templateParts ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn (\n\t\t\ttemplateParts.filter(\n\t\t\t\t( templatePart ) =>\n\t\t\t\t\tcreateTemplatePartId(\n\t\t\t\t\t\ttemplatePart.theme,\n\t\t\t\t\t\ttemplatePart.slug\n\t\t\t\t\t) !== excludedId &&\n\t\t\t\t\t( ! area ||\n\t\t\t\t\t\t'uncategorized' === area ||\n\t\t\t\t\t\ttemplatePart.area === area )\n\t\t\t) || []\n\t\t);\n\t}, [ templateParts, area, excludedId ] );\n\n\treturn {\n\t\ttemplateParts: filteredTemplateParts,\n\t\tisResolving,\n\t};\n}\n\n/**\n * Retrieves the available block patterns for the given area.\n *\n * @param {string} area Template part area.\n * @param {string} clientId Block Client ID. (The container of the block can impact allowed blocks).\n *\n * @return {Array} array of block patterns.\n */\nexport function useAlternativeBlockPatterns( area, clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst blockNameWithArea = area\n\t\t\t\t? `core/template-part/${ area }`\n\t\t\t\t: 'core/template-part';\n\t\t\tconst { getBlockRootClientId, getPatternsByBlockTypes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\treturn getPatternsByBlockTypes( blockNameWithArea, rootClientId );\n\t\t},\n\t\t[ area, clientId ]\n\t);\n}\n\nexport function useCreateTemplatePartFromBlocks( area, setAttributes ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\treturn async ( blocks = [], title = __( 'Untitled Template Part' ) ) => {\n\t\t// Currently template parts only allow latin chars.\n\t\t// Fallback slug will receive suffix by default.\n\t\tconst cleanSlug =\n\t\t\tkebabCase( title ).replace( /[^\\w-]+/g, '' ) || 'wp-custom-part';\n\n\t\t// If we have `area` set from block attributes, means an exposed\n\t\t// block variation was inserted. So add this prop to the template\n\t\t// part entity on creation. Afterwards remove `area` value from\n\t\t// block attributes.\n\t\tconst record = {\n\t\t\ttitle,\n\t\t\tslug: cleanSlug,\n\t\t\tcontent: serialize( blocks ),\n\t\t\t// `area` is filterable on the server and defaults to `UNCATEGORIZED`\n\t\t\t// if provided value is not allowed.\n\t\t\tarea,\n\t\t};\n\t\tconst templatePart = await saveEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\trecord\n\t\t);\n\t\tsetAttributes( {\n\t\t\tslug: templatePart.slug,\n\t\t\ttheme: templatePart.theme,\n\t\t\tarea: undefined,\n\t\t} );\n\t};\n}\n\n/**\n * Retrieves the template part area object.\n *\n * @param {string} area Template part area identifier.\n *\n * @return {{icon: Object, label: string, tagName: string}} Template Part area.\n */\nexport function useTemplatePartArea( area ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\t// FIXME: @wordpress/block-library should not depend on @wordpress/editor.\n\t\t\t// Blocks can be loaded into a *non-post* block editor.\n\t\t\t/* eslint-disable @wordpress/data-no-store-string-literals */\n\t\t\tconst definedAreas =\n\t\t\t\tselect(\n\t\t\t\t\t'core/editor'\n\t\t\t\t).__experimentalGetDefaultTemplatePartAreas();\n\t\t\t/* eslint-enable @wordpress/data-no-store-string-literals */\n\n\t\t\tconst selectedArea = definedAreas.find(\n\t\t\t\t( definedArea ) => definedArea.area === area\n\t\t\t);\n\t\t\tconst defaultArea = definedAreas.find(\n\t\t\t\t( definedArea ) => definedArea.area === 'uncategorized'\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ticon: selectedArea?.icon || defaultArea?.icon,\n\t\t\t\tlabel: selectedArea?.label || __( 'Template Part' ),\n\t\t\t\ttagName: selectedArea?.area_tag ?? 'div',\n\t\t\t};\n\t\t},\n\t\t[ area ]\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/template-part/edit/utils/hooks.js"],"names":["paramCase","kebabCase","useDispatch","useSelect","store","coreStore","blockEditorStore","useMemo","serialize","__","createTemplatePartId","useAlternativeTemplateParts","area","excludedId","templateParts","isResolving","select","getEntityRecords","_isResolving","query","per_page","filteredTemplateParts","filter","templatePart","theme","slug","useAlternativeBlockPatterns","clientId","blockNameWithArea","getBlockRootClientId","getPatternsByBlockTypes","rootClientId","useCreateTemplatePartFromBlocks","setAttributes","saveEntityRecord","blocks","title","cleanSlug","replace","record","content","undefined","useTemplatePartArea","definedAreas","__experimentalGetDefaultTemplatePartAreas","selectedArea","find","definedArea","defaultArea","icon","label","tagName","area_tag"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { paramCase as kebabCase } from 'change-case';\n\n/**\n * WordPress dependencies\n */\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useMemo } from '@wordpress/element';\nimport { serialize } from '@wordpress/blocks';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { createTemplatePartId } from './create-template-part-id';\n\n/**\n * Retrieves the available template parts for the given area.\n *\n * @param {string} area Template part area.\n * @param {string} excludedId Template part ID to exclude.\n *\n * @return {{ templateParts: Array, isResolving: boolean }} array of template parts.\n */\nexport function useAlternativeTemplateParts( area, excludedId ) {\n\tconst { templateParts, isResolving } = useSelect( ( select ) => {\n\t\tconst { getEntityRecords, isResolving: _isResolving } =\n\t\t\tselect( coreStore );\n\t\tconst query = { per_page: -1 };\n\t\treturn {\n\t\t\ttemplateParts: getEntityRecords(\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\tquery\n\t\t\t),\n\t\t\tisResolving: _isResolving( 'getEntityRecords', [\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\tquery,\n\t\t\t] ),\n\t\t};\n\t}, [] );\n\n\tconst filteredTemplateParts = useMemo( () => {\n\t\tif ( ! templateParts ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn (\n\t\t\ttemplateParts.filter(\n\t\t\t\t( templatePart ) =>\n\t\t\t\t\tcreateTemplatePartId(\n\t\t\t\t\t\ttemplatePart.theme,\n\t\t\t\t\t\ttemplatePart.slug\n\t\t\t\t\t) !== excludedId &&\n\t\t\t\t\t( ! area ||\n\t\t\t\t\t\t'uncategorized' === area ||\n\t\t\t\t\t\ttemplatePart.area === area )\n\t\t\t) || []\n\t\t);\n\t}, [ templateParts, area, excludedId ] );\n\n\treturn {\n\t\ttemplateParts: filteredTemplateParts,\n\t\tisResolving,\n\t};\n}\n\n/**\n * Retrieves the available block patterns for the given area.\n *\n * @param {string} area Template part area.\n * @param {string} clientId Block Client ID. (The container of the block can impact allowed blocks).\n *\n * @return {Array} array of block patterns.\n */\nexport function useAlternativeBlockPatterns( area, clientId ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst blockNameWithArea = area\n\t\t\t\t? `core/template-part/${ area }`\n\t\t\t\t: 'core/template-part';\n\t\t\tconst { getBlockRootClientId, getPatternsByBlockTypes } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\t\t\treturn getPatternsByBlockTypes( blockNameWithArea, rootClientId );\n\t\t},\n\t\t[ area, clientId ]\n\t);\n}\n\nexport function useCreateTemplatePartFromBlocks( area, setAttributes ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\treturn async ( blocks = [], title = __( 'Untitled Template Part' ) ) => {\n\t\t// Currently template parts only allow latin chars.\n\t\t// Fallback slug will receive suffix by default.\n\t\tconst cleanSlug =\n\t\t\tkebabCase( title ).replace( /[^\\w-]+/g, '' ) || 'wp-custom-part';\n\n\t\t// If we have `area` set from block attributes, means an exposed\n\t\t// block variation was inserted. So add this prop to the template\n\t\t// part entity on creation. Afterwards remove `area` value from\n\t\t// block attributes.\n\t\tconst record = {\n\t\t\ttitle,\n\t\t\tslug: cleanSlug,\n\t\t\tcontent: serialize( blocks ),\n\t\t\t// `area` is filterable on the server and defaults to `UNCATEGORIZED`\n\t\t\t// if provided value is not allowed.\n\t\t\tarea,\n\t\t};\n\t\tconst templatePart = await saveEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\trecord\n\t\t);\n\t\tsetAttributes( {\n\t\t\tslug: templatePart.slug,\n\t\t\ttheme: templatePart.theme,\n\t\t\tarea: undefined,\n\t\t} );\n\t};\n}\n\n/**\n * Retrieves the template part area object.\n *\n * @param {string} area Template part area identifier.\n *\n * @return {{icon: Object, label: string, tagName: string}} Template Part area.\n */\nexport function useTemplatePartArea( area ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\t// FIXME: @wordpress/block-library should not depend on @wordpress/editor.\n\t\t\t// Blocks can be loaded into a *non-post* block editor.\n\t\t\t/* eslint-disable @wordpress/data-no-store-string-literals */\n\t\t\tconst definedAreas =\n\t\t\t\tselect(\n\t\t\t\t\t'core/editor'\n\t\t\t\t).__experimentalGetDefaultTemplatePartAreas();\n\t\t\t/* eslint-enable @wordpress/data-no-store-string-literals */\n\n\t\t\tconst selectedArea = definedAreas.find(\n\t\t\t\t( definedArea ) => definedArea.area === area\n\t\t\t);\n\t\t\tconst defaultArea = definedAreas.find(\n\t\t\t\t( definedArea ) => definedArea.area === 'uncategorized'\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ticon: selectedArea?.icon || defaultArea?.icon,\n\t\t\t\tlabel: selectedArea?.label || __( 'Template Part' ),\n\t\t\t\ttagName: selectedArea?.area_tag ?? 'div',\n\t\t\t};\n\t\t},\n\t\t[ area ]\n\t);\n}\n"]}
@@ -10,6 +10,11 @@ import { deepSignal, peek } from 'deepsignal';
10
10
  * Internal dependencies
11
11
  */
12
12
 
13
+ import { createPortal } from './portals.js';
14
+ /**
15
+ * Internal dependencies
16
+ */
17
+
13
18
  import { useSignalEffect } from './utils';
14
19
  import { directive } from './hooks';
15
20
 
@@ -51,16 +56,34 @@ export default (() => {
51
56
  return createElement(Provider, {
52
57
  value: value
53
58
  }, children);
59
+ }, {
60
+ priority: 5
61
+ }); // data-wp-body
62
+
63
+ directive('body', _ref2 => {
64
+ let {
65
+ props: {
66
+ children
67
+ },
68
+ context: inherited
69
+ } = _ref2;
70
+ const {
71
+ Provider
72
+ } = inherited;
73
+ const inheritedValue = useContext(inherited);
74
+ return createPortal(createElement(Provider, {
75
+ value: inheritedValue
76
+ }, children), document.body);
54
77
  }); // data-wp-effect.[name]
55
78
 
56
- directive('effect', _ref2 => {
79
+ directive('effect', _ref3 => {
57
80
  let {
58
81
  directives: {
59
82
  effect
60
83
  },
61
84
  context,
62
85
  evaluate
63
- } = _ref2;
86
+ } = _ref3;
64
87
  const contextValue = useContext(context);
65
88
  Object.values(effect).forEach(path => {
66
89
  useSignalEffect(() => {
@@ -71,14 +94,14 @@ export default (() => {
71
94
  });
72
95
  }); // data-wp-init.[name]
73
96
 
74
- directive('init', _ref3 => {
97
+ directive('init', _ref4 => {
75
98
  let {
76
99
  directives: {
77
100
  init
78
101
  },
79
102
  context,
80
103
  evaluate
81
- } = _ref3;
104
+ } = _ref4;
82
105
  const contextValue = useContext(context);
83
106
  Object.values(init).forEach(path => {
84
107
  useEffect(() => {
@@ -89,7 +112,7 @@ export default (() => {
89
112
  });
90
113
  }); // data-wp-on.[event]
91
114
 
92
- directive('on', _ref4 => {
115
+ directive('on', _ref5 => {
93
116
  let {
94
117
  directives: {
95
118
  on
@@ -97,10 +120,10 @@ export default (() => {
97
120
  element,
98
121
  evaluate,
99
122
  context
100
- } = _ref4;
123
+ } = _ref5;
101
124
  const contextValue = useContext(context);
102
- Object.entries(on).forEach(_ref5 => {
103
- let [name, path] = _ref5;
125
+ Object.entries(on).forEach(_ref6 => {
126
+ let [name, path] = _ref6;
104
127
 
105
128
  element.props[`on${name}`] = event => {
106
129
  evaluate(path, {
@@ -111,7 +134,7 @@ export default (() => {
111
134
  });
112
135
  }); // data-wp-class.[classname]
113
136
 
114
- directive('class', _ref6 => {
137
+ directive('class', _ref7 => {
115
138
  let {
116
139
  directives: {
117
140
  class: className
@@ -119,7 +142,7 @@ export default (() => {
119
142
  element,
120
143
  evaluate,
121
144
  context
122
- } = _ref6;
145
+ } = _ref7;
123
146
  const contextValue = useContext(context);
124
147
  Object.keys(className).filter(n => n !== 'default').forEach(name => {
125
148
  const result = evaluate(className[name], {
@@ -142,7 +165,7 @@ export default (() => {
142
165
  });
143
166
  }); // data-wp-bind.[attribute]
144
167
 
145
- directive('bind', _ref7 => {
168
+ directive('bind', _ref8 => {
146
169
  let {
147
170
  directives: {
148
171
  bind
@@ -150,28 +173,32 @@ export default (() => {
150
173
  element,
151
174
  context,
152
175
  evaluate
153
- } = _ref7;
176
+ } = _ref8;
154
177
  const contextValue = useContext(context);
155
- Object.entries(bind).filter(n => n !== 'default').forEach(_ref8 => {
156
- let [attribute, path] = _ref8;
178
+ Object.entries(bind).filter(n => n !== 'default').forEach(_ref9 => {
179
+ let [attribute, path] = _ref9;
157
180
  const result = evaluate(path, {
158
181
  context: contextValue
159
182
  });
160
- element.props[attribute] = result;
183
+ element.props[attribute] = result; // This seems necessary because Preact doesn't change the attributes
184
+ // on the hydration, so we have to do it manually. It doesn't need
185
+ // deps because it only needs to do it the first time.
186
+
161
187
  useEffect(() => {
162
- // This seems necessary because Preact doesn't change the attributes
163
- // on the hydration, so we have to do it manually. It doesn't need
164
- // deps because it only needs to do it the first time.
165
- if (result === false) {
188
+ // aria- and data- attributes have no boolean representation.
189
+ // A `false` value is different from the attribute not being
190
+ // present, so we can't remove it.
191
+ // We follow Preact's logic: https://github.com/preactjs/preact/blob/ea49f7a0f9d1ff2c98c0bdd66aa0cbc583055246/src/diff/props.js#L131C24-L136
192
+ if (result === false && attribute[4] !== '-') {
166
193
  element.ref.current.removeAttribute(attribute);
167
194
  } else {
168
- element.ref.current.setAttribute(attribute, result === true ? '' : result);
195
+ element.ref.current.setAttribute(attribute, result === true && attribute[4] !== '-' ? '' : result);
169
196
  }
170
197
  }, []);
171
198
  });
172
199
  }); // data-wp-ignore
173
200
 
174
- directive('ignore', _ref9 => {
201
+ directive('ignore', _ref10 => {
175
202
  let {
176
203
  element: {
177
204
  type: Type,
@@ -180,7 +207,7 @@ export default (() => {
180
207
  ...rest
181
208
  }
182
209
  }
183
- } = _ref9;
210
+ } = _ref10;
184
211
  // Preserve the initial inner HTML.
185
212
  const cached = useMemo(() => innerHTML, []);
186
213
  return createElement(Type, _extends({
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/directives.js"],"names":["useContext","useMemo","useEffect","deepSignal","peek","useSignalEffect","directive","isObject","item","Array","isArray","mergeDeepSignals","target","source","k","directives","context","default","props","children","inherited","Provider","inheritedValue","value","localValue","effect","evaluate","contextValue","Object","values","forEach","path","init","on","element","entries","name","event","class","className","keys","filter","n","result","currentClass","classFinder","RegExp","replace","trim","test","ref","current","classList","remove","add","bind","attribute","removeAttribute","setAttribute","type","Type","innerHTML","rest","cached","__html"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useContext, useMemo, useEffect } from 'preact/hooks';\nimport { deepSignal, peek } from 'deepsignal';\n\n/**\n * Internal dependencies\n */\nimport { useSignalEffect } from './utils';\nimport { directive } from './hooks';\n\nconst isObject = ( item ) =>\n\titem && typeof item === 'object' && ! Array.isArray( item );\n\nconst mergeDeepSignals = ( target, source ) => {\n\tfor ( const k in source ) {\n\t\tif ( typeof peek( target, k ) === 'undefined' ) {\n\t\t\ttarget[ `$${ k }` ] = source[ `$${ k }` ];\n\t\t} else if (\n\t\t\tisObject( peek( target, k ) ) &&\n\t\t\tisObject( peek( source, k ) )\n\t\t) {\n\t\t\tmergeDeepSignals(\n\t\t\t\ttarget[ `$${ k }` ].peek(),\n\t\t\t\tsource[ `$${ k }` ].peek()\n\t\t\t);\n\t\t}\n\t}\n};\n\nexport default () => {\n\t// data-wp-context\n\tdirective(\n\t\t'context',\n\t\t( {\n\t\t\tdirectives: {\n\t\t\t\tcontext: { default: context },\n\t\t\t},\n\t\t\tprops: { children },\n\t\t\tcontext: inherited,\n\t\t} ) => {\n\t\t\tconst { Provider } = inherited;\n\t\t\tconst inheritedValue = useContext( inherited );\n\t\t\tconst value = useMemo( () => {\n\t\t\t\tconst localValue = deepSignal( context );\n\t\t\t\tmergeDeepSignals( localValue, inheritedValue );\n\t\t\t\treturn localValue;\n\t\t\t}, [ context, inheritedValue ] );\n\n\t\t\treturn <Provider value={ value }>{ children }</Provider>;\n\t\t}\n\t);\n\n\t// data-wp-effect.[name]\n\tdirective( 'effect', ( { directives: { effect }, context, evaluate } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.values( effect ).forEach( ( path ) => {\n\t\t\tuseSignalEffect( () => {\n\t\t\t\treturn evaluate( path, { context: contextValue } );\n\t\t\t} );\n\t\t} );\n\t} );\n\n\t// data-wp-init.[name]\n\tdirective( 'init', ( { directives: { init }, context, evaluate } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.values( init ).forEach( ( path ) => {\n\t\t\tuseEffect( () => {\n\t\t\t\treturn evaluate( path, { context: contextValue } );\n\t\t\t}, [] );\n\t\t} );\n\t} );\n\n\t// data-wp-on.[event]\n\tdirective( 'on', ( { directives: { on }, element, evaluate, context } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.entries( on ).forEach( ( [ name, path ] ) => {\n\t\t\telement.props[ `on${ name }` ] = ( event ) => {\n\t\t\t\tevaluate( path, { event, context: contextValue } );\n\t\t\t};\n\t\t} );\n\t} );\n\n\t// data-wp-class.[classname]\n\tdirective(\n\t\t'class',\n\t\t( {\n\t\t\tdirectives: { class: className },\n\t\t\telement,\n\t\t\tevaluate,\n\t\t\tcontext,\n\t\t} ) => {\n\t\t\tconst contextValue = useContext( context );\n\t\t\tObject.keys( className )\n\t\t\t\t.filter( ( n ) => n !== 'default' )\n\t\t\t\t.forEach( ( name ) => {\n\t\t\t\t\tconst result = evaluate( className[ name ], {\n\t\t\t\t\t\tclassName: name,\n\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t} );\n\t\t\t\t\tconst currentClass = element.props.class || '';\n\t\t\t\t\tconst classFinder = new RegExp(\n\t\t\t\t\t\t`(^|\\\\s)${ name }(\\\\s|$)`,\n\t\t\t\t\t\t'g'\n\t\t\t\t\t);\n\t\t\t\t\tif ( ! result )\n\t\t\t\t\t\telement.props.class = currentClass\n\t\t\t\t\t\t\t.replace( classFinder, ' ' )\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\telse if ( ! classFinder.test( currentClass ) )\n\t\t\t\t\t\telement.props.class = currentClass\n\t\t\t\t\t\t\t? `${ currentClass } ${ name }`\n\t\t\t\t\t\t\t: name;\n\n\t\t\t\t\tuseEffect( () => {\n\t\t\t\t\t\t// This seems necessary because Preact doesn't change the class\n\t\t\t\t\t\t// names on the hydration, so we have to do it manually. It doesn't\n\t\t\t\t\t\t// need deps because it only needs to do it the first time.\n\t\t\t\t\t\tif ( ! result ) {\n\t\t\t\t\t\t\telement.ref.current.classList.remove( name );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.ref.current.classList.add( name );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [] );\n\t\t\t\t} );\n\t\t}\n\t);\n\n\t// data-wp-bind.[attribute]\n\tdirective(\n\t\t'bind',\n\t\t( { directives: { bind }, element, context, evaluate } ) => {\n\t\t\tconst contextValue = useContext( context );\n\t\t\tObject.entries( bind )\n\t\t\t\t.filter( ( n ) => n !== 'default' )\n\t\t\t\t.forEach( ( [ attribute, path ] ) => {\n\t\t\t\t\tconst result = evaluate( path, {\n\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t} );\n\t\t\t\t\telement.props[ attribute ] = result;\n\n\t\t\t\t\tuseEffect( () => {\n\t\t\t\t\t\t// This seems necessary because Preact doesn't change the attributes\n\t\t\t\t\t\t// on the hydration, so we have to do it manually. It doesn't need\n\t\t\t\t\t\t// deps because it only needs to do it the first time.\n\t\t\t\t\t\tif ( result === false ) {\n\t\t\t\t\t\t\telement.ref.current.removeAttribute( attribute );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.ref.current.setAttribute(\n\t\t\t\t\t\t\t\tattribute,\n\t\t\t\t\t\t\t\tresult === true ? '' : result\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [] );\n\t\t\t\t} );\n\t\t}\n\t);\n\n\t// data-wp-ignore\n\tdirective(\n\t\t'ignore',\n\t\t( {\n\t\t\telement: {\n\t\t\t\ttype: Type,\n\t\t\t\tprops: { innerHTML, ...rest },\n\t\t\t},\n\t\t} ) => {\n\t\t\t// Preserve the initial inner HTML.\n\t\t\tconst cached = useMemo( () => innerHTML, [] );\n\t\t\treturn (\n\t\t\t\t<Type\n\t\t\t\t\tdangerouslySetInnerHTML={ { __html: cached } }\n\t\t\t\t\t{ ...rest }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t);\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/directives.js"],"names":["useContext","useMemo","useEffect","deepSignal","peek","createPortal","useSignalEffect","directive","isObject","item","Array","isArray","mergeDeepSignals","target","source","k","directives","context","default","props","children","inherited","Provider","inheritedValue","value","localValue","priority","document","body","effect","evaluate","contextValue","Object","values","forEach","path","init","on","element","entries","name","event","class","className","keys","filter","n","result","currentClass","classFinder","RegExp","replace","trim","test","ref","current","classList","remove","add","bind","attribute","removeAttribute","setAttribute","type","Type","innerHTML","rest","cached","__html"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useContext, useMemo, useEffect } from 'preact/hooks';\nimport { deepSignal, peek } from 'deepsignal';\n/**\n * Internal dependencies\n */\nimport { createPortal } from './portals.js';\n\n/**\n * Internal dependencies\n */\nimport { useSignalEffect } from './utils';\nimport { directive } from './hooks';\n\nconst isObject = ( item ) =>\n\titem && typeof item === 'object' && ! Array.isArray( item );\n\nconst mergeDeepSignals = ( target, source ) => {\n\tfor ( const k in source ) {\n\t\tif ( typeof peek( target, k ) === 'undefined' ) {\n\t\t\ttarget[ `$${ k }` ] = source[ `$${ k }` ];\n\t\t} else if (\n\t\t\tisObject( peek( target, k ) ) &&\n\t\t\tisObject( peek( source, k ) )\n\t\t) {\n\t\t\tmergeDeepSignals(\n\t\t\t\ttarget[ `$${ k }` ].peek(),\n\t\t\t\tsource[ `$${ k }` ].peek()\n\t\t\t);\n\t\t}\n\t}\n};\n\nexport default () => {\n\t// data-wp-context\n\tdirective(\n\t\t'context',\n\t\t( {\n\t\t\tdirectives: {\n\t\t\t\tcontext: { default: context },\n\t\t\t},\n\t\t\tprops: { children },\n\t\t\tcontext: inherited,\n\t\t} ) => {\n\t\t\tconst { Provider } = inherited;\n\t\t\tconst inheritedValue = useContext( inherited );\n\t\t\tconst value = useMemo( () => {\n\t\t\t\tconst localValue = deepSignal( context );\n\t\t\t\tmergeDeepSignals( localValue, inheritedValue );\n\t\t\t\treturn localValue;\n\t\t\t}, [ context, inheritedValue ] );\n\n\t\t\treturn <Provider value={ value }>{ children }</Provider>;\n\t\t},\n\t\t{ priority: 5 }\n\t);\n\n\t// data-wp-body\n\tdirective( 'body', ( { props: { children }, context: inherited } ) => {\n\t\tconst { Provider } = inherited;\n\t\tconst inheritedValue = useContext( inherited );\n\t\treturn createPortal(\n\t\t\t<Provider value={ inheritedValue }>{ children }</Provider>,\n\t\t\tdocument.body\n\t\t);\n\t} );\n\n\t// data-wp-effect.[name]\n\tdirective( 'effect', ( { directives: { effect }, context, evaluate } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.values( effect ).forEach( ( path ) => {\n\t\t\tuseSignalEffect( () => {\n\t\t\t\treturn evaluate( path, { context: contextValue } );\n\t\t\t} );\n\t\t} );\n\t} );\n\n\t// data-wp-init.[name]\n\tdirective( 'init', ( { directives: { init }, context, evaluate } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.values( init ).forEach( ( path ) => {\n\t\t\tuseEffect( () => {\n\t\t\t\treturn evaluate( path, { context: contextValue } );\n\t\t\t}, [] );\n\t\t} );\n\t} );\n\n\t// data-wp-on.[event]\n\tdirective( 'on', ( { directives: { on }, element, evaluate, context } ) => {\n\t\tconst contextValue = useContext( context );\n\t\tObject.entries( on ).forEach( ( [ name, path ] ) => {\n\t\t\telement.props[ `on${ name }` ] = ( event ) => {\n\t\t\t\tevaluate( path, { event, context: contextValue } );\n\t\t\t};\n\t\t} );\n\t} );\n\n\t// data-wp-class.[classname]\n\tdirective(\n\t\t'class',\n\t\t( {\n\t\t\tdirectives: { class: className },\n\t\t\telement,\n\t\t\tevaluate,\n\t\t\tcontext,\n\t\t} ) => {\n\t\t\tconst contextValue = useContext( context );\n\t\t\tObject.keys( className )\n\t\t\t\t.filter( ( n ) => n !== 'default' )\n\t\t\t\t.forEach( ( name ) => {\n\t\t\t\t\tconst result = evaluate( className[ name ], {\n\t\t\t\t\t\tclassName: name,\n\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t} );\n\t\t\t\t\tconst currentClass = element.props.class || '';\n\t\t\t\t\tconst classFinder = new RegExp(\n\t\t\t\t\t\t`(^|\\\\s)${ name }(\\\\s|$)`,\n\t\t\t\t\t\t'g'\n\t\t\t\t\t);\n\t\t\t\t\tif ( ! result )\n\t\t\t\t\t\telement.props.class = currentClass\n\t\t\t\t\t\t\t.replace( classFinder, ' ' )\n\t\t\t\t\t\t\t.trim();\n\t\t\t\t\telse if ( ! classFinder.test( currentClass ) )\n\t\t\t\t\t\telement.props.class = currentClass\n\t\t\t\t\t\t\t? `${ currentClass } ${ name }`\n\t\t\t\t\t\t\t: name;\n\n\t\t\t\t\tuseEffect( () => {\n\t\t\t\t\t\t// This seems necessary because Preact doesn't change the class\n\t\t\t\t\t\t// names on the hydration, so we have to do it manually. It doesn't\n\t\t\t\t\t\t// need deps because it only needs to do it the first time.\n\t\t\t\t\t\tif ( ! result ) {\n\t\t\t\t\t\t\telement.ref.current.classList.remove( name );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.ref.current.classList.add( name );\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [] );\n\t\t\t\t} );\n\t\t}\n\t);\n\n\t// data-wp-bind.[attribute]\n\tdirective(\n\t\t'bind',\n\t\t( { directives: { bind }, element, context, evaluate } ) => {\n\t\t\tconst contextValue = useContext( context );\n\t\t\tObject.entries( bind )\n\t\t\t\t.filter( ( n ) => n !== 'default' )\n\t\t\t\t.forEach( ( [ attribute, path ] ) => {\n\t\t\t\t\tconst result = evaluate( path, {\n\t\t\t\t\t\tcontext: contextValue,\n\t\t\t\t\t} );\n\t\t\t\t\telement.props[ attribute ] = result;\n\n\t\t\t\t\t// This seems necessary because Preact doesn't change the attributes\n\t\t\t\t\t// on the hydration, so we have to do it manually. It doesn't need\n\t\t\t\t\t// deps because it only needs to do it the first time.\n\t\t\t\t\tuseEffect( () => {\n\t\t\t\t\t\t// aria- and data- attributes have no boolean representation.\n\t\t\t\t\t\t// A `false` value is different from the attribute not being\n\t\t\t\t\t\t// present, so we can't remove it.\n\t\t\t\t\t\t// We follow Preact's logic: https://github.com/preactjs/preact/blob/ea49f7a0f9d1ff2c98c0bdd66aa0cbc583055246/src/diff/props.js#L131C24-L136\n\t\t\t\t\t\tif ( result === false && attribute[ 4 ] !== '-' ) {\n\t\t\t\t\t\t\telement.ref.current.removeAttribute( attribute );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.ref.current.setAttribute(\n\t\t\t\t\t\t\t\tattribute,\n\t\t\t\t\t\t\t\tresult === true && attribute[ 4 ] !== '-'\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: result\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [] );\n\t\t\t\t} );\n\t\t}\n\t);\n\n\t// data-wp-ignore\n\tdirective(\n\t\t'ignore',\n\t\t( {\n\t\t\telement: {\n\t\t\t\ttype: Type,\n\t\t\t\tprops: { innerHTML, ...rest },\n\t\t\t},\n\t\t} ) => {\n\t\t\t// Preserve the initial inner HTML.\n\t\t\tconst cached = useMemo( () => innerHTML, [] );\n\t\t\treturn (\n\t\t\t\t<Type\n\t\t\t\t\tdangerouslySetInnerHTML={ { __html: cached } }\n\t\t\t\t\t{ ...rest }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t);\n};\n"]}
@@ -1,7 +1,9 @@
1
+ import { createElement } from "@wordpress/element";
2
+
1
3
  /**
2
4
  * External dependencies
3
5
  */
4
- import { h, options, createContext } from 'preact';
6
+ import { h, options, createContext, cloneElement } from 'preact';
5
7
  import { useRef, useMemo } from 'preact/hooks';
6
8
  /**
7
9
  * Internal dependencies
@@ -12,18 +14,21 @@ import { rawStore as store } from './store'; // Main context.
12
14
  const context = createContext({}); // WordPress Directives.
13
15
 
14
16
  const directiveMap = {};
15
- export const directive = (name, cb) => {
17
+ const directivePriorities = {};
18
+ export const directive = function (name, cb) {
19
+ let {
20
+ priority = 10
21
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
16
22
  directiveMap[name] = cb;
23
+ directivePriorities[name] = priority;
17
24
  }; // Resolve the path to some property of the store object.
18
25
 
19
26
  const resolve = (path, ctx) => {
20
- // If path starts with !, remove it and save a flag.
21
- const hasNegationOperator = path[0] === '!' && !!(path = path.slice(1));
22
27
  let current = { ...store,
23
28
  context: ctx
24
29
  };
25
30
  path.split('.').forEach(p => current = current[p]);
26
- return hasNegationOperator ? !current : current;
31
+ return current;
27
32
  }; // Generate the evaluate function.
28
33
 
29
34
 
@@ -33,32 +38,91 @@ const getEvaluate = function () {
33
38
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
34
39
  return function (path) {
35
40
  let extraArgs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
41
+ // If path starts with !, remove it and save a flag.
42
+ const hasNegationOperator = path[0] === '!' && !!(path = path.slice(1));
36
43
  const value = resolve(path, extraArgs.context);
37
- return typeof value === 'function' ? value({
44
+ const returnValue = typeof value === 'function' ? value({
38
45
  ref: ref.current,
39
46
  ...store,
40
47
  ...extraArgs
41
48
  }) : value;
49
+ return hasNegationOperator ? !returnValue : returnValue;
42
50
  };
43
- }; // Directive wrapper.
51
+ }; // Separate directives by priority. The resulting array contains objects
52
+ // of directives grouped by same priority, and sorted in ascending order.
53
+
54
+
55
+ const usePriorityLevels = directives => useMemo(() => {
56
+ const byPriority = Object.entries(directives).reduce((acc, _ref) => {
57
+ let [name, values] = _ref;
58
+ const priority = directivePriorities[name];
59
+ if (!acc[priority]) acc[priority] = {};
60
+ acc[priority][name] = values;
61
+ return acc;
62
+ }, {});
63
+ return Object.entries(byPriority).sort((_ref2, _ref3) => {
64
+ let [p1] = _ref2;
65
+ let [p2] = _ref3;
66
+ return p1 - p2;
67
+ }).map(_ref4 => {
68
+ let [, obj] = _ref4;
69
+ return obj;
70
+ });
71
+ }, [directives]); // Directive wrapper.
44
72
 
45
73
 
46
- const Directive = _ref => {
74
+ const Directive = _ref5 => {
47
75
  let {
48
76
  type,
49
77
  directives,
50
78
  props: originalProps
51
- } = _ref;
79
+ } = _ref5;
52
80
  const ref = useRef(null);
53
81
  const element = h(type, { ...originalProps,
54
82
  ref
55
83
  });
56
- const props = { ...originalProps,
57
- children: element
58
- };
59
84
  const evaluate = useMemo(() => getEvaluate({
60
85
  ref
61
- }), []);
86
+ }), []); // Add wrappers recursively for each priority level.
87
+
88
+ const byPriorityLevel = usePriorityLevels(directives);
89
+ return createElement(RecursivePriorityLevel, {
90
+ directives: byPriorityLevel,
91
+ element: element,
92
+ evaluate: evaluate,
93
+ originalProps: originalProps
94
+ });
95
+ }; // Priority level wrapper.
96
+
97
+
98
+ const RecursivePriorityLevel = _ref6 => {
99
+ let {
100
+ directives: [directives, ...rest],
101
+ element,
102
+ evaluate,
103
+ originalProps
104
+ } = _ref6;
105
+ // This element needs to be a fresh copy so we are not modifying an already
106
+ // rendered element with Preact's internal properties initialized. This
107
+ // prevents an error with changes in `element.props.children` not being
108
+ // reflected in `element.__k`.
109
+ element = cloneElement(element); // Recursively render the wrapper for the next priority level.
110
+ //
111
+ // Note that, even though we're instantiating a vnode with a
112
+ // `RecursivePriorityLevel` here, its render function will not be executed
113
+ // just yet. Actually, it will be delayed until the current render function
114
+ // has finished. That ensures directives in the current priorty level have
115
+ // run (and thus modified the passed `element`) before the next level.
116
+
117
+ const children = rest.length > 0 ? createElement(RecursivePriorityLevel, {
118
+ directives: rest,
119
+ element: element,
120
+ evaluate: evaluate,
121
+ originalProps: originalProps
122
+ }) : element;
123
+ const props = { ...originalProps,
124
+ children
125
+ };
62
126
  const directiveArgs = {
63
127
  directives,
64
128
  props,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/hooks.js"],"names":["h","options","createContext","useRef","useMemo","rawStore","store","context","directiveMap","directive","name","cb","resolve","path","ctx","hasNegationOperator","slice","current","split","forEach","p","getEvaluate","ref","extraArgs","value","Directive","type","directives","props","originalProps","element","children","evaluate","directiveArgs","d","wrapper","undefined","old","vnode","__directives"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { h, options, createContext } from 'preact';\nimport { useRef, useMemo } from 'preact/hooks';\n/**\n * Internal dependencies\n */\nimport { rawStore as store } from './store';\n\n// Main context.\nconst context = createContext( {} );\n\n// WordPress Directives.\nconst directiveMap = {};\nexport const directive = ( name, cb ) => {\n\tdirectiveMap[ name ] = cb;\n};\n\n// Resolve the path to some property of the store object.\nconst resolve = ( path, ctx ) => {\n\t// If path starts with !, remove it and save a flag.\n\tconst hasNegationOperator =\n\t\tpath[ 0 ] === '!' && !! ( path = path.slice( 1 ) );\n\tlet current = { ...store, context: ctx };\n\tpath.split( '.' ).forEach( ( p ) => ( current = current[ p ] ) );\n\treturn hasNegationOperator ? ! current : current;\n};\n\n// Generate the evaluate function.\nconst getEvaluate =\n\t( { ref } = {} ) =>\n\t( path, extraArgs = {} ) => {\n\t\tconst value = resolve( path, extraArgs.context );\n\t\treturn typeof value === 'function'\n\t\t\t? value( {\n\t\t\t\t\tref: ref.current,\n\t\t\t\t\t...store,\n\t\t\t\t\t...extraArgs,\n\t\t\t } )\n\t\t\t: value;\n\t};\n\n// Directive wrapper.\nconst Directive = ( { type, directives, props: originalProps } ) => {\n\tconst ref = useRef( null );\n\tconst element = h( type, { ...originalProps, ref } );\n\tconst props = { ...originalProps, children: element };\n\tconst evaluate = useMemo( () => getEvaluate( { ref } ), [] );\n\tconst directiveArgs = { directives, props, element, context, evaluate };\n\n\tfor ( const d in directives ) {\n\t\tconst wrapper = directiveMap[ d ]?.( directiveArgs );\n\t\tif ( wrapper !== undefined ) props.children = wrapper;\n\t}\n\n\treturn props.children;\n};\n\n// Preact Options Hook called each time a vnode is created.\nconst old = options.vnode;\noptions.vnode = ( vnode ) => {\n\tif ( vnode.props.__directives ) {\n\t\tconst props = vnode.props;\n\t\tconst directives = props.__directives;\n\t\tdelete props.__directives;\n\t\tvnode.props = {\n\t\t\ttype: vnode.type,\n\t\t\tdirectives,\n\t\t\tprops,\n\t\t};\n\t\tvnode.type = Directive;\n\t}\n\n\tif ( old ) old( vnode );\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/block-library/src/utils/interactivity/hooks.js"],"names":["h","options","createContext","cloneElement","useRef","useMemo","rawStore","store","context","directiveMap","directivePriorities","directive","name","cb","priority","resolve","path","ctx","current","split","forEach","p","getEvaluate","ref","extraArgs","hasNegationOperator","slice","value","returnValue","usePriorityLevels","directives","byPriority","Object","entries","reduce","acc","values","sort","p1","p2","map","obj","Directive","type","props","originalProps","element","evaluate","byPriorityLevel","RecursivePriorityLevel","rest","children","length","directiveArgs","d","wrapper","undefined","old","vnode","__directives"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,CAAT,EAAYC,OAAZ,EAAqBC,aAArB,EAAoCC,YAApC,QAAwD,QAAxD;AACA,SAASC,MAAT,EAAiBC,OAAjB,QAAgC,cAAhC;AACA;AACA;AACA;;AACA,SAASC,QAAQ,IAAIC,KAArB,QAAkC,SAAlC,C,CAEA;;AACA,MAAMC,OAAO,GAAGN,aAAa,CAAE,EAAF,CAA7B,C,CAEA;;AACA,MAAMO,YAAY,GAAG,EAArB;AACA,MAAMC,mBAAmB,GAAG,EAA5B;AACA,OAAO,MAAMC,SAAS,GAAG,UAAEC,IAAF,EAAQC,EAAR,EAAwC;AAAA,MAA5B;AAAEC,IAAAA,QAAQ,GAAG;AAAb,GAA4B,uEAAR,EAAQ;AAChEL,EAAAA,YAAY,CAAEG,IAAF,CAAZ,GAAuBC,EAAvB;AACAH,EAAAA,mBAAmB,CAAEE,IAAF,CAAnB,GAA8BE,QAA9B;AACA,CAHM,C,CAKP;;AACA,MAAMC,OAAO,GAAG,CAAEC,IAAF,EAAQC,GAAR,KAAiB;AAChC,MAAIC,OAAO,GAAG,EAAE,GAAGX,KAAL;AAAYC,IAAAA,OAAO,EAAES;AAArB,GAAd;AACAD,EAAAA,IAAI,CAACG,KAAL,CAAY,GAAZ,EAAkBC,OAAlB,CAA6BC,CAAF,IAAWH,OAAO,GAAGA,OAAO,CAAEG,CAAF,CAAvD;AACA,SAAOH,OAAP;AACA,CAJD,C,CAMA;;;AACA,MAAMI,WAAW,GAChB;AAAA,MAAE;AAAEC,IAAAA;AAAF,GAAF,uEAAY,EAAZ;AAAA,SACA,UAAEP,IAAF,EAA4B;AAAA,QAApBQ,SAAoB,uEAAR,EAAQ;AAC3B;AACA,UAAMC,mBAAmB,GACxBT,IAAI,CAAE,CAAF,CAAJ,KAAc,GAAd,IAAqB,CAAC,EAAIA,IAAI,GAAGA,IAAI,CAACU,KAAL,CAAY,CAAZ,CAAX,CADvB;AAEA,UAAMC,KAAK,GAAGZ,OAAO,CAAEC,IAAF,EAAQQ,SAAS,CAAChB,OAAlB,CAArB;AACA,UAAMoB,WAAW,GAChB,OAAOD,KAAP,KAAiB,UAAjB,GACGA,KAAK,CAAE;AACPJ,MAAAA,GAAG,EAAEA,GAAG,CAACL,OADF;AAEP,SAAGX,KAFI;AAGP,SAAGiB;AAHI,KAAF,CADR,GAMGG,KAPJ;AAQA,WAAOF,mBAAmB,GAAG,CAAEG,WAAL,GAAmBA,WAA7C;AACA,GAfD;AAAA,CADD,C,CAkBA;AACA;;;AACA,MAAMC,iBAAiB,GAAKC,UAAF,IACzBzB,OAAO,CAAE,MAAM;AACd,QAAM0B,UAAU,GAAGC,MAAM,CAACC,OAAP,CAAgBH,UAAhB,EAA6BI,MAA7B,CAClB,CAAEC,GAAF,WAA6B;AAAA,QAAtB,CAAEvB,IAAF,EAAQwB,MAAR,CAAsB;AAC5B,UAAMtB,QAAQ,GAAGJ,mBAAmB,CAAEE,IAAF,CAApC;AACA,QAAK,CAAEuB,GAAG,CAAErB,QAAF,CAAV,EAAyBqB,GAAG,CAAErB,QAAF,CAAH,GAAkB,EAAlB;AACzBqB,IAAAA,GAAG,CAAErB,QAAF,CAAH,CAAiBF,IAAjB,IAA0BwB,MAA1B;AAEA,WAAOD,GAAP;AACA,GAPiB,EAQlB,EARkB,CAAnB;AAWA,SAAOH,MAAM,CAACC,OAAP,CAAgBF,UAAhB,EACLM,IADK,CACC;AAAA,QAAE,CAAEC,EAAF,CAAF;AAAA,QAAU,CAAEC,EAAF,CAAV;AAAA,WAAsBD,EAAE,GAAGC,EAA3B;AAAA,GADD,EAELC,GAFK,CAEA;AAAA,QAAE,GAAIC,GAAJ,CAAF;AAAA,WAAiBA,GAAjB;AAAA,GAFA,CAAP;AAGA,CAfM,EAeJ,CAAEX,UAAF,CAfI,CADR,C,CAkBA;;;AACA,MAAMY,SAAS,GAAG,SAAkD;AAAA,MAAhD;AAAEC,IAAAA,IAAF;AAAQb,IAAAA,UAAR;AAAoBc,IAAAA,KAAK,EAAEC;AAA3B,GAAgD;AACnE,QAAMtB,GAAG,GAAGnB,MAAM,CAAE,IAAF,CAAlB;AACA,QAAM0C,OAAO,GAAG9C,CAAC,CAAE2C,IAAF,EAAQ,EAAE,GAAGE,aAAL;AAAoBtB,IAAAA;AAApB,GAAR,CAAjB;AACA,QAAMwB,QAAQ,GAAG1C,OAAO,CAAE,MAAMiB,WAAW,CAAE;AAAEC,IAAAA;AAAF,GAAF,CAAnB,EAAgC,EAAhC,CAAxB,CAHmE,CAKnE;;AACA,QAAMyB,eAAe,GAAGnB,iBAAiB,CAAEC,UAAF,CAAzC;AACA,SACC,cAAC,sBAAD;AACC,IAAA,UAAU,EAAGkB,eADd;AAEC,IAAA,OAAO,EAAGF,OAFX;AAGC,IAAA,QAAQ,EAAGC,QAHZ;AAIC,IAAA,aAAa,EAAGF;AAJjB,IADD;AAQA,CAfD,C,CAiBA;;;AACA,MAAMI,sBAAsB,GAAG,SAKxB;AAAA,MAL0B;AAChCnB,IAAAA,UAAU,EAAE,CAAEA,UAAF,EAAc,GAAGoB,IAAjB,CADoB;AAEhCJ,IAAAA,OAFgC;AAGhCC,IAAAA,QAHgC;AAIhCF,IAAAA;AAJgC,GAK1B;AACN;AACA;AACA;AACA;AACAC,EAAAA,OAAO,GAAG3C,YAAY,CAAE2C,OAAF,CAAtB,CALM,CAON;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,QAAMK,QAAQ,GACbD,IAAI,CAACE,MAAL,GAAc,CAAd,GACC,cAAC,sBAAD;AACC,IAAA,UAAU,EAAGF,IADd;AAEC,IAAA,OAAO,EAAGJ,OAFX;AAGC,IAAA,QAAQ,EAAGC,QAHZ;AAIC,IAAA,aAAa,EAAGF;AAJjB,IADD,GAQCC,OATF;AAYA,QAAMF,KAAK,GAAG,EAAE,GAAGC,aAAL;AAAoBM,IAAAA;AAApB,GAAd;AACA,QAAME,aAAa,GAAG;AAAEvB,IAAAA,UAAF;AAAcc,IAAAA,KAAd;AAAqBE,IAAAA,OAArB;AAA8BtC,IAAAA,OAA9B;AAAuCuC,IAAAA;AAAvC,GAAtB;;AAEA,OAAM,MAAMO,CAAZ,IAAiBxB,UAAjB,EAA8B;AAAA;;AAC7B,UAAMyB,OAAO,sBAAG9C,YAAY,CAAE6C,CAAF,CAAf,oDAAG,qBAAA7C,YAAY,EAAS4C,aAAT,CAA5B;AACA,QAAKE,OAAO,KAAKC,SAAjB,EAA6BZ,KAAK,CAACO,QAAN,GAAiBI,OAAjB;AAC7B;;AAED,SAAOX,KAAK,CAACO,QAAb;AACA,CAxCD,C,CA0CA;;;AACA,MAAMM,GAAG,GAAGxD,OAAO,CAACyD,KAApB;;AACAzD,OAAO,CAACyD,KAAR,GAAkBA,KAAF,IAAa;AAC5B,MAAKA,KAAK,CAACd,KAAN,CAAYe,YAAjB,EAAgC;AAC/B,UAAMf,KAAK,GAAGc,KAAK,CAACd,KAApB;AACA,UAAMd,UAAU,GAAGc,KAAK,CAACe,YAAzB;AACA,WAAOf,KAAK,CAACe,YAAb;AACAD,IAAAA,KAAK,CAACd,KAAN,GAAc;AACbD,MAAAA,IAAI,EAAEe,KAAK,CAACf,IADC;AAEbb,MAAAA,UAFa;AAGbc,MAAAA;AAHa,KAAd;AAKAc,IAAAA,KAAK,CAACf,IAAN,GAAaD,SAAb;AACA;;AAED,MAAKe,GAAL,EAAWA,GAAG,CAAEC,KAAF,CAAH;AACX,CAdD","sourcesContent":["/**\n * External dependencies\n */\nimport { h, options, createContext, cloneElement } from 'preact';\nimport { useRef, useMemo } from 'preact/hooks';\n/**\n * Internal dependencies\n */\nimport { rawStore as store } from './store';\n\n// Main context.\nconst context = createContext( {} );\n\n// WordPress Directives.\nconst directiveMap = {};\nconst directivePriorities = {};\nexport const directive = ( name, cb, { priority = 10 } = {} ) => {\n\tdirectiveMap[ name ] = cb;\n\tdirectivePriorities[ name ] = priority;\n};\n\n// Resolve the path to some property of the store object.\nconst resolve = ( path, ctx ) => {\n\tlet current = { ...store, context: ctx };\n\tpath.split( '.' ).forEach( ( p ) => ( current = current[ p ] ) );\n\treturn current;\n};\n\n// Generate the evaluate function.\nconst getEvaluate =\n\t( { ref } = {} ) =>\n\t( path, extraArgs = {} ) => {\n\t\t// If path starts with !, remove it and save a flag.\n\t\tconst hasNegationOperator =\n\t\t\tpath[ 0 ] === '!' && !! ( path = path.slice( 1 ) );\n\t\tconst value = resolve( path, extraArgs.context );\n\t\tconst returnValue =\n\t\t\ttypeof value === 'function'\n\t\t\t\t? value( {\n\t\t\t\t\t\tref: ref.current,\n\t\t\t\t\t\t...store,\n\t\t\t\t\t\t...extraArgs,\n\t\t\t\t } )\n\t\t\t\t: value;\n\t\treturn hasNegationOperator ? ! returnValue : returnValue;\n\t};\n\n// Separate directives by priority. The resulting array contains objects\n// of directives grouped by same priority, and sorted in ascending order.\nconst usePriorityLevels = ( directives ) =>\n\tuseMemo( () => {\n\t\tconst byPriority = Object.entries( directives ).reduce(\n\t\t\t( acc, [ name, values ] ) => {\n\t\t\t\tconst priority = directivePriorities[ name ];\n\t\t\t\tif ( ! acc[ priority ] ) acc[ priority ] = {};\n\t\t\t\tacc[ priority ][ name ] = values;\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\n\t\treturn Object.entries( byPriority )\n\t\t\t.sort( ( [ p1 ], [ p2 ] ) => p1 - p2 )\n\t\t\t.map( ( [ , obj ] ) => obj );\n\t}, [ directives ] );\n\n// Directive wrapper.\nconst Directive = ( { type, directives, props: originalProps } ) => {\n\tconst ref = useRef( null );\n\tconst element = h( type, { ...originalProps, ref } );\n\tconst evaluate = useMemo( () => getEvaluate( { ref } ), [] );\n\n\t// Add wrappers recursively for each priority level.\n\tconst byPriorityLevel = usePriorityLevels( directives );\n\treturn (\n\t\t<RecursivePriorityLevel\n\t\t\tdirectives={ byPriorityLevel }\n\t\t\telement={ element }\n\t\t\tevaluate={ evaluate }\n\t\t\toriginalProps={ originalProps }\n\t\t/>\n\t);\n};\n\n// Priority level wrapper.\nconst RecursivePriorityLevel = ( {\n\tdirectives: [ directives, ...rest ],\n\telement,\n\tevaluate,\n\toriginalProps,\n} ) => {\n\t// This element needs to be a fresh copy so we are not modifying an already\n\t// rendered element with Preact's internal properties initialized. This\n\t// prevents an error with changes in `element.props.children` not being\n\t// reflected in `element.__k`.\n\telement = cloneElement( element );\n\n\t// Recursively render the wrapper for the next priority level.\n\t//\n\t// Note that, even though we're instantiating a vnode with a\n\t// `RecursivePriorityLevel` here, its render function will not be executed\n\t// just yet. Actually, it will be delayed until the current render function\n\t// has finished. That ensures directives in the current priorty level have\n\t// run (and thus modified the passed `element`) before the next level.\n\tconst children =\n\t\trest.length > 0 ? (\n\t\t\t<RecursivePriorityLevel\n\t\t\t\tdirectives={ rest }\n\t\t\t\telement={ element }\n\t\t\t\tevaluate={ evaluate }\n\t\t\t\toriginalProps={ originalProps }\n\t\t\t/>\n\t\t) : (\n\t\t\telement\n\t\t);\n\n\tconst props = { ...originalProps, children };\n\tconst directiveArgs = { directives, props, element, context, evaluate };\n\n\tfor ( const d in directives ) {\n\t\tconst wrapper = directiveMap[ d ]?.( directiveArgs );\n\t\tif ( wrapper !== undefined ) props.children = wrapper;\n\t}\n\n\treturn props.children;\n};\n\n// Preact Options Hook called each time a vnode is created.\nconst old = options.vnode;\noptions.vnode = ( vnode ) => {\n\tif ( vnode.props.__directives ) {\n\t\tconst props = vnode.props;\n\t\tconst directives = props.__directives;\n\t\tdelete props.__directives;\n\t\tvnode.props = {\n\t\t\ttype: vnode.type,\n\t\t\tdirectives,\n\t\t\tprops,\n\t\t};\n\t\tvnode.type = Directive;\n\t}\n\n\tif ( old ) old( vnode );\n};\n"]}