@wordpress/block-library 9.37.2-next.79a2f3cdd.0 → 9.37.2-next.ba3aee3a2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/build/code/transforms.cjs +1 -1
  3. package/build/code/transforms.cjs.map +1 -1
  4. package/build/image/block.json +3 -0
  5. package/build/image/image.cjs +42 -4
  6. package/build/image/image.cjs.map +2 -2
  7. package/build/image/save.cjs +3 -0
  8. package/build/image/save.cjs.map +2 -2
  9. package/build/image/utils.cjs +5 -0
  10. package/build/image/utils.cjs.map +2 -2
  11. package/build/navigation/constants.cjs +3 -0
  12. package/build/navigation/constants.cjs.map +2 -2
  13. package/build/navigation/edit/overlay-template-part-selector.cjs +2 -1
  14. package/build/navigation/edit/overlay-template-part-selector.cjs.map +2 -2
  15. package/build/navigation/edit/use-create-overlay.cjs +2 -1
  16. package/build/navigation/edit/use-create-overlay.cjs.map +2 -2
  17. package/build/navigation/view.cjs +14 -2
  18. package/build/navigation/view.cjs.map +2 -2
  19. package/build/private-apis.cjs +3 -1
  20. package/build/private-apis.cjs.map +2 -2
  21. package/build/quote/transforms.cjs +30 -6
  22. package/build/quote/transforms.cjs.map +2 -2
  23. package/build/separator/transforms.cjs +5 -2
  24. package/build/separator/transforms.cjs.map +2 -2
  25. package/build/template-part/edit/index.cjs +9 -2
  26. package/build/template-part/edit/index.cjs.map +2 -2
  27. package/build-module/code/transforms.mjs +1 -1
  28. package/build-module/code/transforms.mjs.map +1 -1
  29. package/build-module/image/block.json +3 -0
  30. package/build-module/image/image.mjs +44 -5
  31. package/build-module/image/image.mjs.map +2 -2
  32. package/build-module/image/save.mjs +3 -0
  33. package/build-module/image/save.mjs.map +2 -2
  34. package/build-module/image/utils.mjs +4 -0
  35. package/build-module/image/utils.mjs.map +2 -2
  36. package/build-module/navigation/constants.mjs +2 -0
  37. package/build-module/navigation/constants.mjs.map +2 -2
  38. package/build-module/navigation/edit/overlay-template-part-selector.mjs +2 -1
  39. package/build-module/navigation/edit/overlay-template-part-selector.mjs.map +2 -2
  40. package/build-module/navigation/edit/use-create-overlay.mjs +2 -1
  41. package/build-module/navigation/edit/use-create-overlay.mjs.map +2 -2
  42. package/build-module/navigation/view.mjs +14 -2
  43. package/build-module/navigation/view.mjs.map +2 -2
  44. package/build-module/private-apis.mjs +3 -1
  45. package/build-module/private-apis.mjs.map +2 -2
  46. package/build-module/quote/transforms.mjs +30 -6
  47. package/build-module/quote/transforms.mjs.map +2 -2
  48. package/build-module/separator/transforms.mjs +6 -3
  49. package/build-module/separator/transforms.mjs.map +2 -2
  50. package/build-module/template-part/edit/index.mjs +9 -2
  51. package/build-module/template-part/edit/index.mjs.map +2 -2
  52. package/build-style/navigation/style-rtl.css +25 -6
  53. package/build-style/navigation/style.css +25 -6
  54. package/build-style/navigation-overlay-close/style-rtl.css +0 -1
  55. package/build-style/navigation-overlay-close/style.css +0 -1
  56. package/build-style/style-rtl.css +25 -7
  57. package/build-style/style.css +25 -7
  58. package/package.json +37 -37
  59. package/src/code/transforms.js +1 -1
  60. package/src/image/block.json +3 -0
  61. package/src/image/image.js +43 -2
  62. package/src/image/save.js +10 -0
  63. package/src/image/utils.js +4 -0
  64. package/src/navigation/constants.js +9 -0
  65. package/src/navigation/edit/overlay-template-part-selector.js +3 -1
  66. package/src/navigation/edit/test/overlay-template-part-selector.js +3 -3
  67. package/src/navigation/edit/test/use-create-overlay.js +5 -5
  68. package/src/navigation/edit/use-create-overlay.js +2 -1
  69. package/src/navigation/index.php +271 -13
  70. package/src/navigation/style.scss +46 -9
  71. package/src/navigation/view.js +24 -4
  72. package/src/navigation-overlay-close/style.scss +0 -1
  73. package/src/private-apis.js +2 -0
  74. package/src/quote/transforms.js +31 -5
  75. package/src/separator/transforms.js +6 -3
  76. package/src/template-part/edit/index.js +21 -4
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/navigation/edit/overlay-template-part-selector.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useCallback } from '@wordpress/element';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport {\n\tSelectControl,\n\tButton,\n\tFlexBlock,\n\tFlexItem,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { createTemplatePartId } from '../../template-part/edit/utils/create-template-part-id';\nimport useCreateOverlayTemplatePart from './use-create-overlay';\n\n/**\n * Overlay Template Part Selector component.\n *\n * @param {Object} props Component props.\n * @param {string} props.overlay Currently selected overlay template part ID.\n * @param {Function} props.setAttributes Function to update block attributes.\n * @param {Function} props.onNavigateToEntityRecord Function to navigate to template part editor.\n * @return {JSX.Element} The overlay template part selector component.\n */\nexport default function OverlayTemplatePartSelector( {\n\toverlay,\n\tsetAttributes,\n\tonNavigateToEntityRecord,\n} ) {\n\tconst {\n\t\trecords: templateParts,\n\t\tisResolving,\n\t\thasResolved,\n\t} = useEntityRecords( 'postType', 'wp_template_part', {\n\t\tper_page: -1,\n\t} );\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\t// Track if we're currently creating a new overlay\n\tconst [ isCreating, setIsCreating ] = useState( false );\n\n\t// Filter template parts by overlay area\n\tconst overlayTemplateParts = useMemo( () => {\n\t\tif ( ! templateParts ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn templateParts.filter(\n\t\t\t( templatePart ) => templatePart.area === 'overlay'\n\t\t);\n\t}, [ templateParts ] );\n\n\t// Hook to create overlay template part\n\tconst createOverlayTemplatePart =\n\t\tuseCreateOverlayTemplatePart( overlayTemplateParts );\n\n\t// Build options for SelectControl\n\tconst options = useMemo( () => {\n\t\tconst baseOptions = [\n\t\t\t{\n\t\t\t\tlabel: __( 'None (default)' ),\n\t\t\t\tvalue: '',\n\t\t\t},\n\t\t];\n\n\t\tif ( ! hasResolved || isResolving ) {\n\t\t\treturn baseOptions;\n\t\t}\n\n\t\tconst templatePartOptions = overlayTemplateParts.map(\n\t\t\t( templatePart ) => {\n\t\t\t\tconst templatePartId = createTemplatePartId(\n\t\t\t\t\ttemplatePart.theme,\n\t\t\t\t\ttemplatePart.slug\n\t\t\t\t);\n\t\t\t\tconst label = templatePart.title?.rendered\n\t\t\t\t\t? decodeEntities( templatePart.title.rendered )\n\t\t\t\t\t: templatePart.slug;\n\n\t\t\t\treturn {\n\t\t\t\t\tlabel,\n\t\t\t\t\tvalue: templatePartId,\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\n\t\treturn [ ...baseOptions, ...templatePartOptions ];\n\t}, [ overlayTemplateParts, hasResolved, isResolving ] );\n\n\t// Find the selected template part to get its title\n\tconst selectedTemplatePart = useMemo( () => {\n\t\tif ( ! overlay || ! overlayTemplateParts ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn overlayTemplateParts.find( ( templatePart ) => {\n\t\t\tconst templatePartId = createTemplatePartId(\n\t\t\t\ttemplatePart.theme,\n\t\t\t\ttemplatePart.slug\n\t\t\t);\n\t\t\treturn templatePartId === overlay;\n\t\t} );\n\t}, [ overlay, overlayTemplateParts ] );\n\n\tconst handleSelectChange = ( value ) => {\n\t\tsetAttributes( {\n\t\t\toverlay: value || undefined,\n\t\t} );\n\t};\n\n\tconst handleEditClick = () => {\n\t\tif ( ! overlay || ! onNavigateToEntityRecord ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonNavigateToEntityRecord( {\n\t\t\tpostId: overlay,\n\t\t\tpostType: 'wp_template_part',\n\t\t} );\n\t};\n\n\tconst handleCreateOverlay = useCallback( async () => {\n\t\ttry {\n\t\t\tsetIsCreating( true );\n\n\t\t\tconst templatePart = await createOverlayTemplatePart();\n\n\t\t\tsetAttributes( {\n\t\t\t\toverlay: templatePart.id,\n\t\t\t} );\n\n\t\t\t// Navigate to the new overlay for editing\n\t\t\tif ( onNavigateToEntityRecord ) {\n\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\tpostId: templatePart.id,\n\t\t\t\t\tpostType: 'wp_template_part',\n\t\t\t\t} );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\t// Error handling pattern matches CreateTemplatePartModalContents.\n\t\t\t// See: packages/fields/src/components/create-template-part-modal/index.tsx\n\t\t\t// The 'unknown_error' code check ensures generic error codes don't show\n\t\t\t// potentially confusing technical messages, instead showing a user-friendly fallback.\n\t\t\tconst errorMessage =\n\t\t\t\terror instanceof Error &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.message &&\n\t\t\t\terror.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while creating the overlay.' );\n\n\t\t\tcreateErrorNotice( errorMessage, { type: 'snackbar' } );\n\t\t} finally {\n\t\t\tsetIsCreating( false );\n\t\t}\n\t}, [\n\t\tcreateOverlayTemplatePart,\n\t\tsetAttributes,\n\t\tonNavigateToEntityRecord,\n\t\tcreateErrorNotice,\n\t] );\n\n\tconst isCreateButtonDisabled = isResolving || isCreating;\n\n\t// Build help text\n\tconst helpText = useMemo( () => {\n\t\tif ( overlayTemplateParts.length === 0 && hasResolved ) {\n\t\t\treturn __( 'No overlays found.' );\n\t\t}\n\t\treturn __( 'Select an overlay for navigation.' );\n\t}, [ overlayTemplateParts.length, hasResolved ] );\n\n\t// Tooltip/aria-label text for the edit button\n\tconst editButtonLabel = useMemo( () => {\n\t\treturn selectedTemplatePart\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: %s: Overlay title. */\n\t\t\t\t\t__( 'Edit overlay: %s' ),\n\t\t\t\t\tselectedTemplatePart.title?.rendered\n\t\t\t\t\t\t? decodeEntities( selectedTemplatePart.title.rendered )\n\t\t\t\t\t\t: selectedTemplatePart.slug\n\t\t\t )\n\t\t\t: __( 'Edit overlay' );\n\t}, [ selectedTemplatePart ] );\n\n\treturn (\n\t\t<div className=\"wp-block-navigation__overlay-selector\">\n\t\t\t<Button\n\t\t\t\tsize=\"small\"\n\t\t\t\ticon={ plus }\n\t\t\t\tonClick={ handleCreateOverlay }\n\t\t\t\tdisabled={ isCreateButtonDisabled }\n\t\t\t\taccessibleWhenDisabled\n\t\t\t\tisBusy={ isCreating }\n\t\t\t\tlabel={ __( 'Create new overlay template' ) }\n\t\t\t\tshowTooltip\n\t\t\t\tclassName=\"wp-block-navigation__overlay-create-button\"\n\t\t\t/>\n\t\t\t<HStack alignment=\"flex-start\">\n\t\t\t\t<FlexBlock>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Overlay template' ) }\n\t\t\t\t\t\tvalue={ overlay || '' }\n\t\t\t\t\t\toptions={ options }\n\t\t\t\t\t\tonChange={ handleSelectChange }\n\t\t\t\t\t\tdisabled={ isResolving }\n\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\thelp={ helpText }\n\t\t\t\t\t/>\n\t\t\t\t</FlexBlock>\n\t\t\t\t{ overlay && hasResolved && selectedTemplatePart && (\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tonClick={ handleEditClick }\n\t\t\t\t\t\t\tdisabled={ ! onNavigateToEntityRecord }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\tlabel={ editButtonLabel }\n\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\tclassName=\"wp-block-navigation__overlay-edit-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t</div>\n\t);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAA+C;AAC/C,uBAAiC;AACjC,kBAA4B;AAC5B,wBAMO;AACP,kBAA4B;AAC5B,2BAA+B;AAC/B,qBAAsC;AACtC,mBAAqB;AAKrB,qCAAqC;AACrC,gCAAyC;AA6KtC;AAlKY,SAAR,4BAA8C;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACD,GAAI;AACH,QAAM;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACD,QAAI,mCAAkB,YAAY,oBAAoB;AAAA,IACrD,UAAU;AAAA,EACX,CAAE;AAEF,QAAM,EAAE,kBAAkB,QAAI,yBAAa,eAAAA,KAAa;AAGxD,QAAM,CAAE,YAAY,aAAc,QAAI,yBAAU,KAAM;AAGtD,QAAM,2BAAuB,wBAAS,MAAM;AAC3C,QAAK,CAAE,eAAgB;AACtB,aAAO,CAAC;AAAA,IACT;AACA,WAAO,cAAc;AAAA,MACpB,CAAE,iBAAkB,aAAa,SAAS;AAAA,IAC3C;AAAA,EACD,GAAG,CAAE,aAAc,CAAE;AAGrB,QAAM,gCACL,0BAAAC,SAA8B,oBAAqB;AAGpD,QAAM,cAAU,wBAAS,MAAM;AAC9B,UAAM,cAAc;AAAA,MACnB;AAAA,QACC,WAAO,gBAAI,gBAAiB;AAAA,QAC5B,OAAO;AAAA,MACR;AAAA,IACD;AAEA,QAAK,CAAE,eAAe,aAAc;AACnC,aAAO;AAAA,IACR;AAEA,UAAM,sBAAsB,qBAAqB;AAAA,MAChD,CAAE,iBAAkB;AACnB,cAAM,qBAAiB;AAAA,UACtB,aAAa;AAAA,UACb,aAAa;AAAA,QACd;AACA,cAAM,QAAQ,aAAa,OAAO,eAC/B,qCAAgB,aAAa,MAAM,QAAS,IAC5C,aAAa;AAEhB,eAAO;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAEA,WAAO,CAAE,GAAG,aAAa,GAAG,mBAAoB;AAAA,EACjD,GAAG,CAAE,sBAAsB,aAAa,WAAY,CAAE;AAGtD,QAAM,2BAAuB,wBAAS,MAAM;AAC3C,QAAK,CAAE,WAAW,CAAE,sBAAuB;AAC1C,aAAO;AAAA,IACR;AACA,WAAO,qBAAqB,KAAM,CAAE,iBAAkB;AACrD,YAAM,qBAAiB;AAAA,QACtB,aAAa;AAAA,QACb,aAAa;AAAA,MACd;AACA,aAAO,mBAAmB;AAAA,IAC3B,CAAE;AAAA,EACH,GAAG,CAAE,SAAS,oBAAqB,CAAE;AAErC,QAAM,qBAAqB,CAAE,UAAW;AACvC,kBAAe;AAAA,MACd,SAAS,SAAS;AAAA,IACnB,CAAE;AAAA,EACH;AAEA,QAAM,kBAAkB,MAAM;AAC7B,QAAK,CAAE,WAAW,CAAE,0BAA2B;AAC9C;AAAA,IACD;AAEA,6BAA0B;AAAA,MACzB,QAAQ;AAAA,MACR,UAAU;AAAA,IACX,CAAE;AAAA,EACH;AAEA,QAAM,0BAAsB,4BAAa,YAAY;AACpD,QAAI;AACH,oBAAe,IAAK;AAEpB,YAAM,eAAe,MAAM,0BAA0B;AAErD,oBAAe;AAAA,QACd,SAAS,aAAa;AAAA,MACvB,CAAE;AAGF,UAAK,0BAA2B;AAC/B,iCAA0B;AAAA,UACzB,QAAQ,aAAa;AAAA,UACrB,UAAU;AAAA,QACX,CAAE;AAAA,MACH;AAAA,IACD,SAAU,OAAQ;AAKjB,YAAM,eACL,iBAAiB,SACjB,UAAU,SACV,MAAM,WACN,MAAM,SAAS,kBACZ,MAAM,cACN,gBAAI,+CAAgD;AAExD,wBAAmB,cAAc,EAAE,MAAM,WAAW,CAAE;AAAA,IACvD,UAAE;AACD,oBAAe,KAAM;AAAA,IACtB;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAEF,QAAM,yBAAyB,eAAe;AAG9C,QAAM,eAAW,wBAAS,MAAM;AAC/B,QAAK,qBAAqB,WAAW,KAAK,aAAc;AACvD,iBAAO,gBAAI,oBAAqB;AAAA,IACjC;AACA,eAAO,gBAAI,mCAAoC;AAAA,EAChD,GAAG,CAAE,qBAAqB,QAAQ,WAAY,CAAE;AAGhD,QAAM,sBAAkB,wBAAS,MAAM;AACtC,WAAO,2BACJ;AAAA;AAAA,UAEA,gBAAI,kBAAmB;AAAA,MACvB,qBAAqB,OAAO,eACzB,qCAAgB,qBAAqB,MAAM,QAAS,IACpD,qBAAqB;AAAA,IACxB,QACA,gBAAI,cAAe;AAAA,EACvB,GAAG,CAAE,oBAAqB,CAAE;AAE5B,SACC,6CAAC,SAAI,WAAU,yCACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACA,MAAK;AAAA,QACL,MAAO;AAAA,QACP,SAAU;AAAA,QACV,UAAW;AAAA,QACX,wBAAsB;AAAA,QACtB,QAAS;AAAA,QACT,WAAQ,gBAAI,6BAA8B;AAAA,QAC1C,aAAW;AAAA,QACX,WAAU;AAAA;AAAA,IACX;AAAA,IACA,6CAAC,kBAAAC,sBAAA,EAAO,WAAU,cACjB;AAAA,kDAAC,+BACA;AAAA,QAAC;AAAA;AAAA,UACA,uBAAqB;AAAA,UACrB,yBAAuB;AAAA,UACvB,WAAQ,gBAAI,kBAAmB;AAAA,UAC/B,OAAQ,WAAW;AAAA,UACnB;AAAA,UACA,UAAW;AAAA,UACX,UAAW;AAAA,UACX,wBAAsB;AAAA,UACtB,MAAO;AAAA;AAAA,MACR,GACD;AAAA,MACE,WAAW,eAAe,wBAC3B,4CAAC,8BACA;AAAA,QAAC;AAAA;AAAA,UACA,uBAAqB;AAAA,UACrB,SAAQ;AAAA,UACR,SAAU;AAAA,UACV,UAAW,CAAE;AAAA,UACb,wBAAsB;AAAA,UACtB,OAAQ;AAAA,UACR,aAAW;AAAA,UACX,WAAU;AAAA,UAER,8BAAI,MAAO;AAAA;AAAA,MACd,GACD;AAAA,OAEF;AAAA,KACD;AAEF;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useMemo, useState, useCallback } from '@wordpress/element';\nimport { useEntityRecords } from '@wordpress/core-data';\nimport { useDispatch } from '@wordpress/data';\nimport {\n\tSelectControl,\n\tButton,\n\tFlexBlock,\n\tFlexItem,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { createTemplatePartId } from '../../template-part/edit/utils/create-template-part-id';\nimport useCreateOverlayTemplatePart from './use-create-overlay';\nimport { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';\n\n/**\n * Overlay Template Part Selector component.\n *\n * @param {Object} props Component props.\n * @param {string} props.overlay Currently selected overlay template part ID.\n * @param {Function} props.setAttributes Function to update block attributes.\n * @param {Function} props.onNavigateToEntityRecord Function to navigate to template part editor.\n * @return {JSX.Element} The overlay template part selector component.\n */\nexport default function OverlayTemplatePartSelector( {\n\toverlay,\n\tsetAttributes,\n\tonNavigateToEntityRecord,\n} ) {\n\tconst {\n\t\trecords: templateParts,\n\t\tisResolving,\n\t\thasResolved,\n\t} = useEntityRecords( 'postType', 'wp_template_part', {\n\t\tper_page: -1,\n\t} );\n\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\t// Track if we're currently creating a new overlay\n\tconst [ isCreating, setIsCreating ] = useState( false );\n\n\t// Filter template parts by overlay area\n\tconst overlayTemplateParts = useMemo( () => {\n\t\tif ( ! templateParts ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn templateParts.filter(\n\t\t\t( templatePart ) =>\n\t\t\t\ttemplatePart.area === NAVIGATION_OVERLAY_TEMPLATE_PART_AREA\n\t\t);\n\t}, [ templateParts ] );\n\n\t// Hook to create overlay template part\n\tconst createOverlayTemplatePart =\n\t\tuseCreateOverlayTemplatePart( overlayTemplateParts );\n\n\t// Build options for SelectControl\n\tconst options = useMemo( () => {\n\t\tconst baseOptions = [\n\t\t\t{\n\t\t\t\tlabel: __( 'None (default)' ),\n\t\t\t\tvalue: '',\n\t\t\t},\n\t\t];\n\n\t\tif ( ! hasResolved || isResolving ) {\n\t\t\treturn baseOptions;\n\t\t}\n\n\t\tconst templatePartOptions = overlayTemplateParts.map(\n\t\t\t( templatePart ) => {\n\t\t\t\tconst templatePartId = createTemplatePartId(\n\t\t\t\t\ttemplatePart.theme,\n\t\t\t\t\ttemplatePart.slug\n\t\t\t\t);\n\t\t\t\tconst label = templatePart.title?.rendered\n\t\t\t\t\t? decodeEntities( templatePart.title.rendered )\n\t\t\t\t\t: templatePart.slug;\n\n\t\t\t\treturn {\n\t\t\t\t\tlabel,\n\t\t\t\t\tvalue: templatePartId,\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\n\t\treturn [ ...baseOptions, ...templatePartOptions ];\n\t}, [ overlayTemplateParts, hasResolved, isResolving ] );\n\n\t// Find the selected template part to get its title\n\tconst selectedTemplatePart = useMemo( () => {\n\t\tif ( ! overlay || ! overlayTemplateParts ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn overlayTemplateParts.find( ( templatePart ) => {\n\t\t\tconst templatePartId = createTemplatePartId(\n\t\t\t\ttemplatePart.theme,\n\t\t\t\ttemplatePart.slug\n\t\t\t);\n\t\t\treturn templatePartId === overlay;\n\t\t} );\n\t}, [ overlay, overlayTemplateParts ] );\n\n\tconst handleSelectChange = ( value ) => {\n\t\tsetAttributes( {\n\t\t\toverlay: value || undefined,\n\t\t} );\n\t};\n\n\tconst handleEditClick = () => {\n\t\tif ( ! overlay || ! onNavigateToEntityRecord ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonNavigateToEntityRecord( {\n\t\t\tpostId: overlay,\n\t\t\tpostType: 'wp_template_part',\n\t\t} );\n\t};\n\n\tconst handleCreateOverlay = useCallback( async () => {\n\t\ttry {\n\t\t\tsetIsCreating( true );\n\n\t\t\tconst templatePart = await createOverlayTemplatePart();\n\n\t\t\tsetAttributes( {\n\t\t\t\toverlay: templatePart.id,\n\t\t\t} );\n\n\t\t\t// Navigate to the new overlay for editing\n\t\t\tif ( onNavigateToEntityRecord ) {\n\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\tpostId: templatePart.id,\n\t\t\t\t\tpostType: 'wp_template_part',\n\t\t\t\t} );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\t// Error handling pattern matches CreateTemplatePartModalContents.\n\t\t\t// See: packages/fields/src/components/create-template-part-modal/index.tsx\n\t\t\t// The 'unknown_error' code check ensures generic error codes don't show\n\t\t\t// potentially confusing technical messages, instead showing a user-friendly fallback.\n\t\t\tconst errorMessage =\n\t\t\t\terror instanceof Error &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.message &&\n\t\t\t\terror.code !== 'unknown_error'\n\t\t\t\t\t? error.message\n\t\t\t\t\t: __( 'An error occurred while creating the overlay.' );\n\n\t\t\tcreateErrorNotice( errorMessage, { type: 'snackbar' } );\n\t\t} finally {\n\t\t\tsetIsCreating( false );\n\t\t}\n\t}, [\n\t\tcreateOverlayTemplatePart,\n\t\tsetAttributes,\n\t\tonNavigateToEntityRecord,\n\t\tcreateErrorNotice,\n\t] );\n\n\tconst isCreateButtonDisabled = isResolving || isCreating;\n\n\t// Build help text\n\tconst helpText = useMemo( () => {\n\t\tif ( overlayTemplateParts.length === 0 && hasResolved ) {\n\t\t\treturn __( 'No overlays found.' );\n\t\t}\n\t\treturn __( 'Select an overlay for navigation.' );\n\t}, [ overlayTemplateParts.length, hasResolved ] );\n\n\t// Tooltip/aria-label text for the edit button\n\tconst editButtonLabel = useMemo( () => {\n\t\treturn selectedTemplatePart\n\t\t\t? sprintf(\n\t\t\t\t\t/* translators: %s: Overlay title. */\n\t\t\t\t\t__( 'Edit overlay: %s' ),\n\t\t\t\t\tselectedTemplatePart.title?.rendered\n\t\t\t\t\t\t? decodeEntities( selectedTemplatePart.title.rendered )\n\t\t\t\t\t\t: selectedTemplatePart.slug\n\t\t\t )\n\t\t\t: __( 'Edit overlay' );\n\t}, [ selectedTemplatePart ] );\n\n\treturn (\n\t\t<div className=\"wp-block-navigation__overlay-selector\">\n\t\t\t<Button\n\t\t\t\tsize=\"small\"\n\t\t\t\ticon={ plus }\n\t\t\t\tonClick={ handleCreateOverlay }\n\t\t\t\tdisabled={ isCreateButtonDisabled }\n\t\t\t\taccessibleWhenDisabled\n\t\t\t\tisBusy={ isCreating }\n\t\t\t\tlabel={ __( 'Create new overlay template' ) }\n\t\t\t\tshowTooltip\n\t\t\t\tclassName=\"wp-block-navigation__overlay-create-button\"\n\t\t\t/>\n\t\t\t<HStack alignment=\"flex-start\">\n\t\t\t\t<FlexBlock>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\tlabel={ __( 'Overlay template' ) }\n\t\t\t\t\t\tvalue={ overlay || '' }\n\t\t\t\t\t\toptions={ options }\n\t\t\t\t\t\tonChange={ handleSelectChange }\n\t\t\t\t\t\tdisabled={ isResolving }\n\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\thelp={ helpText }\n\t\t\t\t\t/>\n\t\t\t\t</FlexBlock>\n\t\t\t\t{ overlay && hasResolved && selectedTemplatePart && (\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tonClick={ handleEditClick }\n\t\t\t\t\t\t\tdisabled={ ! onNavigateToEntityRecord }\n\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\tlabel={ editButtonLabel }\n\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\tclassName=\"wp-block-navigation__overlay-edit-button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Edit' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t) }\n\t\t\t</HStack>\n\t\t</div>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["noticesStore", "useCreateOverlayTemplatePart", "HStack"]
7
7
  }
@@ -28,6 +28,7 @@ var import_data = require("@wordpress/data");
28
28
  var import_core_data = require("@wordpress/core-data");
29
29
  var import_i18n = require("@wordpress/i18n");
30
30
  var import_utils = require("./utils.cjs");
31
+ var import_constants = require("../constants.cjs");
31
32
  function useCreateOverlayTemplatePart(overlayTemplateParts) {
32
33
  const { saveEntityRecord } = (0, import_data.useDispatch)(import_core_data.store);
33
34
  const createOverlayTemplatePart = (0, import_element.useCallback)(async () => {
@@ -45,7 +46,7 @@ function useCreateOverlayTemplatePart(overlayTemplateParts) {
45
46
  {
46
47
  slug: cleanSlug,
47
48
  title: uniqueTitle,
48
- area: "overlay"
49
+ area: import_constants.NAVIGATION_OVERLAY_TEMPLATE_PART_AREA
49
50
  },
50
51
  { throwOnError: true }
51
52
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/navigation/edit/use-create-overlay.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getUniqueTemplatePartTitle, getCleanTemplatePartSlug } from './utils';\n\n/**\n * Hook to create a new overlay template part.\n *\n * @param {Array} overlayTemplateParts Array of existing overlay template parts.\n * @return {function(): Promise<Object>} Function to create a new overlay template part.\n * The function returns a Promise that resolves to the created template part object.\n */\nexport default function useCreateOverlayTemplatePart( overlayTemplateParts ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tconst createOverlayTemplatePart = useCallback( async () => {\n\t\t// Generate unique name using only overlay area template parts\n\t\t// Filter to only include template parts with titles for uniqueness check\n\t\tconst templatePartsWithTitles = overlayTemplateParts.filter(\n\t\t\t( templatePart ) => templatePart.title?.rendered\n\t\t);\n\t\tconst uniqueTitle = getUniqueTemplatePartTitle(\n\t\t\t__( 'Overlay' ),\n\t\t\ttemplatePartsWithTitles\n\t\t);\n\t\tconst cleanSlug = getCleanTemplatePartSlug( uniqueTitle );\n\n\t\t// Create the template part\n\t\tconst templatePart = await saveEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\t{\n\t\t\t\tslug: cleanSlug,\n\t\t\t\ttitle: uniqueTitle,\n\t\t\t\tarea: 'overlay',\n\t\t\t},\n\t\t\t{ throwOnError: true }\n\t\t);\n\n\t\treturn templatePart;\n\t}, [ overlayTemplateParts, saveEntityRecord ] );\n\n\treturn createOverlayTemplatePart;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAA4B;AAC5B,kBAA4B;AAC5B,uBAAmC;AACnC,kBAAmB;AAKnB,mBAAqE;AAStD,SAAR,6BAA+C,sBAAuB;AAC5E,QAAM,EAAE,iBAAiB,QAAI,yBAAa,iBAAAA,KAAU;AAEpD,QAAM,gCAA4B,4BAAa,YAAY;AAG1D,UAAM,0BAA0B,qBAAqB;AAAA,MACpD,CAAEC,kBAAkBA,cAAa,OAAO;AAAA,IACzC;AACA,UAAM,kBAAc;AAAA,UACnB,gBAAI,SAAU;AAAA,MACd;AAAA,IACD;AACA,UAAM,gBAAY,uCAA0B,WAAY;AAGxD,UAAM,eAAe,MAAM;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA,EAAE,cAAc,KAAK;AAAA,IACtB;AAEA,WAAO;AAAA,EACR,GAAG,CAAE,sBAAsB,gBAAiB,CAAE;AAE9C,SAAO;AACR;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { getUniqueTemplatePartTitle, getCleanTemplatePartSlug } from './utils';\nimport { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';\n\n/**\n * Hook to create a new overlay template part.\n *\n * @param {Array} overlayTemplateParts Array of existing overlay template parts.\n * @return {function(): Promise<Object>} Function to create a new overlay template part.\n * The function returns a Promise that resolves to the created template part object.\n */\nexport default function useCreateOverlayTemplatePart( overlayTemplateParts ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tconst createOverlayTemplatePart = useCallback( async () => {\n\t\t// Generate unique name using only overlay area template parts\n\t\t// Filter to only include template parts with titles for uniqueness check\n\t\tconst templatePartsWithTitles = overlayTemplateParts.filter(\n\t\t\t( templatePart ) => templatePart.title?.rendered\n\t\t);\n\t\tconst uniqueTitle = getUniqueTemplatePartTitle(\n\t\t\t__( 'Overlay' ),\n\t\t\ttemplatePartsWithTitles\n\t\t);\n\t\tconst cleanSlug = getCleanTemplatePartSlug( uniqueTitle );\n\n\t\t// Create the template part\n\t\tconst templatePart = await saveEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\t{\n\t\t\t\tslug: cleanSlug,\n\t\t\t\ttitle: uniqueTitle,\n\t\t\t\tarea: NAVIGATION_OVERLAY_TEMPLATE_PART_AREA,\n\t\t\t},\n\t\t\t{ throwOnError: true }\n\t\t);\n\n\t\treturn templatePart;\n\t}, [ overlayTemplateParts, saveEntityRecord ] );\n\n\treturn createOverlayTemplatePart;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAA4B;AAC5B,kBAA4B;AAC5B,uBAAmC;AACnC,kBAAmB;AAKnB,mBAAqE;AACrE,uBAAsD;AASvC,SAAR,6BAA+C,sBAAuB;AAC5E,QAAM,EAAE,iBAAiB,QAAI,yBAAa,iBAAAA,KAAU;AAEpD,QAAM,gCAA4B,4BAAa,YAAY;AAG1D,UAAM,0BAA0B,qBAAqB;AAAA,MACpD,CAAEC,kBAAkBA,cAAa,OAAO;AAAA,IACzC;AACA,UAAM,kBAAc;AAAA,UACnB,gBAAI,SAAU;AAAA,MACd;AAAA,IACD;AACA,UAAM,gBAAY,uCAA0B,WAAY;AAGxD,UAAM,eAAe,MAAM;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,MACP;AAAA,MACA,EAAE,cAAc,KAAK;AAAA,IACtB;AAEA,WAAO;AAAA,EACR,GAAG,CAAE,sBAAsB,gBAAiB,CAAE;AAE9C,SAAO;AACR;",
6
6
  "names": ["coreStore", "templatePart"]
7
7
  }
@@ -11,6 +11,18 @@ var focusableSelectors = [
11
11
  "[contenteditable]",
12
12
  '[tabindex]:not([tabindex^="-"])'
13
13
  ];
14
+ function getFocusableElements(ref) {
15
+ const focusableElements = ref.querySelectorAll(focusableSelectors);
16
+ return Array.from(focusableElements).filter((element) => {
17
+ if (typeof element.checkVisibility === "function") {
18
+ return element.checkVisibility({
19
+ checkOpacity: false,
20
+ checkVisibilityCSS: true
21
+ });
22
+ }
23
+ return element.offsetParent !== null;
24
+ });
25
+ }
14
26
  document.addEventListener("click", () => {
15
27
  });
16
28
  var { state, actions } = (0, import_interactivity.store)(
@@ -136,7 +148,7 @@ var { state, actions } = (0, import_interactivity.store)(
136
148
  const ctx = (0, import_interactivity.getContext)();
137
149
  const { ref } = (0, import_interactivity.getElement)();
138
150
  if (state.isMenuOpen) {
139
- const focusableElements = ref.querySelectorAll(focusableSelectors);
151
+ const focusableElements = getFocusableElements(ref);
140
152
  ctx.modal = ref;
141
153
  ctx.firstFocusableElement = focusableElements[0];
142
154
  ctx.lastFocusableElement = focusableElements[focusableElements.length - 1];
@@ -145,7 +157,7 @@ var { state, actions } = (0, import_interactivity.store)(
145
157
  focusFirstElement() {
146
158
  const { ref } = (0, import_interactivity.getElement)();
147
159
  if (state.isMenuOpen) {
148
- const focusableElements = ref.querySelectorAll(focusableSelectors);
160
+ const focusableElements = getFocusableElements(ref);
149
161
  focusableElements?.[0]?.focus();
150
162
  }
151
163
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/navigation/view.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tstore,\n\tgetContext,\n\tgetElement,\n\twithSyncEvent,\n} from '@wordpress/interactivity';\n\nconst focusableSelectors = [\n\t'a[href]',\n\t'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n\t'select:not([disabled]):not([aria-hidden])',\n\t'textarea:not([disabled]):not([aria-hidden])',\n\t'button:not([disabled]):not([aria-hidden])',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex^=\"-\"])',\n];\n\n// This is a fix for Safari in iOS/iPadOS. Without it, Safari doesn't focus out\n// when the user taps in the body. It can be removed once we add an overlay to\n// capture the clicks, instead of relying on the focusout event.\ndocument.addEventListener( 'click', () => {} );\n\nconst { state, actions } = store(\n\t'core/navigation',\n\t{\n\t\tstate: {\n\t\t\tget roleAttribute() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay' && state.isMenuOpen\n\t\t\t\t\t? 'dialog'\n\t\t\t\t\t: null;\n\t\t\t},\n\t\t\tget ariaModal() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay' && state.isMenuOpen\n\t\t\t\t\t? 'true'\n\t\t\t\t\t: null;\n\t\t\t},\n\t\t\tget ariaLabel() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay' && state.isMenuOpen\n\t\t\t\t\t? ctx.ariaLabel\n\t\t\t\t\t: null;\n\t\t\t},\n\t\t\tget isMenuOpen() {\n\t\t\t\t// The menu is opened if either `click`, `hover` or `focus` is true.\n\t\t\t\treturn (\n\t\t\t\t\tObject.values( state.menuOpenedBy ).filter( Boolean )\n\t\t\t\t\t\t.length > 0\n\t\t\t\t);\n\t\t\t},\n\t\t\tget menuOpenedBy() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay'\n\t\t\t\t\t? ctx.overlayOpenedBy\n\t\t\t\t\t: ctx.submenuOpenedBy;\n\t\t\t},\n\t\t},\n\t\tactions: {\n\t\t\topenMenuOnHover() {\n\t\t\t\tconst { type, overlayOpenedBy } = getContext();\n\t\t\t\tif (\n\t\t\t\t\ttype === 'submenu' &&\n\t\t\t\t\t// Only open on hover if the overlay is closed.\n\t\t\t\t\tObject.values( overlayOpenedBy || {} ).filter( Boolean )\n\t\t\t\t\t\t.length === 0\n\t\t\t\t) {\n\t\t\t\t\tactions.openMenu( 'hover' );\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseMenuOnHover() {\n\t\t\t\tconst { type, overlayOpenedBy } = getContext();\n\t\t\t\tif (\n\t\t\t\t\ttype === 'submenu' &&\n\t\t\t\t\t// Only close on hover if the overlay is closed.\n\t\t\t\t\tObject.values( overlayOpenedBy || {} ).filter( Boolean )\n\t\t\t\t\t\t.length === 0\n\t\t\t\t) {\n\t\t\t\t\tactions.closeMenu( 'hover' );\n\t\t\t\t}\n\t\t\t},\n\t\t\topenMenuOnClick() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\tctx.previousFocus = ref;\n\t\t\t\tactions.openMenu( 'click' );\n\t\t\t},\n\t\t\tcloseMenuOnClick() {\n\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t},\n\t\t\topenMenuOnFocus() {\n\t\t\t\tactions.openMenu( 'focus' );\n\t\t\t},\n\t\t\ttoggleMenuOnClick() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\t// Safari won't send focus to the clicked element, so we need to manually place it: https://bugs.webkit.org/show_bug.cgi?id=22261\n\t\t\t\tif ( window.document.activeElement !== ref ) {\n\t\t\t\t\tref.focus();\n\t\t\t\t}\n\t\t\t\tconst { menuOpenedBy } = state;\n\t\t\t\tif ( menuOpenedBy.click || menuOpenedBy.focus ) {\n\t\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t\t} else {\n\t\t\t\t\tctx.previousFocus = ref;\n\t\t\t\t\tactions.openMenu( 'click' );\n\t\t\t\t}\n\t\t\t},\n\t\t\thandleMenuKeydown: withSyncEvent( ( event ) => {\n\t\t\t\tconst { type, firstFocusableElement, lastFocusableElement } =\n\t\t\t\t\tgetContext();\n\t\t\t\tif ( state.menuOpenedBy.click ) {\n\t\t\t\t\t// If Escape close the menu.\n\t\t\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\t\t\tevent.stopPropagation(); // Keeps ancestor menus open.\n\t\t\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Trap focus if it is an overlay (main menu).\n\t\t\t\t\tif ( type === 'overlay' && event.key === 'Tab' ) {\n\t\t\t\t\t\t// If shift + tab it change the direction.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.shiftKey &&\n\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\tfirstFocusableElement\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tlastFocusableElement.focus();\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\tlastFocusableElement\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tfirstFocusableElement.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ),\n\t\t\thandleMenuFocusout: withSyncEvent( ( event ) => {\n\t\t\t\tconst { modal, type } = getContext();\n\t\t\t\t// If focus is outside modal, and in the document, close menu\n\t\t\t\t// event.target === The element losing focus\n\t\t\t\t// event.relatedTarget === The element receiving focus (if any)\n\t\t\t\t// When focusout is outside the document,\n\t\t\t\t// `window.document.activeElement` doesn't change.\n\n\t\t\t\t// The event.relatedTarget is null when something outside the navigation menu is clicked. This is only necessary for Safari.\n\t\t\t\tif (\n\t\t\t\t\tevent.relatedTarget === null ||\n\t\t\t\t\t( ! modal?.contains( event.relatedTarget ) &&\n\t\t\t\t\t\tevent.target !== window.document.activeElement &&\n\t\t\t\t\t\ttype === 'submenu' )\n\t\t\t\t) {\n\t\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t\t}\n\t\t\t} ),\n\n\t\t\topenMenu( menuOpenedOn = 'click' ) {\n\t\t\t\tconst { type } = getContext();\n\t\t\t\tstate.menuOpenedBy[ menuOpenedOn ] = true;\n\t\t\t\tif ( type === 'overlay' ) {\n\t\t\t\t\t// Add a `has-modal-open` class to the <html> root.\n\t\t\t\t\tdocument.documentElement.classList.add( 'has-modal-open' );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcloseMenu( menuClosedOn = 'click' ) {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tstate.menuOpenedBy[ menuClosedOn ] = false;\n\t\t\t\t// Check if the menu is still open or not.\n\t\t\t\tif ( ! state.isMenuOpen ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tctx.modal?.contains( window.document.activeElement )\n\t\t\t\t\t) {\n\t\t\t\t\t\tctx.previousFocus?.focus();\n\t\t\t\t\t}\n\t\t\t\t\tctx.modal = null;\n\t\t\t\t\tctx.previousFocus = null;\n\t\t\t\t\tif ( ctx.type === 'overlay' ) {\n\t\t\t\t\t\tdocument.documentElement.classList.remove(\n\t\t\t\t\t\t\t'has-modal-open'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tcallbacks: {\n\t\t\tinitMenu() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\tif ( state.isMenuOpen ) {\n\t\t\t\t\tconst focusableElements =\n\t\t\t\t\t\tref.querySelectorAll( focusableSelectors );\n\t\t\t\t\tctx.modal = ref;\n\t\t\t\t\tctx.firstFocusableElement = focusableElements[ 0 ];\n\t\t\t\t\tctx.lastFocusableElement =\n\t\t\t\t\t\tfocusableElements[ focusableElements.length - 1 ];\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocusFirstElement() {\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\tif ( state.isMenuOpen ) {\n\t\t\t\t\tconst focusableElements =\n\t\t\t\t\t\tref.querySelectorAll( focusableSelectors );\n\t\t\t\t\tfocusableElements?.[ 0 ]?.focus();\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\t{ lock: true }\n);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tstore,\n\tgetContext,\n\tgetElement,\n\twithSyncEvent,\n} from '@wordpress/interactivity';\n\nconst focusableSelectors = [\n\t'a[href]',\n\t'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\n\t'select:not([disabled]):not([aria-hidden])',\n\t'textarea:not([disabled]):not([aria-hidden])',\n\t'button:not([disabled]):not([aria-hidden])',\n\t'[contenteditable]',\n\t'[tabindex]:not([tabindex^=\"-\"])',\n];\n\n/**\n * Gets all visible focusable elements within a container.\n * Filters out elements that are hidden.\n *\n * @param {HTMLElement} ref - The container element to search within\n * @return {HTMLElement[]} Array of visible focusable elements\n */\nfunction getFocusableElements( ref ) {\n\tconst focusableElements = ref.querySelectorAll( focusableSelectors );\n\treturn Array.from( focusableElements ).filter( ( element ) => {\n\t\t// Use modern checkVisibility API if available (Chrome 105+, Firefox 106+, Safari 17.4+)\n\t\tif ( typeof element.checkVisibility === 'function' ) {\n\t\t\treturn element.checkVisibility( {\n\t\t\t\tcheckOpacity: false,\n\t\t\t\tcheckVisibilityCSS: true,\n\t\t\t} );\n\t\t}\n\t\t// Fallback for older browsers\n\t\treturn element.offsetParent !== null;\n\t} );\n}\n\n// This is a fix for Safari in iOS/iPadOS. Without it, Safari doesn't focus out\n// when the user taps in the body. It can be removed once we add an overlay to\n// capture the clicks, instead of relying on the focusout event.\ndocument.addEventListener( 'click', () => {} );\n\nconst { state, actions } = store(\n\t'core/navigation',\n\t{\n\t\tstate: {\n\t\t\tget roleAttribute() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay' && state.isMenuOpen\n\t\t\t\t\t? 'dialog'\n\t\t\t\t\t: null;\n\t\t\t},\n\t\t\tget ariaModal() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay' && state.isMenuOpen\n\t\t\t\t\t? 'true'\n\t\t\t\t\t: null;\n\t\t\t},\n\t\t\tget ariaLabel() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay' && state.isMenuOpen\n\t\t\t\t\t? ctx.ariaLabel\n\t\t\t\t\t: null;\n\t\t\t},\n\t\t\tget isMenuOpen() {\n\t\t\t\t// The menu is opened if either `click`, `hover` or `focus` is true.\n\t\t\t\treturn (\n\t\t\t\t\tObject.values( state.menuOpenedBy ).filter( Boolean )\n\t\t\t\t\t\t.length > 0\n\t\t\t\t);\n\t\t\t},\n\t\t\tget menuOpenedBy() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\treturn ctx.type === 'overlay'\n\t\t\t\t\t? ctx.overlayOpenedBy\n\t\t\t\t\t: ctx.submenuOpenedBy;\n\t\t\t},\n\t\t},\n\t\tactions: {\n\t\t\topenMenuOnHover() {\n\t\t\t\tconst { type, overlayOpenedBy } = getContext();\n\t\t\t\tif (\n\t\t\t\t\ttype === 'submenu' &&\n\t\t\t\t\t// Only open on hover if the overlay is closed.\n\t\t\t\t\tObject.values( overlayOpenedBy || {} ).filter( Boolean )\n\t\t\t\t\t\t.length === 0\n\t\t\t\t) {\n\t\t\t\t\tactions.openMenu( 'hover' );\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseMenuOnHover() {\n\t\t\t\tconst { type, overlayOpenedBy } = getContext();\n\t\t\t\tif (\n\t\t\t\t\ttype === 'submenu' &&\n\t\t\t\t\t// Only close on hover if the overlay is closed.\n\t\t\t\t\tObject.values( overlayOpenedBy || {} ).filter( Boolean )\n\t\t\t\t\t\t.length === 0\n\t\t\t\t) {\n\t\t\t\t\tactions.closeMenu( 'hover' );\n\t\t\t\t}\n\t\t\t},\n\t\t\topenMenuOnClick() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\tctx.previousFocus = ref;\n\t\t\t\tactions.openMenu( 'click' );\n\t\t\t},\n\t\t\tcloseMenuOnClick() {\n\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t},\n\t\t\topenMenuOnFocus() {\n\t\t\t\tactions.openMenu( 'focus' );\n\t\t\t},\n\t\t\ttoggleMenuOnClick() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\t// Safari won't send focus to the clicked element, so we need to manually place it: https://bugs.webkit.org/show_bug.cgi?id=22261\n\t\t\t\tif ( window.document.activeElement !== ref ) {\n\t\t\t\t\tref.focus();\n\t\t\t\t}\n\t\t\t\tconst { menuOpenedBy } = state;\n\t\t\t\tif ( menuOpenedBy.click || menuOpenedBy.focus ) {\n\t\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t\t} else {\n\t\t\t\t\tctx.previousFocus = ref;\n\t\t\t\t\tactions.openMenu( 'click' );\n\t\t\t\t}\n\t\t\t},\n\t\t\thandleMenuKeydown: withSyncEvent( ( event ) => {\n\t\t\t\tconst { type, firstFocusableElement, lastFocusableElement } =\n\t\t\t\t\tgetContext();\n\t\t\t\tif ( state.menuOpenedBy.click ) {\n\t\t\t\t\t// If Escape close the menu.\n\t\t\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\t\t\tevent.stopPropagation(); // Keeps ancestor menus open.\n\t\t\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Trap focus if it is an overlay (main menu).\n\t\t\t\t\tif ( type === 'overlay' && event.key === 'Tab' ) {\n\t\t\t\t\t\t// If shift + tab it change the direction.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.shiftKey &&\n\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\tfirstFocusableElement\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tlastFocusableElement.focus();\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t! event.shiftKey &&\n\t\t\t\t\t\t\twindow.document.activeElement ===\n\t\t\t\t\t\t\t\tlastFocusableElement\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tfirstFocusableElement.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ),\n\t\t\thandleMenuFocusout: withSyncEvent( ( event ) => {\n\t\t\t\tconst { modal, type } = getContext();\n\t\t\t\t// If focus is outside modal, and in the document, close menu\n\t\t\t\t// event.target === The element losing focus\n\t\t\t\t// event.relatedTarget === The element receiving focus (if any)\n\t\t\t\t// When focusout is outside the document,\n\t\t\t\t// `window.document.activeElement` doesn't change.\n\n\t\t\t\t// The event.relatedTarget is null when something outside the navigation menu is clicked. This is only necessary for Safari.\n\t\t\t\tif (\n\t\t\t\t\tevent.relatedTarget === null ||\n\t\t\t\t\t( ! modal?.contains( event.relatedTarget ) &&\n\t\t\t\t\t\tevent.target !== window.document.activeElement &&\n\t\t\t\t\t\ttype === 'submenu' )\n\t\t\t\t) {\n\t\t\t\t\tactions.closeMenu( 'click' );\n\t\t\t\t\tactions.closeMenu( 'focus' );\n\t\t\t\t}\n\t\t\t} ),\n\n\t\t\topenMenu( menuOpenedOn = 'click' ) {\n\t\t\t\tconst { type } = getContext();\n\t\t\t\tstate.menuOpenedBy[ menuOpenedOn ] = true;\n\t\t\t\tif ( type === 'overlay' ) {\n\t\t\t\t\t// Add a `has-modal-open` class to the <html> root.\n\t\t\t\t\tdocument.documentElement.classList.add( 'has-modal-open' );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcloseMenu( menuClosedOn = 'click' ) {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tstate.menuOpenedBy[ menuClosedOn ] = false;\n\t\t\t\t// Check if the menu is still open or not.\n\t\t\t\tif ( ! state.isMenuOpen ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tctx.modal?.contains( window.document.activeElement )\n\t\t\t\t\t) {\n\t\t\t\t\t\tctx.previousFocus?.focus();\n\t\t\t\t\t}\n\t\t\t\t\tctx.modal = null;\n\t\t\t\t\tctx.previousFocus = null;\n\t\t\t\t\tif ( ctx.type === 'overlay' ) {\n\t\t\t\t\t\tdocument.documentElement.classList.remove(\n\t\t\t\t\t\t\t'has-modal-open'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tcallbacks: {\n\t\t\tinitMenu() {\n\t\t\t\tconst ctx = getContext();\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\tif ( state.isMenuOpen ) {\n\t\t\t\t\tconst focusableElements = getFocusableElements( ref );\n\t\t\t\t\tctx.modal = ref;\n\t\t\t\t\tctx.firstFocusableElement = focusableElements[ 0 ];\n\t\t\t\t\tctx.lastFocusableElement =\n\t\t\t\t\t\tfocusableElements[ focusableElements.length - 1 ];\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocusFirstElement() {\n\t\t\t\tconst { ref } = getElement();\n\t\t\t\tif ( state.isMenuOpen ) {\n\t\t\t\t\tconst focusableElements = getFocusableElements( ref );\n\t\t\t\t\tfocusableElements?.[ 0 ]?.focus();\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\t{ lock: true }\n);\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -34,10 +34,12 @@ __export(private_apis_exports, {
34
34
  });
35
35
  module.exports = __toCommonJS(private_apis_exports);
36
36
  var import_block_keyboard_shortcuts = __toESM(require("./block-keyboard-shortcuts/index.cjs"));
37
+ var import_constants = require("./navigation/constants.cjs");
37
38
  var import_lock_unlock = require("./lock-unlock.cjs");
38
39
  var privateApis = {};
39
40
  (0, import_lock_unlock.lock)(privateApis, {
40
- BlockKeyboardShortcuts: import_block_keyboard_shortcuts.default
41
+ BlockKeyboardShortcuts: import_block_keyboard_shortcuts.default,
42
+ NAVIGATION_OVERLAY_TEMPLATE_PART_AREA: import_constants.NAVIGATION_OVERLAY_TEMPLATE_PART_AREA
41
43
  });
42
44
  // Annotate the CommonJS export names for ESM import in node:
43
45
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/private-apis.js"],
4
- "sourcesContent": ["/**\n * Internal dependencies\n */\nimport { default as BlockKeyboardShortcuts } from './block-keyboard-shortcuts';\nimport { lock } from './lock-unlock';\n\n/**\n * @private\n */\nexport const privateApis = {};\nlock( privateApis, {\n\tBlockKeyboardShortcuts,\n} );\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,sCAAkD;AAClD,yBAAqB;AAKd,IAAM,cAAc,CAAC;AAAA,IAC5B,yBAAM,aAAa;AAAA,EAClB,wDAAAA;AACD,CAAE;",
4
+ "sourcesContent": ["/**\n * Internal dependencies\n */\nimport { default as BlockKeyboardShortcuts } from './block-keyboard-shortcuts';\nimport { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from './navigation/constants';\nimport { lock } from './lock-unlock';\n\n/**\n * @private\n */\nexport const privateApis = {};\nlock( privateApis, {\n\tBlockKeyboardShortcuts,\n\tNAVIGATION_OVERLAY_TEMPLATE_PART_AREA,\n} );\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,sCAAkD;AAClD,uBAAsD;AACtD,yBAAqB;AAKd,IAAM,cAAc,CAAC;AAAA,IAC5B,yBAAM,aAAa;AAAA,EAClB,wDAAAA;AAAA,EACA;AACD,CAAE;",
6
6
  "names": ["BlockKeyboardShortcuts"]
7
7
  }
@@ -149,12 +149,36 @@ var transforms = {
149
149
  {
150
150
  type: "block",
151
151
  blocks: ["core/paragraph"],
152
- transform: ({ citation }, innerBlocks) => import_block_editor.RichText.isEmpty(citation) ? innerBlocks : [
153
- ...innerBlocks,
154
- (0, import_blocks.createBlock)("core/paragraph", {
155
- content: citation
156
- })
157
- ]
152
+ isMatch: ({ citation }, block) => {
153
+ const innerBlocks = block.innerBlocks;
154
+ if (!innerBlocks.length) {
155
+ return !import_block_editor.RichText.isEmpty(citation);
156
+ }
157
+ return innerBlocks.every((innerBlock) => {
158
+ if (innerBlock.name === "core/paragraph") {
159
+ return true;
160
+ }
161
+ const converted = (0, import_blocks.switchToBlockType)(
162
+ innerBlock,
163
+ "core/paragraph"
164
+ );
165
+ return converted !== null;
166
+ });
167
+ },
168
+ transform: ({ citation }, innerBlocks) => {
169
+ const paragraphs = innerBlocks.flatMap((innerBlock) => {
170
+ if (innerBlock.name === "core/paragraph") {
171
+ return innerBlock;
172
+ }
173
+ return (0, import_blocks.switchToBlockType)(innerBlock, "core/paragraph") || [];
174
+ });
175
+ return import_block_editor.RichText.isEmpty(citation) ? paragraphs : [
176
+ ...paragraphs,
177
+ (0, import_blocks.createBlock)("core/paragraph", {
178
+ content: citation
179
+ })
180
+ ];
181
+ }
158
182
  },
159
183
  {
160
184
  type: "block",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/quote/transforms.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { RichText } from '@wordpress/block-editor';\nimport { createBlock, switchToBlockType } from '@wordpress/blocks';\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/verse' ],\n\t\t\ttransform: ( { content } ) => {\n\t\t\t\treturn createBlock( 'core/quote', {}, [\n\t\t\t\t\tcreateBlock( 'core/paragraph', { content } ),\n\t\t\t\t] );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/pullquote' ],\n\t\t\ttransform: ( {\n\t\t\t\tvalue,\n\t\t\t\talign,\n\t\t\t\tcitation,\n\t\t\t\tanchor,\n\t\t\t\tfontSize,\n\t\t\t\tstyle,\n\t\t\t} ) => {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/quote',\n\t\t\t\t\t{\n\t\t\t\t\t\talign,\n\t\t\t\t\t\tcitation,\n\t\t\t\t\t\tanchor,\n\t\t\t\t\t\tfontSize,\n\t\t\t\t\t\tstyle,\n\t\t\t\t\t},\n\t\t\t\t\t[ createBlock( 'core/paragraph', { content: value } ) ]\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'prefix',\n\t\t\tprefix: '>',\n\t\t\ttransform: ( content ) =>\n\t\t\t\tcreateBlock( 'core/quote', {}, [\n\t\t\t\t\tcreateBlock( 'core/paragraph', { content } ),\n\t\t\t\t] ),\n\t\t},\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tschema: () => ( {\n\t\t\t\tblockquote: {\n\t\t\t\t\tchildren: '*',\n\t\t\t\t},\n\t\t\t} ),\n\t\t\tselector: 'blockquote',\n\t\t\ttransform: ( node, handler ) => {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/quote',\n\t\t\t\t\t// Don't try to parse any `cite` out of this content.\n\t\t\t\t\t// * There may be more than one cite.\n\t\t\t\t\t// * There may be more attribution text than just the cite.\n\t\t\t\t\t// * If the cite is nested in the quoted text, it's wrong to\n\t\t\t\t\t// remove it.\n\t\t\t\t\t{},\n\t\t\t\t\thandler( {\n\t\t\t\t\t\tHTML: node.innerHTML,\n\t\t\t\t\t\tmode: 'BLOCKS',\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tisMultiBlock: true,\n\t\t\tblocks: [ '*' ],\n\t\t\tisMatch: ( {}, blocks ) => {\n\t\t\t\t// When a single block is selected make the transformation\n\t\t\t\t// available only to specific blocks that make sense.\n\t\t\t\tif ( blocks.length === 1 ) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t'core/paragraph',\n\t\t\t\t\t\t'core/heading',\n\t\t\t\t\t\t'core/list',\n\t\t\t\t\t\t'core/pullquote',\n\t\t\t\t\t].includes( blocks[ 0 ].name );\n\t\t\t\t}\n\t\t\t\treturn ! blocks.some( ( { name } ) => name === 'core/quote' );\n\t\t\t},\n\t\t\t__experimentalConvert: ( blocks ) =>\n\t\t\t\tcreateBlock(\n\t\t\t\t\t'core/quote',\n\t\t\t\t\t{},\n\t\t\t\t\tblocks.map( ( block ) =>\n\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\tblock.attributes,\n\t\t\t\t\t\t\tblock.innerBlocks\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t},\n\t],\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/verse' ],\n\t\t\tisMatch: ( {}, block ) => {\n\t\t\t\treturn block.innerBlocks.every( ( innerBlock ) => {\n\t\t\t\t\t// Paragraphs are already in the target format\n\t\t\t\t\tif ( innerBlock.name === 'core/paragraph' ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if other blocks can be converted to paragraphs\n\t\t\t\t\tconst converted = switchToBlockType(\n\t\t\t\t\t\tinnerBlock,\n\t\t\t\t\t\t'core/paragraph'\n\t\t\t\t\t);\n\t\t\t\t\treturn converted !== null;\n\t\t\t\t} );\n\t\t\t},\n\t\t\ttransform: ( {}, innerBlocks ) => {\n\t\t\t\tconst paragraphs = innerBlocks.flatMap( ( innerBlock ) => {\n\t\t\t\t\t// If already a paragraph, use it directly\n\t\t\t\t\tif ( innerBlock.name === 'core/paragraph' ) {\n\t\t\t\t\t\treturn innerBlock;\n\t\t\t\t\t}\n\t\t\t\t\t// Otherwise convert to paragraph\n\t\t\t\t\treturn (\n\t\t\t\t\t\tswitchToBlockType( innerBlock, 'core/paragraph' ) || []\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t\tconst content = paragraphs\n\t\t\t\t\t.map( ( { attributes } ) => attributes.content || '' )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t.join( '<br>' );\n\t\t\t\treturn createBlock( 'core/verse', { content } );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/paragraph' ],\n\t\t\ttransform: ( { citation }, innerBlocks ) =>\n\t\t\t\tRichText.isEmpty( citation )\n\t\t\t\t\t? innerBlocks\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t...innerBlocks,\n\t\t\t\t\t\t\tcreateBlock( 'core/paragraph', {\n\t\t\t\t\t\t\t\tcontent: citation,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ],\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/group' ],\n\t\t\ttransform: ( { citation, anchor }, innerBlocks ) =>\n\t\t\t\tcreateBlock(\n\t\t\t\t\t'core/group',\n\t\t\t\t\t{ anchor },\n\t\t\t\t\tRichText.isEmpty( citation )\n\t\t\t\t\t\t? innerBlocks\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t...innerBlocks,\n\t\t\t\t\t\t\t\tcreateBlock( 'core/paragraph', {\n\t\t\t\t\t\t\t\t\tcontent: citation,\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t ]\n\t\t\t\t),\n\t\t},\n\t],\n\tungroup: ( { citation }, innerBlocks ) =>\n\t\tRichText.isEmpty( citation )\n\t\t\t? innerBlocks\n\t\t\t: [\n\t\t\t\t\t...innerBlocks,\n\t\t\t\t\tcreateBlock( 'core/paragraph', {\n\t\t\t\t\t\tcontent: citation,\n\t\t\t\t\t} ),\n\t\t\t ],\n};\n\nexport default transforms;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAAyB;AACzB,oBAA+C;AAE/C,IAAM,aAAa;AAAA,EAClB,MAAM;AAAA,IACL;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,YAAa;AAAA,MACvB,WAAW,CAAE,EAAE,QAAQ,MAAO;AAC7B,mBAAO,2BAAa,cAAc,CAAC,GAAG;AAAA,cACrC,2BAAa,kBAAkB,EAAE,QAAQ,CAAE;AAAA,QAC5C,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,gBAAiB;AAAA,MAC3B,WAAW,CAAE;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,MAAO;AACN,mBAAO;AAAA,UACN;AAAA,UACA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,UACA,KAAE,2BAAa,kBAAkB,EAAE,SAAS,MAAM,CAAE,CAAE;AAAA,QACvD;AAAA,MACD;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,CAAE,gBACZ,2BAAa,cAAc,CAAC,GAAG;AAAA,YAC9B,2BAAa,kBAAkB,EAAE,QAAQ,CAAE;AAAA,MAC5C,CAAE;AAAA,IACJ;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,OAAQ;AAAA,QACf,YAAY;AAAA,UACX,UAAU;AAAA,QACX;AAAA,MACD;AAAA,MACA,UAAU;AAAA,MACV,WAAW,CAAE,MAAM,YAAa;AAC/B,mBAAO;AAAA,UACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMA,CAAC;AAAA,UACD,QAAS;AAAA,YACR,MAAM,KAAK;AAAA,YACX,MAAM;AAAA,UACP,CAAE;AAAA,QACH;AAAA,MACD;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,cAAc;AAAA,MACd,QAAQ,CAAE,GAAI;AAAA,MACd,SAAS,CAAE,CAAC,GAAG,WAAY;AAG1B,YAAK,OAAO,WAAW,GAAI;AAC1B,iBAAO;AAAA,YACN;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,EAAE,SAAU,OAAQ,CAAE,EAAE,IAAK;AAAA,QAC9B;AACA,eAAO,CAAE,OAAO,KAAM,CAAE,EAAE,KAAK,MAAO,SAAS,YAAa;AAAA,MAC7D;AAAA,MACA,uBAAuB,CAAE,eACxB;AAAA,QACC;AAAA,QACA,CAAC;AAAA,QACD,OAAO;AAAA,UAAK,CAAE,cACb;AAAA,YACC,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACP;AAAA,QACD;AAAA,MACD;AAAA,IACF;AAAA,EACD;AAAA,EACA,IAAI;AAAA,IACH;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,YAAa;AAAA,MACvB,SAAS,CAAE,CAAC,GAAG,UAAW;AACzB,eAAO,MAAM,YAAY,MAAO,CAAE,eAAgB;AAEjD,cAAK,WAAW,SAAS,kBAAmB;AAC3C,mBAAO;AAAA,UACR;AAEA,gBAAM,gBAAY;AAAA,YACjB;AAAA,YACA;AAAA,UACD;AACA,iBAAO,cAAc;AAAA,QACtB,CAAE;AAAA,MACH;AAAA,MACA,WAAW,CAAE,CAAC,GAAG,gBAAiB;AACjC,cAAM,aAAa,YAAY,QAAS,CAAE,eAAgB;AAEzD,cAAK,WAAW,SAAS,kBAAmB;AAC3C,mBAAO;AAAA,UACR;AAEA,qBACC,iCAAmB,YAAY,gBAAiB,KAAK,CAAC;AAAA,QAExD,CAAE;AACF,cAAM,UAAU,WACd,IAAK,CAAE,EAAE,WAAW,MAAO,WAAW,WAAW,EAAG,EACpD,OAAQ,OAAQ,EAChB,KAAM,MAAO;AACf,mBAAO,2BAAa,cAAc,EAAE,QAAQ,CAAE;AAAA,MAC/C;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,gBAAiB;AAAA,MAC3B,WAAW,CAAE,EAAE,SAAS,GAAG,gBAC1B,6BAAS,QAAS,QAAS,IACxB,cACA;AAAA,QACA,GAAG;AAAA,YACH,2BAAa,kBAAkB;AAAA,UAC9B,SAAS;AAAA,QACV,CAAE;AAAA,MACF;AAAA,IACL;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,YAAa;AAAA,MACvB,WAAW,CAAE,EAAE,UAAU,OAAO,GAAG,oBAClC;AAAA,QACC;AAAA,QACA,EAAE,OAAO;AAAA,QACT,6BAAS,QAAS,QAAS,IACxB,cACA;AAAA,UACA,GAAG;AAAA,cACH,2BAAa,kBAAkB;AAAA,YAC9B,SAAS;AAAA,UACV,CAAE;AAAA,QACF;AAAA,MACJ;AAAA,IACF;AAAA,EACD;AAAA,EACA,SAAS,CAAE,EAAE,SAAS,GAAG,gBACxB,6BAAS,QAAS,QAAS,IACxB,cACA;AAAA,IACA,GAAG;AAAA,QACH,2BAAa,kBAAkB;AAAA,MAC9B,SAAS;AAAA,IACV,CAAE;AAAA,EACF;AACL;AAEA,IAAO,qBAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { RichText } from '@wordpress/block-editor';\nimport { createBlock, switchToBlockType } from '@wordpress/blocks';\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/verse' ],\n\t\t\ttransform: ( { content } ) => {\n\t\t\t\treturn createBlock( 'core/quote', {}, [\n\t\t\t\t\tcreateBlock( 'core/paragraph', { content } ),\n\t\t\t\t] );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/pullquote' ],\n\t\t\ttransform: ( {\n\t\t\t\tvalue,\n\t\t\t\talign,\n\t\t\t\tcitation,\n\t\t\t\tanchor,\n\t\t\t\tfontSize,\n\t\t\t\tstyle,\n\t\t\t} ) => {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/quote',\n\t\t\t\t\t{\n\t\t\t\t\t\talign,\n\t\t\t\t\t\tcitation,\n\t\t\t\t\t\tanchor,\n\t\t\t\t\t\tfontSize,\n\t\t\t\t\t\tstyle,\n\t\t\t\t\t},\n\t\t\t\t\t[ createBlock( 'core/paragraph', { content: value } ) ]\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'prefix',\n\t\t\tprefix: '>',\n\t\t\ttransform: ( content ) =>\n\t\t\t\tcreateBlock( 'core/quote', {}, [\n\t\t\t\t\tcreateBlock( 'core/paragraph', { content } ),\n\t\t\t\t] ),\n\t\t},\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tschema: () => ( {\n\t\t\t\tblockquote: {\n\t\t\t\t\tchildren: '*',\n\t\t\t\t},\n\t\t\t} ),\n\t\t\tselector: 'blockquote',\n\t\t\ttransform: ( node, handler ) => {\n\t\t\t\treturn createBlock(\n\t\t\t\t\t'core/quote',\n\t\t\t\t\t// Don't try to parse any `cite` out of this content.\n\t\t\t\t\t// * There may be more than one cite.\n\t\t\t\t\t// * There may be more attribution text than just the cite.\n\t\t\t\t\t// * If the cite is nested in the quoted text, it's wrong to\n\t\t\t\t\t// remove it.\n\t\t\t\t\t{},\n\t\t\t\t\thandler( {\n\t\t\t\t\t\tHTML: node.innerHTML,\n\t\t\t\t\t\tmode: 'BLOCKS',\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tisMultiBlock: true,\n\t\t\tblocks: [ '*' ],\n\t\t\tisMatch: ( {}, blocks ) => {\n\t\t\t\t// When a single block is selected make the transformation\n\t\t\t\t// available only to specific blocks that make sense.\n\t\t\t\tif ( blocks.length === 1 ) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t'core/paragraph',\n\t\t\t\t\t\t'core/heading',\n\t\t\t\t\t\t'core/list',\n\t\t\t\t\t\t'core/pullquote',\n\t\t\t\t\t].includes( blocks[ 0 ].name );\n\t\t\t\t}\n\t\t\t\treturn ! blocks.some( ( { name } ) => name === 'core/quote' );\n\t\t\t},\n\t\t\t__experimentalConvert: ( blocks ) =>\n\t\t\t\tcreateBlock(\n\t\t\t\t\t'core/quote',\n\t\t\t\t\t{},\n\t\t\t\t\tblocks.map( ( block ) =>\n\t\t\t\t\t\tcreateBlock(\n\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\tblock.attributes,\n\t\t\t\t\t\t\tblock.innerBlocks\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t},\n\t],\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/verse' ],\n\t\t\tisMatch: ( {}, block ) => {\n\t\t\t\treturn block.innerBlocks.every( ( innerBlock ) => {\n\t\t\t\t\t// Paragraphs are already in the target format\n\t\t\t\t\tif ( innerBlock.name === 'core/paragraph' ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Check if other blocks can be converted to paragraphs\n\t\t\t\t\tconst converted = switchToBlockType(\n\t\t\t\t\t\tinnerBlock,\n\t\t\t\t\t\t'core/paragraph'\n\t\t\t\t\t);\n\t\t\t\t\treturn converted !== null;\n\t\t\t\t} );\n\t\t\t},\n\t\t\ttransform: ( {}, innerBlocks ) => {\n\t\t\t\tconst paragraphs = innerBlocks.flatMap( ( innerBlock ) => {\n\t\t\t\t\t// If already a paragraph, use it directly\n\t\t\t\t\tif ( innerBlock.name === 'core/paragraph' ) {\n\t\t\t\t\t\treturn innerBlock;\n\t\t\t\t\t}\n\t\t\t\t\t// Otherwise convert to paragraph\n\t\t\t\t\treturn (\n\t\t\t\t\t\tswitchToBlockType( innerBlock, 'core/paragraph' ) || []\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t\tconst content = paragraphs\n\t\t\t\t\t.map( ( { attributes } ) => attributes.content || '' )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t.join( '<br>' );\n\t\t\t\treturn createBlock( 'core/verse', { content } );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/paragraph' ],\n\t\t\tisMatch: ( { citation }, block ) => {\n\t\t\t\tconst innerBlocks = block.innerBlocks;\n\t\t\t\tif ( ! innerBlocks.length ) {\n\t\t\t\t\treturn ! RichText.isEmpty( citation );\n\t\t\t\t}\n\n\t\t\t\treturn innerBlocks.every( ( innerBlock ) => {\n\t\t\t\t\tif ( innerBlock.name === 'core/paragraph' ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tconst converted = switchToBlockType(\n\t\t\t\t\t\tinnerBlock,\n\t\t\t\t\t\t'core/paragraph'\n\t\t\t\t\t);\n\t\t\t\t\treturn converted !== null;\n\t\t\t\t} );\n\t\t\t},\n\t\t\ttransform: ( { citation }, innerBlocks ) => {\n\t\t\t\tconst paragraphs = innerBlocks.flatMap( ( innerBlock ) => {\n\t\t\t\t\tif ( innerBlock.name === 'core/paragraph' ) {\n\t\t\t\t\t\treturn innerBlock;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\tswitchToBlockType( innerBlock, 'core/paragraph' ) || []\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t\treturn RichText.isEmpty( citation )\n\t\t\t\t\t? paragraphs\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t...paragraphs,\n\t\t\t\t\t\t\tcreateBlock( 'core/paragraph', {\n\t\t\t\t\t\t\t\tcontent: citation,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ];\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/group' ],\n\t\t\ttransform: ( { citation, anchor }, innerBlocks ) =>\n\t\t\t\tcreateBlock(\n\t\t\t\t\t'core/group',\n\t\t\t\t\t{ anchor },\n\t\t\t\t\tRichText.isEmpty( citation )\n\t\t\t\t\t\t? innerBlocks\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t...innerBlocks,\n\t\t\t\t\t\t\t\tcreateBlock( 'core/paragraph', {\n\t\t\t\t\t\t\t\t\tcontent: citation,\n\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t ]\n\t\t\t\t),\n\t\t},\n\t],\n\tungroup: ( { citation }, innerBlocks ) =>\n\t\tRichText.isEmpty( citation )\n\t\t\t? innerBlocks\n\t\t\t: [\n\t\t\t\t\t...innerBlocks,\n\t\t\t\t\tcreateBlock( 'core/paragraph', {\n\t\t\t\t\t\tcontent: citation,\n\t\t\t\t\t} ),\n\t\t\t ],\n};\n\nexport default transforms;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -27,9 +27,12 @@ var import_blocks = require("@wordpress/blocks");
27
27
  var transforms = {
28
28
  from: [
29
29
  {
30
- type: "enter",
30
+ type: "input",
31
31
  regExp: /^-{3,}$/,
32
- transform: () => (0, import_blocks.createBlock)("core/separator")
32
+ transform: () => [
33
+ (0, import_blocks.createBlock)("core/separator"),
34
+ (0, import_blocks.createBlock)((0, import_blocks.getDefaultBlockName)())
35
+ ]
33
36
  },
34
37
  {
35
38
  type: "raw",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/separator/transforms.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'enter',\n\t\t\tregExp: /^-{3,}$/,\n\t\t\ttransform: () => createBlock( 'core/separator' ),\n\t\t},\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tselector: 'hr',\n\t\t\tschema: {\n\t\t\t\thr: {},\n\t\t\t},\n\t\t},\n\t],\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/spacer' ], // Transform to Spacer.\n\t\t\ttransform: ( { anchor } ) => {\n\t\t\t\treturn createBlock( 'core/spacer', {\n\t\t\t\t\tanchor: anchor || undefined,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default transforms;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAA4B;AAE5B,IAAM,aAAa;AAAA,EAClB,MAAM;AAAA,IACL;AAAA,MACC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,UAAM,2BAAa,gBAAiB;AAAA,IAChD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACP,IAAI,CAAC;AAAA,MACN;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI;AAAA,IACH;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,aAAc;AAAA;AAAA,MACxB,WAAW,CAAE,EAAE,OAAO,MAAO;AAC5B,mBAAO,2BAAa,eAAe;AAAA,UAClC,QAAQ,UAAU;AAAA,QACnB,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAO,qBAAQ;",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createBlock, getDefaultBlockName } from '@wordpress/blocks';\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'input',\n\t\t\tregExp: /^-{3,}$/,\n\t\t\ttransform: () => [\n\t\t\t\tcreateBlock( 'core/separator' ),\n\t\t\t\tcreateBlock( getDefaultBlockName() ),\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tselector: 'hr',\n\t\t\tschema: {\n\t\t\t\thr: {},\n\t\t\t},\n\t\t},\n\t],\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/spacer' ], // Transform to Spacer.\n\t\t\ttransform: ( { anchor } ) => {\n\t\t\t\treturn createBlock( 'core/spacer', {\n\t\t\t\t\tanchor: anchor || undefined,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default transforms;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAAiD;AAEjD,IAAM,aAAa;AAAA,EAClB,MAAM;AAAA,IACL;AAAA,MACC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,MAAM;AAAA,YAChB,2BAAa,gBAAiB;AAAA,YAC9B,+BAAa,mCAAoB,CAAE;AAAA,MACpC;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACP,IAAI,CAAC;AAAA,MACN;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI;AAAA,IACH;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,aAAc;AAAA;AAAA,MACxB,WAAW,CAAE,EAAE,OAAO,MAAO;AAC5B,mBAAO,2BAAa,eAAe;AAAA,UAClC,QAAQ,UAAU;AAAA,QACnB,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAO,qBAAQ;",
6
6
  "names": []
7
7
  }
@@ -48,6 +48,11 @@ var import_inner_blocks = __toESM(require("./inner-blocks.cjs"));
48
48
  var import_create_template_part_id = require("./utils/create-template-part-id.cjs");
49
49
  var import_hooks = require("./utils/hooks.cjs");
50
50
  var import_jsx_runtime = require("react/jsx-runtime");
51
+ var SUPPORTED_AREAS = ["header", "footer"];
52
+ function getSupportedAreas() {
53
+ const isOverlayExperimentEnabled = typeof window !== "undefined" && window.__experimentalNavigationOverlays === true;
54
+ return isOverlayExperimentEnabled ? [...SUPPORTED_AREAS, "navigation-overlay"] : SUPPORTED_AREAS;
55
+ }
51
56
  function ReplaceButton({
52
57
  isEntityAvailable,
53
58
  area,
@@ -60,7 +65,8 @@ function ReplaceButton({
60
65
  templatePartId
61
66
  );
62
67
  const hasReplacements = !!templateParts.length;
63
- const canReplace = isEntityAvailable && hasReplacements && (area === "header" || area === "footer");
68
+ const supportedAreas = getSupportedAreas();
69
+ const canReplace = isEntityAvailable && hasReplacements && supportedAreas.includes(area);
64
70
  if (!canReplace) {
65
71
  return null;
66
72
  }
@@ -78,7 +84,8 @@ function ReplaceButton({
78
84
  }
79
85
  function TemplatesList({ area, clientId, isEntityAvailable, onSelect }) {
80
86
  const blockPatterns = (0, import_hooks.useAlternativeBlockPatterns)(area, clientId);
81
- const canReplace = isEntityAvailable && !!blockPatterns.length && (area === "header" || area === "footer");
87
+ const supportedAreas = getSupportedAreas();
88
+ const canReplace = isEntityAvailable && !!blockPatterns.length && supportedAreas.includes(area);
82
89
  if (!canReplace) {
83
90
  return null;
84
91
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/template-part/edit/index.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { serialize } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockSettingsMenuControls,\n\tuseBlockProps,\n\tWarning,\n\tstore as blockEditorStore,\n\tRecursionProvider,\n\tuseHasRecursion,\n\tInspectorControls,\n\t__experimentalBlockPatternsList as BlockPatternsList,\n\tBlockControls,\n} from '@wordpress/block-editor';\nimport {\n\tPanelBody,\n\tSpinner,\n\tModal,\n\tMenuItem,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartPlaceholder from './placeholder';\nimport TemplatePartSelectionModal from './selection-modal';\nimport { TemplatePartAdvancedControls } from './advanced-controls';\nimport TemplatePartInnerBlocks from './inner-blocks';\nimport { createTemplatePartId } from './utils/create-template-part-id';\nimport {\n\tuseAlternativeBlockPatterns,\n\tuseAlternativeTemplateParts,\n\tuseTemplatePartArea,\n} from './utils/hooks';\n\nfunction ReplaceButton( {\n\tisEntityAvailable,\n\tarea,\n\ttemplatePartId,\n\tisTemplatePartSelectionOpen,\n\tsetIsTemplatePartSelectionOpen,\n} ) {\n\t// This hook fetches patterns, so don't run it unconditionally in the main\n\t// edit function!\n\tconst { templateParts } = useAlternativeTemplateParts(\n\t\tarea,\n\t\ttemplatePartId\n\t);\n\tconst hasReplacements = !! templateParts.length;\n\tconst canReplace =\n\t\tisEntityAvailable &&\n\t\thasReplacements &&\n\t\t( area === 'header' || area === 'footer' );\n\n\tif ( ! canReplace ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<MenuItem\n\t\t\tonClick={ () => {\n\t\t\t\tsetIsTemplatePartSelectionOpen( true );\n\t\t\t} }\n\t\t\taria-expanded={ isTemplatePartSelectionOpen }\n\t\t\taria-haspopup=\"dialog\"\n\t\t>\n\t\t\t{ __( 'Replace' ) }\n\t\t</MenuItem>\n\t);\n}\n\nfunction TemplatesList( { area, clientId, isEntityAvailable, onSelect } ) {\n\t// This hook fetches patterns, so don't run it unconditionally in the main\n\t// edit function!\n\tconst blockPatterns = useAlternativeBlockPatterns( area, clientId );\n\tconst canReplace =\n\t\tisEntityAvailable &&\n\t\t!! blockPatterns.length &&\n\t\t( area === 'header' || area === 'footer' );\n\n\tif ( ! canReplace ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Design' ) }>\n\t\t\t<BlockPatternsList\n\t\t\t\tlabel={ __( 'Templates' ) }\n\t\t\t\tblockPatterns={ blockPatterns }\n\t\t\t\tonClickPattern={ onSelect }\n\t\t\t\tshowTitlesAsTooltip\n\t\t\t/>\n\t\t</PanelBody>\n\t);\n}\n\nexport default function TemplatePartEdit( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n} ) {\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst currentTheme = useSelect(\n\t\t( select ) => select( coreStore ).getCurrentTheme()?.stylesheet,\n\t\t[]\n\t);\n\tconst { slug, theme = currentTheme, tagName, layout = {} } = attributes;\n\tconst templatePartId = createTemplatePartId( theme, slug );\n\tconst hasAlreadyRendered = useHasRecursion( templatePartId );\n\tconst [ isTemplatePartSelectionOpen, setIsTemplatePartSelectionOpen ] =\n\t\tuseState( false );\n\n\tconst {\n\t\tisResolved,\n\t\thasInnerBlocks,\n\t\tisMissing,\n\t\tarea,\n\t\tonNavigateToEntityRecord,\n\t\ttitle,\n\t\tcanUserEdit,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst { getBlockCount, getSettings } = select( blockEditorStore );\n\n\t\t\tconst getEntityArgs = [\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\ttemplatePartId,\n\t\t\t];\n\t\t\tconst entityRecord = templatePartId\n\t\t\t\t? getEditedEntityRecord( ...getEntityArgs )\n\t\t\t\t: null;\n\t\t\tconst _area = entityRecord?.area || attributes.area;\n\t\t\tconst hasResolvedEntity = templatePartId\n\t\t\t\t? hasFinishedResolution(\n\t\t\t\t\t\t'getEditedEntityRecord',\n\t\t\t\t\t\tgetEntityArgs\n\t\t\t\t )\n\t\t\t\t: false;\n\n\t\t\tconst _canUserEdit = hasResolvedEntity\n\t\t\t\t? select( coreStore ).canUser( 'update', {\n\t\t\t\t\t\tkind: 'postType',\n\t\t\t\t\t\tname: 'wp_template_part',\n\t\t\t\t\t\tid: templatePartId,\n\t\t\t\t } )\n\t\t\t\t: false;\n\n\t\t\treturn {\n\t\t\t\thasInnerBlocks: getBlockCount( clientId ) > 0,\n\t\t\t\tisResolved: hasResolvedEntity,\n\t\t\t\tisMissing:\n\t\t\t\t\thasResolvedEntity &&\n\t\t\t\t\t( ! entityRecord ||\n\t\t\t\t\t\tObject.keys( entityRecord ).length === 0 ),\n\t\t\t\tarea: _area,\n\t\t\t\tonNavigateToEntityRecord:\n\t\t\t\t\tgetSettings().onNavigateToEntityRecord,\n\t\t\t\ttitle: entityRecord?.title,\n\t\t\t\tcanUserEdit: !! _canUserEdit,\n\t\t\t};\n\t\t},\n\t\t[ templatePartId, attributes.area, clientId ]\n\t);\n\n\tconst areaObject = useTemplatePartArea( area );\n\tconst blockProps = useBlockProps();\n\tconst isPlaceholder = ! slug;\n\tconst isEntityAvailable = ! isPlaceholder && ! isMissing && isResolved;\n\tconst TagName = tagName || areaObject.tagName;\n\n\tconst onPatternSelect = async ( pattern ) => {\n\t\tawait editEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\ttemplatePartId,\n\t\t\t{\n\t\t\t\tblocks: pattern.blocks,\n\t\t\t\tcontent: serialize( pattern.blocks ),\n\t\t\t}\n\t\t);\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: template part title. */\n\t\t\t\t__( 'Template Part \"%s\" updated.' ),\n\t\t\t\ttitle || slug\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t};\n\n\t// We don't want to render a missing state if we have any inner blocks.\n\t// A new template part is automatically created if we have any inner blocks but no entity.\n\tif (\n\t\t! hasInnerBlocks &&\n\t\t( ( slug && ! theme ) || ( slug && isMissing ) )\n\t) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %s: Template part slug. */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Template part has been deleted or is unavailable: %s'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tslug\n\t\t\t\t\t) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\tif ( isEntityAvailable && hasAlreadyRendered ) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RecursionProvider uniqueId={ templatePartId }>\n\t\t\t\t{ isEntityAvailable &&\n\t\t\t\t\tonNavigateToEntityRecord &&\n\t\t\t\t\tcanUserEdit && (\n\t\t\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\t\t\t\tpostId: templatePartId,\n\t\t\t\t\t\t\t\t\t\tpostType: 'wp_template_part',\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\t\t{ window?.__experimentalContentOnlyPatternInsertion\n\t\t\t\t\t\t\t\t\t? __( 'Edit section' )\n\t\t\t\t\t\t\t\t\t: __( 'Edit' ) }\n\t\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t\t</BlockControls>\n\t\t\t\t\t) }\n\t\t\t\t{ canUserEdit && (\n\t\t\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t\t\t<TemplatePartAdvancedControls\n\t\t\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tisEntityAvailable={ isEntityAvailable }\n\t\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\t\tdefaultWrapper={ areaObject.tagName }\n\t\t\t\t\t\t\thasInnerBlocks={ hasInnerBlocks }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InspectorControls>\n\t\t\t\t) }\n\t\t\t\t{ isPlaceholder && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<TemplatePartPlaceholder\n\t\t\t\t\t\t\tarea={ attributes.area }\n\t\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tonOpenSelectionModal={ () =>\n\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( true )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t\t<BlockSettingsMenuControls>\n\t\t\t\t\t{ ( { selectedClientIds } ) => {\n\t\t\t\t\t\t// Only enable for single selection that matches the current block.\n\t\t\t\t\t\t// Ensures menu item doesn't render multiple times.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! (\n\t\t\t\t\t\t\t\tselectedClientIds.length === 1 &&\n\t\t\t\t\t\t\t\tclientId === selectedClientIds[ 0 ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ReplaceButton\n\t\t\t\t\t\t\t\t{ ...{\n\t\t\t\t\t\t\t\t\tisEntityAvailable,\n\t\t\t\t\t\t\t\t\tarea,\n\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\ttemplatePartId,\n\t\t\t\t\t\t\t\t\tisTemplatePartSelectionOpen,\n\t\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen,\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\t\t\t\t\t} }\n\t\t\t\t</BlockSettingsMenuControls>\n\n\t\t\t\t<InspectorControls>\n\t\t\t\t\t<TemplatesList\n\t\t\t\t\t\tarea={ area }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tisEntityAvailable={ isEntityAvailable }\n\t\t\t\t\t\tonSelect={ ( pattern ) => onPatternSelect( pattern ) }\n\t\t\t\t\t/>\n\t\t\t\t</InspectorControls>\n\n\t\t\t\t{ isEntityAvailable && (\n\t\t\t\t\t<TemplatePartInnerBlocks\n\t\t\t\t\t\ttagName={ TagName }\n\t\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\t\tpostId={ templatePartId }\n\t\t\t\t\t\thasInnerBlocks={ hasInnerBlocks }\n\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! isPlaceholder && ! isResolved && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t</RecursionProvider>\n\t\t\t{ isTemplatePartSelectionOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\toverlayClassName=\"block-editor-template-part__selection-modal\"\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t// Translators: %s as template part area title (\"Header\", \"Footer\", etc.).\n\t\t\t\t\t\t__( 'Choose a %s' ),\n\t\t\t\t\t\tareaObject.label.toLowerCase()\n\t\t\t\t\t) }\n\t\t\t\t\tonRequestClose={ () =>\n\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t}\n\t\t\t\t\tisFullScreen\n\t\t\t\t>\n\t\t\t\t\t<TemplatePartSelectionModal\n\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tarea={ area }\n\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\tonClose={ () =>\n\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { serialize } from '@wordpress/blocks';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport {\n\tBlockSettingsMenuControls,\n\tuseBlockProps,\n\tWarning,\n\tstore as blockEditorStore,\n\tRecursionProvider,\n\tuseHasRecursion,\n\tInspectorControls,\n\t__experimentalBlockPatternsList as BlockPatternsList,\n\tBlockControls,\n} from '@wordpress/block-editor';\nimport {\n\tPanelBody,\n\tSpinner,\n\tModal,\n\tMenuItem,\n\tToolbarButton,\n} from '@wordpress/components';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useState } from '@wordpress/element';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport TemplatePartPlaceholder from './placeholder';\nimport TemplatePartSelectionModal from './selection-modal';\nimport { TemplatePartAdvancedControls } from './advanced-controls';\nimport TemplatePartInnerBlocks from './inner-blocks';\nimport { createTemplatePartId } from './utils/create-template-part-id';\nimport {\n\tuseAlternativeBlockPatterns,\n\tuseAlternativeTemplateParts,\n\tuseTemplatePartArea,\n} from './utils/hooks';\n\nconst SUPPORTED_AREAS = [ 'header', 'footer' ];\n\n/**\n * Returns the list of supported template part areas for pattern replacement.\n * Includes 'overlay' only if the navigation overlays experiment is enabled.\n *\n * @return {string[]} Array of supported area names.\n */\nfunction getSupportedAreas() {\n\tconst isOverlayExperimentEnabled =\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.__experimentalNavigationOverlays === true;\n\treturn isOverlayExperimentEnabled\n\t\t? [ ...SUPPORTED_AREAS, 'navigation-overlay' ]\n\t\t: SUPPORTED_AREAS;\n}\n\nfunction ReplaceButton( {\n\tisEntityAvailable,\n\tarea,\n\ttemplatePartId,\n\tisTemplatePartSelectionOpen,\n\tsetIsTemplatePartSelectionOpen,\n} ) {\n\t// This hook fetches patterns, so don't run it unconditionally in the main\n\t// edit function!\n\tconst { templateParts } = useAlternativeTemplateParts(\n\t\tarea,\n\t\ttemplatePartId\n\t);\n\tconst hasReplacements = !! templateParts.length;\n\tconst supportedAreas = getSupportedAreas();\n\tconst canReplace =\n\t\tisEntityAvailable && hasReplacements && supportedAreas.includes( area );\n\n\tif ( ! canReplace ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<MenuItem\n\t\t\tonClick={ () => {\n\t\t\t\tsetIsTemplatePartSelectionOpen( true );\n\t\t\t} }\n\t\t\taria-expanded={ isTemplatePartSelectionOpen }\n\t\t\taria-haspopup=\"dialog\"\n\t\t>\n\t\t\t{ __( 'Replace' ) }\n\t\t</MenuItem>\n\t);\n}\n\nfunction TemplatesList( { area, clientId, isEntityAvailable, onSelect } ) {\n\t// This hook fetches patterns, so don't run it unconditionally in the main\n\t// edit function!\n\tconst blockPatterns = useAlternativeBlockPatterns( area, clientId );\n\tconst supportedAreas = getSupportedAreas();\n\tconst canReplace =\n\t\tisEntityAvailable &&\n\t\t!! blockPatterns.length &&\n\t\tsupportedAreas.includes( area );\n\n\tif ( ! canReplace ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<PanelBody title={ __( 'Design' ) }>\n\t\t\t<BlockPatternsList\n\t\t\t\tlabel={ __( 'Templates' ) }\n\t\t\t\tblockPatterns={ blockPatterns }\n\t\t\t\tonClickPattern={ onSelect }\n\t\t\t\tshowTitlesAsTooltip\n\t\t\t/>\n\t\t</PanelBody>\n\t);\n}\n\nexport default function TemplatePartEdit( {\n\tattributes,\n\tsetAttributes,\n\tclientId,\n} ) {\n\tconst { createSuccessNotice } = useDispatch( noticesStore );\n\tconst { editEntityRecord } = useDispatch( coreStore );\n\tconst currentTheme = useSelect(\n\t\t( select ) => select( coreStore ).getCurrentTheme()?.stylesheet,\n\t\t[]\n\t);\n\tconst { slug, theme = currentTheme, tagName, layout = {} } = attributes;\n\tconst templatePartId = createTemplatePartId( theme, slug );\n\tconst hasAlreadyRendered = useHasRecursion( templatePartId );\n\tconst [ isTemplatePartSelectionOpen, setIsTemplatePartSelectionOpen ] =\n\t\tuseState( false );\n\n\tconst {\n\t\tisResolved,\n\t\thasInnerBlocks,\n\t\tisMissing,\n\t\tarea,\n\t\tonNavigateToEntityRecord,\n\t\ttitle,\n\t\tcanUserEdit,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getEditedEntityRecord, hasFinishedResolution } =\n\t\t\t\tselect( coreStore );\n\t\t\tconst { getBlockCount, getSettings } = select( blockEditorStore );\n\n\t\t\tconst getEntityArgs = [\n\t\t\t\t'postType',\n\t\t\t\t'wp_template_part',\n\t\t\t\ttemplatePartId,\n\t\t\t];\n\t\t\tconst entityRecord = templatePartId\n\t\t\t\t? getEditedEntityRecord( ...getEntityArgs )\n\t\t\t\t: null;\n\t\t\tconst _area = entityRecord?.area || attributes.area;\n\t\t\tconst hasResolvedEntity = templatePartId\n\t\t\t\t? hasFinishedResolution(\n\t\t\t\t\t\t'getEditedEntityRecord',\n\t\t\t\t\t\tgetEntityArgs\n\t\t\t\t )\n\t\t\t\t: false;\n\n\t\t\tconst _canUserEdit = hasResolvedEntity\n\t\t\t\t? select( coreStore ).canUser( 'update', {\n\t\t\t\t\t\tkind: 'postType',\n\t\t\t\t\t\tname: 'wp_template_part',\n\t\t\t\t\t\tid: templatePartId,\n\t\t\t\t } )\n\t\t\t\t: false;\n\n\t\t\treturn {\n\t\t\t\thasInnerBlocks: getBlockCount( clientId ) > 0,\n\t\t\t\tisResolved: hasResolvedEntity,\n\t\t\t\tisMissing:\n\t\t\t\t\thasResolvedEntity &&\n\t\t\t\t\t( ! entityRecord ||\n\t\t\t\t\t\tObject.keys( entityRecord ).length === 0 ),\n\t\t\t\tarea: _area,\n\t\t\t\tonNavigateToEntityRecord:\n\t\t\t\t\tgetSettings().onNavigateToEntityRecord,\n\t\t\t\ttitle: entityRecord?.title,\n\t\t\t\tcanUserEdit: !! _canUserEdit,\n\t\t\t};\n\t\t},\n\t\t[ templatePartId, attributes.area, clientId ]\n\t);\n\n\tconst areaObject = useTemplatePartArea( area );\n\tconst blockProps = useBlockProps();\n\tconst isPlaceholder = ! slug;\n\tconst isEntityAvailable = ! isPlaceholder && ! isMissing && isResolved;\n\tconst TagName = tagName || areaObject.tagName;\n\n\tconst onPatternSelect = async ( pattern ) => {\n\t\tawait editEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\ttemplatePartId,\n\t\t\t{\n\t\t\t\tblocks: pattern.blocks,\n\t\t\t\tcontent: serialize( pattern.blocks ),\n\t\t\t}\n\t\t);\n\t\tcreateSuccessNotice(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: template part title. */\n\t\t\t\t__( 'Template Part \"%s\" updated.' ),\n\t\t\t\ttitle || slug\n\t\t\t),\n\t\t\t{\n\t\t\t\ttype: 'snackbar',\n\t\t\t}\n\t\t);\n\t};\n\n\t// We don't want to render a missing state if we have any inner blocks.\n\t// A new template part is automatically created if we have any inner blocks but no entity.\n\tif (\n\t\t! hasInnerBlocks &&\n\t\t( ( slug && ! theme ) || ( slug && isMissing ) )\n\t) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t/* translators: %s: Template part slug. */\n\t\t\t\t\t\t__(\n\t\t\t\t\t\t\t'Template part has been deleted or is unavailable: %s'\n\t\t\t\t\t\t),\n\t\t\t\t\t\tslug\n\t\t\t\t\t) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\tif ( isEntityAvailable && hasAlreadyRendered ) {\n\t\treturn (\n\t\t\t<TagName { ...blockProps }>\n\t\t\t\t<Warning>\n\t\t\t\t\t{ __( 'Block cannot be rendered inside itself.' ) }\n\t\t\t\t</Warning>\n\t\t\t</TagName>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RecursionProvider uniqueId={ templatePartId }>\n\t\t\t\t{ isEntityAvailable &&\n\t\t\t\t\tonNavigateToEntityRecord &&\n\t\t\t\t\tcanUserEdit && (\n\t\t\t\t\t\t<BlockControls group=\"other\">\n\t\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\tonNavigateToEntityRecord( {\n\t\t\t\t\t\t\t\t\t\tpostId: templatePartId,\n\t\t\t\t\t\t\t\t\t\tpostType: 'wp_template_part',\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\t\t{ window?.__experimentalContentOnlyPatternInsertion\n\t\t\t\t\t\t\t\t\t? __( 'Edit section' )\n\t\t\t\t\t\t\t\t\t: __( 'Edit' ) }\n\t\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t\t</BlockControls>\n\t\t\t\t\t) }\n\t\t\t\t{ canUserEdit && (\n\t\t\t\t\t<InspectorControls group=\"advanced\">\n\t\t\t\t\t\t<TemplatePartAdvancedControls\n\t\t\t\t\t\t\ttagName={ tagName }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tisEntityAvailable={ isEntityAvailable }\n\t\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\t\tdefaultWrapper={ areaObject.tagName }\n\t\t\t\t\t\t\thasInnerBlocks={ hasInnerBlocks }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InspectorControls>\n\t\t\t\t) }\n\t\t\t\t{ isPlaceholder && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<TemplatePartPlaceholder\n\t\t\t\t\t\t\tarea={ attributes.area }\n\t\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\t\tonOpenSelectionModal={ () =>\n\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( true )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t\t<BlockSettingsMenuControls>\n\t\t\t\t\t{ ( { selectedClientIds } ) => {\n\t\t\t\t\t\t// Only enable for single selection that matches the current block.\n\t\t\t\t\t\t// Ensures menu item doesn't render multiple times.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t! (\n\t\t\t\t\t\t\t\tselectedClientIds.length === 1 &&\n\t\t\t\t\t\t\t\tclientId === selectedClientIds[ 0 ]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<ReplaceButton\n\t\t\t\t\t\t\t\t{ ...{\n\t\t\t\t\t\t\t\t\tisEntityAvailable,\n\t\t\t\t\t\t\t\t\tarea,\n\t\t\t\t\t\t\t\t\tclientId,\n\t\t\t\t\t\t\t\t\ttemplatePartId,\n\t\t\t\t\t\t\t\t\tisTemplatePartSelectionOpen,\n\t\t\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen,\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\t\t\t\t\t} }\n\t\t\t\t</BlockSettingsMenuControls>\n\n\t\t\t\t<InspectorControls>\n\t\t\t\t\t<TemplatesList\n\t\t\t\t\t\tarea={ area }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tisEntityAvailable={ isEntityAvailable }\n\t\t\t\t\t\tonSelect={ ( pattern ) => onPatternSelect( pattern ) }\n\t\t\t\t\t/>\n\t\t\t\t</InspectorControls>\n\n\t\t\t\t{ isEntityAvailable && (\n\t\t\t\t\t<TemplatePartInnerBlocks\n\t\t\t\t\t\ttagName={ TagName }\n\t\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\t\tpostId={ templatePartId }\n\t\t\t\t\t\thasInnerBlocks={ hasInnerBlocks }\n\t\t\t\t\t\tlayout={ layout }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t\t{ ! isPlaceholder && ! isResolved && (\n\t\t\t\t\t<TagName { ...blockProps }>\n\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t</TagName>\n\t\t\t\t) }\n\t\t\t</RecursionProvider>\n\t\t\t{ isTemplatePartSelectionOpen && (\n\t\t\t\t<Modal\n\t\t\t\t\toverlayClassName=\"block-editor-template-part__selection-modal\"\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t// Translators: %s as template part area title (\"Header\", \"Footer\", etc.).\n\t\t\t\t\t\t__( 'Choose a %s' ),\n\t\t\t\t\t\tareaObject.label.toLowerCase()\n\t\t\t\t\t) }\n\t\t\t\t\tonRequestClose={ () =>\n\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t}\n\t\t\t\t\tisFullScreen\n\t\t\t\t>\n\t\t\t\t\t<TemplatePartSelectionModal\n\t\t\t\t\t\ttemplatePartId={ templatePartId }\n\t\t\t\t\t\tclientId={ clientId }\n\t\t\t\t\t\tarea={ area }\n\t\t\t\t\t\tsetAttributes={ setAttributes }\n\t\t\t\t\t\tonClose={ () =>\n\t\t\t\t\t\t\tsetIsTemplatePartSelectionOpen( false )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Modal>\n\t\t\t) }\n\t\t</>\n\t);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["BlockPatternsList", "noticesStore", "coreStore", "blockEditorStore", "TemplatePartPlaceholder", "TemplatePartInnerBlocks", "TemplatePartSelectionModal"]
7
7
  }
@@ -5,7 +5,7 @@ import { getTransformedAttributes } from "../utils/get-transformed-attributes.mj
5
5
  var transforms = {
6
6
  from: [
7
7
  {
8
- type: "enter",
8
+ type: "input",
9
9
  regExp: /^```$/,
10
10
  transform: () => createBlock("core/code")
11
11
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/code/transforms.js"],
4
- "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { create, toHTMLString } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { getTransformedAttributes } from '../utils/get-transformed-attributes';\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'enter',\n\t\t\tregExp: /^```$/,\n\t\t\ttransform: () => createBlock( 'core/code' ),\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/paragraph' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\tconst { content } = attributes;\n\t\t\t\treturn createBlock( 'core/code', {\n\t\t\t\t\t...attributes,\n\t\t\t\t\t...getTransformedAttributes( attributes, 'core/code' ),\n\t\t\t\t\tcontent,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/html' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\tconst { content: text } = attributes;\n\t\t\t\treturn createBlock( 'core/code', {\n\t\t\t\t\t...attributes,\n\t\t\t\t\t...getTransformedAttributes( attributes, 'core/code' ),\n\t\t\t\t\t// The HTML is plain text (with plain line breaks), so\n\t\t\t\t\t// convert it to rich text.\n\t\t\t\t\tcontent: toHTMLString( { value: create( { text } ) } ),\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tisMatch: ( node ) =>\n\t\t\t\tnode.nodeName === 'PRE' &&\n\t\t\t\tnode.children.length === 1 &&\n\t\t\t\tnode.firstChild.nodeName === 'CODE',\n\t\t\tschema: {\n\t\t\t\tpre: {\n\t\t\t\t\tchildren: {\n\t\t\t\t\t\tcode: {\n\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\t'#text': {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/paragraph' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\tconst { content } = attributes;\n\t\t\t\treturn createBlock( 'core/paragraph', {\n\t\t\t\t\t...getTransformedAttributes( attributes, 'core/paragraph' ),\n\t\t\t\t\tcontent,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default transforms;\n"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { createBlock } from '@wordpress/blocks';\nimport { create, toHTMLString } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { getTransformedAttributes } from '../utils/get-transformed-attributes';\n\nconst transforms = {\n\tfrom: [\n\t\t{\n\t\t\ttype: 'input',\n\t\t\tregExp: /^```$/,\n\t\t\ttransform: () => createBlock( 'core/code' ),\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/paragraph' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\tconst { content } = attributes;\n\t\t\t\treturn createBlock( 'core/code', {\n\t\t\t\t\t...attributes,\n\t\t\t\t\t...getTransformedAttributes( attributes, 'core/code' ),\n\t\t\t\t\tcontent,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/html' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\tconst { content: text } = attributes;\n\t\t\t\treturn createBlock( 'core/code', {\n\t\t\t\t\t...attributes,\n\t\t\t\t\t...getTransformedAttributes( attributes, 'core/code' ),\n\t\t\t\t\t// The HTML is plain text (with plain line breaks), so\n\t\t\t\t\t// convert it to rich text.\n\t\t\t\t\tcontent: toHTMLString( { value: create( { text } ) } ),\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttype: 'raw',\n\t\t\tisMatch: ( node ) =>\n\t\t\t\tnode.nodeName === 'PRE' &&\n\t\t\t\tnode.children.length === 1 &&\n\t\t\t\tnode.firstChild.nodeName === 'CODE',\n\t\t\tschema: {\n\t\t\t\tpre: {\n\t\t\t\t\tchildren: {\n\t\t\t\t\t\tcode: {\n\t\t\t\t\t\t\tchildren: {\n\t\t\t\t\t\t\t\t'#text': {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\tto: [\n\t\t{\n\t\t\ttype: 'block',\n\t\t\tblocks: [ 'core/paragraph' ],\n\t\t\ttransform: ( attributes ) => {\n\t\t\t\tconst { content } = attributes;\n\t\t\t\treturn createBlock( 'core/paragraph', {\n\t\t\t\t\t...getTransformedAttributes( attributes, 'core/paragraph' ),\n\t\t\t\t\tcontent,\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t],\n};\n\nexport default transforms;\n"],
5
5
  "mappings": ";AAGA,SAAS,mBAAmB;AAC5B,SAAS,QAAQ,oBAAoB;AAKrC,SAAS,gCAAgC;AAEzC,IAAM,aAAa;AAAA,EAClB,MAAM;AAAA,IACL;AAAA,MACC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,MAAM,YAAa,WAAY;AAAA,IAC3C;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,gBAAiB;AAAA,MAC3B,WAAW,CAAE,eAAgB;AAC5B,cAAM,EAAE,QAAQ,IAAI;AACpB,eAAO,YAAa,aAAa;AAAA,UAChC,GAAG;AAAA,UACH,GAAG,yBAA0B,YAAY,WAAY;AAAA,UACrD;AAAA,QACD,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,WAAY;AAAA,MACtB,WAAW,CAAE,eAAgB;AAC5B,cAAM,EAAE,SAAS,KAAK,IAAI;AAC1B,eAAO,YAAa,aAAa;AAAA,UAChC,GAAG;AAAA,UACH,GAAG,yBAA0B,YAAY,WAAY;AAAA;AAAA;AAAA,UAGrD,SAAS,aAAc,EAAE,OAAO,OAAQ,EAAE,KAAK,CAAE,EAAE,CAAE;AAAA,QACtD,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,SAAS,CAAE,SACV,KAAK,aAAa,SAClB,KAAK,SAAS,WAAW,KACzB,KAAK,WAAW,aAAa;AAAA,MAC9B,QAAQ;AAAA,QACP,KAAK;AAAA,UACJ,UAAU;AAAA,YACT,MAAM;AAAA,cACL,UAAU;AAAA,gBACT,SAAS,CAAC;AAAA,cACX;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI;AAAA,IACH;AAAA,MACC,MAAM;AAAA,MACN,QAAQ,CAAE,gBAAiB;AAAA,MAC3B,WAAW,CAAE,eAAgB;AAC5B,cAAM,EAAE,QAAQ,IAAI;AACpB,eAAO,YAAa,kBAAkB;AAAA,UACrC,GAAG,yBAA0B,YAAY,gBAAiB;AAAA,UAC1D;AAAA,QACD,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AACD;AAEA,IAAO,qBAAQ;",
6
6
  "names": []
7
7
  }
@@ -89,6 +89,9 @@
89
89
  "scale": {
90
90
  "type": "string"
91
91
  },
92
+ "focalPoint": {
93
+ "type": "object"
94
+ },
92
95
  "sizeSlug": {
93
96
  "type": "string"
94
97
  },