@wordpress/block-library 9.30.1-next.6870dfe5b.0 → 9.30.1-next.836ecdcae.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.
@@ -1 +1 @@
1
- {"version":3,"names":["__unstableStripHTML","stripHTML","Popover","Button","VisuallyHidden","__experimentalVStack","VStack","__","LinkControl","useBlockEditingMode","useMemo","useState","useRef","useEffect","forwardRef","useResourcePermissions","plus","useInstanceId","LinkUIPageCreator","LinkUIBlockInserter","jsx","_jsx","jsxs","_jsxs","getSuggestionsQuery","type","kind","subtype","initialSuggestionsSearchOptions","perPage","UnforwardedLinkUI","props","ref","label","url","opensInNewTab","link","postType","addingBlock","setAddingBlock","addingPage","setAddingPage","focusAddBlockButton","setFocusAddBlockButton","focusAddPageButton","setFocusAddPageButton","permissions","name","title","handlePageCreated","pageLink","onChange","dialogTitleId","LinkUI","dialogDescriptionId","blockEditingMode","placement","onClose","anchor","shift","children","role","id","hasTextControl","hasRichPreviews","value","showInitialSuggestions","withCreateSuggestion","noDirectEntry","noURLSuggestion","suggestionsQuery","onRemove","onCancel","renderControlBottom","length","LinkUITools","canAddPage","canCreate","canAddBlock","clientId","onBack","onBlockInsert","onPageCreated","initialTitle","blockInserterAriaRole","addBlockButtonRef","addPageButtonRef","current","focus","spacing","className","__next40pxDefaultSize","icon","onClick","e","preventDefault"],"sources":["@wordpress/block-library/src/navigation-link/link-ui.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tPopover,\n\tButton,\n\tVisuallyHidden,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { LinkControl, useBlockEditingMode } from '@wordpress/block-editor';\nimport {\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tforwardRef,\n} from '@wordpress/element';\nimport { useResourcePermissions } from '@wordpress/core-data';\nimport { plus } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { LinkUIPageCreator } from './page-creator';\nimport LinkUIBlockInserter from './block-inserter';\n\n/**\n * Given the Link block's type attribute, return the query params to give to\n * /wp/v2/search.\n *\n * @param {string} type Link block's type attribute.\n * @param {string} kind Link block's entity of kind (post-type|taxonomy)\n * @return {{ type?: string, subtype?: string }} Search query params.\n */\nexport function getSuggestionsQuery( type, kind ) {\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\tcase 'page':\n\t\t\treturn { type: 'post', subtype: type };\n\t\tcase 'category':\n\t\t\treturn { type: 'term', subtype: 'category' };\n\t\tcase 'tag':\n\t\t\treturn { type: 'term', subtype: 'post_tag' };\n\t\tcase 'post_format':\n\t\t\treturn { type: 'post-format' };\n\t\tdefault:\n\t\t\tif ( kind === 'taxonomy' ) {\n\t\t\t\treturn { type: 'term', subtype: type };\n\t\t\t}\n\t\t\tif ( kind === 'post-type' ) {\n\t\t\t\treturn { type: 'post', subtype: type };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// for custom link which has no type\n\t\t\t\t// always show pages as initial suggestions\n\t\t\t\tinitialSuggestionsSearchOptions: {\n\t\t\t\t\ttype: 'post',\n\t\t\t\t\tsubtype: 'page',\n\t\t\t\t\tperPage: 20,\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nfunction UnforwardedLinkUI( props, ref ) {\n\tconst { label, url, opensInNewTab, type, kind } = props.link;\n\tconst postType = type || 'page';\n\n\tconst [ addingBlock, setAddingBlock ] = useState( false );\n\tconst [ addingPage, setAddingPage ] = useState( false );\n\tconst [ focusAddBlockButton, setFocusAddBlockButton ] = useState( false );\n\tconst [ focusAddPageButton, setFocusAddPageButton ] = useState( false );\n\tconst permissions = useResourcePermissions( {\n\t\tkind: 'postType',\n\t\tname: postType,\n\t} );\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.\n\tconst link = useMemo(\n\t\t() => ( {\n\t\t\turl,\n\t\t\topensInNewTab,\n\t\t\ttitle: label && stripHTML( label ),\n\t\t} ),\n\t\t[ label, opensInNewTab, url ]\n\t);\n\n\tconst handlePageCreated = ( pageLink ) => {\n\t\t// Set the new page as the current link\n\t\tprops.onChange( pageLink );\n\t\t// Return to main Link UI\n\t\tsetAddingPage( false );\n\t};\n\n\tconst dialogTitleId = useInstanceId(\n\t\tLinkUI,\n\t\t'link-ui-link-control__title'\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tLinkUI,\n\t\t'link-ui-link-control__description'\n\t);\n\n\tconst blockEditingMode = useBlockEditingMode();\n\n\treturn (\n\t\t<Popover\n\t\t\tref={ ref }\n\t\t\tplacement=\"bottom\"\n\t\t\tonClose={ props.onClose }\n\t\t\tanchor={ props.anchor }\n\t\t\tshift\n\t\t>\n\t\t\t{ ! addingBlock && ! addingPage && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-labelledby={ dialogTitleId }\n\t\t\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\t\t>\n\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t<h2 id={ dialogTitleId }>{ __( 'Add link' ) }</h2>\n\n\t\t\t\t\t\t<p id={ dialogDescriptionId }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Search for and add a link to your Navigation.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\thasTextControl\n\t\t\t\t\t\thasRichPreviews\n\t\t\t\t\t\tvalue={ link }\n\t\t\t\t\t\tshowInitialSuggestions\n\t\t\t\t\t\twithCreateSuggestion={ false }\n\t\t\t\t\t\tnoDirectEntry={ !! type }\n\t\t\t\t\t\tnoURLSuggestion={ !! type }\n\t\t\t\t\t\tsuggestionsQuery={ getSuggestionsQuery( type, kind ) }\n\t\t\t\t\t\tonChange={ props.onChange }\n\t\t\t\t\t\tonRemove={ props.onRemove }\n\t\t\t\t\t\tonCancel={ props.onCancel }\n\t\t\t\t\t\trenderControlBottom={ () => {\n\t\t\t\t\t\t\t// Don't show the tools when there is submitted link (preview state).\n\t\t\t\t\t\t\tif ( link?.url?.length ) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<LinkUITools\n\t\t\t\t\t\t\t\t\tfocusAddBlockButton={ focusAddBlockButton }\n\t\t\t\t\t\t\t\t\tfocusAddPageButton={ focusAddPageButton }\n\t\t\t\t\t\t\t\t\tsetAddingBlock={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddBlockButton( false );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tsetAddingPage={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingPage( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddPageButton( false );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tcanAddPage={\n\t\t\t\t\t\t\t\t\t\tpermissions?.canCreate &&\n\t\t\t\t\t\t\t\t\t\ttype === 'page'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcanAddBlock={\n\t\t\t\t\t\t\t\t\t\tblockEditingMode === 'default'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) }\n\n\t\t\t{ addingBlock && (\n\t\t\t\t<LinkUIBlockInserter\n\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingBlock( false );\n\t\t\t\t\t\tsetFocusAddBlockButton( true );\n\t\t\t\t\t\tsetFocusAddPageButton( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonBlockInsert={ props?.onBlockInsert }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ addingPage && (\n\t\t\t\t<LinkUIPageCreator\n\t\t\t\t\tpostType={ postType }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingPage( false );\n\t\t\t\t\t\tsetFocusAddPageButton( true );\n\t\t\t\t\t\tsetFocusAddBlockButton( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonPageCreated={ handlePageCreated }\n\t\t\t\t\tinitialTitle={ link?.url || '' }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Popover>\n\t);\n}\n\nexport const LinkUI = forwardRef( UnforwardedLinkUI );\n\nconst LinkUITools = ( {\n\tsetAddingBlock,\n\tsetAddingPage,\n\tfocusAddBlockButton,\n\tfocusAddPageButton,\n\tcanAddPage,\n\tcanAddBlock,\n} ) => {\n\tconst blockInserterAriaRole = 'listbox';\n\tconst addBlockButtonRef = useRef();\n\tconst addPageButtonRef = useRef();\n\n\t// Focus the add block button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddBlockButton ) {\n\t\t\taddBlockButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddBlockButton ] );\n\n\t// Focus the add page button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddPageButton ) {\n\t\t\taddPageButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddPageButton ] );\n\n\t// Don't render anything if neither button should be shown\n\tif ( ! canAddPage && ! canAddBlock ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<VStack spacing={ 0 } className=\"link-ui-tools\">\n\t\t\t{ canAddPage && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tref={ addPageButtonRef }\n\t\t\t\t\ticon={ plus }\n\t\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetAddingPage( true );\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create page' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t\t{ canAddBlock && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tref={ addBlockButtonRef }\n\t\t\t\t\ticon={ plus }\n\t\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Add block' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t</VStack>\n\t);\n};\n\nexport default LinkUITools;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__unstableStripHTML","stripHTML","Popover","Button","VisuallyHidden","__experimentalVStack","VStack","__","isRTL","LinkControl","store","blockEditorStore","privateApis","blockEditorPrivateApis","useBlockEditingMode","useMemo","useState","useRef","useEffect","forwardRef","useResourcePermissions","useSelect","chevronLeftSmall","chevronRightSmall","plus","useInstanceId","useFocusOnMount","unlock","LinkUIPageCreator","jsx","_jsx","jsxs","_jsxs","PrivateQuickInserter","QuickInserter","getSuggestionsQuery","type","kind","subtype","initialSuggestionsSearchOptions","perPage","LinkUIBlockInserter","clientId","onBack","onBlockInsert","rootBlockClientId","select","getBlockRootClientId","focusOnMountRef","dialogTitleId","dialogDescriptionId","className","role","ref","children","id","icon","onClick","e","preventDefault","size","rootClientId","isAppender","prioritizePatterns","selectBlockOnInsert","onSelect","undefined","hasSearch","UnforwardedLinkUI","props","label","url","opensInNewTab","link","postType","addingBlock","setAddingBlock","addingPage","setAddingPage","focusAddBlockButton","setFocusAddBlockButton","focusAddPageButton","setFocusAddPageButton","permissions","name","title","handlePageCreated","pageLink","onChange","LinkUI","blockEditingMode","placement","onClose","anchor","shift","hasTextControl","hasRichPreviews","value","showInitialSuggestions","withCreateSuggestion","noDirectEntry","noURLSuggestion","suggestionsQuery","onRemove","onCancel","renderControlBottom","length","LinkUITools","canCreatePage","canCreate","onPageCreated","initialTitle","blockInserterAriaRole","addBlockButtonRef","addPageButtonRef","current","focus","spacing","__next40pxDefaultSize"],"sources":["@wordpress/block-library/src/navigation-link/link-ui.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tPopover,\n\tButton,\n\tVisuallyHidden,\n\t__experimentalVStack as VStack,\n} from '@wordpress/components';\nimport { __, isRTL } from '@wordpress/i18n';\nimport {\n\tLinkControl,\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n\tuseBlockEditingMode,\n} from '@wordpress/block-editor';\nimport {\n\tuseMemo,\n\tuseState,\n\tuseRef,\n\tuseEffect,\n\tforwardRef,\n} from '@wordpress/element';\nimport { useResourcePermissions } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\nimport { chevronLeftSmall, chevronRightSmall, plus } from '@wordpress/icons';\nimport { useInstanceId, useFocusOnMount } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\nimport { LinkUIPageCreator } from './page-creator';\n\nconst { PrivateQuickInserter: QuickInserter } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Given the Link block's type attribute, return the query params to give to\n * /wp/v2/search.\n *\n * @param {string} type Link block's type attribute.\n * @param {string} kind Link block's entity of kind (post-type|taxonomy)\n * @return {{ type?: string, subtype?: string }} Search query params.\n */\nexport function getSuggestionsQuery( type, kind ) {\n\tswitch ( type ) {\n\t\tcase 'post':\n\t\tcase 'page':\n\t\t\treturn { type: 'post', subtype: type };\n\t\tcase 'category':\n\t\t\treturn { type: 'term', subtype: 'category' };\n\t\tcase 'tag':\n\t\t\treturn { type: 'term', subtype: 'post_tag' };\n\t\tcase 'post_format':\n\t\t\treturn { type: 'post-format' };\n\t\tdefault:\n\t\t\tif ( kind === 'taxonomy' ) {\n\t\t\t\treturn { type: 'term', subtype: type };\n\t\t\t}\n\t\t\tif ( kind === 'post-type' ) {\n\t\t\t\treturn { type: 'post', subtype: type };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t// for custom link which has no type\n\t\t\t\t// always show pages as initial suggestions\n\t\t\t\tinitialSuggestionsSearchOptions: {\n\t\t\t\t\ttype: 'post',\n\t\t\t\t\tsubtype: 'page',\n\t\t\t\t\tperPage: 20,\n\t\t\t\t},\n\t\t\t};\n\t}\n}\n\nfunction LinkUIBlockInserter( { clientId, onBack, onBlockInsert } ) {\n\tconst { rootBlockClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId } = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\trootBlockClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst focusOnMountRef = useFocusOnMount( 'firstElement' );\n\n\tconst dialogTitleId = useInstanceId(\n\t\tLinkControl,\n\t\t`link-ui-block-inserter__title`\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tLinkControl,\n\t\t`link-ui-block-inserter__description`\n\t);\n\n\tif ( ! clientId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"link-ui-block-inserter\"\n\t\t\trole=\"dialog\"\n\t\t\taria-labelledby={ dialogTitleId }\n\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\tref={ focusOnMountRef }\n\t\t>\n\t\t\t<VisuallyHidden>\n\t\t\t\t<h2 id={ dialogTitleId }>{ __( 'Add block' ) }</h2>\n\n\t\t\t\t<p id={ dialogDescriptionId }>\n\t\t\t\t\t{ __( 'Choose a block to add to your Navigation.' ) }\n\t\t\t\t</p>\n\t\t\t</VisuallyHidden>\n\n\t\t\t<Button\n\t\t\t\tclassName=\"link-ui-block-inserter__back\"\n\t\t\t\ticon={ isRTL() ? chevronRightSmall : chevronLeftSmall }\n\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonBack();\n\t\t\t\t} }\n\t\t\t\tsize=\"small\"\n\t\t\t>\n\t\t\t\t{ __( 'Back' ) }\n\t\t\t</Button>\n\n\t\t\t<QuickInserter\n\t\t\t\trootClientId={ rootBlockClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ false }\n\t\t\t\tprioritizePatterns={ false }\n\t\t\t\tselectBlockOnInsert={ ! onBlockInsert }\n\t\t\t\tonSelect={ onBlockInsert ? onBlockInsert : undefined }\n\t\t\t\thasSearch={ false }\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction UnforwardedLinkUI( props, ref ) {\n\tconst { label, url, opensInNewTab, type, kind } = props.link;\n\tconst postType = type || 'page';\n\n\tconst [ addingBlock, setAddingBlock ] = useState( false );\n\tconst [ addingPage, setAddingPage ] = useState( false );\n\tconst [ focusAddBlockButton, setFocusAddBlockButton ] = useState( false );\n\tconst [ focusAddPageButton, setFocusAddPageButton ] = useState( false );\n\tconst permissions = useResourcePermissions( {\n\t\tkind: 'postType',\n\t\tname: postType,\n\t} );\n\n\t// Memoize link value to avoid overriding the LinkControl's internal state.\n\t// This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407.\n\tconst link = useMemo(\n\t\t() => ( {\n\t\t\turl,\n\t\t\topensInNewTab,\n\t\t\ttitle: label && stripHTML( label ),\n\t\t} ),\n\t\t[ label, opensInNewTab, url ]\n\t);\n\n\tconst handlePageCreated = ( pageLink ) => {\n\t\t// Set the new page as the current link\n\t\tprops.onChange( pageLink );\n\t\t// Return to main Link UI\n\t\tsetAddingPage( false );\n\t};\n\n\tconst dialogTitleId = useInstanceId(\n\t\tLinkUI,\n\t\t`link-ui-link-control__title`\n\t);\n\tconst dialogDescriptionId = useInstanceId(\n\t\tLinkUI,\n\t\t`link-ui-link-control__description`\n\t);\n\n\tconst blockEditingMode = useBlockEditingMode();\n\n\treturn (\n\t\t<Popover\n\t\t\tref={ ref }\n\t\t\tplacement=\"bottom\"\n\t\t\tonClose={ props.onClose }\n\t\t\tanchor={ props.anchor }\n\t\t\tshift\n\t\t>\n\t\t\t{ ! addingBlock && ! addingPage && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-labelledby={ dialogTitleId }\n\t\t\t\t\taria-describedby={ dialogDescriptionId }\n\t\t\t\t>\n\t\t\t\t\t<VisuallyHidden>\n\t\t\t\t\t\t<h2 id={ dialogTitleId }>{ __( 'Add link' ) }</h2>\n\n\t\t\t\t\t\t<p id={ dialogDescriptionId }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Search for and add a link to your Navigation.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t<LinkControl\n\t\t\t\t\t\thasTextControl\n\t\t\t\t\t\thasRichPreviews\n\t\t\t\t\t\tvalue={ link }\n\t\t\t\t\t\tshowInitialSuggestions\n\t\t\t\t\t\twithCreateSuggestion={ false }\n\t\t\t\t\t\tnoDirectEntry={ !! type }\n\t\t\t\t\t\tnoURLSuggestion={ !! type }\n\t\t\t\t\t\tsuggestionsQuery={ getSuggestionsQuery( type, kind ) }\n\t\t\t\t\t\tonChange={ props.onChange }\n\t\t\t\t\t\tonRemove={ props.onRemove }\n\t\t\t\t\t\tonCancel={ props.onCancel }\n\t\t\t\t\t\trenderControlBottom={ () =>\n\t\t\t\t\t\t\t! link?.url?.length && (\n\t\t\t\t\t\t\t\t<LinkUITools\n\t\t\t\t\t\t\t\t\tfocusAddBlockButton={ focusAddBlockButton }\n\t\t\t\t\t\t\t\t\tfocusAddPageButton={ focusAddPageButton }\n\t\t\t\t\t\t\t\t\tsetAddingBlock={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddBlockButton( false );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tsetAddingPage={ () => {\n\t\t\t\t\t\t\t\t\t\tsetAddingPage( true );\n\t\t\t\t\t\t\t\t\t\tsetFocusAddPageButton( false );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tcanCreatePage={ permissions.canCreate }\n\t\t\t\t\t\t\t\t\tblockEditingMode={ blockEditingMode }\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</div>\n\t\t\t) }\n\n\t\t\t{ addingBlock && (\n\t\t\t\t<LinkUIBlockInserter\n\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingBlock( false );\n\t\t\t\t\t\tsetFocusAddBlockButton( true );\n\t\t\t\t\t\tsetFocusAddPageButton( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonBlockInsert={ props?.onBlockInsert }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ addingPage && (\n\t\t\t\t<LinkUIPageCreator\n\t\t\t\t\tpostType={ postType }\n\t\t\t\t\tonBack={ () => {\n\t\t\t\t\t\tsetAddingPage( false );\n\t\t\t\t\t\tsetFocusAddPageButton( true );\n\t\t\t\t\t\tsetFocusAddBlockButton( false );\n\t\t\t\t\t} }\n\t\t\t\t\tonPageCreated={ handlePageCreated }\n\t\t\t\t\tinitialTitle={ link?.url || '' }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Popover>\n\t);\n}\n\nexport const LinkUI = forwardRef( UnforwardedLinkUI );\n\nconst LinkUITools = ( {\n\tsetAddingBlock,\n\tsetAddingPage,\n\tfocusAddBlockButton,\n\tfocusAddPageButton,\n\tcanCreatePage,\n\tblockEditingMode,\n} ) => {\n\tconst blockInserterAriaRole = 'listbox';\n\tconst addBlockButtonRef = useRef();\n\tconst addPageButtonRef = useRef();\n\n\t// Focus the add block button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddBlockButton ) {\n\t\t\taddBlockButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddBlockButton ] );\n\n\t// Focus the add page button when the popover is opened.\n\tuseEffect( () => {\n\t\tif ( focusAddPageButton ) {\n\t\t\taddPageButtonRef.current?.focus();\n\t\t}\n\t}, [ focusAddPageButton ] );\n\n\treturn (\n\t\t<VStack spacing={ 0 } className=\"link-ui-tools\">\n\t\t\t{ canCreatePage && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tref={ addPageButtonRef }\n\t\t\t\t\ticon={ plus }\n\t\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetAddingPage( true );\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create page' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t\t{ blockEditingMode === 'default' && (\n\t\t\t\t<Button\n\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\tref={ addBlockButtonRef }\n\t\t\t\t\ticon={ plus }\n\t\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tsetAddingBlock( true );\n\t\t\t\t\t} }\n\t\t\t\t\taria-haspopup={ blockInserterAriaRole }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Add block' ) }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t</VStack>\n\t);\n};\n\nexport default LinkUITools;\n"],"mappings":"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","ignoreList":[]}
@@ -2,16 +2,13 @@
2
2
  * WordPress dependencies
