@wordpress/block-library 9.31.1-next.233ccab9b.0 → 9.32.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 (177) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/accordion/edit.js +62 -12
  3. package/build/accordion/edit.js.map +1 -1
  4. package/build/accordion/index.js +15 -7
  5. package/build/accordion/index.js.map +1 -1
  6. package/build/accordion/view.js +15 -15
  7. package/build/accordion/view.js.map +1 -1
  8. package/build/accordion-heading/edit.js +68 -0
  9. package/build/accordion-heading/edit.js.map +1 -0
  10. package/build/accordion-heading/icon.js.map +1 -0
  11. package/build/{accordion-header → accordion-heading}/index.js +9 -12
  12. package/build/accordion-heading/index.js.map +1 -0
  13. package/build/{accordion-content → accordion-heading}/init.js.map +1 -1
  14. package/build/{accordion-header → accordion-heading}/save.js +6 -8
  15. package/build/accordion-heading/save.js.map +1 -0
  16. package/build/{accordion-content → accordion-item}/edit.js +8 -2
  17. package/build/accordion-item/edit.js.map +1 -0
  18. package/build/accordion-item/icon.js.map +1 -0
  19. package/build/{accordion-content → accordion-item}/index.js +5 -5
  20. package/build/accordion-item/index.js.map +1 -0
  21. package/build/accordion-item/init.js.map +1 -0
  22. package/build/accordion-item/save.js.map +1 -0
  23. package/build/accordion-panel/index.js +3 -2
  24. package/build/accordion-panel/index.js.map +1 -1
  25. package/build/block/index.js +1 -0
  26. package/build/block/index.js.map +1 -1
  27. package/build/index.js +24 -4
  28. package/build/index.js.map +1 -1
  29. package/build/navigation-link/edit.js +3 -140
  30. package/build/navigation-link/edit.js.map +1 -1
  31. package/build/navigation-link/shared/controls.js +171 -0
  32. package/build/navigation-link/shared/controls.js.map +1 -0
  33. package/build/navigation-link/shared/index.js +13 -0
  34. package/build/navigation-link/shared/index.js.map +1 -0
  35. package/build/navigation-submenu/edit.js +5 -110
  36. package/build/navigation-submenu/edit.js.map +1 -1
  37. package/build/pattern/index.js +1 -0
  38. package/build/pattern/index.js.map +1 -1
  39. package/build/post-time-to-read/edit.js +16 -61
  40. package/build/post-time-to-read/edit.js.map +1 -1
  41. package/build/post-time-to-read/index.js +5 -7
  42. package/build/post-time-to-read/index.js.map +1 -1
  43. package/build/post-time-to-read/variations.js +41 -0
  44. package/build/post-time-to-read/variations.js.map +1 -0
  45. package/build/query-title/edit.js +1 -1
  46. package/build/query-title/edit.js.map +1 -1
  47. package/build/template-part/index.js +1 -0
  48. package/build/template-part/index.js.map +1 -1
  49. package/build/utils/get-transformed-metadata.js +7 -0
  50. package/build/utils/get-transformed-metadata.js.map +1 -1
  51. package/build-module/accordion/edit.js +66 -16
  52. package/build-module/accordion/edit.js.map +1 -1
  53. package/build-module/accordion/index.js +15 -7
  54. package/build-module/accordion/index.js.map +1 -1
  55. package/build-module/accordion/view.js +15 -15
  56. package/build-module/accordion/view.js.map +1 -1
  57. package/build-module/accordion-heading/edit.js +61 -0
  58. package/build-module/accordion-heading/edit.js.map +1 -0
  59. package/build-module/accordion-heading/icon.js.map +1 -0
  60. package/build-module/{accordion-header → accordion-heading}/index.js +9 -12
  61. package/build-module/accordion-heading/index.js.map +1 -0
  62. package/build-module/{accordion-content → accordion-heading}/init.js.map +1 -1
  63. package/build-module/{accordion-header → accordion-heading}/save.js +6 -8
  64. package/build-module/accordion-heading/save.js.map +1 -0
  65. package/build-module/{accordion-content → accordion-item}/edit.js +8 -2
  66. package/build-module/accordion-item/edit.js.map +1 -0
  67. package/build-module/accordion-item/icon.js.map +1 -0
  68. package/build-module/{accordion-content → accordion-item}/index.js +5 -5
  69. package/build-module/accordion-item/index.js.map +1 -0
  70. package/build-module/accordion-item/init.js.map +1 -0
  71. package/build-module/accordion-item/save.js.map +1 -0
  72. package/build-module/accordion-panel/index.js +3 -2
  73. package/build-module/accordion-panel/index.js.map +1 -1
  74. package/build-module/block/index.js +1 -0
  75. package/build-module/block/index.js.map +1 -1
  76. package/build-module/index.js +25 -5
  77. package/build-module/index.js.map +1 -1
  78. package/build-module/navigation-link/edit.js +4 -141
  79. package/build-module/navigation-link/edit.js.map +1 -1
  80. package/build-module/navigation-link/shared/controls.js +165 -0
  81. package/build-module/navigation-link/shared/controls.js.map +1 -0
  82. package/build-module/navigation-link/shared/index.js +9 -0
  83. package/build-module/navigation-link/shared/index.js.map +1 -0
  84. package/build-module/navigation-submenu/edit.js +6 -111
  85. package/build-module/navigation-submenu/edit.js.map +1 -1
  86. package/build-module/pattern/index.js +1 -0
  87. package/build-module/pattern/index.js.map +1 -1
  88. package/build-module/post-time-to-read/edit.js +17 -62
  89. package/build-module/post-time-to-read/edit.js.map +1 -1
  90. package/build-module/post-time-to-read/index.js +5 -7
  91. package/build-module/post-time-to-read/index.js.map +1 -1
  92. package/build-module/post-time-to-read/variations.js +33 -0
  93. package/build-module/post-time-to-read/variations.js.map +1 -0
  94. package/build-module/query-title/edit.js +1 -1
  95. package/build-module/query-title/edit.js.map +1 -1
  96. package/build-module/template-part/index.js +1 -0
  97. package/build-module/template-part/index.js.map +1 -1
  98. package/build-module/utils/get-transformed-metadata.js +7 -0
  99. package/build-module/utils/get-transformed-metadata.js.map +1 -1
  100. package/build-style/{accordion-header → accordion-heading}/style-rtl.css +8 -7
  101. package/build-style/{accordion-header → accordion-heading}/style.css +8 -7
  102. package/build-style/{accordion-content → accordion-item}/style-rtl.css +5 -5
  103. package/build-style/{accordion-content → accordion-item}/style.css +5 -5
  104. package/build-style/style-rtl.css +13 -12
  105. package/build-style/style.css +13 -12
  106. package/package.json +35 -35
  107. package/src/accordion/block.json +11 -3
  108. package/src/accordion/edit.js +70 -13
  109. package/src/accordion/index.js +4 -4
  110. package/src/accordion/index.php +1 -1
  111. package/src/accordion/view.js +15 -15
  112. package/src/{accordion-header → accordion-heading}/block.json +10 -12
  113. package/src/accordion-heading/edit.js +70 -0
  114. package/src/{accordion-header → accordion-heading}/save.js +6 -8
  115. package/src/{accordion-header → accordion-heading}/style.scss +11 -7
  116. package/src/{accordion-content → accordion-item}/block.json +5 -5
  117. package/src/{accordion-content → accordion-item}/edit.js +12 -2
  118. package/src/{accordion-content → accordion-item}/index.php +11 -11
  119. package/src/{accordion-content → accordion-item}/style.scss +3 -3
  120. package/src/accordion-panel/block.json +3 -2
  121. package/src/block/block.json +1 -0
  122. package/src/index.js +23 -4
  123. package/src/navigation-link/edit.js +3 -142
  124. package/src/navigation-link/shared/README.md +47 -0
  125. package/src/navigation-link/shared/controls.js +167 -0
  126. package/src/navigation-link/shared/index.js +8 -0
  127. package/src/navigation-link/shared/test/controls.js +210 -0
  128. package/src/navigation-submenu/edit.js +7 -125
  129. package/src/pattern/block.json +1 -0
  130. package/src/post-time-to-read/block.json +3 -7
  131. package/src/post-time-to-read/edit.js +36 -94
  132. package/src/post-time-to-read/index.js +2 -0
  133. package/src/post-time-to-read/index.php +12 -7
  134. package/src/post-time-to-read/variations.js +39 -0
  135. package/src/query-title/edit.js +2 -1
  136. package/src/query-title/index.php +3 -1
  137. package/src/style.scss +2 -2
  138. package/src/template-part/block.json +1 -0
  139. package/src/utils/get-transformed-metadata.js +8 -0
  140. package/build/accordion-content/edit.js.map +0 -1
  141. package/build/accordion-content/icon.js.map +0 -1
  142. package/build/accordion-content/index.js.map +0 -1
  143. package/build/accordion-content/save.js.map +0 -1
  144. package/build/accordion-header/edit.js +0 -84
  145. package/build/accordion-header/edit.js.map +0 -1
  146. package/build/accordion-header/icon.js.map +0 -1
  147. package/build/accordion-header/index.js.map +0 -1
  148. package/build/accordion-header/init.js.map +0 -1
  149. package/build/accordion-header/save.js.map +0 -1
  150. package/build-module/accordion-content/edit.js.map +0 -1
  151. package/build-module/accordion-content/icon.js.map +0 -1
  152. package/build-module/accordion-content/index.js.map +0 -1
  153. package/build-module/accordion-content/save.js.map +0 -1
  154. package/build-module/accordion-header/edit.js +0 -77
  155. package/build-module/accordion-header/edit.js.map +0 -1
  156. package/build-module/accordion-header/icon.js.map +0 -1
  157. package/build-module/accordion-header/index.js.map +0 -1
  158. package/build-module/accordion-header/init.js.map +0 -1
  159. package/build-module/accordion-header/save.js.map +0 -1
  160. package/src/accordion-header/edit.js +0 -87
  161. /package/build/{accordion-header → accordion-heading}/icon.js +0 -0
  162. /package/build/{accordion-content → accordion-heading}/init.js +0 -0
  163. /package/build/{accordion-content → accordion-item}/icon.js +0 -0
  164. /package/build/{accordion-header → accordion-item}/init.js +0 -0
  165. /package/build/{accordion-content → accordion-item}/save.js +0 -0
  166. /package/build-module/{accordion-header → accordion-heading}/icon.js +0 -0
  167. /package/build-module/{accordion-content → accordion-heading}/init.js +0 -0
  168. /package/build-module/{accordion-content → accordion-item}/icon.js +0 -0
  169. /package/build-module/{accordion-header → accordion-item}/init.js +0 -0
  170. /package/build-module/{accordion-content → accordion-item}/save.js +0 -0
  171. /package/src/{accordion-header → accordion-heading}/icon.js +0 -0
  172. /package/src/{accordion-content → accordion-heading}/index.js +0 -0
  173. /package/src/{accordion-content → accordion-heading}/init.js +0 -0
  174. /package/src/{accordion-content → accordion-item}/icon.js +0 -0
  175. /package/src/{accordion-header → accordion-item}/index.js +0 -0
  176. /package/src/{accordion-header → accordion-item}/init.js +0 -0
  177. /package/src/{accordion-content → accordion-item}/save.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["getBlockType","getTransformedMetadata","metadata","newBlockName","bindingsCallback","supports","BLOCK_BINDINGS_SUPPORTED_BLOCKS","transformSupportedProps","includes","push","renaming","length","newMetadata","Object","entries","reduce","obj","prop","value","keys","undefined"],"sources":["@wordpress/block-library/src/utils/get-transformed-metadata.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\n\n/**\n * Transform the metadata attribute with only the values and bindings specified by each transform.\n * Returns `undefined` if the input metadata is falsy.\n *\n * @param {Object} metadata Original metadata attribute from the block that is being transformed.\n * @param {Object} newBlockName Name of the final block after the transformation.\n * @param {Function} bindingsCallback Optional callback to transform the `bindings` property object.\n * @return {Object|undefined} New metadata object only with the relevant properties.\n */\nexport function getTransformedMetadata(\n\tmetadata,\n\tnewBlockName,\n\tbindingsCallback\n) {\n\tif ( ! metadata ) {\n\t\treturn;\n\t}\n\tconst { supports } = getBlockType( newBlockName );\n\t// Fixed until an opt-in mechanism is implemented.\n\tconst BLOCK_BINDINGS_SUPPORTED_BLOCKS = [\n\t\t'core/paragraph',\n\t\t'core/heading',\n\t\t'core/image',\n\t\t'core/button',\n\t];\n\t// The metadata properties that should be preserved after the transform.\n\tconst transformSupportedProps = [];\n\t// If it support bindings, and there is a transform bindings callback, add the `id` and `bindings` properties.\n\tif (\n\t\tBLOCK_BINDINGS_SUPPORTED_BLOCKS.includes( newBlockName ) &&\n\t\tbindingsCallback\n\t) {\n\t\ttransformSupportedProps.push( 'id', 'bindings' );\n\t}\n\t// If it support block naming (true by default), add the `name` property.\n\tif ( supports.renaming !== false ) {\n\t\ttransformSupportedProps.push( 'name' );\n\t}\n\n\t// Return early if no supported properties.\n\tif ( ! transformSupportedProps.length ) {\n\t\treturn;\n\t}\n\n\tconst newMetadata = Object.entries( metadata ).reduce(\n\t\t( obj, [ prop, value ] ) => {\n\t\t\t// If prop is not supported, don't add it to the new metadata object.\n\t\t\tif ( ! transformSupportedProps.includes( prop ) ) {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tobj[ prop ] =\n\t\t\t\tprop === 'bindings' ? bindingsCallback( value ) : value;\n\t\t\treturn obj;\n\t\t},\n\t\t{}\n\t);\n\n\t// Return undefined if object is empty.\n\treturn Object.keys( newMetadata ).length ? newMetadata : undefined;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,mBAAmB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACrCC,QAAQ,EACRC,YAAY,EACZC,gBAAgB,EACf;EACD,IAAK,CAAEF,QAAQ,EAAG;IACjB;EACD;EACA,MAAM;IAAEG;EAAS,CAAC,GAAGL,YAAY,CAAEG,YAAa,CAAC;EACjD;EACA,MAAMG,+BAA+B,GAAG,CACvC,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,CACb;EACD;EACA,MAAMC,uBAAuB,GAAG,EAAE;EAClC;EACA,IACCD,+BAA+B,CAACE,QAAQ,CAAEL,YAAa,CAAC,IACxDC,gBAAgB,EACf;IACDG,uBAAuB,CAACE,IAAI,CAAE,IAAI,EAAE,UAAW,CAAC;EACjD;EACA;EACA,IAAKJ,QAAQ,CAACK,QAAQ,KAAK,KAAK,EAAG;IAClCH,uBAAuB,CAACE,IAAI,CAAE,MAAO,CAAC;EACvC;;EAEA;EACA,IAAK,CAAEF,uBAAuB,CAACI,MAAM,EAAG;IACvC;EACD;EAEA,MAAMC,WAAW,GAAGC,MAAM,CAACC,OAAO,CAAEZ,QAAS,CAAC,CAACa,MAAM,CACpD,CAAEC,GAAG,EAAE,CAAEC,IAAI,EAAEC,KAAK,CAAE,KAAM;IAC3B;IACA,IAAK,CAAEX,uBAAuB,CAACC,QAAQ,CAAES,IAAK,CAAC,EAAG;MACjD,OAAOD,GAAG;IACX;IACAA,GAAG,CAAEC,IAAI,CAAE,GACVA,IAAI,KAAK,UAAU,GAAGb,gBAAgB,CAAEc,KAAM,CAAC,GAAGA,KAAK;IACxD,OAAOF,GAAG;EACX,CAAC,EACD,CAAC,CACF,CAAC;;EAED;EACA,OAAOH,MAAM,CAACM,IAAI,CAAEP,WAAY,CAAC,CAACD,MAAM,GAAGC,WAAW,GAAGQ,SAAS;AACnE","ignoreList":[]}
