@wordpress/block-editor 15.6.1-next.36001005c.0 → 15.6.2

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 (169) hide show
  1. package/build/components/background-image-control/index.js +2 -2
  2. package/build/components/background-image-control/index.js.map +2 -2
  3. package/build/components/block-list/block.js +3 -3
  4. package/build/components/block-list/block.js.map +2 -2
  5. package/build/components/block-list/index.js +2 -2
  6. package/build/components/block-list/index.js.map +1 -1
  7. package/build/components/block-quick-navigation/index.js +0 -1
  8. package/build/components/block-quick-navigation/index.js.map +2 -2
  9. package/build/components/global-styles/border-panel.js +1 -2
  10. package/build/components/global-styles/border-panel.js.map +2 -2
  11. package/build/components/global-styles/color-panel.js +1 -2
  12. package/build/components/global-styles/color-panel.js.map +2 -2
  13. package/build/components/global-styles/dimensions-panel.js +2 -3
  14. package/build/components/global-styles/dimensions-panel.js.map +2 -2
  15. package/build/components/global-styles/filters-panel.js +1 -2
  16. package/build/components/global-styles/filters-panel.js.map +2 -2
  17. package/build/components/global-styles/get-block-css-selector.js +78 -0
  18. package/build/components/global-styles/get-block-css-selector.js.map +7 -0
  19. package/build/components/global-styles/hooks.js +95 -23
  20. package/build/components/global-styles/hooks.js.map +2 -2
  21. package/build/components/global-styles/index.js +14 -0
  22. package/build/components/global-styles/index.js.map +2 -2
  23. package/build/components/global-styles/typography-panel.js +19 -3
  24. package/build/components/global-styles/typography-panel.js.map +2 -2
  25. package/build/components/global-styles/typography-utils.js +49 -2
  26. package/build/components/global-styles/typography-utils.js.map +2 -2
  27. package/build/components/global-styles/use-global-styles-output.js +998 -0
  28. package/build/components/global-styles/use-global-styles-output.js.map +7 -0
  29. package/build/components/global-styles/utils.js +377 -0
  30. package/build/components/global-styles/utils.js.map +2 -2
  31. package/build/components/rich-text/index.js +8 -7
  32. package/build/components/rich-text/index.js.map +2 -2
  33. package/build/hooks/allowed-blocks.js +50 -1
  34. package/build/hooks/allowed-blocks.js.map +2 -2
  35. package/build/hooks/block-bindings.js +111 -170
  36. package/build/hooks/block-bindings.js.map +2 -2
  37. package/build/hooks/block-style-variation.js +10 -6
  38. package/build/hooks/block-style-variation.js.map +2 -2
  39. package/build/hooks/custom-class-name.js +1 -1
  40. package/build/hooks/custom-class-name.js.map +1 -1
  41. package/build/hooks/duotone.js +3 -3
  42. package/build/hooks/duotone.js.map +2 -2
  43. package/build/hooks/fit-text.js +33 -20
  44. package/build/hooks/fit-text.js.map +2 -2
  45. package/build/hooks/font-size.js +6 -5
  46. package/build/hooks/font-size.js.map +2 -2
  47. package/build/hooks/metadata.js +48 -2
  48. package/build/hooks/metadata.js.map +2 -2
  49. package/build/hooks/typography.js +11 -4
  50. package/build/hooks/typography.js.map +3 -3
  51. package/build/hooks/use-typography-props.js +2 -2
  52. package/build/hooks/use-typography-props.js.map +2 -2
  53. package/build/store/private-selectors.js +3 -3
  54. package/build/store/private-selectors.js.map +2 -2
  55. package/build/store/selectors.js +38 -13
  56. package/build/store/selectors.js.map +2 -2
  57. package/build/store/utils.js +2 -1
  58. package/build/store/utils.js.map +2 -2
  59. package/build/utils/fit-text-utils.js +4 -4
  60. package/build/utils/fit-text-utils.js.map +2 -2
  61. package/build-module/components/background-image-control/index.js +1 -1
  62. package/build-module/components/background-image-control/index.js.map +2 -2
  63. package/build-module/components/block-list/block.js +3 -3
  64. package/build-module/components/block-list/block.js.map +2 -2
  65. package/build-module/components/block-list/index.js +2 -2
  66. package/build-module/components/block-list/index.js.map +1 -1
  67. package/build-module/components/block-quick-navigation/index.js +0 -1
  68. package/build-module/components/block-quick-navigation/index.js.map +2 -2
  69. package/build-module/components/global-styles/border-panel.js +1 -2
  70. package/build-module/components/global-styles/border-panel.js.map +2 -2
  71. package/build-module/components/global-styles/color-panel.js +1 -2
  72. package/build-module/components/global-styles/color-panel.js.map +2 -2
  73. package/build-module/components/global-styles/dimensions-panel.js +1 -2
  74. package/build-module/components/global-styles/dimensions-panel.js.map +2 -2
  75. package/build-module/components/global-styles/filters-panel.js +1 -2
  76. package/build-module/components/global-styles/filters-panel.js.map +2 -2
  77. package/build-module/components/global-styles/get-block-css-selector.js +54 -0
  78. package/build-module/components/global-styles/get-block-css-selector.js.map +7 -0
  79. package/build-module/components/global-styles/hooks.js +95 -27
  80. package/build-module/components/global-styles/hooks.js.map +2 -2
  81. package/build-module/components/global-styles/index.js +14 -0
  82. package/build-module/components/global-styles/index.js.map +2 -2
  83. package/build-module/components/global-styles/typography-panel.js +19 -3
  84. package/build-module/components/global-styles/typography-panel.js.map +2 -2
  85. package/build-module/components/global-styles/typography-utils.js +49 -1
  86. package/build-module/components/global-styles/typography-utils.js.map +2 -2
  87. package/build-module/components/global-styles/use-global-styles-output.js +979 -0
  88. package/build-module/components/global-styles/use-global-styles-output.js.map +7 -0
  89. package/build-module/components/global-styles/utils.js +364 -0
  90. package/build-module/components/global-styles/utils.js.map +2 -2
  91. package/build-module/components/rich-text/index.js +8 -7
  92. package/build-module/components/rich-text/index.js.map +2 -2
  93. package/build-module/hooks/allowed-blocks.js +49 -1
  94. package/build-module/hooks/allowed-blocks.js.map +2 -2
  95. package/build-module/hooks/block-bindings.js +112 -172
  96. package/build-module/hooks/block-bindings.js.map +2 -2
  97. package/build-module/hooks/block-style-variation.js +12 -4
  98. package/build-module/hooks/block-style-variation.js.map +2 -2
  99. package/build-module/hooks/custom-class-name.js +1 -1
  100. package/build-module/hooks/custom-class-name.js.map +1 -1
  101. package/build-module/hooks/duotone.js +3 -3
  102. package/build-module/hooks/duotone.js.map +2 -2
  103. package/build-module/hooks/fit-text.js +34 -21
  104. package/build-module/hooks/fit-text.js.map +2 -2
  105. package/build-module/hooks/font-size.js +5 -4
  106. package/build-module/hooks/font-size.js.map +2 -2
  107. package/build-module/hooks/metadata.js +46 -1
  108. package/build-module/hooks/metadata.js.map +2 -2
  109. package/build-module/hooks/typography.js +11 -4
  110. package/build-module/hooks/typography.js.map +3 -3
  111. package/build-module/hooks/use-typography-props.js +1 -1
  112. package/build-module/hooks/use-typography-props.js.map +2 -2
  113. package/build-module/store/private-selectors.js +2 -2
  114. package/build-module/store/private-selectors.js.map +2 -2
  115. package/build-module/store/selectors.js +39 -14
  116. package/build-module/store/selectors.js.map +2 -2
  117. package/build-module/store/utils.js +3 -2
  118. package/build-module/store/utils.js.map +2 -2
  119. package/build-module/utils/fit-text-utils.js +4 -4
  120. package/build-module/utils/fit-text-utils.js.map +2 -2
  121. package/build-style/style-rtl.css +6 -10
  122. package/build-style/style.css +6 -10
  123. package/package.json +35 -36
  124. package/src/components/background-image-control/index.js +1 -1
  125. package/src/components/block-card/style.scss +1 -1
  126. package/src/components/block-list/block.js +1 -1
  127. package/src/components/block-list/index.js +2 -2
  128. package/src/components/block-navigation/style.scss +1 -1
  129. package/src/components/block-quick-navigation/index.js +0 -1
  130. package/src/components/block-switcher/style.scss +1 -1
  131. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  132. package/src/components/global-styles/border-panel.js +1 -2
  133. package/src/components/global-styles/color-panel.js +1 -2
  134. package/src/components/global-styles/color-panel.native.js +1 -1
  135. package/src/components/global-styles/dimensions-panel.js +1 -2
  136. package/src/components/global-styles/filters-panel.js +1 -2
  137. package/src/components/global-styles/get-block-css-selector.js +114 -0
  138. package/src/components/global-styles/hooks.js +108 -29
  139. package/src/components/global-styles/index.js +8 -0
  140. package/src/components/global-styles/test/typography-utils.js +806 -0
  141. package/src/components/global-styles/test/use-global-styles-output.js +1131 -0
  142. package/src/components/global-styles/test/utils.js +442 -1
  143. package/src/components/global-styles/typography-panel.js +27 -3
  144. package/src/components/global-styles/typography-utils.js +133 -0
  145. package/src/components/global-styles/use-global-styles-output.js +1487 -0
  146. package/src/components/global-styles/utils.js +537 -0
  147. package/src/components/inserter/style.scss +2 -2
  148. package/src/components/multi-selection-inspector/style.scss +1 -1
  149. package/src/components/rich-text/index.js +8 -14
  150. package/src/hooks/allowed-blocks.js +89 -1
  151. package/src/hooks/block-bindings.js +79 -153
  152. package/src/hooks/block-style-variation.js +12 -4
  153. package/src/hooks/custom-class-name.js +1 -1
  154. package/src/hooks/duotone.js +3 -3
  155. package/src/hooks/fit-text.js +39 -30
  156. package/src/hooks/font-size.js +8 -4
  157. package/src/hooks/metadata.js +89 -0
  158. package/src/hooks/test/allowed-blocks.js +278 -0
  159. package/src/hooks/test/metadata.js +316 -0
  160. package/src/hooks/typography.js +15 -4
  161. package/src/hooks/use-typography-props.js +1 -1
  162. package/src/store/private-selectors.js +2 -2
  163. package/src/store/selectors.js +59 -21
  164. package/src/store/test/selectors.js +1 -1
  165. package/src/store/utils.js +2 -1
  166. package/src/style.scss +0 -1
  167. package/src/utils/fit-text-utils.js +4 -16
  168. package/tsconfig.json +0 -1
  169. package/src/components/block-quick-navigation/style.scss +0 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/custom-class-name.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { TextControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * Filters registered block settings, extending attributes to include `className`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( hasBlockSupport( settings, 'customClassName', true ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tclassName: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction CustomClassNameControlsPure( { className, setAttributes } ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<TextControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tlabel={ __( 'Additional CSS class(es)' ) }\n\t\t\t\tvalue={ className || '' }\n\t\t\t\tonChange={ ( nextValue ) => {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tclassName: nextValue !== '' ? nextValue : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\thelp={ __( 'Separate multiple classes with spaces.' ) }\n\t\t\t/>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: CustomClassNameControlsPure,\n\taddSaveProps,\n\tattributeKeys: [ 'className' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'customClassName', true );\n\t},\n};\n\n/**\n * Override props assigned to save component to inject the className, if block\n * supports customClassName. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif (\n\t\thasBlockSupport( blockType, 'customClassName', true ) &&\n\t\tattributes.className\n\t) {\n\t\textraProps.className = clsx(\n\t\t\textraProps.className,\n\t\t\tattributes.className\n\t\t);\n\t}\n\n\treturn extraProps;\n}\n\nexport function addTransforms( result, source, index, results ) {\n\tif ( ! hasBlockSupport( result.name, 'customClassName', true ) ) {\n\t\treturn result;\n\t}\n\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the class should not be kept.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\n\t// If we are transforming one block to multiple blocks or multiple blocks to one block,\n\t// we ignore the class during the transform.\n\tif (\n\t\t( results.length === 1 && source.length > 1 ) ||\n\t\t( results.length > 1 && source.length === 1 )\n\t) {\n\t\treturn result;\n\t}\n\n\t// If we are in presence of transform between one or more block in the source\n\t// that have one or more blocks in the result\n\t// we apply the class on source N to the result N,\n\t// if source N does not exists we do nothing.\n\tif ( source[ index ] ) {\n\t\tconst originClassName = source[ index ]?.attributes.className;\n\t\t// Avoid overriding classes if the transformed block already includes them.\n\t\tif ( originClassName && result.attributes.className === undefined ) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tattributes: {\n\t\t\t\t\t...result.attributes,\n\t\t\t\t\tclassName: originClassName,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\treturn result;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-class-name/attribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/color/addTransforms',\n\taddTransforms\n);\n"],
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { TextControl } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { InspectorControls } from '../components';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\n\n/**\n * Filters registered block settings, extending attributes to include `className`.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nexport function addAttribute( settings ) {\n\tif ( hasBlockSupport( settings, 'customClassName', true ) ) {\n\t\t// Gracefully handle if settings.attributes is undefined.\n\t\tsettings.attributes = {\n\t\t\t...settings.attributes,\n\t\t\tclassName: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t};\n\t}\n\n\treturn settings;\n}\n\nfunction CustomClassNameControlsPure( { className, setAttributes } ) {\n\tconst blockEditingMode = useBlockEditingMode();\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<InspectorControls group=\"advanced\">\n\t\t\t<TextControl\n\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t__next40pxDefaultSize\n\t\t\t\tautoComplete=\"off\"\n\t\t\t\tlabel={ __( 'Additional CSS class(es)' ) }\n\t\t\t\tvalue={ className || '' }\n\t\t\t\tonChange={ ( nextValue ) => {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\tclassName: nextValue !== '' ? nextValue : undefined,\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\thelp={ __( 'Separate multiple classes with spaces.' ) }\n\t\t\t/>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: CustomClassNameControlsPure,\n\taddSaveProps,\n\tattributeKeys: [ 'className' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'customClassName', true );\n\t},\n};\n\n/**\n * Override props assigned to save component to inject the className, if block\n * supports customClassName. This is only applied if the block's save result is an\n * element and not a markup string.\n *\n * @param {Object} extraProps Additional props applied to save element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Current block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nexport function addSaveProps( extraProps, blockType, attributes ) {\n\tif (\n\t\thasBlockSupport( blockType, 'customClassName', true ) &&\n\t\tattributes.className\n\t) {\n\t\textraProps.className = clsx(\n\t\t\textraProps.className,\n\t\t\tattributes.className\n\t\t);\n\t}\n\n\treturn extraProps;\n}\n\nexport function addTransforms( result, source, index, results ) {\n\tif ( ! hasBlockSupport( result.name, 'customClassName', true ) ) {\n\t\treturn result;\n\t}\n\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the class should not be kept.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\n\t// If we are transforming one block to multiple blocks or multiple blocks to one block,\n\t// we ignore the class during the transform.\n\tif (\n\t\t( results.length === 1 && source.length > 1 ) ||\n\t\t( results.length > 1 && source.length === 1 )\n\t) {\n\t\treturn result;\n\t}\n\n\t// If we are in presence of transform between one or more block in the source\n\t// that have one or more blocks in the result\n\t// we apply the class on source N to the result N,\n\t// if source N does not exists we do nothing.\n\tif ( source[ index ] ) {\n\t\tconst originClassName = source[ index ]?.attributes.className;\n\t\t// Avoid overriding classes if the transformed block already includes them.\n\t\tif ( originClassName && result.attributes.className === undefined ) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\tattributes: {\n\t\t\t\t\t...result.attributes,\n\t\t\t\t\tclassName: originClassName,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\treturn result;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-class-name/attribute',\n\taddAttribute\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/customClassName/addTransforms',\n\taddTransforms\n);\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDG;AA7CH,kBAAiB;AAKjB,mBAA0B;AAC1B,wBAA4B;AAC5B,kBAAmB;AACnB,oBAAgC;AAKhC,IAAAA,qBAAkC;AAClC,gCAAoC;AAS7B,SAAS,aAAc,UAAW;AACxC,UAAK,+BAAiB,UAAU,mBAAmB,IAAK,GAAI;AAE3D,aAAS,aAAa;AAAA,MACrB,GAAG,SAAS;AAAA,MACZ,WAAW;AAAA,QACV,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,4BAA6B,EAAE,WAAW,cAAc,GAAI;AACpE,QAAM,uBAAmB,+CAAoB;AAC7C,MAAK,qBAAqB,WAAY;AACrC,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,wCAAkB,OAAM,YACxB;AAAA,IAAC;AAAA;AAAA,MACA,yBAAuB;AAAA,MACvB,uBAAqB;AAAA,MACrB,cAAa;AAAA,MACb,WAAQ,gBAAI,0BAA2B;AAAA,MACvC,OAAQ,aAAa;AAAA,MACrB,UAAW,CAAE,cAAe;AAC3B,sBAAe;AAAA,UACd,WAAW,cAAc,KAAK,YAAY;AAAA,QAC3C,CAAE;AAAA,MACH;AAAA,MACA,UAAO,gBAAI,wCAAyC;AAAA;AAAA,EACrD,GACD;AAEF;AAEA,IAAO,4BAAQ;AAAA,EACd,MAAM;AAAA,EACN;AAAA,EACA,eAAe,CAAE,WAAY;AAAA,EAC7B,WAAY,MAAO;AAClB,eAAO,+BAAiB,MAAM,mBAAmB,IAAK;AAAA,EACvD;AACD;AAaO,SAAS,aAAc,YAAY,WAAW,YAAa;AACjE,UACC,+BAAiB,WAAW,mBAAmB,IAAK,KACpD,WAAW,WACV;AACD,eAAW,gBAAY,YAAAC;AAAA,MACtB,WAAW;AAAA,MACX,WAAW;AAAA,IACZ;AAAA,EACD;AAEA,SAAO;AACR;AAEO,SAAS,cAAe,QAAQ,QAAQ,OAAO,SAAU;AAC/D,MAAK,KAAE,+BAAiB,OAAO,MAAM,mBAAmB,IAAK,GAAI;AAChE,WAAO;AAAA,EACR;AAIA,MAAK,QAAQ,WAAW,KAAK,OAAO,YAAY,WAAW,OAAO,QAAS;AAC1E,WAAO;AAAA,EACR;AAIA,MACG,QAAQ,WAAW,KAAK,OAAO,SAAS,KACxC,QAAQ,SAAS,KAAK,OAAO,WAAW,GACzC;AACD,WAAO;AAAA,EACR;AAMA,MAAK,OAAQ,KAAM,GAAI;AACtB,UAAM,kBAAkB,OAAQ,KAAM,GAAG,WAAW;AAEpD,QAAK,mBAAmB,OAAO,WAAW,cAAc,QAAY;AACnE,aAAO;AAAA,QACN,GAAG;AAAA,QACH,YAAY;AAAA,UACX,GAAG,OAAO;AAAA,UACV,WAAW;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;",
6
6
  "names": ["import_components", "clsx"]
7
7
  }
@@ -40,9 +40,9 @@ var import_blocks = require("@wordpress/blocks");
40
40
  var import_compose = require("@wordpress/compose");
41
41
  var import_hooks = require("@wordpress/hooks");
42
42
  var import_element = require("@wordpress/element");
43
- var import_global_styles_engine = require("@wordpress/global-styles-engine");
44
43
  var import_components = require("../components");
45
44
  var import_utils = require("../components/duotone/utils");
45
+ var import_get_block_css_selector = require("../components/global-styles/get-block-css-selector");
46
46
  var import_utils2 = require("../components/global-styles/utils");
47
47
  var import_utils3 = require("./utils");
48
48
  var import_filters_panel = __toESM(require("../components/global-styles/filters-panel"));
@@ -256,10 +256,10 @@ function useBlockProps({ clientId, name, style }) {
256
256
  false
257
257
  );
258
258
  if (experimentalDuotone) {
259
- const rootSelector = (0, import_global_styles_engine.getBlockSelector)(blockType);
259
+ const rootSelector = (0, import_get_block_css_selector.getBlockCSSSelector)(blockType);
260
260
  return typeof experimentalDuotone === "string" ? (0, import_utils2.scopeSelector)(rootSelector, experimentalDuotone) : rootSelector;
261
261
  }
262
- return (0, import_global_styles_engine.getBlockSelector)(blockType, "filter.duotone", {
262
+ return (0, import_get_block_css_selector.getBlockCSSSelector)(blockType, "filter.duotone", {
263
263
  fallback: true
264
264
  });
265
265
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/duotone.js"],
4
- "sourcesContent": ["/**\n * External dependencies\n */\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useEffect } from '@wordpress/element';\nimport { getBlockSelector } from '@wordpress/global-styles-engine';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\tInspectorControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSettings,\n} from '../components';\nimport {\n\tgetDuotoneFilter,\n\tgetDuotoneStylesheet,\n\tgetDuotoneUnsetStylesheet,\n} from '../components/duotone/utils';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport {\n\tcleanEmptyObject,\n\tuseBlockSettings,\n\tusePrivateStyleOverride,\n} from './utils';\nimport { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nconst EMPTY_ARRAY = [];\n\n// Safari does not always update the duotone filter when the duotone colors\n// are changed. This browser check is later used to force a re-render of the block\n// element to ensure the duotone filter is updated. The check is included at the\n// root of this file as it only needs to be run once per page load.\nconst isSafari =\n\twindow?.navigator.userAgent &&\n\twindow.navigator.userAgent.includes( 'Safari' ) &&\n\t! window.navigator.userAgent.includes( 'Chrome' ) &&\n\t! window.navigator.userAgent.includes( 'Chromium' );\n\nextend( [ namesPlugin ] );\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst [ enableDefault, userPresets, themePresets, defaultPresets ] =\n\t\tuseSettings(\n\t\t\tdefaultSetting,\n\t\t\t`${ presetSetting }.custom`,\n\t\t\t`${ presetSetting }.theme`,\n\t\t\t`${ presetSetting }.default`\n\t\t);\n\treturn useMemo(\n\t\t() => [\n\t\t\t...( userPresets || EMPTY_ARRAY ),\n\t\t\t...( themePresets || EMPTY_ARRAY ),\n\t\t\t...( ( enableDefault && defaultPresets ) || EMPTY_ARRAY ),\n\t\t],\n\t\t[ enableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function getColorsFromDuotonePreset( duotone, duotonePalette ) {\n\tif ( ! duotone ) {\n\t\treturn;\n\t}\n\tconst preset = duotonePalette?.find( ( { slug } ) => {\n\t\treturn duotone === `var:preset|duotone|${ slug }`;\n\t} );\n\n\treturn preset ? preset.colors : undefined;\n}\n\nexport function getDuotonePresetFromColors( colors, duotonePalette ) {\n\tif ( ! colors || ! Array.isArray( colors ) ) {\n\t\treturn;\n\t}\n\n\tconst preset = duotonePalette?.find( ( duotonePreset ) => {\n\t\treturn duotonePreset?.colors?.every(\n\t\t\t( val, index ) => val === colors[ index ]\n\t\t);\n\t} );\n\n\treturn preset ? `var:preset|duotone|${ preset.slug }` : undefined;\n}\n\nfunction DuotonePanelPure( { style, setAttributes, name } ) {\n\tconst duotoneStyle = style?.color?.duotone;\n\tconst settings = useBlockSettings( name );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst [ enableCustomColors, enableCustomDuotone ] = useSettings(\n\t\t'color.custom',\n\t\t'color.customDuotone'\n\t);\n\tconst disableCustomColors = ! enableCustomColors;\n\tconst disableCustomDuotone =\n\t\t! enableCustomDuotone ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst duotonePresetOrColors =\n\t\tduotoneStyle === 'unset' || Array.isArray( duotoneStyle )\n\t\t\t? duotoneStyle\n\t\t\t: getColorsFromDuotonePreset( duotoneStyle, duotonePalette );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"filter\">\n\t\t\t\t<StylesFiltersPanel\n\t\t\t\t\tvalue={ { filter: { duotone: duotonePresetOrColors } } }\n\t\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...newDuotone?.filter,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t\t<DuotoneControl\n\t\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\t\tvalue={ duotonePresetOrColors }\n\t\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\t\tconst maybePreset = getDuotonePresetFromColors(\n\t\t\t\t\t\t\tnewDuotone,\n\t\t\t\t\t\t\tduotonePalette\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\t\tduotone: maybePreset ?? newDuotone, // use preset or fallback to custom colors.\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t</>\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: DuotonePanelPure,\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'filter.duotone' );\n\t},\n};\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\t// Previous `color.__experimentalDuotone` support flag is migrated via\n\t// block_type_metadata_settings filter in `lib/block-supports/duotone.php`.\n\tif ( ! hasBlockSupport( settings, 'filter.duotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\nfunction useDuotoneStyles( {\n\tclientId,\n\tid: filterId,\n\tselector: duotoneSelector,\n\tattribute: duotoneAttr,\n} ) {\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\n\t// Possible values for duotone attribute:\n\t// 1. Array of colors - e.g. ['#000000', '#ffffff'].\n\t// 2. Variable for an existing Duotone preset - e.g. 'var:preset|duotone|green-blue' or 'var(--wp--preset--duotone--green-blue)''\n\t// 3. A CSS string - e.g. 'unset' to remove globally applied duotone.\n\tconst isCustom = Array.isArray( duotoneAttr );\n\tconst duotonePreset = isCustom\n\t\t? undefined\n\t\t: getColorsFromDuotonePreset( duotoneAttr, duotonePalette );\n\tconst isPreset = typeof duotoneAttr === 'string' && duotonePreset;\n\tconst isCSS = typeof duotoneAttr === 'string' && ! isPreset;\n\n\t// Match the structure of WP_Duotone_Gutenberg::render_duotone_support() in PHP.\n\tlet colors = null;\n\tif ( isPreset ) {\n\t\t// Array of colors.\n\t\tcolors = duotonePreset;\n\t} else if ( isCSS ) {\n\t\t// CSS filter property string (e.g. 'unset').\n\t\tcolors = duotoneAttr;\n\t} else if ( isCustom ) {\n\t\t// Array of colors.\n\t\tcolors = duotoneAttr;\n\t}\n\n\t// Build the CSS selectors to which the filter will be applied.\n\tconst selectors = duotoneSelector.split( ',' );\n\n\tconst selectorsScoped = selectors.map( ( selectorPart ) => {\n\t\t// Assuming the selector part is a subclass selector (not a tag name)\n\t\t// so we can prepend the filter id class. If we want to support elements\n\t\t// such as `img` or namespaces, we'll need to add a case for that here.\n\t\treturn `.${ filterId }${ selectorPart.trim() }`;\n\t} );\n\n\tconst selector = selectorsScoped.join( ', ' );\n\n\tconst isValidFilter = Array.isArray( colors ) || colors === 'unset';\n\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tcss:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneStylesheet( selector, filterId )\n\t\t\t\t\t\t\t: getDuotoneUnsetStylesheet( selector ),\n\t\t\t\t\t__unstableType: 'presets',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tassets:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneFilter( filterId, colors )\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t__unstableType: 'svgs',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\n\tconst blockElement = useBlockElement( clientId );\n\n\tuseEffect( () => {\n\t\tif ( ! isValidFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Safari does not always update the duotone filter when the duotone\n\t\t// colors are changed. When using Safari, force the block element to be\n\t\t// repainted by the browser to ensure any changes are reflected\n\t\t// visually. This logic matches that used on the site frontend in\n\t\t// `block-supports/duotone.php`.\n\t\tif ( blockElement && isSafari ) {\n\t\t\tconst display = blockElement.style.display;\n\t\t\t// Switch to `inline-block` to force a repaint. In the editor,\n\t\t\t// `inline-block` is used instead of `none` to ensure that scroll\n\t\t\t// position is not affected, as `none` results in the editor\n\t\t\t// scrolling to the top of the block.\n\t\t\tblockElement.style.setProperty( 'display', 'inline-block' );\n\t\t\t// Simply accessing el.offsetHeight flushes layout and style changes\n\t\t\t// in WebKit without having to wait for setTimeout.\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tblockElement.offsetHeight;\n\t\t\tblockElement.style.setProperty( 'display', display );\n\t\t}\n\t\t// `colors` must be a dependency so this effect runs when the colors\n\t\t// change in Safari.\n\t}, [ isValidFilter, blockElement, colors ] );\n}\n\n// Used for generating the instance ID\nconst DUOTONE_BLOCK_PROPS_REFERENCE = {};\n\nfunction useBlockProps( { clientId, name, style } ) {\n\tconst id = useInstanceId( DUOTONE_BLOCK_PROPS_REFERENCE );\n\tconst selector = useMemo( () => {\n\t\tconst blockType = getBlockType( name );\n\n\t\tif ( blockType ) {\n\t\t\t// Backwards compatibility for `supports.color.__experimentalDuotone`\n\t\t\t// is provided via the `block_type_metadata_settings` filter. If\n\t\t\t// `supports.filter.duotone` has not been set and the\n\t\t\t// experimental property has been, the experimental property\n\t\t\t// value is copied into `supports.filter.duotone`.\n\t\t\tconst duotoneSupport = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'filter.duotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( ! duotoneSupport ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// If the experimental duotone support was set, that value is\n\t\t\t// to be treated as a selector and requires scoping.\n\t\t\tconst experimentalDuotone = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'color.__experimentalDuotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( experimentalDuotone ) {\n\t\t\t\tconst rootSelector = getBlockSelector( blockType );\n\t\t\t\treturn typeof experimentalDuotone === 'string'\n\t\t\t\t\t? scopeSelector( rootSelector, experimentalDuotone )\n\t\t\t\t\t: rootSelector;\n\t\t\t}\n\n\t\t\t// Regular filter.duotone support uses filter.duotone selectors with fallbacks.\n\t\t\treturn getBlockSelector( blockType, 'filter.duotone', {\n\t\t\t\tfallback: true,\n\t\t\t} );\n\t\t}\n\t}, [ name ] );\n\n\tconst attribute = style?.color?.duotone;\n\n\tconst filterClass = `wp-duotone-${ id }`;\n\n\tconst shouldRender = selector && attribute;\n\n\tuseDuotoneStyles( {\n\t\tclientId,\n\t\tid: filterClass,\n\t\tselector,\n\t\tattribute,\n\t} );\n\n\treturn {\n\t\tclassName: shouldRender ? filterClass : '',\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport { extend } from 'colord';\nimport namesPlugin from 'colord/plugins/names';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tgetBlockSupport,\n\tgetBlockType,\n\thasBlockSupport,\n} from '@wordpress/blocks';\nimport { useInstanceId } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\nimport { useMemo, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport {\n\tBlockControls,\n\tInspectorControls,\n\t__experimentalDuotoneControl as DuotoneControl,\n\tuseSettings,\n} from '../components';\nimport {\n\tgetDuotoneFilter,\n\tgetDuotoneStylesheet,\n\tgetDuotoneUnsetStylesheet,\n} from '../components/duotone/utils';\nimport { getBlockCSSSelector } from '../components/global-styles/get-block-css-selector';\nimport { scopeSelector } from '../components/global-styles/utils';\nimport {\n\tcleanEmptyObject,\n\tuseBlockSettings,\n\tusePrivateStyleOverride,\n} from './utils';\nimport { default as StylesFiltersPanel } from '../components/global-styles/filters-panel';\nimport { useBlockEditingMode } from '../components/block-editing-mode';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\n\nconst EMPTY_ARRAY = [];\n\n// Safari does not always update the duotone filter when the duotone colors\n// are changed. This browser check is later used to force a re-render of the block\n// element to ensure the duotone filter is updated. The check is included at the\n// root of this file as it only needs to be run once per page load.\nconst isSafari =\n\twindow?.navigator.userAgent &&\n\twindow.navigator.userAgent.includes( 'Safari' ) &&\n\t! window.navigator.userAgent.includes( 'Chrome' ) &&\n\t! window.navigator.userAgent.includes( 'Chromium' );\n\nextend( [ namesPlugin ] );\n\nfunction useMultiOriginPresets( { presetSetting, defaultSetting } ) {\n\tconst [ enableDefault, userPresets, themePresets, defaultPresets ] =\n\t\tuseSettings(\n\t\t\tdefaultSetting,\n\t\t\t`${ presetSetting }.custom`,\n\t\t\t`${ presetSetting }.theme`,\n\t\t\t`${ presetSetting }.default`\n\t\t);\n\treturn useMemo(\n\t\t() => [\n\t\t\t...( userPresets || EMPTY_ARRAY ),\n\t\t\t...( themePresets || EMPTY_ARRAY ),\n\t\t\t...( ( enableDefault && defaultPresets ) || EMPTY_ARRAY ),\n\t\t],\n\t\t[ enableDefault, userPresets, themePresets, defaultPresets ]\n\t);\n}\n\nexport function getColorsFromDuotonePreset( duotone, duotonePalette ) {\n\tif ( ! duotone ) {\n\t\treturn;\n\t}\n\tconst preset = duotonePalette?.find( ( { slug } ) => {\n\t\treturn duotone === `var:preset|duotone|${ slug }`;\n\t} );\n\n\treturn preset ? preset.colors : undefined;\n}\n\nexport function getDuotonePresetFromColors( colors, duotonePalette ) {\n\tif ( ! colors || ! Array.isArray( colors ) ) {\n\t\treturn;\n\t}\n\n\tconst preset = duotonePalette?.find( ( duotonePreset ) => {\n\t\treturn duotonePreset?.colors?.every(\n\t\t\t( val, index ) => val === colors[ index ]\n\t\t);\n\t} );\n\n\treturn preset ? `var:preset|duotone|${ preset.slug }` : undefined;\n}\n\nfunction DuotonePanelPure( { style, setAttributes, name } ) {\n\tconst duotoneStyle = style?.color?.duotone;\n\tconst settings = useBlockSettings( name );\n\tconst blockEditingMode = useBlockEditingMode();\n\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\tconst colorPalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.palette',\n\t\tdefaultSetting: 'color.defaultPalette',\n\t} );\n\tconst [ enableCustomColors, enableCustomDuotone ] = useSettings(\n\t\t'color.custom',\n\t\t'color.customDuotone'\n\t);\n\tconst disableCustomColors = ! enableCustomColors;\n\tconst disableCustomDuotone =\n\t\t! enableCustomDuotone ||\n\t\t( colorPalette?.length === 0 && disableCustomColors );\n\n\tif ( duotonePalette?.length === 0 && disableCustomDuotone ) {\n\t\treturn null;\n\t}\n\n\tif ( blockEditingMode !== 'default' ) {\n\t\treturn null;\n\t}\n\n\tconst duotonePresetOrColors =\n\t\tduotoneStyle === 'unset' || Array.isArray( duotoneStyle )\n\t\t\t? duotoneStyle\n\t\t\t: getColorsFromDuotonePreset( duotoneStyle, duotonePalette );\n\n\treturn (\n\t\t<>\n\t\t\t<InspectorControls group=\"filter\">\n\t\t\t\t<StylesFiltersPanel\n\t\t\t\t\tvalue={ { filter: { duotone: duotonePresetOrColors } } }\n\t\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...newDuotone?.filter,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t</InspectorControls>\n\t\t\t<BlockControls group=\"block\" __experimentalShareWithChildBlocks>\n\t\t\t\t<DuotoneControl\n\t\t\t\t\tduotonePalette={ duotonePalette }\n\t\t\t\t\tcolorPalette={ colorPalette }\n\t\t\t\t\tdisableCustomDuotone={ disableCustomDuotone }\n\t\t\t\t\tdisableCustomColors={ disableCustomColors }\n\t\t\t\t\tvalue={ duotonePresetOrColors }\n\t\t\t\t\tonChange={ ( newDuotone ) => {\n\t\t\t\t\t\tconst maybePreset = getDuotonePresetFromColors(\n\t\t\t\t\t\t\tnewDuotone,\n\t\t\t\t\t\t\tduotonePalette\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst newStyle = {\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\tcolor: {\n\t\t\t\t\t\t\t\t...style?.color,\n\t\t\t\t\t\t\t\tduotone: maybePreset ?? newDuotone, // use preset or fallback to custom colors.\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tstyle: cleanEmptyObject( newStyle ),\n\t\t\t\t\t\t} );\n\t\t\t\t\t} }\n\t\t\t\t\tsettings={ settings }\n\t\t\t\t/>\n\t\t\t</BlockControls>\n\t\t</>\n\t);\n}\n\nexport default {\n\tshareWithChildBlocks: true,\n\tedit: DuotonePanelPure,\n\tuseBlockProps,\n\tattributeKeys: [ 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, 'filter.duotone' );\n\t},\n};\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `duotone` attribute.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addDuotoneAttributes( settings ) {\n\t// Previous `color.__experimentalDuotone` support flag is migrated via\n\t// block_type_metadata_settings filter in `lib/block-supports/duotone.php`.\n\tif ( ! hasBlockSupport( settings, 'filter.duotone' ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition with default\n\t// values if needed.\n\tif ( ! settings.attributes.style ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tstyle: {\n\t\t\t\ttype: 'object',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\nfunction useDuotoneStyles( {\n\tclientId,\n\tid: filterId,\n\tselector: duotoneSelector,\n\tattribute: duotoneAttr,\n} ) {\n\tconst duotonePalette = useMultiOriginPresets( {\n\t\tpresetSetting: 'color.duotone',\n\t\tdefaultSetting: 'color.defaultDuotone',\n\t} );\n\n\t// Possible values for duotone attribute:\n\t// 1. Array of colors - e.g. ['#000000', '#ffffff'].\n\t// 2. Variable for an existing Duotone preset - e.g. 'var:preset|duotone|green-blue' or 'var(--wp--preset--duotone--green-blue)''\n\t// 3. A CSS string - e.g. 'unset' to remove globally applied duotone.\n\tconst isCustom = Array.isArray( duotoneAttr );\n\tconst duotonePreset = isCustom\n\t\t? undefined\n\t\t: getColorsFromDuotonePreset( duotoneAttr, duotonePalette );\n\tconst isPreset = typeof duotoneAttr === 'string' && duotonePreset;\n\tconst isCSS = typeof duotoneAttr === 'string' && ! isPreset;\n\n\t// Match the structure of WP_Duotone_Gutenberg::render_duotone_support() in PHP.\n\tlet colors = null;\n\tif ( isPreset ) {\n\t\t// Array of colors.\n\t\tcolors = duotonePreset;\n\t} else if ( isCSS ) {\n\t\t// CSS filter property string (e.g. 'unset').\n\t\tcolors = duotoneAttr;\n\t} else if ( isCustom ) {\n\t\t// Array of colors.\n\t\tcolors = duotoneAttr;\n\t}\n\n\t// Build the CSS selectors to which the filter will be applied.\n\tconst selectors = duotoneSelector.split( ',' );\n\n\tconst selectorsScoped = selectors.map( ( selectorPart ) => {\n\t\t// Assuming the selector part is a subclass selector (not a tag name)\n\t\t// so we can prepend the filter id class. If we want to support elements\n\t\t// such as `img` or namespaces, we'll need to add a case for that here.\n\t\treturn `.${ filterId }${ selectorPart.trim() }`;\n\t} );\n\n\tconst selector = selectorsScoped.join( ', ' );\n\n\tconst isValidFilter = Array.isArray( colors ) || colors === 'unset';\n\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tcss:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneStylesheet( selector, filterId )\n\t\t\t\t\t\t\t: getDuotoneUnsetStylesheet( selector ),\n\t\t\t\t\t__unstableType: 'presets',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\tusePrivateStyleOverride(\n\t\tisValidFilter\n\t\t\t? {\n\t\t\t\t\tassets:\n\t\t\t\t\t\tcolors !== 'unset'\n\t\t\t\t\t\t\t? getDuotoneFilter( filterId, colors )\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t__unstableType: 'svgs',\n\t\t\t }\n\t\t\t: undefined\n\t);\n\n\tconst blockElement = useBlockElement( clientId );\n\n\tuseEffect( () => {\n\t\tif ( ! isValidFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Safari does not always update the duotone filter when the duotone\n\t\t// colors are changed. When using Safari, force the block element to be\n\t\t// repainted by the browser to ensure any changes are reflected\n\t\t// visually. This logic matches that used on the site frontend in\n\t\t// `block-supports/duotone.php`.\n\t\tif ( blockElement && isSafari ) {\n\t\t\tconst display = blockElement.style.display;\n\t\t\t// Switch to `inline-block` to force a repaint. In the editor,\n\t\t\t// `inline-block` is used instead of `none` to ensure that scroll\n\t\t\t// position is not affected, as `none` results in the editor\n\t\t\t// scrolling to the top of the block.\n\t\t\tblockElement.style.setProperty( 'display', 'inline-block' );\n\t\t\t// Simply accessing el.offsetHeight flushes layout and style changes\n\t\t\t// in WebKit without having to wait for setTimeout.\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tblockElement.offsetHeight;\n\t\t\tblockElement.style.setProperty( 'display', display );\n\t\t}\n\t\t// `colors` must be a dependency so this effect runs when the colors\n\t\t// change in Safari.\n\t}, [ isValidFilter, blockElement, colors ] );\n}\n\n// Used for generating the instance ID\nconst DUOTONE_BLOCK_PROPS_REFERENCE = {};\n\nfunction useBlockProps( { clientId, name, style } ) {\n\tconst id = useInstanceId( DUOTONE_BLOCK_PROPS_REFERENCE );\n\tconst selector = useMemo( () => {\n\t\tconst blockType = getBlockType( name );\n\n\t\tif ( blockType ) {\n\t\t\t// Backwards compatibility for `supports.color.__experimentalDuotone`\n\t\t\t// is provided via the `block_type_metadata_settings` filter. If\n\t\t\t// `supports.filter.duotone` has not been set and the\n\t\t\t// experimental property has been, the experimental property\n\t\t\t// value is copied into `supports.filter.duotone`.\n\t\t\tconst duotoneSupport = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'filter.duotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( ! duotoneSupport ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// If the experimental duotone support was set, that value is\n\t\t\t// to be treated as a selector and requires scoping.\n\t\t\tconst experimentalDuotone = getBlockSupport(\n\t\t\t\tblockType,\n\t\t\t\t'color.__experimentalDuotone',\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tif ( experimentalDuotone ) {\n\t\t\t\tconst rootSelector = getBlockCSSSelector( blockType );\n\t\t\t\treturn typeof experimentalDuotone === 'string'\n\t\t\t\t\t? scopeSelector( rootSelector, experimentalDuotone )\n\t\t\t\t\t: rootSelector;\n\t\t\t}\n\n\t\t\t// Regular filter.duotone support uses filter.duotone selectors with fallbacks.\n\t\t\treturn getBlockCSSSelector( blockType, 'filter.duotone', {\n\t\t\t\tfallback: true,\n\t\t\t} );\n\t\t}\n\t}, [ name ] );\n\n\tconst attribute = style?.color?.duotone;\n\n\tconst filterClass = `wp-duotone-${ id }`;\n\n\tconst shouldRender = selector && attribute;\n\n\tuseDuotoneStyles( {\n\t\tclientId,\n\t\tid: filterClass,\n\t\tselector,\n\t\tattribute,\n\t} );\n\n\treturn {\n\t\tclassName: shouldRender ? filterClass : '',\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/duotone/add-attributes',\n\taddDuotoneAttributes\n);\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_utils", "namesPlugin", "StylesFiltersPanel", "DuotoneControl"]
7
7
  }
@@ -65,22 +65,15 @@ function addAttributes(settings) {
65
65
  function useFitText({ fitText, name, clientId }) {
66
66
  const hasFitTextSupport2 = (0, import_blocks.hasBlockSupport)(name, FIT_TEXT_SUPPORT_KEY);
67
67
  const blockElement = (0, import_use_block_refs.useBlockElement)(clientId);
68
- const { blockAttributes, isSelected } = (0, import_data.useSelect)(
68
+ const blockAttributes = (0, import_data.useSelect)(
69
69
  (select) => {
70
- if (!clientId) {
71
- return { blockAttributes: void 0, isSelected: false };
70
+ if (!clientId || !hasFitTextSupport2 || !fitText) {
71
+ return;
72
72
  }
73
- return {
74
- blockAttributes: select(import_store.store).getBlockAttributes(clientId),
75
- isSelected: select(import_store.store).isBlockSelected(clientId)
76
- };
73
+ return select(import_store.store).getBlockAttributes(clientId);
77
74
  },
78
- [clientId]
75
+ [clientId, hasFitTextSupport2, fitText]
79
76
  );
80
- const isSelectedRef = (0, import_element.useRef)();
81
- (0, import_element.useEffect)(() => {
82
- isSelectedRef.current = isSelected;
83
- }, [isSelected]);
84
77
  const applyFitText = (0, import_element.useCallback)(() => {
85
78
  if (!blockElement || !hasFitTextSupport2 || !fitText) {
86
79
  return;
@@ -96,9 +89,8 @@ function useFitText({ fitText, name, clientId }) {
96
89
  const applyStylesFn = (css) => {
97
90
  styleElement.textContent = css;
98
91
  };
99
- const maxSize = isSelectedRef.current ? 200 : void 0;
100
- (0, import_fit_text_utils.optimizeFitText)(blockElement, blockSelector, applyStylesFn, maxSize);
101
- }, [blockElement, clientId, hasFitTextSupport2, fitText, isSelectedRef]);
92
+ (0, import_fit_text_utils.optimizeFitText)(blockElement, blockSelector, applyStylesFn);
93
+ }, [blockElement, clientId, hasFitTextSupport2, fitText]);
102
94
  (0, import_element.useEffect)(() => {
103
95
  if (!fitText || !blockElement || !clientId || !hasFitTextSupport2) {
104
96
  return;
@@ -132,7 +124,6 @@ function useFitText({ fitText, name, clientId }) {
132
124
  }
133
125
  }, [
134
126
  blockAttributes,
135
- isSelected,
136
127
  fitText,
137
128
  applyFitText,
138
129
  blockElement,
@@ -143,7 +134,9 @@ function FitTextControl({
143
134
  clientId,
144
135
  fitText = false,
145
136
  setAttributes,
146
- name
137
+ name,
138
+ fontSize,
139
+ style
147
140
  }) {
148
141
  if (!(0, import_blocks.hasBlockSupport)(name, FIT_TEXT_SUPPORT_KEY)) {
149
142
  return null;
@@ -162,8 +155,28 @@ function FitTextControl({
162
155
  __nextHasNoMarginBottom: true,
163
156
  label: (0, import_i18n.__)("Fit text"),
164
157
  checked: fitText,
165
- onChange: () => setAttributes({ fitText: !fitText || void 0 }),
166
- help: fitText ? (0, import_i18n.__)("Text will resize to fit its container.") : (0, import_i18n.__)("Resize text to fit its container.")
158
+ onChange: () => {
159
+ const newFitText = !fitText || void 0;
160
+ const updates = { fitText: newFitText };
161
+ if (newFitText) {
162
+ if (fontSize) {
163
+ updates.fontSize = void 0;
164
+ }
165
+ if (style?.typography?.fontSize) {
166
+ updates.style = {
167
+ ...style,
168
+ typography: {
169
+ ...style?.typography,
170
+ fontSize: void 0
171
+ }
172
+ };
173
+ }
174
+ }
175
+ setAttributes(updates);
176
+ },
177
+ help: fitText ? (0, import_i18n.__)("Text will resize to fit its container.") : (0, import_i18n.__)(
178
+ "The text will resize to fit its container, resetting other font size settings."
179
+ )
167
180
  }
168
181
  )
169
182
  }
@@ -203,7 +216,7 @@ const hasFitTextSupport = (blockNameOrType) => {
203
216
  var fit_text_default = {
204
217
  useBlockProps,
205
218
  addSaveProps,
206
- attributeKeys: ["fitText"],
219
+ attributeKeys: ["fitText", "fontSize", "style"],
207
220
  hasSupport: hasFitTextSupport,
208
221
  edit: FitTextControl
209
222
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/fit-text.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { useEffect, useCallback, useRef } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tToggleControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { optimizeFitText } from '../utils/fit-text-utils';\nimport { store as blockEditorStore } from '../store';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\nimport InspectorControls from '../components/inspector-controls';\n\nexport const FIT_TEXT_SUPPORT_KEY = 'typography.fitText';\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `fitText` attribute.\n *\n * @param {Object} settings Original block settings.\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition.\n\tif ( settings.attributes?.fitText ) {\n\t\treturn settings;\n\t}\n\n\t// Add fitText attribute.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tfitText: {\n\t\t\t\ttype: 'boolean',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Custom hook to handle fit text functionality in the editor.\n *\n * @param {Object} props Component props.\n * @param {?boolean} props.fitText Fit text attribute.\n * @param {string} props.name Block name.\n * @param {string} props.clientId Block client ID.\n */\nfunction useFitText( { fitText, name, clientId } ) {\n\tconst hasFitTextSupport = hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY );\n\tconst blockElement = useBlockElement( clientId );\n\n\t// Monitor block attribute changes and selection state\n\t// Any attribute may change the available space.\n\tconst { blockAttributes, isSelected } = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId ) {\n\t\t\t\treturn { blockAttributes: undefined, isSelected: false };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tblockAttributes:\n\t\t\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ),\n\t\t\t\tisSelected:\n\t\t\t\t\tselect( blockEditorStore ).isBlockSelected( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst isSelectedRef = useRef();\n\tuseEffect( () => {\n\t\tisSelectedRef.current = isSelected;\n\t}, [ isSelected ] );\n\n\tconst applyFitText = useCallback( () => {\n\t\tif ( ! blockElement || ! hasFitTextSupport || ! fitText ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get or create style element with unique ID\n\t\tconst styleId = `fit-text-${ clientId }`;\n\t\tlet styleElement = blockElement.ownerDocument.getElementById( styleId );\n\t\tif ( ! styleElement ) {\n\t\t\tstyleElement = blockElement.ownerDocument.createElement( 'style' );\n\t\t\tstyleElement.id = styleId;\n\t\t\tblockElement.ownerDocument.head.appendChild( styleElement );\n\t\t}\n\n\t\tconst blockSelector = `#block-${ clientId }`;\n\n\t\tconst applyStylesFn = ( css ) => {\n\t\t\tstyleElement.textContent = css;\n\t\t};\n\n\t\t// Avoid very jarring resizes when a user is actively editing the\n\t\t// block. Placing a ceiling on how much the block can grow curbs the\n\t\t// effect of the first few keypresses.\n\t\tconst maxSize = isSelectedRef.current ? 200 : undefined;\n\n\t\toptimizeFitText( blockElement, blockSelector, applyStylesFn, maxSize );\n\t}, [ blockElement, clientId, hasFitTextSupport, fitText, isSelectedRef ] );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! fitText ||\n\t\t\t! blockElement ||\n\t\t\t! clientId ||\n\t\t\t! hasFitTextSupport\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Apply initially\n\t\tapplyFitText();\n\n\t\t// Store current element value for cleanup\n\t\tconst currentElement = blockElement;\n\n\t\t// Watch for size changes\n\t\tlet resizeObserver;\n\t\tif ( window.ResizeObserver && currentElement.parentElement ) {\n\t\t\tresizeObserver = new window.ResizeObserver( applyFitText );\n\t\t\tresizeObserver.observe( currentElement.parentElement );\n\t\t}\n\n\t\t// Cleanup function\n\t\treturn () => {\n\t\t\tif ( resizeObserver ) {\n\t\t\t\tresizeObserver.disconnect();\n\t\t\t}\n\n\t\t\tconst styleId = `fit-text-${ clientId }`;\n\t\t\tconst styleElement =\n\t\t\t\tcurrentElement.ownerDocument.getElementById( styleId );\n\t\t\tif ( styleElement ) {\n\t\t\t\tstyleElement.remove();\n\t\t\t}\n\t\t};\n\t}, [ fitText, clientId, applyFitText, blockElement, hasFitTextSupport ] );\n\n\t// Trigger fit text recalculation when content changes\n\tuseEffect( () => {\n\t\tif ( fitText && blockElement && hasFitTextSupport ) {\n\t\t\t// Wait for next frame to ensure DOM has updated after content changes\n\t\t\tconst frameId = window.requestAnimationFrame( () => {\n\t\t\t\tif ( blockElement ) {\n\t\t\t\t\tapplyFitText();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn () => window.cancelAnimationFrame( frameId );\n\t\t}\n\t}, [\n\t\tblockAttributes,\n\t\tisSelected,\n\t\tfitText,\n\t\tapplyFitText,\n\t\tblockElement,\n\t\thasFitTextSupport,\n\t] );\n}\n\n/**\n * Fit text control component for the typography panel.\n *\n * @param {Object} props Component props.\n * @param {string} props.clientId Block client ID.\n * @param {Function} props.setAttributes Function to set block attributes.\n * @param {string} props.name Block name.\n * @param {boolean} props.fitText Whether fit text is enabled.\n */\nexport function FitTextControl( {\n\tclientId,\n\tfitText = false,\n\tsetAttributes,\n\tname,\n} ) {\n\tif ( ! hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<InspectorControls group=\"typography\">\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ () => fitText }\n\t\t\t\tlabel={ __( 'Fit text' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { fitText: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( { fitText: undefined } ) }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<ToggleControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Fit text' ) }\n\t\t\t\t\tchecked={ fitText }\n\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\tsetAttributes( { fitText: ! fitText || undefined } )\n\t\t\t\t\t}\n\t\t\t\t\thelp={\n\t\t\t\t\t\tfitText\n\t\t\t\t\t\t\t? __( 'Text will resize to fit its container.' )\n\t\t\t\t\t\t\t: __( 'Resize text to fit its container.' )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Override props applied to the block element on save.\n *\n * @param {Object} props Additional props applied to the block element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n * @return {Object} Filtered props applied to the block element.\n */\nfunction addSaveProps( props, blockType, attributes ) {\n\tif ( ! hasBlockSupport( blockType, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tconst { fitText } = attributes;\n\n\tif ( ! fitText ) {\n\t\treturn props;\n\t}\n\n\t// Add CSS class for frontend detection and styling\n\tconst className = props.className\n\t\t? `${ props.className } has-fit-text`\n\t\t: 'has-fit-text';\n\n\treturn {\n\t\t...props,\n\t\tclassName,\n\t};\n}\n/**\n * Override props applied to the block element in the editor.\n *\n * @param {Object} props Component props including block attributes.\n * @param {string} props.name Block name.\n * @param {boolean} props.fitText Whether fit text is enabled.\n * @param {string} props.clientId Block client ID.\n * @return {Object} Filtered props applied to the block element.\n */\nfunction useBlockProps( { name, fitText, clientId } ) {\n\tuseFitText( { fitText, name, clientId } );\n\tif ( ! fitText || ! hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn {};\n\t}\n\treturn {\n\t\tclassName: 'has-fit-text',\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/fit-text/addAttribute',\n\taddAttributes\n);\n\nconst hasFitTextSupport = ( blockNameOrType ) => {\n\treturn hasBlockSupport( blockNameOrType, FIT_TEXT_SUPPORT_KEY );\n};\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fitText' ],\n\thasSupport: hasFitTextSupport,\n\tedit: FitTextControl,\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport { useEffect, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tToggleControl,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport { optimizeFitText } from '../utils/fit-text-utils';\nimport { store as blockEditorStore } from '../store';\nimport { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';\nimport InspectorControls from '../components/inspector-controls';\n\nexport const FIT_TEXT_SUPPORT_KEY = 'typography.fitText';\n\n/**\n * Filters registered block settings, extending attributes to include\n * the `fitText` attribute.\n *\n * @param {Object} settings Original block settings.\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify their own attribute definition.\n\tif ( settings.attributes?.fitText ) {\n\t\treturn settings;\n\t}\n\n\t// Add fitText attribute.\n\treturn {\n\t\t...settings,\n\t\tattributes: {\n\t\t\t...settings.attributes,\n\t\t\tfitText: {\n\t\t\t\ttype: 'boolean',\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * Custom hook to handle fit text functionality in the editor.\n *\n * @param {Object} props Component props.\n * @param {?boolean} props.fitText Fit text attribute.\n * @param {string} props.name Block name.\n * @param {string} props.clientId Block client ID.\n */\nfunction useFitText( { fitText, name, clientId } ) {\n\tconst hasFitTextSupport = hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY );\n\tconst blockElement = useBlockElement( clientId );\n\n\t// Monitor block attribute changes\n\t// Any attribute may change the available space.\n\tconst blockAttributes = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! clientId || ! hasFitTextSupport || ! fitText ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn select( blockEditorStore ).getBlockAttributes( clientId );\n\t\t},\n\t\t[ clientId, hasFitTextSupport, fitText ]\n\t);\n\n\tconst applyFitText = useCallback( () => {\n\t\tif ( ! blockElement || ! hasFitTextSupport || ! fitText ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get or create style element with unique ID\n\t\tconst styleId = `fit-text-${ clientId }`;\n\t\tlet styleElement = blockElement.ownerDocument.getElementById( styleId );\n\t\tif ( ! styleElement ) {\n\t\t\tstyleElement = blockElement.ownerDocument.createElement( 'style' );\n\t\t\tstyleElement.id = styleId;\n\t\t\tblockElement.ownerDocument.head.appendChild( styleElement );\n\t\t}\n\n\t\tconst blockSelector = `#block-${ clientId }`;\n\n\t\tconst applyStylesFn = ( css ) => {\n\t\t\tstyleElement.textContent = css;\n\t\t};\n\n\t\toptimizeFitText( blockElement, blockSelector, applyStylesFn );\n\t}, [ blockElement, clientId, hasFitTextSupport, fitText ] );\n\n\tuseEffect( () => {\n\t\tif (\n\t\t\t! fitText ||\n\t\t\t! blockElement ||\n\t\t\t! clientId ||\n\t\t\t! hasFitTextSupport\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Apply initially\n\t\tapplyFitText();\n\n\t\t// Store current element value for cleanup\n\t\tconst currentElement = blockElement;\n\n\t\t// Watch for size changes\n\t\tlet resizeObserver;\n\t\tif ( window.ResizeObserver && currentElement.parentElement ) {\n\t\t\tresizeObserver = new window.ResizeObserver( applyFitText );\n\t\t\tresizeObserver.observe( currentElement.parentElement );\n\t\t}\n\n\t\t// Cleanup function\n\t\treturn () => {\n\t\t\tif ( resizeObserver ) {\n\t\t\t\tresizeObserver.disconnect();\n\t\t\t}\n\n\t\t\tconst styleId = `fit-text-${ clientId }`;\n\t\t\tconst styleElement =\n\t\t\t\tcurrentElement.ownerDocument.getElementById( styleId );\n\t\t\tif ( styleElement ) {\n\t\t\t\tstyleElement.remove();\n\t\t\t}\n\t\t};\n\t}, [ fitText, clientId, applyFitText, blockElement, hasFitTextSupport ] );\n\n\t// Trigger fit text recalculation when content changes\n\tuseEffect( () => {\n\t\tif ( fitText && blockElement && hasFitTextSupport ) {\n\t\t\t// Wait for next frame to ensure DOM has updated after content changes\n\t\t\tconst frameId = window.requestAnimationFrame( () => {\n\t\t\t\tif ( blockElement ) {\n\t\t\t\t\tapplyFitText();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn () => window.cancelAnimationFrame( frameId );\n\t\t}\n\t}, [\n\t\tblockAttributes,\n\t\tfitText,\n\t\tapplyFitText,\n\t\tblockElement,\n\t\thasFitTextSupport,\n\t] );\n}\n\n/**\n * Fit text control component for the typography panel.\n *\n * @param {Object} props Component props.\n * @param {string} props.clientId Block client ID.\n * @param {Function} props.setAttributes Function to set block attributes.\n * @param {string} props.name Block name.\n * @param {boolean} props.fitText Whether fit text is enabled.\n * @param {string} props.fontSize Font size slug.\n * @param {Object} props.style Block style object.\n */\nexport function FitTextControl( {\n\tclientId,\n\tfitText = false,\n\tsetAttributes,\n\tname,\n\tfontSize,\n\tstyle,\n} ) {\n\tif ( ! hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t<InspectorControls group=\"typography\">\n\t\t\t<ToolsPanelItem\n\t\t\t\thasValue={ () => fitText }\n\t\t\t\tlabel={ __( 'Fit text' ) }\n\t\t\t\tonDeselect={ () => setAttributes( { fitText: undefined } ) }\n\t\t\t\tresetAllFilter={ () => ( { fitText: undefined } ) }\n\t\t\t\tpanelId={ clientId }\n\t\t\t>\n\t\t\t\t<ToggleControl\n\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\tlabel={ __( 'Fit text' ) }\n\t\t\t\t\tchecked={ fitText }\n\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\tconst newFitText = ! fitText || undefined;\n\t\t\t\t\t\tconst updates = { fitText: newFitText };\n\n\t\t\t\t\t\t// When enabling fit text, clear font size if it has a value\n\t\t\t\t\t\tif ( newFitText ) {\n\t\t\t\t\t\t\tif ( fontSize ) {\n\t\t\t\t\t\t\t\tupdates.fontSize = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( style?.typography?.fontSize ) {\n\t\t\t\t\t\t\t\tupdates.style = {\n\t\t\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t\t\t\ttypography: {\n\t\t\t\t\t\t\t\t\t\t...style?.typography,\n\t\t\t\t\t\t\t\t\t\tfontSize: undefined,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetAttributes( updates );\n\t\t\t\t\t} }\n\t\t\t\t\thelp={\n\t\t\t\t\t\tfitText\n\t\t\t\t\t\t\t? __( 'Text will resize to fit its container.' )\n\t\t\t\t\t\t\t: __(\n\t\t\t\t\t\t\t\t\t'The text will resize to fit its container, resetting other font size settings.'\n\t\t\t\t\t\t\t )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</ToolsPanelItem>\n\t\t</InspectorControls>\n\t);\n}\n\n/**\n * Override props applied to the block element on save.\n *\n * @param {Object} props Additional props applied to the block element.\n * @param {Object} blockType Block type.\n * @param {Object} attributes Block attributes.\n * @return {Object} Filtered props applied to the block element.\n */\nfunction addSaveProps( props, blockType, attributes ) {\n\tif ( ! hasBlockSupport( blockType, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tconst { fitText } = attributes;\n\n\tif ( ! fitText ) {\n\t\treturn props;\n\t}\n\n\t// Add CSS class for frontend detection and styling\n\tconst className = props.className\n\t\t? `${ props.className } has-fit-text`\n\t\t: 'has-fit-text';\n\n\treturn {\n\t\t...props,\n\t\tclassName,\n\t};\n}\n/**\n * Override props applied to the block element in the editor.\n *\n * @param {Object} props Component props including block attributes.\n * @param {string} props.name Block name.\n * @param {boolean} props.fitText Whether fit text is enabled.\n * @param {string} props.clientId Block client ID.\n * @return {Object} Filtered props applied to the block element.\n */\nfunction useBlockProps( { name, fitText, clientId } ) {\n\tuseFitText( { fitText, name, clientId } );\n\tif ( ! fitText || ! hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY ) ) {\n\t\treturn {};\n\t}\n\treturn {\n\t\tclassName: 'has-fit-text',\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/fit-text/addAttribute',\n\taddAttributes\n);\n\nconst hasFitTextSupport = ( blockNameOrType ) => {\n\treturn hasBlockSupport( blockNameOrType, FIT_TEXT_SUPPORT_KEY );\n};\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fitText', 'fontSize', 'style' ],\n\thasSupport: hasFitTextSupport,\n\tedit: FitTextControl,\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6LI;AA1LJ,mBAA0B;AAC1B,oBAAgC;AAChC,qBAAuC;AACvC,kBAA0B;AAC1B,kBAAmB;AACnB,wBAGO;AAKP,4BAAgC;AAChC,mBAA0C;AAC1C,4BAAgC;AAChC,gCAA8B;AAEvB,MAAM,uBAAuB;AASpC,SAAS,cAAe,UAAW;AAClC,MAAK,KAAE,+BAAiB,UAAU,oBAAqB,GAAI;AAC1D,WAAO;AAAA,EACR;AAGA,MAAK,SAAS,YAAY,SAAU;AACnC,WAAO;AAAA,EACR;AAGA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,YAAY;AAAA,MACX,GAAG,SAAS;AAAA,MACZ,SAAS;AAAA,QACR,MAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD;AAUA,SAAS,WAAY,EAAE,SAAS,MAAM,SAAS,GAAI;AAClD,QAAMA,yBAAoB,+BAAiB,MAAM,oBAAqB;AACtE,QAAM,mBAAe,uCAAiB,QAAS;AAI/C,QAAM,sBAAkB;AAAA,IACvB,CAAE,WAAY;AACb,UAAK,CAAE,YAAY,CAAEA,sBAAqB,CAAE,SAAU;AACrD;AAAA,MACD;AACA,aAAO,OAAQ,aAAAC,KAAiB,EAAE,mBAAoB,QAAS;AAAA,IAChE;AAAA,IACA,CAAE,UAAUD,oBAAmB,OAAQ;AAAA,EACxC;AAEA,QAAM,mBAAe,4BAAa,MAAM;AACvC,QAAK,CAAE,gBAAgB,CAAEA,sBAAqB,CAAE,SAAU;AACzD;AAAA,IACD;AAGA,UAAM,UAAU,YAAa,QAAS;AACtC,QAAI,eAAe,aAAa,cAAc,eAAgB,OAAQ;AACtE,QAAK,CAAE,cAAe;AACrB,qBAAe,aAAa,cAAc,cAAe,OAAQ;AACjE,mBAAa,KAAK;AAClB,mBAAa,cAAc,KAAK,YAAa,YAAa;AAAA,IAC3D;AAEA,UAAM,gBAAgB,UAAW,QAAS;AAE1C,UAAM,gBAAgB,CAAE,QAAS;AAChC,mBAAa,cAAc;AAAA,IAC5B;AAEA,+CAAiB,cAAc,eAAe,aAAc;AAAA,EAC7D,GAAG,CAAE,cAAc,UAAUA,oBAAmB,OAAQ,CAAE;AAE1D,gCAAW,MAAM;AAChB,QACC,CAAE,WACF,CAAE,gBACF,CAAE,YACF,CAAEA,oBACD;AACD;AAAA,IACD;AAGA,iBAAa;AAGb,UAAM,iBAAiB;AAGvB,QAAI;AACJ,QAAK,OAAO,kBAAkB,eAAe,eAAgB;AAC5D,uBAAiB,IAAI,OAAO,eAAgB,YAAa;AACzD,qBAAe,QAAS,eAAe,aAAc;AAAA,IACtD;AAGA,WAAO,MAAM;AACZ,UAAK,gBAAiB;AACrB,uBAAe,WAAW;AAAA,MAC3B;AAEA,YAAM,UAAU,YAAa,QAAS;AACtC,YAAM,eACL,eAAe,cAAc,eAAgB,OAAQ;AACtD,UAAK,cAAe;AACnB,qBAAa,OAAO;AAAA,MACrB;AAAA,IACD;AAAA,EACD,GAAG,CAAE,SAAS,UAAU,cAAc,cAAcA,kBAAkB,CAAE;AAGxE,gCAAW,MAAM;AAChB,QAAK,WAAW,gBAAgBA,oBAAoB;AAEnD,YAAM,UAAU,OAAO,sBAAuB,MAAM;AACnD,YAAK,cAAe;AACnB,uBAAa;AAAA,QACd;AAAA,MACD,CAAE;AAEF,aAAO,MAAM,OAAO,qBAAsB,OAAQ;AAAA,IACnD;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACAA;AAAA,EACD,CAAE;AACH;AAaO,SAAS,eAAgB;AAAA,EAC/B;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,MAAK,KAAE,+BAAiB,MAAM,oBAAqB,GAAI;AACtD,WAAO;AAAA,EACR;AACA,SACC,4CAAC,0BAAAE,SAAA,EAAkB,OAAM,cACxB;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACA,UAAW,MAAM;AAAA,MACjB,WAAQ,gBAAI,UAAW;AAAA,MACvB,YAAa,MAAM,cAAe,EAAE,SAAS,OAAU,CAAE;AAAA,MACzD,gBAAiB,OAAQ,EAAE,SAAS,OAAU;AAAA,MAC9C,SAAU;AAAA,MAEV;AAAA,QAAC;AAAA;AAAA,UACA,yBAAuB;AAAA,UACvB,WAAQ,gBAAI,UAAW;AAAA,UACvB,SAAU;AAAA,UACV,UAAW,MAAM;AAChB,kBAAM,aAAa,CAAE,WAAW;AAChC,kBAAM,UAAU,EAAE,SAAS,WAAW;AAGtC,gBAAK,YAAa;AACjB,kBAAK,UAAW;AACf,wBAAQ,WAAW;AAAA,cACpB;AACA,kBAAK,OAAO,YAAY,UAAW;AAClC,wBAAQ,QAAQ;AAAA,kBACf,GAAG;AAAA,kBACH,YAAY;AAAA,oBACX,GAAG,OAAO;AAAA,oBACV,UAAU;AAAA,kBACX;AAAA,gBACD;AAAA,cACD;AAAA,YACD;AAEA,0BAAe,OAAQ;AAAA,UACxB;AAAA,UACA,MACC,cACG,gBAAI,wCAAyC,QAC7C;AAAA,YACA;AAAA,UACA;AAAA;AAAA,MAEL;AAAA;AAAA,EACD,GACD;AAEF;AAUA,SAAS,aAAc,OAAO,WAAW,YAAa;AACrD,MAAK,KAAE,+BAAiB,WAAW,oBAAqB,GAAI;AAC3D,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,QAAQ,IAAI;AAEpB,MAAK,CAAE,SAAU;AAChB,WAAO;AAAA,EACR;AAGA,QAAM,YAAY,MAAM,YACrB,GAAI,MAAM,SAAU,kBACpB;AAEH,SAAO;AAAA,IACN,GAAG;AAAA,IACH;AAAA,EACD;AACD;AAUA,SAAS,cAAe,EAAE,MAAM,SAAS,SAAS,GAAI;AACrD,aAAY,EAAE,SAAS,MAAM,SAAS,CAAE;AACxC,MAAK,CAAE,WAAW,KAAE,+BAAiB,MAAM,oBAAqB,GAAI;AACnE,WAAO,CAAC;AAAA,EACT;AACA,SAAO;AAAA,IACN,WAAW;AAAA,EACZ;AACD;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;AAEA,MAAM,oBAAoB,CAAE,oBAAqB;AAChD,aAAO,+BAAiB,iBAAiB,oBAAqB;AAC/D;AAEA,IAAO,mBAAQ;AAAA,EACd;AAAA,EACA;AAAA,EACA,eAAe,CAAE,WAAW,YAAY,OAAQ;AAAA,EAChD,YAAY;AAAA,EACZ,MAAM;AACP;",
6
6
  "names": ["hasFitTextSupport", "blockEditorStore", "InspectorControls", "ToolsPanelItem"]
7
7
  }
@@ -38,11 +38,11 @@ var import_jsx_runtime = require("react/jsx-runtime");
38
38
  var import_hooks = require("@wordpress/hooks");
39
39
  var import_blocks = require("@wordpress/blocks");
40
40
  var import_token_list = __toESM(require("@wordpress/token-list"));
41
- var import_global_styles_engine = require("@wordpress/global-styles-engine");
42
41
  var import_font_sizes = require("../components/font-sizes");
43
42
  var import_typography = require("./typography");
44
43
  var import_utils = require("./utils");
45
44
  var import_use_settings = require("../components/use-settings");
45
+ var import_typography_utils = require("../components/global-styles/typography-utils");
46
46
  const FONT_SIZE_SUPPORT_KEY = "typography.fontSize";
47
47
  function addAttributes(settings) {
48
48
  if (!(0, import_blocks.hasBlockSupport)(settings, FONT_SIZE_SUPPORT_KEY)) {
@@ -80,8 +80,8 @@ function FontSizeEdit(props) {
80
80
  setAttributes
81
81
  } = props;
82
82
  const [fontSizes] = (0, import_use_settings.useSettings)("typography.fontSizes");
83
- const onChange = (value) => {
84
- const fontSizeSlug = (0, import_font_sizes.getFontSizeObjectByValue)(fontSizes, value).slug;
83
+ const onChange = (value, selectedItem) => {
84
+ const fontSizeSlug = selectedItem?.slug || (0, import_font_sizes.getFontSizeObjectByValue)(fontSizes, value).slug;
85
85
  setAttributes({
86
86
  style: (0, import_utils.cleanEmptyObject)({
87
87
  ...style,
@@ -103,7 +103,8 @@ function FontSizeEdit(props) {
103
103
  import_font_sizes.FontSizePicker,
104
104
  {
105
105
  onChange,
106
- value: fontSizeValue,
106
+ value: fontSize || fontSizeValue,
107
+ valueMode: fontSize ? "slug" : "literal",
107
108
  withReset: false,
108
109
  withSlider: true,
109
110
  size: "__unstable-large"
@@ -128,7 +129,7 @@ function useBlockProps({ name, fontSize, style }) {
128
129
  if (style?.typography?.fontSize) {
129
130
  props = {
130
131
  style: {
131
- fontSize: (0, import_global_styles_engine.getTypographyFontSizeValue)(
132
+ fontSize: (0, import_typography_utils.getTypographyFontSizeValue)(
132
133
  { size: style.typography.fontSize },
133
134
  {
134
135
  typography: {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/font-size.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport TokenList from '@wordpress/token-list';\nimport { getTypographyFontSizeValue } from '@wordpress/global-styles-engine';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetFontSize,\n\tgetFontSizeClass,\n\tgetFontSizeObjectByValue,\n\tFontSizePicker,\n} from '../components/font-sizes';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\nimport {\n\tcleanEmptyObject,\n\ttransformStyles,\n\tshouldSkipSerialization,\n} from './utils';\nimport { useSettings } from '../components/use-settings';\n\nexport const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';\n\n/**\n * Filters registered block settings, extending attributes to include\n * `fontSize` and `fontWeight` attributes.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify a default value if needed.\n\tif ( ! settings.attributes.fontSize ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tfontSize: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject font size.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif ( ! hasBlockSupport( blockNameOrType, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization(\n\t\t\tblockNameOrType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'fontSize'\n\t\t)\n\t) {\n\t\treturn props;\n\t}\n\n\t// Use TokenList to dedupe classes.\n\tconst classes = new TokenList( props.className );\n\tclasses.add( getFontSizeClass( attributes.fontSize ) );\n\tconst newClassName = classes.value;\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Inspector control panel containing the font size related configuration\n *\n * @param {Object} props\n *\n * @return {Element} Font size edit element.\n */\nexport function FontSizeEdit( props ) {\n\tconst {\n\t\tattributes: { fontSize, style },\n\t\tsetAttributes,\n\t} = props;\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\n\tconst onChange = ( value ) => {\n\t\tconst fontSizeSlug = getFontSizeObjectByValue( fontSizes, value ).slug;\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\ttypography: {\n\t\t\t\t\t...style?.typography,\n\t\t\t\t\tfontSize: fontSizeSlug ? undefined : value,\n\t\t\t\t},\n\t\t\t} ),\n\t\t\tfontSize: fontSizeSlug,\n\t\t} );\n\t};\n\n\tconst fontSizeObject = getFontSize(\n\t\tfontSizes,\n\t\tfontSize,\n\t\tstyle?.typography?.fontSize\n\t);\n\n\tconst fontSizeValue =\n\t\tfontSizeObject?.size || style?.typography?.fontSize || fontSize;\n\n\treturn (\n\t\t<FontSizePicker\n\t\t\tonChange={ onChange }\n\t\t\tvalue={ fontSizeValue }\n\t\t\twithReset={ false }\n\t\t\twithSlider\n\t\t\tsize=\"__unstable-large\"\n\t\t/>\n\t);\n}\n\n/**\n * Custom hook that checks if font-size settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether setting is disabled.\n */\nexport function useIsFontSizeDisabled( { name: blockName } = {} ) {\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\tconst hasFontSizes = !! fontSizes?.length;\n\n\treturn (\n\t\t! hasBlockSupport( blockName, FONT_SIZE_SUPPORT_KEY ) || ! hasFontSizes\n\t);\n}\n\nfunction useBlockProps( { name, fontSize, style } ) {\n\tconst [ fontSizes, fluidTypographySettings, layoutSettings ] = useSettings(\n\t\t'typography.fontSizes',\n\t\t'typography.fluid',\n\t\t'layout'\n\t);\n\n\t/*\n\t * Only add inline styles if the block supports font sizes,\n\t * doesn't skip serialization of font sizes,\n\t * and has either a custom font size or a preset font size.\n\t */\n\tif (\n\t\t! hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY ) ||\n\t\tshouldSkipSerialization( name, TYPOGRAPHY_SUPPORT_KEY, 'fontSize' ) ||\n\t\t( ! fontSize && ! style?.typography?.fontSize )\n\t) {\n\t\treturn;\n\t}\n\n\tlet props;\n\n\tif ( style?.typography?.fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getTypographyFontSizeValue(\n\t\t\t\t\t{ size: style.typography.fontSize },\n\t\t\t\t\t{\n\t\t\t\t\t\ttypography: {\n\t\t\t\t\t\t\tfluid: fluidTypographySettings,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: layoutSettings,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getFontSize(\n\t\t\t\t\tfontSizes,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tstyle?.typography?.fontSize\n\t\t\t\t).size,\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( ! props ) {\n\t\treturn;\n\t}\n\n\treturn addSaveProps( props, name, { fontSize } );\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fontSize', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY );\n\t},\n};\n\nconst MIGRATION_PATHS = {\n\tfontSize: [ [ 'fontSize' ], [ 'style', 'typography', 'fontSize' ] ],\n};\n\nfunction addTransforms( result, source, index, results ) {\n\tconst destinationBlockType = result.name;\n\tconst activeSupports = {\n\t\tfontSize: hasBlockSupport(\n\t\t\tdestinationBlockType,\n\t\t\tFONT_SIZE_SUPPORT_KEY\n\t\t),\n\t};\n\treturn transformStyles(\n\t\tactiveSupports,\n\t\tMIGRATION_PATHS,\n\t\tresult,\n\t\tsource,\n\t\tindex,\n\t\tresults\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/font/addAttribute',\n\taddAttributes\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/font-size/addTransforms',\n\taddTransforms\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\nimport TokenList from '@wordpress/token-list';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetFontSize,\n\tgetFontSizeClass,\n\tgetFontSizeObjectByValue,\n\tFontSizePicker,\n} from '../components/font-sizes';\nimport { TYPOGRAPHY_SUPPORT_KEY } from './typography';\nimport {\n\tcleanEmptyObject,\n\ttransformStyles,\n\tshouldSkipSerialization,\n} from './utils';\nimport { useSettings } from '../components/use-settings';\nimport { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';\n\nexport const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';\n\n/**\n * Filters registered block settings, extending attributes to include\n * `fontSize` and `fontWeight` attributes.\n *\n * @param {Object} settings Original block settings.\n *\n * @return {Object} Filtered block settings.\n */\nfunction addAttributes( settings ) {\n\tif ( ! hasBlockSupport( settings, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn settings;\n\t}\n\n\t// Allow blocks to specify a default value if needed.\n\tif ( ! settings.attributes.fontSize ) {\n\t\tObject.assign( settings.attributes, {\n\t\t\tfontSize: {\n\t\t\t\ttype: 'string',\n\t\t\t},\n\t\t} );\n\t}\n\n\treturn settings;\n}\n\n/**\n * Override props assigned to save component to inject font size.\n *\n * @param {Object} props Additional props applied to save element.\n * @param {Object} blockNameOrType Block type.\n * @param {Object} attributes Block attributes.\n *\n * @return {Object} Filtered props applied to save element.\n */\nfunction addSaveProps( props, blockNameOrType, attributes ) {\n\tif ( ! hasBlockSupport( blockNameOrType, FONT_SIZE_SUPPORT_KEY ) ) {\n\t\treturn props;\n\t}\n\n\tif (\n\t\tshouldSkipSerialization(\n\t\t\tblockNameOrType,\n\t\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t\t'fontSize'\n\t\t)\n\t) {\n\t\treturn props;\n\t}\n\n\t// Use TokenList to dedupe classes.\n\tconst classes = new TokenList( props.className );\n\tclasses.add( getFontSizeClass( attributes.fontSize ) );\n\tconst newClassName = classes.value;\n\tprops.className = newClassName ? newClassName : undefined;\n\n\treturn props;\n}\n\n/**\n * Inspector control panel containing the font size related configuration\n *\n * @param {Object} props\n *\n * @return {Element} Font size edit element.\n */\nexport function FontSizeEdit( props ) {\n\tconst {\n\t\tattributes: { fontSize, style },\n\t\tsetAttributes,\n\t} = props;\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\n\tconst onChange = ( value, selectedItem ) => {\n\t\t// Use the selectedItem's slug if available, otherwise fall back to finding by value\n\t\tconst fontSizeSlug =\n\t\t\tselectedItem?.slug ||\n\t\t\tgetFontSizeObjectByValue( fontSizes, value ).slug;\n\n\t\tsetAttributes( {\n\t\t\tstyle: cleanEmptyObject( {\n\t\t\t\t...style,\n\t\t\t\ttypography: {\n\t\t\t\t\t...style?.typography,\n\t\t\t\t\tfontSize: fontSizeSlug ? undefined : value,\n\t\t\t\t},\n\t\t\t} ),\n\t\t\tfontSize: fontSizeSlug,\n\t\t} );\n\t};\n\n\tconst fontSizeObject = getFontSize(\n\t\tfontSizes,\n\t\tfontSize,\n\t\tstyle?.typography?.fontSize\n\t);\n\n\tconst fontSizeValue =\n\t\tfontSizeObject?.size || style?.typography?.fontSize || fontSize;\n\n\treturn (\n\t\t<FontSizePicker\n\t\t\tonChange={ onChange }\n\t\t\tvalue={ fontSize || fontSizeValue }\n\t\t\tvalueMode={ fontSize ? 'slug' : 'literal' }\n\t\t\twithReset={ false }\n\t\t\twithSlider\n\t\t\tsize=\"__unstable-large\"\n\t\t/>\n\t);\n}\n\n/**\n * Custom hook that checks if font-size settings have been disabled.\n *\n * @param {string} name The name of the block.\n * @return {boolean} Whether setting is disabled.\n */\nexport function useIsFontSizeDisabled( { name: blockName } = {} ) {\n\tconst [ fontSizes ] = useSettings( 'typography.fontSizes' );\n\tconst hasFontSizes = !! fontSizes?.length;\n\n\treturn (\n\t\t! hasBlockSupport( blockName, FONT_SIZE_SUPPORT_KEY ) || ! hasFontSizes\n\t);\n}\n\nfunction useBlockProps( { name, fontSize, style } ) {\n\tconst [ fontSizes, fluidTypographySettings, layoutSettings ] = useSettings(\n\t\t'typography.fontSizes',\n\t\t'typography.fluid',\n\t\t'layout'\n\t);\n\n\t/*\n\t * Only add inline styles if the block supports font sizes,\n\t * doesn't skip serialization of font sizes,\n\t * and has either a custom font size or a preset font size.\n\t */\n\tif (\n\t\t! hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY ) ||\n\t\tshouldSkipSerialization( name, TYPOGRAPHY_SUPPORT_KEY, 'fontSize' ) ||\n\t\t( ! fontSize && ! style?.typography?.fontSize )\n\t) {\n\t\treturn;\n\t}\n\n\tlet props;\n\n\tif ( style?.typography?.fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getTypographyFontSizeValue(\n\t\t\t\t\t{ size: style.typography.fontSize },\n\t\t\t\t\t{\n\t\t\t\t\t\ttypography: {\n\t\t\t\t\t\t\tfluid: fluidTypographySettings,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: layoutSettings,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( fontSize ) {\n\t\tprops = {\n\t\t\tstyle: {\n\t\t\t\tfontSize: getFontSize(\n\t\t\t\t\tfontSizes,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tstyle?.typography?.fontSize\n\t\t\t\t).size,\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( ! props ) {\n\t\treturn;\n\t}\n\n\treturn addSaveProps( props, name, { fontSize } );\n}\n\nexport default {\n\tuseBlockProps,\n\taddSaveProps,\n\tattributeKeys: [ 'fontSize', 'style' ],\n\thasSupport( name ) {\n\t\treturn hasBlockSupport( name, FONT_SIZE_SUPPORT_KEY );\n\t},\n};\n\nconst MIGRATION_PATHS = {\n\tfontSize: [ [ 'fontSize' ], [ 'style', 'typography', 'fontSize' ] ],\n};\n\nfunction addTransforms( result, source, index, results ) {\n\tconst destinationBlockType = result.name;\n\tconst activeSupports = {\n\t\tfontSize: hasBlockSupport(\n\t\t\tdestinationBlockType,\n\t\t\tFONT_SIZE_SUPPORT_KEY\n\t\t),\n\t};\n\treturn transformStyles(\n\t\tactiveSupports,\n\t\tMIGRATION_PATHS,\n\t\tresult,\n\t\tsource,\n\t\tindex,\n\t\tresults\n\t);\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/font/addAttribute',\n\taddAttributes\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/font-size/addTransforms',\n\taddTransforms\n);\n"],
5
+ "mappings": "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",
6
6
  "names": ["TokenList"]
7
7
  }
@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var metadata_exports = {};
20
20
  __export(metadata_exports, {
21
- addMetaAttribute: () => addMetaAttribute
21
+ addMetaAttribute: () => addMetaAttribute,
22
+ addTransforms: () => addTransforms
22
23
  });
23
24
  module.exports = __toCommonJS(metadata_exports);
24
25
  var import_hooks = require("@wordpress/hooks");
26
+ var import_blocks = require("@wordpress/blocks");
25
27
  const META_ATTRIBUTE_NAME = "metadata";
26
28
  function addMetaAttribute(blockTypeSettings) {
27
29
  if (blockTypeSettings?.attributes?.[META_ATTRIBUTE_NAME]?.type) {
@@ -35,13 +37,57 @@ function addMetaAttribute(blockTypeSettings) {
35
37
  };
36
38
  return blockTypeSettings;
37
39
  }
40
+ function addTransforms(result, source, index, results) {
41
+ if (results.length === 1 && result.innerBlocks.length === source.length) {
42
+ return result;
43
+ }
44
+ if (results.length === 1 && source.length > 1 || results.length > 1 && source.length === 1) {
45
+ return result;
46
+ }
47
+ if (results.length > 1 && source.length > 1 && results.length !== source.length) {
48
+ return result;
49
+ }
50
+ const sourceMetadata = source[index]?.attributes?.metadata;
51
+ if (!sourceMetadata) {
52
+ return result;
53
+ }
54
+ const preservedMetadata = {};
55
+ if (sourceMetadata.noteId && !result.attributes?.metadata?.noteId) {
56
+ preservedMetadata.noteId = sourceMetadata.noteId;
57
+ }
58
+ if (sourceMetadata.name && !result.attributes?.metadata?.name && (0, import_blocks.hasBlockSupport)(result.name, "renaming", true)) {
59
+ preservedMetadata.name = sourceMetadata.name;
60
+ }
61
+ if (sourceMetadata.blockVisibility !== void 0 && !result.attributes?.metadata?.blockVisibility && (0, import_blocks.hasBlockSupport)(result.name, "blockVisibility", true)) {
62
+ preservedMetadata.blockVisibility = sourceMetadata.blockVisibility;
63
+ }
64
+ if (Object.keys(preservedMetadata).length > 0) {
65
+ return {
66
+ ...result,
67
+ attributes: {
68
+ ...result.attributes,
69
+ metadata: {
70
+ ...result.attributes.metadata,
71
+ ...preservedMetadata
72
+ }
73
+ }
74
+ };
75
+ }
76
+ return result;
77
+ }
38
78
  (0, import_hooks.addFilter)(
39
79
  "blocks.registerBlockType",
40
80
  "core/metadata/addMetaAttribute",
41
81
  addMetaAttribute
42
82
  );
83
+ (0, import_hooks.addFilter)(
84
+ "blocks.switchToBlockType.transformedBlock",
85
+ "core/metadata/addTransforms",
86
+ addTransforms
87
+ );
43
88
  // Annotate the CommonJS export names for ESM import in node:
44
89
  0 && (module.exports = {
45
- addMetaAttribute
90
+ addMetaAttribute,
91
+ addTransforms
46
92
  });
47
93
  //# sourceMappingURL=metadata.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/metadata.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nconst META_ATTRIBUTE_NAME = 'metadata';\n\n/**\n * Filters registered block settings, extending attributes to include `metadata`.\n *\n * see: https://github.com/WordPress/gutenberg/pull/40393/files#r864632012\n *\n * @param {Object} blockTypeSettings Original block settings.\n * @return {Object} Filtered block settings.\n */\nexport function addMetaAttribute( blockTypeSettings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( blockTypeSettings?.attributes?.[ META_ATTRIBUTE_NAME ]?.type ) {\n\t\treturn blockTypeSettings;\n\t}\n\n\tblockTypeSettings.attributes = {\n\t\t...blockTypeSettings.attributes,\n\t\t[ META_ATTRIBUTE_NAME ]: {\n\t\t\ttype: 'object',\n\t\t},\n\t};\n\n\treturn blockTypeSettings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/metadata/addMetaAttribute',\n\taddMetaAttribute\n);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAA0B;AAC1B,MAAM,sBAAsB;AAUrB,SAAS,iBAAkB,mBAAoB;AAErD,MAAK,mBAAmB,aAAc,mBAAoB,GAAG,MAAO;AACnE,WAAO;AAAA,EACR;AAEA,oBAAkB,aAAa;AAAA,IAC9B,GAAG,kBAAkB;AAAA,IACrB,CAAE,mBAAoB,GAAG;AAAA,MACxB,MAAM;AAAA,IACP;AAAA,EACD;AAEA,SAAO;AACR;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { hasBlockSupport } from '@wordpress/blocks';\n\nconst META_ATTRIBUTE_NAME = 'metadata';\n\n/**\n * Filters registered block settings, extending attributes to include `metadata`.\n *\n * see: https://github.com/WordPress/gutenberg/pull/40393/files#r864632012\n *\n * @param {Object} blockTypeSettings Original block settings.\n * @return {Object} Filtered block settings.\n */\nexport function addMetaAttribute( blockTypeSettings ) {\n\t// Allow blocks to specify their own attribute definition with default values if needed.\n\tif ( blockTypeSettings?.attributes?.[ META_ATTRIBUTE_NAME ]?.type ) {\n\t\treturn blockTypeSettings;\n\t}\n\n\tblockTypeSettings.attributes = {\n\t\t...blockTypeSettings.attributes,\n\t\t[ META_ATTRIBUTE_NAME ]: {\n\t\t\ttype: 'object',\n\t\t},\n\t};\n\n\treturn blockTypeSettings;\n}\n\n/**\n * Add metadata transforms.\n *\n * @param {Object} result The transformed block.\n * @param {Array} source Original blocks transformed.\n * @param {number} index Index of the transformed block.\n * @param {Array} results All blocks that resulted from the transformation.\n * @return {Object} Modified transformed block.\n */\nexport function addTransforms( result, source, index, results ) {\n\t// If the condition verifies we are probably in the presence of a wrapping transform\n\t// e.g: nesting paragraphs in a group or columns and in that case the metadata should not be kept.\n\tif ( results.length === 1 && result.innerBlocks.length === source.length ) {\n\t\treturn result;\n\t}\n\n\t// If we are transforming one block to multiple blocks or multiple blocks to one block,\n\t// we ignore the metadata during the transform.\n\tif (\n\t\t( results.length === 1 && source.length > 1 ) ||\n\t\t( results.length > 1 && source.length === 1 )\n\t) {\n\t\treturn result;\n\t}\n\n\t// If we are transforming multiple blocks to multiple blocks with different counts,\n\t// we ignore the metadata during the transform.\n\tif (\n\t\tresults.length > 1 &&\n\t\tsource.length > 1 &&\n\t\tresults.length !== source.length\n\t) {\n\t\treturn result;\n\t}\n\n\tconst sourceMetadata = source[ index ]?.attributes?.metadata;\n\n\tif ( ! sourceMetadata ) {\n\t\treturn result;\n\t}\n\n\tconst preservedMetadata = {};\n\n\t// Notes\n\tif ( sourceMetadata.noteId && ! result.attributes?.metadata?.noteId ) {\n\t\tpreservedMetadata.noteId = sourceMetadata.noteId;\n\t}\n\n\t// Custom name\n\tif (\n\t\tsourceMetadata.name &&\n\t\t! result.attributes?.metadata?.name &&\n\t\thasBlockSupport( result.name, 'renaming', true )\n\t) {\n\t\tpreservedMetadata.name = sourceMetadata.name;\n\t}\n\n\t// Block visibility\n\tif (\n\t\tsourceMetadata.blockVisibility !== undefined &&\n\t\t! result.attributes?.metadata?.blockVisibility &&\n\t\thasBlockSupport( result.name, 'blockVisibility', true )\n\t) {\n\t\tpreservedMetadata.blockVisibility = sourceMetadata.blockVisibility;\n\t}\n\n\tif ( Object.keys( preservedMetadata ).length > 0 ) {\n\t\treturn {\n\t\t\t...result,\n\t\t\tattributes: {\n\t\t\t\t...result.attributes,\n\t\t\t\tmetadata: {\n\t\t\t\t\t...result.attributes.metadata,\n\t\t\t\t\t...preservedMetadata,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\treturn result;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/metadata/addMetaAttribute',\n\taddMetaAttribute\n);\n\naddFilter(\n\t'blocks.switchToBlockType.transformedBlock',\n\t'core/metadata/addTransforms',\n\taddTransforms\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAA0B;AAC1B,oBAAgC;AAEhC,MAAM,sBAAsB;AAUrB,SAAS,iBAAkB,mBAAoB;AAErD,MAAK,mBAAmB,aAAc,mBAAoB,GAAG,MAAO;AACnE,WAAO;AAAA,EACR;AAEA,oBAAkB,aAAa;AAAA,IAC9B,GAAG,kBAAkB;AAAA,IACrB,CAAE,mBAAoB,GAAG;AAAA,MACxB,MAAM;AAAA,IACP;AAAA,EACD;AAEA,SAAO;AACR;AAWO,SAAS,cAAe,QAAQ,QAAQ,OAAO,SAAU;AAG/D,MAAK,QAAQ,WAAW,KAAK,OAAO,YAAY,WAAW,OAAO,QAAS;AAC1E,WAAO;AAAA,EACR;AAIA,MACG,QAAQ,WAAW,KAAK,OAAO,SAAS,KACxC,QAAQ,SAAS,KAAK,OAAO,WAAW,GACzC;AACD,WAAO;AAAA,EACR;AAIA,MACC,QAAQ,SAAS,KACjB,OAAO,SAAS,KAChB,QAAQ,WAAW,OAAO,QACzB;AACD,WAAO;AAAA,EACR;AAEA,QAAM,iBAAiB,OAAQ,KAAM,GAAG,YAAY;AAEpD,MAAK,CAAE,gBAAiB;AACvB,WAAO;AAAA,EACR;AAEA,QAAM,oBAAoB,CAAC;AAG3B,MAAK,eAAe,UAAU,CAAE,OAAO,YAAY,UAAU,QAAS;AACrE,sBAAkB,SAAS,eAAe;AAAA,EAC3C;AAGA,MACC,eAAe,QACf,CAAE,OAAO,YAAY,UAAU,YAC/B,+BAAiB,OAAO,MAAM,YAAY,IAAK,GAC9C;AACD,sBAAkB,OAAO,eAAe;AAAA,EACzC;AAGA,MACC,eAAe,oBAAoB,UACnC,CAAE,OAAO,YAAY,UAAU,uBAC/B,+BAAiB,OAAO,MAAM,mBAAmB,IAAK,GACrD;AACD,sBAAkB,kBAAkB,eAAe;AAAA,EACpD;AAEA,MAAK,OAAO,KAAM,iBAAkB,EAAE,SAAS,GAAI;AAClD,WAAO;AAAA,MACN,GAAG;AAAA,MACH,YAAY;AAAA,QACX,GAAG,OAAO;AAAA,QACV,UAAU;AAAA,UACT,GAAG,OAAO,WAAW;AAAA,UACrB,GAAG;AAAA,QACJ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,SAAO;AACR;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;AAAA,IAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;",
6
6
  "names": []
7
7
  }
@@ -125,17 +125,24 @@ function TypographyInspectorControl({ children, resetAllFilter }) {
125
125
  }
126
126
  function TypographyPanel({ clientId, name, setAttributes, settings }) {
127
127
  function selector(select) {
128
- const { style: style2, fontFamily: fontFamily2, fontSize: fontSize2 } = select(import_store.store).getBlockAttributes(clientId) || {};
129
- return { style: style2, fontFamily: fontFamily2, fontSize: fontSize2 };
128
+ const { style: style2, fontFamily: fontFamily2, fontSize: fontSize2, fitText: fitText2 } = select(import_store.store).getBlockAttributes(clientId) || {};
129
+ return { style: style2, fontFamily: fontFamily2, fontSize: fontSize2, fitText: fitText2 };
130
130
  }
131
- const { style, fontFamily, fontSize } = (0, import_data.useSelect)(selector, [clientId]);
131
+ const { style, fontFamily, fontSize, fitText } = (0, import_data.useSelect)(selector, [
132
+ clientId
133
+ ]);
132
134
  const isEnabled = (0, import_typography_panel.useHasTypographyPanel)(settings);
133
135
  const value = (0, import_element.useMemo)(
134
136
  () => attributesToStyle({ style, fontFamily, fontSize }),
135
137
  [style, fontSize, fontFamily]
136
138
  );
137
139
  const onChange = (newStyle) => {
138
- setAttributes(styleToAttributes(newStyle));
140
+ const newAttributes = styleToAttributes(newStyle);
141
+ const hasFontSize = newAttributes.fontSize || newAttributes.style?.typography?.fontSize;
142
+ if (hasFontSize && fitText) {
143
+ newAttributes.fitText = void 0;
144
+ }
145
+ setAttributes(newAttributes);
139
146
  };
140
147
  if (!isEnabled) {
141
148
  return null;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hooks/typography.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useMemo, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tdefault as StylesTypographyPanel,\n\tuseHasTypographyPanel,\n} from '../components/global-styles/typography-panel';\n\nimport { LINE_HEIGHT_SUPPORT_KEY } from './line-height';\nimport { FONT_FAMILY_SUPPORT_KEY } from './font-family';\nimport { FONT_SIZE_SUPPORT_KEY } from './font-size';\nimport { TEXT_ALIGN_SUPPORT_KEY } from './text-align';\nimport { FIT_TEXT_SUPPORT_KEY } from './fit-text';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nfunction omit( object, keys ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )\n\t);\n}\n\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\nexport const TYPOGRAPHY_SUPPORT_KEY = 'typography';\nexport const TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_ALIGN_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n\tFIT_TEXT_SUPPORT_KEY,\n];\n\nfunction styleToAttributes( style ) {\n\tconst updatedStyle = { ...omit( style, [ 'fontFamily' ] ) };\n\tconst fontSizeValue = style?.typography?.fontSize;\n\tconst fontFamilyValue = style?.typography?.fontFamily;\n\tconst fontSizeSlug =\n\t\ttypeof fontSizeValue === 'string' &&\n\t\tfontSizeValue?.startsWith( 'var:preset|font-size|' )\n\t\t\t? fontSizeValue.substring( 'var:preset|font-size|'.length )\n\t\t\t: undefined;\n\tconst fontFamilySlug = fontFamilyValue?.startsWith(\n\t\t'var:preset|font-family|'\n\t)\n\t\t? fontFamilyValue.substring( 'var:preset|font-family|'.length )\n\t\t: undefined;\n\tupdatedStyle.typography = {\n\t\t...omit( updatedStyle.typography, [ 'fontFamily' ] ),\n\t\tfontSize: fontSizeSlug ? undefined : fontSizeValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tfontFamily: fontFamilySlug,\n\t\tfontSize: fontSizeSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\ttypography: {\n\t\t\t...attributes.style?.typography,\n\t\t\tfontFamily: attributes.fontFamily\n\t\t\t\t? 'var:preset|font-family|' + attributes.fontFamily\n\t\t\t\t: undefined,\n\t\t\tfontSize: attributes.fontSize\n\t\t\t\t? 'var:preset|font-size|' + attributes.fontSize\n\t\t\t\t: attributes.style?.typography?.fontSize,\n\t\t},\n\t};\n}\n\nfunction TypographyInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"typography\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function TypographyPanel( { clientId, name, setAttributes, settings } ) {\n\tfunction selector( select ) {\n\t\tconst { style, fontFamily, fontSize } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, fontFamily, fontSize };\n\t}\n\tconst { style, fontFamily, fontSize } = useSelect( selector, [ clientId ] );\n\tconst isEnabled = useHasTypographyPanel( settings );\n\tconst value = useMemo(\n\t\t() => attributesToStyle( { style, fontFamily, fontSize } ),\n\t\t[ style, fontSize, fontFamily ]\n\t);\n\n\tconst onChange = ( newStyle ) => {\n\t\tsetAttributes( styleToAttributes( newStyle ) );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t<StylesTypographyPanel\n\t\t\tas={ TypographyInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t/>\n\t);\n}\n\nexport const hasTypographySupport = ( blockName ) => {\n\treturn TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>\n\t\thasBlockSupport( blockName, key )\n\t);\n};\n"],
5
- "mappings": "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",
6
- "names": ["InspectorControls", "style", "fontFamily", "fontSize", "blockEditorStore", "StylesTypographyPanel"]
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { getBlockSupport, hasBlockSupport } from '@wordpress/blocks';\nimport { useMemo, useCallback } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport InspectorControls from '../components/inspector-controls';\nimport {\n\tdefault as StylesTypographyPanel,\n\tuseHasTypographyPanel,\n} from '../components/global-styles/typography-panel';\n\nimport { LINE_HEIGHT_SUPPORT_KEY } from './line-height';\nimport { FONT_FAMILY_SUPPORT_KEY } from './font-family';\nimport { FONT_SIZE_SUPPORT_KEY } from './font-size';\nimport { TEXT_ALIGN_SUPPORT_KEY } from './text-align';\nimport { FIT_TEXT_SUPPORT_KEY } from './fit-text';\nimport { cleanEmptyObject } from './utils';\nimport { store as blockEditorStore } from '../store';\n\nfunction omit( object, keys ) {\n\treturn Object.fromEntries(\n\t\tObject.entries( object ).filter( ( [ key ] ) => ! keys.includes( key ) )\n\t);\n}\n\nconst LETTER_SPACING_SUPPORT_KEY = 'typography.__experimentalLetterSpacing';\nconst TEXT_TRANSFORM_SUPPORT_KEY = 'typography.__experimentalTextTransform';\nconst TEXT_DECORATION_SUPPORT_KEY = 'typography.__experimentalTextDecoration';\nconst TEXT_COLUMNS_SUPPORT_KEY = 'typography.textColumns';\nconst FONT_STYLE_SUPPORT_KEY = 'typography.__experimentalFontStyle';\nconst FONT_WEIGHT_SUPPORT_KEY = 'typography.__experimentalFontWeight';\nconst WRITING_MODE_SUPPORT_KEY = 'typography.__experimentalWritingMode';\nexport const TYPOGRAPHY_SUPPORT_KEY = 'typography';\nexport const TYPOGRAPHY_SUPPORT_KEYS = [\n\tLINE_HEIGHT_SUPPORT_KEY,\n\tFONT_SIZE_SUPPORT_KEY,\n\tFONT_STYLE_SUPPORT_KEY,\n\tFONT_WEIGHT_SUPPORT_KEY,\n\tFONT_FAMILY_SUPPORT_KEY,\n\tTEXT_ALIGN_SUPPORT_KEY,\n\tTEXT_COLUMNS_SUPPORT_KEY,\n\tTEXT_DECORATION_SUPPORT_KEY,\n\tWRITING_MODE_SUPPORT_KEY,\n\tTEXT_TRANSFORM_SUPPORT_KEY,\n\tLETTER_SPACING_SUPPORT_KEY,\n\tFIT_TEXT_SUPPORT_KEY,\n];\n\nfunction styleToAttributes( style ) {\n\tconst updatedStyle = { ...omit( style, [ 'fontFamily' ] ) };\n\tconst fontSizeValue = style?.typography?.fontSize;\n\tconst fontFamilyValue = style?.typography?.fontFamily;\n\tconst fontSizeSlug =\n\t\ttypeof fontSizeValue === 'string' &&\n\t\tfontSizeValue?.startsWith( 'var:preset|font-size|' )\n\t\t\t? fontSizeValue.substring( 'var:preset|font-size|'.length )\n\t\t\t: undefined;\n\tconst fontFamilySlug = fontFamilyValue?.startsWith(\n\t\t'var:preset|font-family|'\n\t)\n\t\t? fontFamilyValue.substring( 'var:preset|font-family|'.length )\n\t\t: undefined;\n\tupdatedStyle.typography = {\n\t\t...omit( updatedStyle.typography, [ 'fontFamily' ] ),\n\t\tfontSize: fontSizeSlug ? undefined : fontSizeValue,\n\t};\n\treturn {\n\t\tstyle: cleanEmptyObject( updatedStyle ),\n\t\tfontFamily: fontFamilySlug,\n\t\tfontSize: fontSizeSlug,\n\t};\n}\n\nfunction attributesToStyle( attributes ) {\n\treturn {\n\t\t...attributes.style,\n\t\ttypography: {\n\t\t\t...attributes.style?.typography,\n\t\t\tfontFamily: attributes.fontFamily\n\t\t\t\t? 'var:preset|font-family|' + attributes.fontFamily\n\t\t\t\t: undefined,\n\t\t\tfontSize: attributes.fontSize\n\t\t\t\t? 'var:preset|font-size|' + attributes.fontSize\n\t\t\t\t: attributes.style?.typography?.fontSize,\n\t\t},\n\t};\n}\n\nfunction TypographyInspectorControl( { children, resetAllFilter } ) {\n\tconst attributesResetAllFilter = useCallback(\n\t\t( attributes ) => {\n\t\t\tconst existingStyle = attributesToStyle( attributes );\n\t\t\tconst updatedStyle = resetAllFilter( existingStyle );\n\t\t\treturn {\n\t\t\t\t...attributes,\n\t\t\t\t...styleToAttributes( updatedStyle ),\n\t\t\t};\n\t\t},\n\t\t[ resetAllFilter ]\n\t);\n\n\treturn (\n\t\t<InspectorControls\n\t\t\tgroup=\"typography\"\n\t\t\tresetAllFilter={ attributesResetAllFilter }\n\t\t>\n\t\t\t{ children }\n\t\t</InspectorControls>\n\t);\n}\n\nexport function TypographyPanel( { clientId, name, setAttributes, settings } ) {\n\tfunction selector( select ) {\n\t\tconst { style, fontFamily, fontSize, fitText } =\n\t\t\tselect( blockEditorStore ).getBlockAttributes( clientId ) || {};\n\t\treturn { style, fontFamily, fontSize, fitText };\n\t}\n\tconst { style, fontFamily, fontSize, fitText } = useSelect( selector, [\n\t\tclientId,\n\t] );\n\tconst isEnabled = useHasTypographyPanel( settings );\n\tconst value = useMemo(\n\t\t() => attributesToStyle( { style, fontFamily, fontSize } ),\n\t\t[ style, fontSize, fontFamily ]\n\t);\n\n\tconst onChange = ( newStyle ) => {\n\t\tconst newAttributes = styleToAttributes( newStyle );\n\n\t\t// If setting a font size and fitText is currently enabled, disable it\n\t\tconst hasFontSize =\n\t\t\tnewAttributes.fontSize || newAttributes.style?.typography?.fontSize;\n\t\tif ( hasFontSize && fitText ) {\n\t\t\tnewAttributes.fitText = undefined;\n\t\t}\n\n\t\tsetAttributes( newAttributes );\n\t};\n\n\tif ( ! isEnabled ) {\n\t\treturn null;\n\t}\n\n\tconst defaultControls = getBlockSupport( name, [\n\t\tTYPOGRAPHY_SUPPORT_KEY,\n\t\t'__experimentalDefaultControls',\n\t] );\n\n\treturn (\n\t\t<StylesTypographyPanel\n\t\t\tas={ TypographyInspectorControl }\n\t\t\tpanelId={ clientId }\n\t\t\tsettings={ settings }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tdefaultControls={ defaultControls }\n\t\t/>\n\t);\n}\n\nexport const hasTypographySupport = ( blockName ) => {\n\treturn TYPOGRAPHY_SUPPORT_KEYS.some( ( key ) =>\n\t\thasBlockSupport( blockName, key )\n\t);\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2GE;AAxGF,oBAAiD;AACjD,qBAAqC;AACrC,kBAA0B;AAK1B,gCAA8B;AAC9B,8BAGO;AAEP,yBAAwC;AACxC,yBAAwC;AACxC,uBAAsC;AACtC,wBAAuC;AACvC,sBAAqC;AACrC,mBAAiC;AACjC,mBAA0C;AAE1C,SAAS,KAAM,QAAQ,MAAO;AAC7B,SAAO,OAAO;AAAA,IACb,OAAO,QAAS,MAAO,EAAE,OAAQ,CAAE,CAAE,GAAI,MAAO,CAAE,KAAK,SAAU,GAAI,CAAE;AAAA,EACxE;AACD;AAEA,MAAM,6BAA6B;AACnC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,2BAA2B;AACjC,MAAM,yBAAyB;AAC/B,MAAM,0BAA0B;AAChC,MAAM,2BAA2B;AAC1B,MAAM,yBAAyB;AAC/B,MAAM,0BAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,SAAS,kBAAmB,OAAQ;AACnC,QAAM,eAAe,EAAE,GAAG,KAAM,OAAO,CAAE,YAAa,CAAE,EAAE;AAC1D,QAAM,gBAAgB,OAAO,YAAY;AACzC,QAAM,kBAAkB,OAAO,YAAY;AAC3C,QAAM,eACL,OAAO,kBAAkB,YACzB,eAAe,WAAY,uBAAwB,IAChD,cAAc,UAAW,wBAAwB,MAAO,IACxD;AACJ,QAAM,iBAAiB,iBAAiB;AAAA,IACvC;AAAA,EACD,IACG,gBAAgB,UAAW,0BAA0B,MAAO,IAC5D;AACH,eAAa,aAAa;AAAA,IACzB,GAAG,KAAM,aAAa,YAAY,CAAE,YAAa,CAAE;AAAA,IACnD,UAAU,eAAe,SAAY;AAAA,EACtC;AACA,SAAO;AAAA,IACN,WAAO,+BAAkB,YAAa;AAAA,IACtC,YAAY;AAAA,IACZ,UAAU;AAAA,EACX;AACD;AAEA,SAAS,kBAAmB,YAAa;AACxC,SAAO;AAAA,IACN,GAAG,WAAW;AAAA,IACd,YAAY;AAAA,MACX,GAAG,WAAW,OAAO;AAAA,MACrB,YAAY,WAAW,aACpB,4BAA4B,WAAW,aACvC;AAAA,MACH,UAAU,WAAW,WAClB,0BAA0B,WAAW,WACrC,WAAW,OAAO,YAAY;AAAA,IAClC;AAAA,EACD;AACD;AAEA,SAAS,2BAA4B,EAAE,UAAU,eAAe,GAAI;AACnE,QAAM,+BAA2B;AAAA,IAChC,CAAE,eAAgB;AACjB,YAAM,gBAAgB,kBAAmB,UAAW;AACpD,YAAM,eAAe,eAAgB,aAAc;AACnD,aAAO;AAAA,QACN,GAAG;AAAA,QACH,GAAG,kBAAmB,YAAa;AAAA,MACpC;AAAA,IACD;AAAA,IACA,CAAE,cAAe;AAAA,EAClB;AAEA,SACC;AAAA,IAAC,0BAAAA;AAAA,IAAA;AAAA,MACA,OAAM;AAAA,MACN,gBAAiB;AAAA,MAEf;AAAA;AAAA,EACH;AAEF;AAEO,SAAS,gBAAiB,EAAE,UAAU,MAAM,eAAe,SAAS,GAAI;AAC9E,WAAS,SAAU,QAAS;AAC3B,UAAM,EAAE,OAAAC,QAAO,YAAAC,aAAY,UAAAC,WAAU,SAAAC,SAAQ,IAC5C,OAAQ,aAAAC,KAAiB,EAAE,mBAAoB,QAAS,KAAK,CAAC;AAC/D,WAAO,EAAE,OAAAJ,QAAO,YAAAC,aAAY,UAAAC,WAAU,SAAAC,SAAQ;AAAA,EAC/C;AACA,QAAM,EAAE,OAAO,YAAY,UAAU,QAAQ,QAAI,uBAAW,UAAU;AAAA,IACrE;AAAA,EACD,CAAE;AACF,QAAM,gBAAY,+CAAuB,QAAS;AAClD,QAAM,YAAQ;AAAA,IACb,MAAM,kBAAmB,EAAE,OAAO,YAAY,SAAS,CAAE;AAAA,IACzD,CAAE,OAAO,UAAU,UAAW;AAAA,EAC/B;AAEA,QAAM,WAAW,CAAE,aAAc;AAChC,UAAM,gBAAgB,kBAAmB,QAAS;AAGlD,UAAM,cACL,cAAc,YAAY,cAAc,OAAO,YAAY;AAC5D,QAAK,eAAe,SAAU;AAC7B,oBAAc,UAAU;AAAA,IACzB;AAEA,kBAAe,aAAc;AAAA,EAC9B;AAEA,MAAK,CAAE,WAAY;AAClB,WAAO;AAAA,EACR;AAEA,QAAM,sBAAkB,+BAAiB,MAAM;AAAA,IAC9C;AAAA,IACA;AAAA,EACD,CAAE;AAEF,SACC;AAAA,IAAC,wBAAAE;AAAA,IAAA;AAAA,MACA,IAAK;AAAA,MACL,SAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACD;AAEF;AAEO,MAAM,uBAAuB,CAAE,cAAe;AACpD,SAAO,wBAAwB;AAAA,IAAM,CAAE,YACtC,+BAAiB,WAAW,GAAI;AAAA,EACjC;AACD;",
6
+ "names": ["InspectorControls", "style", "fontFamily", "fontSize", "fitText", "blockEditorStore", "StylesTypographyPanel"]
7
7
  }
@@ -33,16 +33,16 @@ __export(use_typography_props_exports, {
33
33
  module.exports = __toCommonJS(use_typography_props_exports);
34
34
  var import_clsx = __toESM(require("clsx"));
35
35
  var import_components = require("@wordpress/components");
36
- var import_global_styles_engine = require("@wordpress/global-styles-engine");
37
36
  var import_style = require("./style");
38
37
  var import_font_sizes = require("../components/font-sizes");
38
+ var import_typography_utils = require("../components/global-styles/typography-utils");
39
39
  var import_lock_unlock = require("../lock-unlock");
40
40
  const { kebabCase } = (0, import_lock_unlock.unlock)(import_components.privateApis);
41
41
  function getTypographyClassesAndStyles(attributes, settings) {
42
42
  let typographyStyles = attributes?.style?.typography || {};
43
43
  typographyStyles = {
44
44
  ...typographyStyles,
45
- fontSize: (0, import_global_styles_engine.getTypographyFontSizeValue)(
45
+ fontSize: (0, import_typography_utils.getTypographyFontSizeValue)(
46
46
  { size: attributes?.style?.typography?.fontSize },
47
47
  settings
48
48
  )