3
3
  */
4
4
  import { Button, TextControl, Notice, CheckboxControl, __experimentalVStack as VStack, __experimentalHStack as HStack } from '@wordpress/components';
5
- import { __ } from '@wordpress/i18n';
5
+ import { __, isRTL } from '@wordpress/i18n';
6
6
  import { useSelect, useDispatch } from '@wordpress/data';
7
7
  import { store as coreStore } from '@wordpress/core-data';
8
8
  import { decodeEntities } from '@wordpress/html-entities';
9
9
  import { useState } from '@wordpress/element';
10
-
11
- /**
12
- * Internal dependencies
13
- */
14
- import DialogWrapper from './dialog-wrapper';
10
+ import { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';
11
+ import { useFocusOnMount } from '@wordpress/compose';
15
12
 
16
13
  /**
17
14
  * Component for creating new pages within the Navigation Link UI.
@@ -32,6 +29,9 @@ export function LinkUIPageCreator({
32
29
  const [title, setTitle] = useState(initialTitle);
33
30
  const [shouldPublish, setShouldPublish] = useState(false);
34
31
 
32
+ // Focus the first element when the component mounts
33
+ const focusOnMountRef = useFocusOnMount('firstElement');
34
+
35
35
  // Check if the title is valid for submission
36
36
  const isTitleValid = title.trim().length > 0;
37
37
 
@@ -74,12 +74,19 @@ export function LinkUIPageCreator({
74
74
  }
75
75
  }
76
76
  const isSubmitDisabled = isSaving || !isTitleValid;
77
- return /*#__PURE__*/_jsx(DialogWrapper, {
77
+ return /*#__PURE__*/_jsxs("div", {
78
78
  className: "link-ui-page-creator",
79
- title: __('Create page'),
80
- description: __('Create a new page to add to your Navigation.'),
81
- onBack: onBack,
82
- children: /*#__PURE__*/_jsx(VStack, {
79
+ ref: focusOnMountRef,
80
+ children: [/*#__PURE__*/_jsx(Button, {
81
+ className: "link-ui-page-creator__back",
82
+ icon: isRTL() ? chevronRightSmall : chevronLeftSmall,
83
+ onClick: e => {
84
+ e.preventDefault();
85
+ onBack();
86
+ },
87
+ size: "small",
88
+ children: __('Back')
89
+ }), /*#__PURE__*/_jsx(VStack, {
83
90
  className: "link-ui-page-creator__inner",
84
91
  spacing: 4,
85
92
  children: /*#__PURE__*/_jsx("form", {
@@ -124,7 +131,7 @@ export function LinkUIPageCreator({
124
131
  })]
125
132
  })
126
133
  })
127
- })
134
+ })]
128
135
  });