1
+ {"version":3,"names":["getBlockType","getTransformedMetadata","metadata","newBlockName","bindingsCallback","supports","BLOCK_BINDINGS_SUPPORTED_BLOCKS","transformSupportedProps","includes","push","renaming","blockVisibility","window","__experimentalEnableBlockComment","length","newMetadata","Object","entries","reduce","obj","prop","value","keys","undefined"],"sources":["@wordpress/block-library/src/utils/get-transformed-metadata.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockType } from '@wordpress/blocks';\n\n/**\n * Transform the metadata attribute with only the values and bindings specified by each transform.\n * Returns `undefined` if the input metadata is falsy.\n *\n * @param {Object} metadata Original metadata attribute from the block that is being transformed.\n * @param {Object} newBlockName Name of the final block after the transformation.\n * @param {Function} bindingsCallback Optional callback to transform the `bindings` property object.\n * @return {Object|undefined} New metadata object only with the relevant properties.\n */\nexport function getTransformedMetadata(\n\tmetadata,\n\tnewBlockName,\n\tbindingsCallback\n) {\n\tif ( ! metadata ) {\n\t\treturn;\n\t}\n\tconst { supports } = getBlockType( newBlockName );\n\t// Fixed until an opt-in mechanism is implemented.\n\tconst BLOCK_BINDINGS_SUPPORTED_BLOCKS = [\n\t\t'core/paragraph',\n\t\t'core/heading',\n\t\t'core/image',\n\t\t'core/button',\n\t];\n\t// The metadata properties that should be preserved after the transform.\n\tconst transformSupportedProps = [];\n\t// If it support bindings, and there is a transform bindings callback, add the `id` and `bindings` properties.\n\tif (\n\t\tBLOCK_BINDINGS_SUPPORTED_BLOCKS.includes( newBlockName ) &&\n\t\tbindingsCallback\n\t) {\n\t\ttransformSupportedProps.push( 'id', 'bindings' );\n\t}\n\t// If it support block naming (true by default), add the `name` property.\n\tif ( supports.renaming !== false ) {\n\t\ttransformSupportedProps.push( 'name' );\n\t}\n\t// If it supports block visibility (true by default), add the `blockVisibility` property.\n\tif ( supports.blockVisibility !== false ) {\n\t\ttransformSupportedProps.push( 'blockVisibility' );\n\t}\n\n\tif ( window?.__experimentalEnableBlockComment ) {\n\t\ttransformSupportedProps.push( 'commentId' );\n\t}\n\n\t// Return early if no supported properties.\n\tif ( ! transformSupportedProps.length ) {\n\t\treturn;\n\t}\n\n\tconst newMetadata = Object.entries( metadata ).reduce(\n\t\t( obj, [ prop, value ] ) => {\n\t\t\t// If prop is not supported, don't add it to the new metadata object.\n\t\t\tif ( ! transformSupportedProps.includes( prop ) ) {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\tobj[ prop ] =\n\t\t\t\tprop === 'bindings' ? bindingsCallback( value ) : value;\n\t\t\treturn obj;\n\t\t},\n\t\t{}\n\t);\n\n\t// Return undefined if object is empty.\n\treturn Object.keys( newMetadata ).length ? newMetadata : undefined;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,mBAAmB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACrCC,QAAQ,EACRC,YAAY,EACZC,gBAAgB,EACf;EACD,IAAK,CAAEF,QAAQ,EAAG;IACjB;EACD;EACA,MAAM;IAAEG;EAAS,CAAC,GAAGL,YAAY,CAAEG,YAAa,CAAC;EACjD;EACA,MAAMG,+BAA+B,GAAG,CACvC,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,CACb;EACD;EACA,MAAMC,uBAAuB,GAAG,EAAE;EAClC;EACA,IACCD,+BAA+B,CAACE,QAAQ,CAAEL,YAAa,CAAC,IACxDC,gBAAgB,EACf;IACDG,uBAAuB,CAACE,IAAI,CAAE,IAAI,EAAE,UAAW,CAAC;EACjD;EACA;EACA,IAAKJ,QAAQ,CAACK,QAAQ,KAAK,KAAK,EAAG;IAClCH,uBAAuB,CAACE,IAAI,CAAE,MAAO,CAAC;EACvC;EACA;EACA,IAAKJ,QAAQ,CAACM,eAAe,KAAK,KAAK,EAAG;IACzCJ,uBAAuB,CAACE,IAAI,CAAE,iBAAkB,CAAC;EAClD;EAEA,IAAKG,MAAM,EAAEC,gCAAgC,EAAG;IAC/CN,uBAAuB,CAACE,IAAI,CAAE,WAAY,CAAC;EAC5C;;EAEA;EACA,IAAK,CAAEF,uBAAuB,CAACO,MAAM,EAAG;IACvC;EACD;EAEA,MAAMC,WAAW,GAAGC,MAAM,CAACC,OAAO,CAAEf,QAAS,CAAC,CAACgB,MAAM,CACpD,CAAEC,GAAG,EAAE,CAAEC,IAAI,EAAEC,KAAK,CAAE,KAAM;IAC3B;IACA,IAAK,CAAEd,uBAAuB,CAACC,QAAQ,CAAEY,IAAK,CAAC,EAAG;MACjD,OAAOD,GAAG;IACX;IACAA,GAAG,CAAEC,IAAI,CAAE,GACVA,IAAI,KAAK,UAAU,GAAGhB,gBAAgB,CAAEiB,KAAM,CAAC,GAAGA,KAAK;IACxD,OAAOF,GAAG;EACX,CAAC,EACD,CAAC,CACF,CAAC;;EAED;EACA,OAAOH,MAAM,CAACM,IAAI,CAAEP,WAAY,CAAC,CAACD,MAAM,GAAGC,WAAW,GAAGQ,SAAS;AACnE","ignoreList":[]}
@@ -134,7 +134,7 @@
134
134
  /**
135
135
  * Reset the WP Admin page styles for Gutenberg-like pages.
136
136
  */
137
- .wp-block-accordion-header__toggle {
137
+ .wp-block-accordion-heading__toggle {
138
138
  font-family: inherit;
139
139
  font-size: inherit;
140
140
  font-weight: inherit;
@@ -148,7 +148,6 @@
148
148
  color: inherit;
149
149
  padding: var(--wp--preset--spacing--20, 1em) 0;
150
150
  cursor: pointer;
151
- outline: none;
152
151
  overflow: hidden;
153
152
  display: flex;
154
153
  align-items: center;
@@ -156,16 +155,18 @@
156
155
  position: relative;
157
156
  width: 100%;
158
157
  }
159
- .wp-block-accordion-header__toggle:focus-visible {
160
- outline: 2px solid -webkit-focus-ring-color;
161
- outline-offset: 2px;
158
+ .wp-block-accordion-heading__toggle:not(:focus-visible) {
159
+ outline: none;
160
+ }
161
+ .wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title {
162
+ text-decoration: underline;
162
163
  }
163
164
 
164
- .wp-block-accordion-header__toggle-title {
165
+ .wp-block-accordion-heading__toggle-title {
165
166
  flex: 1;
166
167
  }
167
168
 
168
- .wp-block-accordion-header__toggle-icon {
169
+ .wp-block-accordion-heading__toggle-icon {
169
170
  width: 1.2em;
170
171
  height: 1.2em;
171
172
  display: flex;
@@ -134,7 +134,7 @@
134
134
  /**
135
135
  * Reset the WP Admin page styles for Gutenberg-like pages.
136
136
  */
137
- .wp-block-accordion-header__toggle {
137
+ .wp-block-accordion-heading__toggle {
138
138
  font-family: inherit;
139
139
  font-size: inherit;
140
140
  font-weight: inherit;
@@ -148,7 +148,6 @@
148
148
  color: inherit;
149
149
  padding: var(--wp--preset--spacing--20, 1em) 0;
150
150
  cursor: pointer;
151
- outline: none;
152
151
  overflow: hidden;
153
152
  display: flex;
154
153
  align-items: center;
@@ -156,16 +155,18 @@
156
155
  position: relative;
157
156
  width: 100%;
158
157
  }
159
- .wp-block-accordion-header__toggle:focus-visible {
160
- outline: 2px solid -webkit-focus-ring-color;
161
- outline-offset: 2px;
158
+ .wp-block-accordion-heading__toggle:not(:focus-visible) {
159
+ outline: none;
160
+ }
161
+ .wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title {
162
+ text-decoration: underline;
162
163
  }
163
164
 
164
- .wp-block-accordion-header__toggle-title {
165
+ .wp-block-accordion-heading__toggle-title {
165
166
  flex: 1;
166
167
  }
167
168
 
168
- .wp-block-accordion-header__toggle-icon {
169
+ .wp-block-accordion-heading__toggle-icon {
169
170
  width: 1.2em;
170
171
  height: 1.2em;
171
172
  display: flex;
@@ -134,22 +134,22 @@
134
134
  /**
135
135
  * Reset the WP Admin page styles for Gutenberg-like pages.
136
136
  */
137
- .wp-block-accordion-content {
137
+ .wp-block-accordion-item {
138
138
  display: grid;
139
139
  grid-template-rows: max-content 0fr;
140
140
  /* Add transitions only for users who do not prefer reduced motion */
141
141
  }
142
- .wp-block-accordion-content.is-open {
142
+ .wp-block-accordion-item.is-open {
143
143
  grid-template-rows: max-content 1fr;
144
144
  }
145
- .wp-block-accordion-content.is-open > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
145
+ .wp-block-accordion-item.is-open > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
146
146
  transform: rotate(-45deg);
147
147
  }
148
148
  @media (prefers-reduced-motion: no-preference) {
149
- .wp-block-accordion-content {
149
+ .wp-block-accordion-item {
150
150
  transition: grid-template-rows 0.3s ease-out;
151
151
  }
152
- .wp-block-accordion-content > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
152
+ .wp-block-accordion-item > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
153
153
  transition: transform 0.2s ease-in-out;
154
154
  }
155
155
  }
@@ -134,22 +134,22 @@
134
134
  /**
135
135
  * Reset the WP Admin page styles for Gutenberg-like pages.
136
136
  */
137
- .wp-block-accordion-content {
137
+ .wp-block-accordion-item {
138
138
  display: grid;
139
139
  grid-template-rows: max-content 0fr;
140
140
  /* Add transitions only for users who do not prefer reduced motion */
141
141
  }
142
- .wp-block-accordion-content.is-open {
142
+ .wp-block-accordion-item.is-open {
143
143
  grid-template-rows: max-content 1fr;
144
144
  }
145
- .wp-block-accordion-content.is-open > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
145
+ .wp-block-accordion-item.is-open > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
146
146
  transform: rotate(45deg);
147
147
  }
148
148
  @media (prefers-reduced-motion: no-preference) {
149
- .wp-block-accordion-content {
149
+ .wp-block-accordion-item {
150
150
  transition: grid-template-rows 0.3s ease-out;
151
151
  }
152
- .wp-block-accordion-content > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
152
+ .wp-block-accordion-item > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
153
153
  transition: transform 0.2s ease-in-out;
154
154
  }
155
155
  }
@@ -135,27 +135,27 @@
135
135
  /**
136
136
  * Reset the WP Admin page styles for Gutenberg-like pages.
137
137
  */
138
- .wp-block-accordion-content {
138
+ .wp-block-accordion-item {
139
139
  display: grid;
140
140
  grid-template-rows: max-content 0fr;
141
141
  /* Add transitions only for users who do not prefer reduced motion */
142
142
  }
143
- .wp-block-accordion-content.is-open {
143
+ .wp-block-accordion-item.is-open {
144
144
  grid-template-rows: max-content 1fr;
145
145
  }
146
- .wp-block-accordion-content.is-open > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
146
+ .wp-block-accordion-item.is-open > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
147
147
  transform: rotate(-45deg);
148
148
  }
149
149
  @media (prefers-reduced-motion: no-preference) {
150
- .wp-block-accordion-content {
150
+ .wp-block-accordion-item {
151
151
  transition: grid-template-rows 0.3s ease-out;
152
152
  }
153
- .wp-block-accordion-content > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
153
+ .wp-block-accordion-item > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
154
154
  transition: transform 0.2s ease-in-out;
155
155
  }
156
156
  }
157
157
 
158
- .wp-block-accordion-header__toggle {
158
+ .wp-block-accordion-heading__toggle {
159
159
  font-family: inherit;
160
160
  font-size: inherit;
161
161
  font-weight: inherit;
@@ -169,7 +169,6 @@
169
169
  color: inherit;
170
170
  padding: var(--wp--preset--spacing--20, 1em) 0;
171
171
  cursor: pointer;
172
- outline: none;
173
172
  overflow: hidden;
174
173
  display: flex;
175
174
  align-items: center;
@@ -177,16 +176,18 @@
177
176
  position: relative;
178
177
  width: 100%;
179
178
  }
180
- .wp-block-accordion-header__toggle:focus-visible {
181
- outline: 2px solid -webkit-focus-ring-color;
182
- outline-offset: 2px;
179
+ .wp-block-accordion-heading__toggle:not(:focus-visible) {
180
+ outline: none;
181
+ }
182
+ .wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title {
183
+ text-decoration: underline;
183
184
  }
184
185
 
185
- .wp-block-accordion-header__toggle-title {
186
+ .wp-block-accordion-heading__toggle-title {
186
187
  flex: 1;
187
188
  }
188
189
 
189
- .wp-block-accordion-header__toggle-icon {
190
+ .wp-block-accordion-heading__toggle-icon {
190
191
  width: 1.2em;
191
192
  height: 1.2em;
192
193
  display: flex;
@@ -135,27 +135,27 @@
135
135
  /**
136
136
  * Reset the WP Admin page styles for Gutenberg-like pages.
137
137
  */
138
- .wp-block-accordion-content {
138
+ .wp-block-accordion-item {
139
139
  display: grid;
140
140
  grid-template-rows: max-content 0fr;
141
141
  /* Add transitions only for users who do not prefer reduced motion */
142
142
  }
143
- .wp-block-accordion-content.is-open {
143
+ .wp-block-accordion-item.is-open {
144
144
  grid-template-rows: max-content 1fr;
145
145
  }
146
- .wp-block-accordion-content.is-open > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
146
+ .wp-block-accordion-item.is-open > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
147
147
  transform: rotate(45deg);
148
148
  }
149
149
  @media (prefers-reduced-motion: no-preference) {
150
- .wp-block-accordion-content {
150
+ .wp-block-accordion-item {
151
151
  transition: grid-template-rows 0.3s ease-out;
152
152
  }
153
- .wp-block-accordion-content > .wp-block-accordion-header .wp-block-accordion-header__toggle-icon {
153
+ .wp-block-accordion-item > .wp-block-accordion-heading .wp-block-accordion-heading__toggle-icon {
154
154
  transition: transform 0.2s ease-in-out;
155
155
  }
156
156
  }
157
157
 
158
- .wp-block-accordion-header__toggle {
158
+ .wp-block-accordion-heading__toggle {
159
159
  font-family: inherit;
160
160
  font-size: inherit;
161
161
  font-weight: inherit;
@@ -169,7 +169,6 @@
169
169
  color: inherit;
170
170
  padding: var(--wp--preset--spacing--20, 1em) 0;
171
171
  cursor: pointer;
172
- outline: none;
173
172
  overflow: hidden;
174
173
  display: flex;
175
174
  align-items: center;
@@ -177,16 +176,18 @@
177
176
  position: relative;
178
177
  width: 100%;
179
178
  }
180
- .wp-block-accordion-header__toggle:focus-visible {
181
- outline: 2px solid -webkit-focus-ring-color;
182
- outline-offset: 2px;
179
+ .wp-block-accordion-heading__toggle:not(:focus-visible) {
180
+ outline: none;
181
+ }
182
+ .wp-block-accordion-heading__toggle:hover .wp-block-accordion-heading__toggle-title {
183
+ text-decoration: underline;
183
184
  }
184
185
 
185
- .wp-block-accordion-header__toggle-title {
186
+ .wp-block-accordion-heading__toggle-title {
186
187
  flex: 1;
187
188
  }
188
189
 
189
- .wp-block-accordion-header__toggle-icon {
190
+ .wp-block-accordion-heading__toggle-icon {
190
191
  width: 1.2em;
191
192
  height: 1.2em;
192
193
  display: flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "9.31.1-next.233ccab9b.0",
3
+ "version": "9.32.0",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -42,39 +42,39 @@
42
42
  ],
43
43
  "dependencies": {
44
44
  "@babel/runtime": "7.25.7",
45
- "@wordpress/a11y": "^4.31.1-next.233ccab9b.0",
46
- "@wordpress/api-fetch": "^7.31.1-next.233ccab9b.0",
47
- "@wordpress/autop": "^4.31.1-next.233ccab9b.0",
48
- "@wordpress/blob": "^4.31.1-next.233ccab9b.0",
49
- "@wordpress/block-editor": "^15.4.1-next.233ccab9b.0",
50
- "@wordpress/blocks": "^15.4.1-next.233ccab9b.0",
51
- "@wordpress/components": "^30.5.1-next.233ccab9b.0",
52
- "@wordpress/compose": "^7.31.1-next.233ccab9b.0",
53
- "@wordpress/core-data": "^7.31.1-next.233ccab9b.0",
54
- "@wordpress/data": "^10.31.1-next.233ccab9b.0",
55
- "@wordpress/date": "^5.31.1-next.233ccab9b.0",
56
- "@wordpress/deprecated": "^4.31.1-next.233ccab9b.0",
57
- "@wordpress/dom": "^4.31.1-next.233ccab9b.0",
58
- "@wordpress/element": "^6.31.1-next.233ccab9b.0",
59
- "@wordpress/escape-html": "^3.31.1-next.233ccab9b.0",
60
- "@wordpress/hooks": "^4.31.1-next.233ccab9b.0",
61
- "@wordpress/html-entities": "^4.31.1-next.233ccab9b.0",
62
- "@wordpress/i18n": "^6.4.1-next.233ccab9b.0",
63
- "@wordpress/icons": "^10.31.1-next.233ccab9b.0",
64
- "@wordpress/interactivity": "^6.31.1-next.233ccab9b.0",
65
- "@wordpress/interactivity-router": "^2.31.1-next.233ccab9b.0",
66
- "@wordpress/keyboard-shortcuts": "^5.31.1-next.233ccab9b.0",
67
- "@wordpress/keycodes": "^4.31.1-next.233ccab9b.0",
68
- "@wordpress/notices": "^5.31.1-next.233ccab9b.0",
69
- "@wordpress/patterns": "^2.31.1-next.233ccab9b.0",
70
- "@wordpress/primitives": "^4.31.1-next.233ccab9b.0",
71
- "@wordpress/private-apis": "^1.31.1-next.233ccab9b.0",
72
- "@wordpress/reusable-blocks": "^5.31.1-next.233ccab9b.0",
73
- "@wordpress/rich-text": "^7.31.1-next.233ccab9b.0",
74
- "@wordpress/server-side-render": "^6.7.1-next.233ccab9b.0",
75
- "@wordpress/url": "^4.31.1-next.233ccab9b.0",
76
- "@wordpress/viewport": "^6.31.1-next.233ccab9b.0",
77
- "@wordpress/wordcount": "^4.31.1-next.233ccab9b.0",
45
+ "@wordpress/a11y": "^4.32.0",
46
+ "@wordpress/api-fetch": "^7.32.0",
47
+ "@wordpress/autop": "^4.32.0",
48
+ "@wordpress/blob": "^4.32.0",
49
+ "@wordpress/block-editor": "^15.5.0",
50
+ "@wordpress/blocks": "^15.5.0",
51
+ "@wordpress/components": "^30.5.0",
52
+ "@wordpress/compose": "^7.32.0",
53
+ "@wordpress/core-data": "^7.32.0",
54
+ "@wordpress/data": "^10.32.0",
55
+ "@wordpress/date": "^5.32.0",
56
+ "@wordpress/deprecated": "^4.32.0",
57
+ "@wordpress/dom": "^4.32.0",
58
+ "@wordpress/element": "^6.32.0",
59
+ "@wordpress/escape-html": "^3.32.0",
60
+ "@wordpress/hooks": "^4.32.0",
61
+ "@wordpress/html-entities": "^4.32.0",
62
+ "@wordpress/i18n": "^6.5.0",
63
+ "@wordpress/icons": "^10.32.0",
64
+ "@wordpress/interactivity": "^6.32.0",
65
+ "@wordpress/interactivity-router": "^2.32.0",
66
+ "@wordpress/keyboard-shortcuts": "^5.32.0",
67
+ "@wordpress/keycodes": "^4.32.0",
68
+ "@wordpress/notices": "^5.32.0",
69
+ "@wordpress/patterns": "^2.32.0",
70
+ "@wordpress/primitives": "^4.32.0",
71
+ "@wordpress/private-apis": "^1.32.0",
72
+ "@wordpress/reusable-blocks": "^5.32.0",
73
+ "@wordpress/rich-text": "^7.32.0",
74
+ "@wordpress/server-side-render": "^6.8.0",
75
+ "@wordpress/url": "^4.32.0",
76
+ "@wordpress/viewport": "^6.32.0",
77
+ "@wordpress/wordcount": "^4.32.0",
78
78
  "change-case": "^4.1.2",
79
79
  "clsx": "^2.1.1",
80
80
  "colord": "^2.7.0",
@@ -92,5 +92,5 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "gitHead": "d11f971521e4b39b07124d5c5516890ff98b0e31"
95
+ "gitHead": "a030b4c0e0695239b942c7dc18511782b64f10ed"
96
96
  }
@@ -4,7 +4,7 @@
4
4
  "name": "core/accordion",
5
5
  "title": "Accordion",
6
6
  "category": "design",
7
- "description": "Displays a group of accordion headers and associated expandable content.",
7
+ "description": "Displays a group of accordion headings and associated expandable content.",
8
8
  "example": {},
9
9
  "__experimental": true,
10
10
  "supports": {
@@ -67,13 +67,21 @@
67
67
  "autoclose": {
68
68
  "type": "boolean",
69
69
  "default": false
70
+ },
71
+ "headingLevel": {
72
+ "type": "number",
73
+ "default": 3
74
+ },
75
+ "levelOptions": {
76
+ "type": "array"
70
77
  }
71
78
  },
72
79
  "providesContext": {
73
80
  "core/accordion-icon-position": "iconPosition",
74
- "core/accordion-show-icon": "showIcon"
81
+ "core/accordion-show-icon": "showIcon",
82
+ "core/accordion-heading-level": "headingLevel"
75
83
  },
76
- "allowedBlocks": [ "core/accordion-content" ],
84
+ "allowedBlocks": [ "core/accordion-item" ],
77
85
  "textdomain": "default",
78
86
  "viewScriptModule": "@wordpress/block-library/accordion/view"
79
87
  }
@@ -6,7 +6,9 @@ import {
6
6
  useInnerBlocksProps,
7
7
  InspectorControls,
8
8
  BlockControls,
9
+ useBlockEditingMode,
9
10
  store as blockEditorStore,
11
+ HeadingLevelDropdown,
10
12
  } from '@wordpress/block-editor';
11
13
  import { __ } from '@wordpress/i18n';
12
14
  import {
@@ -16,8 +18,9 @@ import {
16
18
  __experimentalToolsPanel as ToolsPanel,
17
19
  __experimentalToolsPanelItem as ToolsPanelItem,
18
20
  ToolbarButton,
21
+ ToolbarGroup,
19
22
  } from '@wordpress/components';
20
- import { useDispatch } from '@wordpress/data';
23
+ import { useDispatch, useSelect, useRegistry } from '@wordpress/data';
21
24
  import { createBlock } from '@wordpress/blocks';
22
25
 
23
26
  /**
@@ -25,20 +28,32 @@ import { createBlock } from '@wordpress/blocks';
25
28
  */
26
29
  import { useToolsPanelDropdownMenuProps } from '../utils/hooks';
27
30
 
28
- const ACCORDION_BLOCK_NAME = 'core/accordion-content';
31
+ const ACCORDION_BLOCK_NAME = 'core/accordion-item';
32
+ const ACCORDION_HEADING_BLOCK_NAME = 'core/accordion-heading';
29
33
  const ACCORDION_BLOCK = {
30
34
  name: ACCORDION_BLOCK_NAME,
31
35
  };
32
36
 
33
37
  export default function Edit( {
34
- attributes: { autoclose, iconPosition, showIcon },
38
+ attributes: {
39
+ autoclose,
40
+ iconPosition,
41
+ showIcon,
42
+ headingLevel,
43
+ levelOptions,
44
+ },
35
45
  clientId,
36
46
  setAttributes,
37
47
  isSelected: isSingleSelected,
38
48
  } ) {
49
+ const registry = useRegistry();
50
+ const { getBlockOrder } = useSelect( blockEditorStore );
39
51
  const blockProps = useBlockProps();
40
52
  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
41
- const { insertBlock } = useDispatch( blockEditorStore );
53
+ const { updateBlockAttributes, insertBlock } =
54
+ useDispatch( blockEditorStore );
55
+ const blockEditingMode = useBlockEditingMode();
56
+ const isContentOnlyMode = blockEditingMode === 'contentOnly';
42
57
 
43
58
  const innerBlocksProps = useInnerBlocksProps( blockProps, {
44
59
  template: [ [ ACCORDION_BLOCK_NAME ], [ ACCORDION_BLOCK_NAME ] ],
@@ -47,19 +62,60 @@ export default function Edit( {
47
62
  templateInsertUpdatesSelection: true,
48
63
  } );
49
64
 
50
- const addAccordionContentBlock = () => {
51
- const newAccordionContent = createBlock( ACCORDION_BLOCK_NAME );
52
- insertBlock( newAccordionContent, undefined, clientId );
65
+ const addAccordionItemBlock = () => {
66
+ // When adding, set the header's level to current headingLevel
67
+ const newAccordionItem = createBlock( ACCORDION_BLOCK_NAME, {}, [
68
+ createBlock( ACCORDION_HEADING_BLOCK_NAME, {
69
+ level: headingLevel,
70
+ } ),
71
+ createBlock( 'core/accordion-panel', {} ),
72
+ ] );
73
+ insertBlock( newAccordionItem, undefined, clientId );
74
+ };
75
+
76
+ /**
77
+ * Update all child Accordion Header blocks with a new heading level
78
+ * based on the accordion group setting.
79
+ * @param {number} newHeadingLevel The new heading level to set
80
+ */
81
+ const updateHeadingLevel = ( newHeadingLevel ) => {
82
+ const innerBlockClientIds = getBlockOrder( clientId );
83
+
84
+ // Get all accordion-header blocks from all accordion-content blocks.
85
+ const accordionHeaderClientIds = [];
86
+ innerBlockClientIds.forEach( ( contentClientId ) => {
87
+ const headerClientIds = getBlockOrder( contentClientId );
88
+ accordionHeaderClientIds.push( ...headerClientIds );
89
+ } );
90
+
91
+ // Update own and child block heading levels.
92
+ registry.batch( () => {
93
+ setAttributes( { headingLevel: newHeadingLevel } );
94
+ updateBlockAttributes( accordionHeaderClientIds, {
95
+ level: newHeadingLevel,
96
+ } );
97
+ } );
53
98
  };
54
99
 
55
100
  return (
56
101
  <>
57
- { isSingleSelected && (
58
- <BlockControls group="other">
59
- <ToolbarButton onClick={ addAccordionContentBlock }>
60
- { __( 'Add' ) }
61
- </ToolbarButton>
62
- </BlockControls>
102
+ { isSingleSelected && ! isContentOnlyMode && (
103
+ <>
104
+ <BlockControls>
105
+ <ToolbarGroup>
106
+ <HeadingLevelDropdown
107
+ value={ headingLevel }
108
+ options={ levelOptions }
109
+ onChange={ updateHeadingLevel }
110
+ />
111
+ </ToolbarGroup>
112
+ </BlockControls>
113
+ <BlockControls group="other">
114
+ <ToolbarButton onClick={ addAccordionItemBlock }>
115
+ { __( 'Add' ) }
116
+ </ToolbarButton>
117
+ </BlockControls>
118
+ </>
63
119
  ) }
64
120
  <InspectorControls key="setting">
65
121
  <ToolsPanel
@@ -69,6 +125,7 @@ export default function Edit( {
69
125
  autoclose: false,
70
126
  showIcon: true,
71
127
  iconPosition: 'right',
128
+ headingLevel: 3,
72
129
  } );
73
130
  } }
74
131
  dropdownMenuProps={ dropdownMenuProps }
@@ -21,10 +21,10 @@ export const settings = {
21
21
  example: {
22
22
  innerBlocks: [
23
23
  {
24
- name: 'core/accordion-content',
24
+ name: 'core/accordion-item',
25
25
  innerBlocks: [
26
26
  {
27
- name: 'core/accordion-header',
27
+ name: 'core/accordion-heading',
28
28
  attributes: {
29
29
  title: __(
30
30
  'Lorem ipsum dolor sit amet, consectetur.'
@@ -34,10 +34,10 @@ export const settings = {
34
34
  ],
35
35
  },
36
36
  {
37
- name: 'core/accordion-content',
37
+ name: 'core/accordion-item',
38
38
  innerBlocks: [
39
39
  {
40
- name: 'core/accordion-header',
40
+ name: 'core/accordion-heading',
41
41
  attributes: {
42
42
  title: __(
43
43
  'Suspendisse commodo lacus, interdum et.'
@@ -20,7 +20,7 @@ function render_block_core_accordion( $attributes, $content ) {
20
20
 
21
21
  if ( $p->next_tag( array( 'class_name' => 'wp-block-accordion' ) ) ) {
22
22
  $p->set_attribute( 'data-wp-interactive', 'core/accordion' );
23
- $p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "accordionContents": [] }' );
23
+ $p->set_attribute( 'data-wp-context', '{ "autoclose": ' . $autoclose . ', "accordionItems": [] }' );
24
24
 
25
25
  // Only modify content if directives have been set.
26
26
  $content = $p->get_updated_html();