129
136
  }
130
137
  //# sourceMappingURL=page-creator.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Button","TextControl","Notice","CheckboxControl","__experimentalVStack","VStack","__experimentalHStack","HStack","__","useSelect","useDispatch","store","coreStore","decodeEntities","useState","DialogWrapper","jsx","_jsx","jsxs","_jsxs","LinkUIPageCreator","postType","onBack","onPageCreated","initialTitle","title","setTitle","shouldPublish","setShouldPublish","isTitleValid","trim","length","lastError","isSaving","select","getLastEntitySaveError","isSavingEntityRecord","saveEntityRecord","createPage","event","preventDefault","savedRecord","status","throwOnError","pageLink","id","type","rendered","url","link","kind","error","isSubmitDisabled","className","description","children","spacing","onSubmit","__next40pxDefaultSize","__nextHasNoMarginBottom","label","onChange","placeholder","value","help","checked","isDismissible","message","justify","variant","onClick","disabled","accessibleWhenDisabled","isBusy"],"sources":["@wordpress/block-library/src/navigation-link/page-creator.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tTextControl,\n\tNotice,\n\tCheckboxControl,\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport DialogWrapper from './dialog-wrapper';\n\n/**\n * Component for creating new pages within the Navigation Link UI.\n *\n * @param {Object} props Component props.\n * @param {string} props.postType The post type to create.\n * @param {Function} props.onBack Callback when user wants to go back.\n * @param {Function} props.onPageCreated Callback when page is successfully created.\n * @param {string} [props.initialTitle] Initial title to pre-fill the form.\n */\nexport function LinkUIPageCreator( {\n\tpostType,\n\tonBack,\n\tonPageCreated,\n\tinitialTitle = '',\n} ) {\n\tconst [ title, setTitle ] = useState( initialTitle );\n\tconst [ shouldPublish, setShouldPublish ] = useState( false );\n\n\t// Check if the title is valid for submission\n\tconst isTitleValid = title.trim().length > 0;\n\n\t// Get the last created entity record (without ID) to track creation state\n\tconst { lastError, isSaving } = useSelect(\n\t\t( select ) => ( {\n\t\t\tlastError: select( coreStore ).getLastEntitySaveError(\n\t\t\t\t'postType',\n\t\t\t\tpostType\n\t\t\t),\n\t\t\tisSaving: select( coreStore ).isSavingEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType\n\t\t\t),\n\t\t} ),\n\t\t[ postType ]\n\t);\n\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tasync function createPage( event ) {\n\t\tevent.preventDefault();\n\t\tif ( isSaving || ! isTitleValid ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\t{\n\t\t\t\t\ttitle,\n\t\t\t\t\tstatus: shouldPublish ? 'publish' : 'draft',\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tif ( savedRecord ) {\n\t\t\t\t// Create the page link object from the saved record\n\t\t\t\tconst pageLink = {\n\t\t\t\t\tid: savedRecord.id,\n\t\t\t\t\ttype: postType,\n\t\t\t\t\ttitle: decodeEntities( savedRecord.title.rendered ),\n\t\t\t\t\turl: savedRecord.link,\n\t\t\t\t\tkind: 'post-type',\n\t\t\t\t};\n\n\t\t\t\tonPageCreated( pageLink );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\t// Error handling is done via the data store selectors\n\t\t}\n\t}\n\n\tconst isSubmitDisabled = isSaving || ! isTitleValid;\n\n\treturn (\n\t\t<DialogWrapper\n\t\t\tclassName=\"link-ui-page-creator\"\n\t\t\ttitle={ __( 'Create page' ) }\n\t\t\tdescription={ __( 'Create a new page to add to your Navigation.' ) }\n\t\t\tonBack={ onBack }\n\t\t>\n\t\t\t<VStack className=\"link-ui-page-creator__inner\" spacing={ 4 }>\n\t\t\t\t<form onSubmit={ createPage }>\n\t\t\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Title' ) }\n\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\tplaceholder={ __( 'No title' ) }\n\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Publish immediately' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'If unchecked, the page will be created as a draft.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tchecked={ shouldPublish }\n\t\t\t\t\t\t\tonChange={ setShouldPublish }\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{ lastError && (\n\t\t\t\t\t\t\t<Notice status=\"error\" isDismissible={ false }>\n\t\t\t\t\t\t\t\t{ lastError.message }\n\t\t\t\t\t\t\t</Notice>\n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t<HStack spacing={ 2 } justify=\"flex-end\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\tonClick={ onBack }\n\t\t\t\t\t\t\t\tdisabled={ isSaving }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t\t\taria-disabled={ isSubmitDisabled }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Create page' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</VStack>\n\t\t\t\t</form>\n\t\t\t</VStack>\n\t\t</DialogWrapper>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Button","TextControl","Notice","CheckboxControl","__experimentalVStack","VStack","__experimentalHStack","HStack","__","isRTL","useSelect","useDispatch","store","coreStore","decodeEntities","useState","chevronLeftSmall","chevronRightSmall","useFocusOnMount","jsx","_jsx","jsxs","_jsxs","LinkUIPageCreator","postType","onBack","onPageCreated","initialTitle","title","setTitle","shouldPublish","setShouldPublish","focusOnMountRef","isTitleValid","trim","length","lastError","isSaving","select","getLastEntitySaveError","isSavingEntityRecord","saveEntityRecord","createPage","event","preventDefault","savedRecord","status","throwOnError","pageLink","id","type","rendered","url","link","kind","error","isSubmitDisabled","className","ref","children","icon","onClick","e","size","spacing","onSubmit","__next40pxDefaultSize","__nextHasNoMarginBottom","label","onChange","placeholder","value","help","checked","isDismissible","message","justify","variant","disabled","accessibleWhenDisabled","isBusy"],"sources":["@wordpress/block-library/src/navigation-link/page-creator.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tTextControl,\n\tNotice,\n\tCheckboxControl,\n\t__experimentalVStack as VStack,\n\t__experimentalHStack as HStack,\n} from '@wordpress/components';\nimport { __, isRTL } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useState } from '@wordpress/element';\nimport { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';\nimport { useFocusOnMount } from '@wordpress/compose';\n\n/**\n * Component for creating new pages within the Navigation Link UI.\n *\n * @param {Object} props Component props.\n * @param {string} props.postType The post type to create.\n * @param {Function} props.onBack Callback when user wants to go back.\n * @param {Function} props.onPageCreated Callback when page is successfully created.\n * @param {string} [props.initialTitle] Initial title to pre-fill the form.\n */\nexport function LinkUIPageCreator( {\n\tpostType,\n\tonBack,\n\tonPageCreated,\n\tinitialTitle = '',\n} ) {\n\tconst [ title, setTitle ] = useState( initialTitle );\n\tconst [ shouldPublish, setShouldPublish ] = useState( false );\n\n\t// Focus the first element when the component mounts\n\tconst focusOnMountRef = useFocusOnMount( 'firstElement' );\n\n\t// Check if the title is valid for submission\n\tconst isTitleValid = title.trim().length > 0;\n\n\t// Get the last created entity record (without ID) to track creation state\n\tconst { lastError, isSaving } = useSelect(\n\t\t( select ) => ( {\n\t\t\tlastError: select( coreStore ).getLastEntitySaveError(\n\t\t\t\t'postType',\n\t\t\t\tpostType\n\t\t\t),\n\t\t\tisSaving: select( coreStore ).isSavingEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType\n\t\t\t),\n\t\t} ),\n\t\t[ postType ]\n\t);\n\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\n\tasync function createPage( event ) {\n\t\tevent.preventDefault();\n\t\tif ( isSaving || ! isTitleValid ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst savedRecord = await saveEntityRecord(\n\t\t\t\t'postType',\n\t\t\t\tpostType,\n\t\t\t\t{\n\t\t\t\t\ttitle,\n\t\t\t\t\tstatus: shouldPublish ? 'publish' : 'draft',\n\t\t\t\t},\n\t\t\t\t{ throwOnError: true }\n\t\t\t);\n\n\t\t\tif ( savedRecord ) {\n\t\t\t\t// Create the page link object from the saved record\n\t\t\t\tconst pageLink = {\n\t\t\t\t\tid: savedRecord.id,\n\t\t\t\t\ttype: postType,\n\t\t\t\t\ttitle: decodeEntities( savedRecord.title.rendered ),\n\t\t\t\t\turl: savedRecord.link,\n\t\t\t\t\tkind: 'post-type',\n\t\t\t\t};\n\n\t\t\t\tonPageCreated( pageLink );\n\t\t\t}\n\t\t} catch ( error ) {\n\t\t\t// Error handling is done via the data store selectors\n\t\t}\n\t}\n\n\tconst isSubmitDisabled = isSaving || ! isTitleValid;\n\n\treturn (\n\t\t<div className=\"link-ui-page-creator\" ref={ focusOnMountRef }>\n\t\t\t<Button\n\t\t\t\tclassName=\"link-ui-page-creator__back\"\n\t\t\t\ticon={ isRTL() ? chevronRightSmall : chevronLeftSmall }\n\t\t\t\tonClick={ ( e ) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonBack();\n\t\t\t\t} }\n\t\t\t\tsize=\"small\"\n\t\t\t>\n\t\t\t\t{ __( 'Back' ) }\n\t\t\t</Button>\n\n\t\t\t<VStack className=\"link-ui-page-creator__inner\" spacing={ 4 }>\n\t\t\t\t<form onSubmit={ createPage }>\n\t\t\t\t\t<VStack spacing={ 4 }>\n\t\t\t\t\t\t<TextControl\n\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Title' ) }\n\t\t\t\t\t\t\tonChange={ setTitle }\n\t\t\t\t\t\t\tplaceholder={ __( 'No title' ) }\n\t\t\t\t\t\t\tvalue={ title }\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t__nextHasNoMarginBottom\n\t\t\t\t\t\t\tlabel={ __( 'Publish immediately' ) }\n\t\t\t\t\t\t\thelp={ __(\n\t\t\t\t\t\t\t\t'If unchecked, the page will be created as a draft.'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\tchecked={ shouldPublish }\n\t\t\t\t\t\t\tonChange={ setShouldPublish }\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{ lastError && (\n\t\t\t\t\t\t\t<Notice status=\"error\" isDismissible={ false }>\n\t\t\t\t\t\t\t\t{ lastError.message }\n\t\t\t\t\t\t\t</Notice>\n\t\t\t\t\t\t) }\n\n\t\t\t\t\t\t<HStack spacing={ 2 } justify=\"flex-end\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\tonClick={ onBack }\n\t\t\t\t\t\t\t\tdisabled={ isSaving }\n\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\t\tisBusy={ isSaving }\n\t\t\t\t\t\t\t\taria-disabled={ isSubmitDisabled }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Create page' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</HStack>\n\t\t\t\t\t</VStack>\n\t\t\t\t</form>\n\t\t\t</VStack>\n\t\t</div>\n\t);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA,SACCA,MAAM,EACNC,WAAW,EACXC,MAAM,EACNC,eAAe,EACfC,oBAAoB,IAAIC,MAAM,EAC9BC,oBAAoB,IAAIC,MAAM,QACxB,uBAAuB;AAC9B,SAASC,EAAE,EAAEC,KAAK,QAAQ,iBAAiB;AAC3C,SAASC,SAAS,EAAEC,WAAW,QAAQ,iBAAiB;AACxD,SAASC,KAAK,IAAIC,SAAS,QAAQ,sBAAsB;AACzD,SAASC,cAAc,QAAQ,0BAA0B;AACzD,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,kBAAkB;AACtE,SAASC,eAAe,QAAQ,oBAAoB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AASA,OAAO,SAASC,iBAAiBA,CAAE;EAClCC,QAAQ;EACRC,MAAM;EACNC,aAAa;EACbC,YAAY,GAAG;AAChB,CAAC,EAAG;EACH,MAAM,CAAEC,KAAK,EAAEC,QAAQ,CAAE,GAAGd,QAAQ,CAAEY,YAAa,CAAC;EACpD,MAAM,CAAEG,aAAa,EAAEC,gBAAgB,CAAE,GAAGhB,QAAQ,CAAE,KAAM,CAAC;;EAE7D;EACA,MAAMiB,eAAe,GAAGd,eAAe,CAAE,cAAe,CAAC;;EAEzD;EACA,MAAMe,YAAY,GAAGL,KAAK,CAACM,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC;;EAE5C;EACA,MAAM;IAAEC,SAAS;IAAEC;EAAS,CAAC,GAAG3B,SAAS,CACtC4B,MAAM,KAAQ;IACfF,SAAS,EAAEE,MAAM,CAAEzB,SAAU,CAAC,CAAC0B,sBAAsB,CACpD,UAAU,EACVf,QACD,CAAC;IACDa,QAAQ,EAAEC,MAAM,CAAEzB,SAAU,CAAC,CAAC2B,oBAAoB,CACjD,UAAU,EACVhB,QACD;EACD,CAAC,CAAE,EACH,CAAEA,QAAQ,CACX,CAAC;EAED,MAAM;IAAEiB;EAAiB,CAAC,GAAG9B,WAAW,CAAEE,SAAU,CAAC;EAErD,eAAe6B,UAAUA,CAAEC,KAAK,EAAG;IAClCA,KAAK,CAACC,cAAc,CAAC,CAAC;IACtB,IAAKP,QAAQ,IAAI,CAAEJ,YAAY,EAAG;MACjC;IACD;IAEA,IAAI;MACH,MAAMY,WAAW,GAAG,MAAMJ,gBAAgB,CACzC,UAAU,EACVjB,QAAQ,EACR;QACCI,KAAK;QACLkB,MAAM,EAAEhB,aAAa,GAAG,SAAS,GAAG;MACrC,CAAC,EACD;QAAEiB,YAAY,EAAE;MAAK,CACtB,CAAC;MAED,IAAKF,WAAW,EAAG;QAClB;QACA,MAAMG,QAAQ,GAAG;UAChBC,EAAE,EAAEJ,WAAW,CAACI,EAAE;UAClBC,IAAI,EAAE1B,QAAQ;UACdI,KAAK,EAAEd,cAAc,CAAE+B,WAAW,CAACjB,KAAK,CAACuB,QAAS,CAAC;UACnDC,GAAG,EAAEP,WAAW,CAACQ,IAAI;UACrBC,IAAI,EAAE;QACP,CAAC;QAED5B,aAAa,CAAEsB,QAAS,CAAC;MAC1B;IACD,CAAC,CAAC,OAAQO,KAAK,EAAG;MACjB;IAAA;EAEF;EAEA,MAAMC,gBAAgB,GAAGnB,QAAQ,IAAI,CAAEJ,YAAY;EAEnD,oBACCX,KAAA;IAAKmC,SAAS,EAAC,sBAAsB;IAACC,GAAG,EAAG1B,eAAiB;IAAA2B,QAAA,gBAC5DvC,IAAA,CAACpB,MAAM;MACNyD,SAAS,EAAC,4BAA4B;MACtCG,IAAI,EAAGnD,KAAK,CAAC,CAAC,GAAGQ,iBAAiB,GAAGD,gBAAkB;MACvD6C,OAAO,EAAKC,CAAC,IAAM;QAClBA,CAAC,CAAClB,cAAc,CAAC,CAAC;QAClBnB,MAAM,CAAC,CAAC;MACT,CAAG;MACHsC,IAAI,EAAC,OAAO;MAAAJ,QAAA,EAEVnD,EAAE,CAAE,MAAO;IAAC,CACP,CAAC,eAETY,IAAA,CAACf,MAAM;MAACoD,SAAS,EAAC,6BAA6B;MAACO,OAAO,EAAG,CAAG;MAAAL,QAAA,eAC5DvC,IAAA;QAAM6C,QAAQ,EAAGvB,UAAY;QAAAiB,QAAA,eAC5BrC,KAAA,CAACjB,MAAM;UAAC2D,OAAO,EAAG,CAAG;UAAAL,QAAA,gBACpBvC,IAAA,CAACnB,WAAW;YACXiE,qBAAqB;YACrBC,uBAAuB;YACvBC,KAAK,EAAG5D,EAAE,CAAE,OAAQ,CAAG;YACvB6D,QAAQ,EAAGxC,QAAU;YACrByC,WAAW,EAAG9D,EAAE,CAAE,UAAW,CAAG;YAChC+D,KAAK,EAAG3C;UAAO,CACf,CAAC,eAEFR,IAAA,CAACjB,eAAe;YACfgE,uBAAuB;YACvBC,KAAK,EAAG5D,EAAE,CAAE,qBAAsB,CAAG;YACrCgE,IAAI,EAAGhE,EAAE,CACR,oDACD,CAAG;YACHiE,OAAO,EAAG3C,aAAe;YACzBuC,QAAQ,EAAGtC;UAAkB,CAC7B,CAAC,EAEAK,SAAS,iBACVhB,IAAA,CAAClB,MAAM;YAAC4C,MAAM,EAAC,OAAO;YAAC4B,aAAa,EAAG,KAAO;YAAAf,QAAA,EAC3CvB,SAAS,CAACuC;UAAO,CACZ,CACR,eAEDrD,KAAA,CAACf,MAAM;YAACyD,OAAO,EAAG,CAAG;YAACY,OAAO,EAAC,UAAU;YAAAjB,QAAA,gBACvCvC,IAAA,CAACpB,MAAM;cACNkE,qBAAqB;cACrBW,OAAO,EAAC,UAAU;cAClBhB,OAAO,EAAGpC,MAAQ;cAClBqD,QAAQ,EAAGzC,QAAU;cACrB0C,sBAAsB;cAAApB,QAAA,EAEpBnD,EAAE,CAAE,QAAS;YAAC,CACT,CAAC,eACTY,IAAA,CAACpB,MAAM;cACNkE,qBAAqB;cACrBW,OAAO,EAAC,SAAS;cACjB3B,IAAI,EAAC,QAAQ;cACb8B,MAAM,EAAG3C,QAAU;cACnB,iBAAgBmB,gBAAkB;cAAAG,QAAA,EAEhCnD,EAAE,CAAE,aAAc;YAAC,CACd,CAAC;UAAA,CACF,CAAC;QAAA,CACF;MAAC,CACJ;IAAC,CACA,CAAC;EAAA,CACL,CAAC;AAER","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/block-library",
3
- "version": "9.30.1-next.6870dfe5b.0",
3
+ "version": "9.30.1-next.836ecdcae.0",
4
4
  "description": "Block library for the WordPress editor.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -42,39 +42,39 @@
42
42
  ],
43
43
  "dependencies": {
44
44
  "@babel/runtime": "7.25.7",
45
- "@wordpress/a11y": "^4.30.1-next.6870dfe5b.0",
46
- "@wordpress/api-fetch": "^7.30.1-next.6870dfe5b.0",
47
- "@wordpress/autop": "^4.30.1-next.6870dfe5b.0",
48
- "@wordpress/blob": "^4.30.1-next.6870dfe5b.0",
49
- "@wordpress/block-editor": "^15.3.1-next.6870dfe5b.0",
50
- "@wordpress/blocks": "^15.3.1-next.6870dfe5b.0",
51
- "@wordpress/components": "^30.3.2-next.6870dfe5b.0",
52
- "@wordpress/compose": "^7.30.1-next.6870dfe5b.0",
53
- "@wordpress/core-data": "^7.30.1-next.6870dfe5b.0",
54
- "@wordpress/data": "^10.30.1-next.6870dfe5b.0",
55
- "@wordpress/date": "^5.30.1-next.6870dfe5b.0",
56
- "@wordpress/deprecated": "^4.30.1-next.6870dfe5b.0",
57
- "@wordpress/dom": "^4.30.1-next.6870dfe5b.0",
58
- "@wordpress/element": "^6.30.1-next.6870dfe5b.0",
59
- "@wordpress/escape-html": "^3.30.1-next.6870dfe5b.0",
60
- "@wordpress/hooks": "^4.30.1-next.6870dfe5b.0",
61
- "@wordpress/html-entities": "^4.30.1-next.6870dfe5b.0",
62
- "@wordpress/i18n": "^6.3.1-next.6870dfe5b.0",
63
- "@wordpress/icons": "^10.30.1-next.6870dfe5b.0",
64
- "@wordpress/interactivity": "^6.30.1-next.6870dfe5b.0",
65
- "@wordpress/interactivity-router": "^2.30.1-next.6870dfe5b.0",
66
- "@wordpress/keyboard-shortcuts": "^5.30.1-next.6870dfe5b.0",
67
- "@wordpress/keycodes": "^4.30.1-next.6870dfe5b.0",
68
- "@wordpress/notices": "^5.30.1-next.6870dfe5b.0",
69
- "@wordpress/patterns": "^2.30.1-next.6870dfe5b.0",
70
- "@wordpress/primitives": "^4.30.1-next.6870dfe5b.0",
71
- "@wordpress/private-apis": "^1.30.1-next.6870dfe5b.0",
72
- "@wordpress/reusable-blocks": "^5.30.1-next.6870dfe5b.0",
73
- "@wordpress/rich-text": "^7.30.1-next.6870dfe5b.0",
74
- "@wordpress/server-side-render": "^6.6.1-next.6870dfe5b.0",
75
- "@wordpress/url": "^4.30.1-next.6870dfe5b.0",
76
- "@wordpress/viewport": "^6.30.1-next.6870dfe5b.0",
77
- "@wordpress/wordcount": "^4.30.1-next.6870dfe5b.0",
45
+ "@wordpress/a11y": "^4.30.1-next.836ecdcae.0",
46
+ "@wordpress/api-fetch": "^7.30.1-next.836ecdcae.0",
47
+ "@wordpress/autop": "^4.30.1-next.836ecdcae.0",
48
+ "@wordpress/blob": "^4.30.1-next.836ecdcae.0",
49
+ "@wordpress/block-editor": "^15.3.1-next.836ecdcae.0",
50
+ "@wordpress/blocks": "^15.3.1-next.836ecdcae.0",
51
+ "@wordpress/components": "^30.3.2-next.836ecdcae.0",
52
+ "@wordpress/compose": "^7.30.1-next.836ecdcae.0",
53
+ "@wordpress/core-data": "^7.30.1-next.836ecdcae.0",
54
+ "@wordpress/data": "^10.30.1-next.836ecdcae.0",
55
+ "@wordpress/date": "^5.30.1-next.836ecdcae.0",
56
+ "@wordpress/deprecated": "^4.30.1-next.836ecdcae.0",
57
+ "@wordpress/dom": "^4.30.1-next.836ecdcae.0",
58
+ "@wordpress/element": "^6.30.1-next.836ecdcae.0",
59
+ "@wordpress/escape-html": "^3.30.1-next.836ecdcae.0",
60
+ "@wordpress/hooks": "^4.30.1-next.836ecdcae.0",
61
+ "@wordpress/html-entities": "^4.30.1-next.836ecdcae.0",
62
+ "@wordpress/i18n": "^6.3.1-next.836ecdcae.0",
63
+ "@wordpress/icons": "^10.30.1-next.836ecdcae.0",
64
+ "@wordpress/interactivity": "^6.30.1-next.836ecdcae.0",
65
+ "@wordpress/interactivity-router": "^2.30.1-next.836ecdcae.0",
66
+ "@wordpress/keyboard-shortcuts": "^5.30.1-next.836ecdcae.0",
67
+ "@wordpress/keycodes": "^4.30.1-next.836ecdcae.0",
68
+ "@wordpress/notices": "^5.30.1-next.836ecdcae.0",
69
+ "@wordpress/patterns": "^2.30.1-next.836ecdcae.0",
70
+ "@wordpress/primitives": "^4.30.1-next.836ecdcae.0",
71
+ "@wordpress/private-apis": "^1.30.1-next.836ecdcae.0",
72
+ "@wordpress/reusable-blocks": "^5.30.1-next.836ecdcae.0",
73
+ "@wordpress/rich-text": "^7.30.1-next.836ecdcae.0",
74
+ "@wordpress/server-side-render": "^6.6.1-next.836ecdcae.0",
75
+ "@wordpress/url": "^4.30.1-next.836ecdcae.0",
76
+ "@wordpress/viewport": "^6.30.1-next.836ecdcae.0",
77
+ "@wordpress/wordcount": "^4.30.1-next.836ecdcae.0",
78
78
  "change-case": "^4.1.2",
79
79
  "clsx": "^2.1.1",
80
80
  "colord": "^2.7.0",
@@ -92,5 +92,5 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "gitHead": "c8637da9df499cd7b6b07c9fad918f6d45f4de3d"
95
+ "gitHead": "3e60b4c1e78d7b27acbf1d7dd172bbd64358a0f2"
96
96
  }
@@ -8,8 +8,13 @@ import {
8
8
  VisuallyHidden,
9
9
  __experimentalVStack as VStack,
10
10
  } from '@wordpress/components';
11
- import { __ } from '@wordpress/i18n';
12
- import { LinkControl, useBlockEditingMode } from '@wordpress/block-editor';
11
+ import { __, isRTL } from '@wordpress/i18n';
12
+ import {
13
+ LinkControl,
14
+ store as blockEditorStore,
15
+ privateApis as blockEditorPrivateApis,
16
+ useBlockEditingMode,
17
+ } from '@wordpress/block-editor';
13
18
  import {
14
19
  useMemo,
15
20
  useState,
@@ -18,14 +23,19 @@ import {
18
23
  forwardRef,
19
24
  } from '@wordpress/element';
20
25
  import { useResourcePermissions } from '@wordpress/core-data';
21
- import { plus } from '@wordpress/icons';
22
- import { useInstanceId } from '@wordpress/compose';
26
+ import { useSelect } from '@wordpress/data';
27
+ import { chevronLeftSmall, chevronRightSmall, plus } from '@wordpress/icons';
28
+ import { useInstanceId, useFocusOnMount } from '@wordpress/compose';
23
29
 
24
30
  /**
25
31
  * Internal dependencies
26
32
  */
33
+ import { unlock } from '../lock-unlock';
27
34
  import { LinkUIPageCreator } from './page-creator';
28
- import LinkUIBlockInserter from './block-inserter';
35
+
36
+ const { PrivateQuickInserter: QuickInserter } = unlock(
37
+ blockEditorPrivateApis
38
+ );
29
39
 
30
40
  /**
31
41
  * Given the Link block's type attribute, return the query params to give to
@@ -65,6 +75,74 @@ export function getSuggestionsQuery( type, kind ) {
65
75
  }
66
76
  }
67
77
 
78
+ function LinkUIBlockInserter( { clientId, onBack, onBlockInsert } ) {
79
+ const { rootBlockClientId } = useSelect(
80
+ ( select ) => {
81
+ const { getBlockRootClientId } = select( blockEditorStore );
82
+
83
+ return {
84
+ rootBlockClientId: getBlockRootClientId( clientId ),
85
+ };
86
+ },
87
+ [ clientId ]
88
+ );
89
+
90
+ const focusOnMountRef = useFocusOnMount( 'firstElement' );
91
+
92
+ const dialogTitleId = useInstanceId(
93
+ LinkControl,
94
+ `link-ui-block-inserter__title`
95
+ );
96
+ const dialogDescriptionId = useInstanceId(
97
+ LinkControl,
98
+ `link-ui-block-inserter__description`
99
+ );
100
+
101
+ if ( ! clientId ) {
102
+ return null;
103
+ }
104
+
105
+ return (
106
+ <div
107
+ className="link-ui-block-inserter"
108
+ role="dialog"
109
+ aria-labelledby={ dialogTitleId }
110
+ aria-describedby={ dialogDescriptionId }
111
+ ref={ focusOnMountRef }
112
+ >
113
+ <VisuallyHidden>
114
+ <h2 id={ dialogTitleId }>{ __( 'Add block' ) }</h2>
115
+
116
+ <p id={ dialogDescriptionId }>
117
+ { __( 'Choose a block to add to your Navigation.' ) }
118
+ </p>
119
+ </VisuallyHidden>
120
+
121
+ <Button
122
+ className="link-ui-block-inserter__back"
123
+ icon={ isRTL() ? chevronRightSmall : chevronLeftSmall }
124
+ onClick={ ( e ) => {
125
+ e.preventDefault();
126
+ onBack();
127
+ } }
128
+ size="small"
129
+ >
130
+ { __( 'Back' ) }
131
+ </Button>
132
+
133
+ <QuickInserter
134
+ rootClientId={ rootBlockClientId }
135
+ clientId={ clientId }
136
+ isAppender={ false }
137
+ prioritizePatterns={ false }
138
+ selectBlockOnInsert={ ! onBlockInsert }
139
+ onSelect={ onBlockInsert ? onBlockInsert : undefined }
140
+ hasSearch={ false }
141
+ />
142
+ </div>
143
+ );
144
+ }
145
+
68
146
  function UnforwardedLinkUI( props, ref ) {
69
147
  const { label, url, opensInNewTab, type, kind } = props.link;
70
148
  const postType = type || 'page';
@@ -98,11 +176,11 @@ function UnforwardedLinkUI( props, ref ) {
98
176
 
99
177
  const dialogTitleId = useInstanceId(
100
178
  LinkUI,
101
- 'link-ui-link-control__title'
179
+ `link-ui-link-control__title`
102
180
  );
103
181
  const dialogDescriptionId = useInstanceId(
104
182
  LinkUI,
105
- 'link-ui-link-control__description'
183
+ `link-ui-link-control__description`
106
184
  );
107
185
 
108
186
  const blockEditingMode = useBlockEditingMode();
@@ -142,13 +220,8 @@ function UnforwardedLinkUI( props, ref ) {
142
220
  onChange={ props.onChange }
143
221
  onRemove={ props.onRemove }
144
222
  onCancel={ props.onCancel }
145
- renderControlBottom={ () => {
146
- // Don't show the tools when there is submitted link (preview state).
147
- if ( link?.url?.length ) {
148
- return null;
149
- }
150
-
151
- return (
223
+ renderControlBottom={ () =>
224
+ ! link?.url?.length && (
152
225
  <LinkUITools
153
226
  focusAddBlockButton={ focusAddBlockButton }
154
227
  focusAddPageButton={ focusAddPageButton }
@@ -160,16 +233,11 @@ function UnforwardedLinkUI( props, ref ) {
160
233
  setAddingPage( true );
161
234
  setFocusAddPageButton( false );
162
235
  } }
163
- canAddPage={
164
- permissions?.canCreate &&
165
- type === 'page'
166
- }
167
- canAddBlock={
168
- blockEditingMode === 'default'
169
- }
236
+ canCreatePage={ permissions.canCreate }
237
+ blockEditingMode={ blockEditingMode }
170
238
  />
171
- );
172
- } }
239
+ )
240
+ }
173
241
  />
174
242
  </div>
175
243
  ) }
@@ -209,8 +277,8 @@ const LinkUITools = ( {
209
277
  setAddingPage,
210
278
  focusAddBlockButton,
211
279
  focusAddPageButton,
212
- canAddPage,
213
- canAddBlock,
280
+ canCreatePage,
281
+ blockEditingMode,
214
282
  } ) => {
215
283
  const blockInserterAriaRole = 'listbox';
216
284
  const addBlockButtonRef = useRef();
@@ -230,14 +298,9 @@ const LinkUITools = ( {
230
298
  }
231
299
  }, [ focusAddPageButton ] );
232
300
 
233
- // Don't render anything if neither button should be shown
234
- if ( ! canAddPage && ! canAddBlock ) {
235
- return null;
236
- }
237
-
238
301
  return (
239
302
  <VStack spacing={ 0 } className="link-ui-tools">
240
- { canAddPage && (
303
+ { canCreatePage && (
241
304
  <Button
242
305
  __next40pxDefaultSize
243
306
  ref={ addPageButtonRef }
@@ -251,7 +314,7 @@ const LinkUITools = ( {
251
314
  { __( 'Create page' ) }
252
315
  </Button>
253
316
  ) }
254
- { canAddBlock && (
317
+ { blockEditingMode === 'default' && (
255
318
  <Button
256
319
  __next40pxDefaultSize
257
320
  ref={ addBlockButtonRef }
@@ -9,16 +9,13 @@ import {
9
9
  __experimentalVStack as VStack,
10
10
  __experimentalHStack as HStack,
11
11
  } from '@wordpress/components';
12
- import { __ } from '@wordpress/i18n';
12
+ import { __, isRTL } from '@wordpress/i18n';
13
13
  import { useSelect, useDispatch } from '@wordpress/data';
14
14
  import { store as coreStore } from '@wordpress/core-data';
15
15
  import { decodeEntities } from '@wordpress/html-entities';
16
16
  import { useState } from '@wordpress/element';
17
-
18
- /**
19
- * Internal dependencies
20
- */
21
- import DialogWrapper from './dialog-wrapper';
17
+ import { chevronLeftSmall, chevronRightSmall } from '@wordpress/icons';
18
+ import { useFocusOnMount } from '@wordpress/compose';
22
19
 
23
20
  /**
24
21
  * Component for creating new pages within the Navigation Link UI.
@@ -38,6 +35,9 @@ export function LinkUIPageCreator( {
38
35
  const [ title, setTitle ] = useState( initialTitle );
39
36
  const [ shouldPublish, setShouldPublish ] = useState( false );
40
37
 
38
+ // Focus the first element when the component mounts
39
+ const focusOnMountRef = useFocusOnMount( 'firstElement' );
40
+
41
41
  // Check if the title is valid for submission
42
42
  const isTitleValid = title.trim().length > 0;
43
43
 
@@ -95,12 +95,19 @@ export function LinkUIPageCreator( {
95
95
  const isSubmitDisabled = isSaving || ! isTitleValid;
96
96
 
97
97
  return (
98
- <DialogWrapper
99
- className="link-ui-page-creator"
100
- title={ __( 'Create page' ) }
101
- description={ __( 'Create a new page to add to your Navigation.' ) }
102
- onBack={ onBack }
103
- >
98
+ <div className="link-ui-page-creator" ref={ focusOnMountRef }>
99
+ <Button
100
+ className="link-ui-page-creator__back"
101
+ icon={ isRTL() ? chevronRightSmall : chevronLeftSmall }
102
+ onClick={ ( e ) => {
103
+ e.preventDefault();
104
+ onBack();
105
+ } }
106
+ size="small"
107
+ >
108
+ { __( 'Back' ) }
109
+ </Button>
110
+
104
111
  <VStack className="link-ui-page-creator__inner" spacing={ 4 }>
105
112
  <form onSubmit={ createPage }>
106
113
  <VStack spacing={ 4 }>
@@ -152,6 +159,6 @@ export function LinkUIPageCreator( {
152
159
  </VStack>
153
160
  </form>
154
161
  </VStack>
155
- </DialogWrapper>
162
+ </div>
156
163
  );
157
164
  }
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _i18n = require("@wordpress/i18n");
9
- var _data = require("@wordpress/data");
10
- var _blockEditor = require("@wordpress/block-editor");
11
- var _dialogWrapper = _interopRequireDefault(require("./dialog-wrapper"));
12
- var _lockUnlock = require("../lock-unlock");
13
- var _jsxRuntime = require("react/jsx-runtime");
14
- /**
15
- * WordPress dependencies
16
- */
17
-
18
- /**
19
- * Internal dependencies
20
- */
21
-
22
- const {
23
- PrivateQuickInserter: QuickInserter
24
- } = (0, _lockUnlock.unlock)(_blockEditor.privateApis);
25
-
26
- /**
27
- * Component for inserting blocks within the Navigation Link UI.
28
- *
29
- * @param {Object} props Component props.
30
- * @param {string} props.clientId Client ID of the navigation link block.
31
- * @param {Function} props.onBack Callback when user wants to go back.
32
- * @param {Function} props.onBlockInsert Callback when a block is inserted.
33
- */
34
- function LinkUIBlockInserter({
35
- clientId,
36
- onBack,
37
- onBlockInsert
38
- }) {
39
- const {
40
- rootBlockClientId
41
- } = (0, _data.useSelect)(select => {
42
- const {
43
- getBlockRootClientId
44
- } = select(_blockEditor.store);
45
- return {
46
- rootBlockClientId: getBlockRootClientId(clientId)
47
- };
48
- }, [clientId]);
49
- if (!clientId) {
50
- return null;
51
- }
52
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_dialogWrapper.default, {
53
- className: "link-ui-block-inserter",
54
- title: (0, _i18n.__)('Add block'),
55
- description: (0, _i18n.__)('Choose a block to add to your Navigation.'),
56
- onBack: onBack,
57
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(QuickInserter, {
58
- rootClientId: rootBlockClientId,
59
- clientId: clientId,
60
- isAppender: false,
61
- prioritizePatterns: false,
62
- selectBlockOnInsert: !onBlockInsert,
63
- onSelect: onBlockInsert ? onBlockInsert : undefined,
64
- hasSearch: false
65
- })
66
- });
67
- }
68
- var _default = exports.default = LinkUIBlockInserter;
69
- //# sourceMappingURL=block-inserter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_i18n","require","_data","_blockEditor","_dialogWrapper","_interopRequireDefault","_lockUnlock","_jsxRuntime","PrivateQuickInserter","QuickInserter","unlock","blockEditorPrivateApis","LinkUIBlockInserter","clientId","onBack","onBlockInsert","rootBlockClientId","useSelect","select","getBlockRootClientId","blockEditorStore","jsx","default","className","title","__","description","children","rootClientId","isAppender","prioritizePatterns","selectBlockOnInsert","onSelect","undefined","hasSearch","_default","exports"],"sources":["@wordpress/block-library/src/navigation-link/block-inserter.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tstore as blockEditorStore,\n\tprivateApis as blockEditorPrivateApis,\n} from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport DialogWrapper from './dialog-wrapper';\nimport { unlock } from '../lock-unlock';\n\nconst { PrivateQuickInserter: QuickInserter } = unlock(\n\tblockEditorPrivateApis\n);\n\n/**\n * Component for inserting blocks within the Navigation Link UI.\n *\n * @param {Object} props Component props.\n * @param {string} props.clientId Client ID of the navigation link block.\n * @param {Function} props.onBack Callback when user wants to go back.\n * @param {Function} props.onBlockInsert Callback when a block is inserted.\n */\nfunction LinkUIBlockInserter( { clientId, onBack, onBlockInsert } ) {\n\tconst { rootBlockClientId } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockRootClientId } = select( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\trootBlockClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tif ( ! clientId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DialogWrapper\n\t\t\tclassName=\"link-ui-block-inserter\"\n\t\t\ttitle={ __( 'Add block' ) }\n\t\t\tdescription={ __( 'Choose a block to add to your Navigation.' ) }\n\t\t\tonBack={ onBack }\n\t\t>\n\t\t\t<QuickInserter\n\t\t\t\trootClientId={ rootBlockClientId }\n\t\t\t\tclientId={ clientId }\n\t\t\t\tisAppender={ false }\n\t\t\t\tprioritizePatterns={ false }\n\t\t\t\tselectBlockOnInsert={ ! onBlockInsert }\n\t\t\t\tonSelect={ onBlockInsert ? onBlockInsert : undefined }\n\t\t\t\thasSearch={ false }\n\t\t\t/>\n\t\t</DialogWrapper>\n\t);\n}\n\nexport default LinkUIBlockInserter;\n"],"mappings":";;;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAQA,IAAAG,cAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AAAwC,IAAAM,WAAA,GAAAN,OAAA;AAdxC;AACA;AACA;;AAQA;AACA;AACA;;AAIA,MAAM;EAAEO,oBAAoB,EAAEC;AAAc,CAAC,GAAG,IAAAC,kBAAM,EACrDC,wBACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,mBAAmBA,CAAE;EAAEC,QAAQ;EAAEC,MAAM;EAAEC;AAAc,CAAC,EAAG;EACnE,MAAM;IAAEC;EAAkB,CAAC,GAAG,IAAAC,eAAS,EACpCC,MAAM,IAAM;IACb,MAAM;MAAEC;IAAqB,CAAC,GAAGD,MAAM,CAAEE,kBAAiB,CAAC;IAE3D,OAAO;MACNJ,iBAAiB,EAAEG,oBAAoB,CAAEN,QAAS;IACnD,CAAC;EACF,CAAC,EACD,CAAEA,QAAQ,CACX,CAAC;EAED,IAAK,CAAEA,QAAQ,EAAG;IACjB,OAAO,IAAI;EACZ;EAEA,oBACC,IAAAN,WAAA,CAAAc,GAAA,EAACjB,cAAA,CAAAkB,OAAa;IACbC,SAAS,EAAC,wBAAwB;IAClCC,KAAK,EAAG,IAAAC,QAAE,EAAE,WAAY,CAAG;IAC3BC,WAAW,EAAG,IAAAD,QAAE,EAAE,2CAA4C,CAAG;IACjEX,MAAM,EAAGA,MAAQ;IAAAa,QAAA,eAEjB,IAAApB,WAAA,CAAAc,GAAA,EAACZ,aAAa;MACbmB,YAAY,EAAGZ,iBAAmB;MAClCH,QAAQ,EAAGA,QAAU;MACrBgB,UAAU,EAAG,KAAO;MACpBC,kBAAkB,EAAG,KAAO;MAC5BC,mBAAmB,EAAG,CAAEhB,aAAe;MACvCiB,QAAQ,EAAGjB,aAAa,GAAGA,aAAa,GAAGkB,SAAW;MACtDC,SAAS,EAAG;IAAO,CACnB;EAAC,CACY,CAAC;AAElB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAd,OAAA,GAEcV,mBAAmB","ignoreList":[]}