UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 4.38 kB
{ "version": 3, "sources": ["../../../src/components/default-block-appender/index.js"], "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { decodeEntities } from '@wordpress/html-entities';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { ENTER, SPACE } from '@wordpress/keycodes';\n\n/**\n * Internal dependencies\n */\nimport Inserter from '../inserter';\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Zero width non-breaking space, used as padding for the paragraph when it is\n * empty.\n */\nexport const ZWNBSP = '\\ufeff';\n\nexport default function DefaultBlockAppender( { rootClientId } ) {\n\tconst { showPrompt, isLocked, placeholder, isManualGrid } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockCount,\n\t\t\t\tgetSettings,\n\t\t\t\tgetTemplateLock,\n\t\t\t\tgetBlockAttributes,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst isEmpty = ! getBlockCount( rootClientId );\n\t\t\tconst { bodyPlaceholder } = getSettings();\n\n\t\t\treturn {\n\t\t\t\tshowPrompt: isEmpty,\n\t\t\t\tisLocked: !! getTemplateLock( rootClientId ),\n\t\t\t\tplaceholder: bodyPlaceholder,\n\t\t\t\tisManualGrid:\n\t\t\t\t\tgetBlockAttributes( rootClientId )?.layout\n\t\t\t\t\t\t?.isManualPlacement,\n\t\t\t};\n\t\t},\n\t\t[ rootClientId ]\n\t);\n\n\tconst { insertDefaultBlock, startTyping } = useDispatch( blockEditorStore );\n\n\tif ( isLocked || isManualGrid ) {\n\t\treturn null;\n\t}\n\n\tconst value =\n\t\tdecodeEntities( placeholder ) || __( 'Type / to choose a block' );\n\n\tconst onAppend = () => {\n\t\tinsertDefaultBlock( undefined, rootClientId );\n\t\tstartTyping();\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tdata-root-client-id={ rootClientId || '' }\n\t\t\tclassName={ clsx( 'block-editor-default-block-appender', {\n\t\t\t\t'has-visible-prompt': showPrompt,\n\t\t\t} ) }\n\t\t>\n\t\t\t<p\n\t\t\t\ttabIndex=\"0\"\n\t\t\t\t// We want this element to be styled as a paragraph by themes.\n\t\t\t\t// eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n\t\t\t\trole=\"button\"\n\t\t\t\taria-label={ __( 'Add default block' ) }\n\t\t\t\t// A wrapping container for this one already has the wp-block className.\n\t\t\t\tclassName=\"block-editor-default-block-appender__content\"\n\t\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\t\tif ( ENTER === event.keyCode || SPACE === event.keyCode ) {\n\t\t\t\t\t\tonAppend();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tonClick={ () => onAppend() }\n\t\t\t\tonFocus={ () => {\n\t\t\t\t\tif ( showPrompt ) {\n\t\t\t\t\t\tonAppend();\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ showPrompt ? value : ZWNBSP }\n\t\t\t</p>\n\t\t\t<Inserter\n\t\t\t\trootClientId={ rootClientId }\n\t\t\t\tposition=\"bottom right\"\n\t\t\t\tisAppender\n\t\t\t\t__experimentalIsQuick\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAKjB,kBAAmB;AACnB,2BAA+B;AAC/B,kBAAuC;AACvC,sBAA6B;AAK7B,sBAAqB;AACrB,mBAA0C;AAgDxC;AA1CK,IAAM,SAAS;AAEP,SAAR,qBAAuC,EAAE,aAAa,GAAI;AAChE,QAAM,EAAE,YAAY,UAAU,aAAa,aAAa,QAAI;AAAA,IAC3D,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,aAAAA,KAAiB;AAE7B,YAAM,UAAU,CAAE,cAAe,YAAa;AAC9C,YAAM,EAAE,gBAAgB,IAAI,YAAY;AAExC,aAAO;AAAA,QACN,YAAY;AAAA,QACZ,UAAU,CAAC,CAAE,gBAAiB,YAAa;AAAA,QAC3C,aAAa;AAAA,QACb,cACC,mBAAoB,YAAa,GAAG,QACjC;AAAA,MACL;AAAA,IACD;AAAA,IACA,CAAE,YAAa;AAAA,EAChB;AAEA,QAAM,EAAE,oBAAoB,YAAY,QAAI,yBAAa,aAAAA,KAAiB;AAE1E,MAAK,YAAY,cAAe;AAC/B,WAAO;AAAA,EACR;AAEA,QAAM,YACL,qCAAgB,WAAY,SAAK,gBAAI,0BAA2B;AAEjE,QAAM,WAAW,MAAM;AACtB,uBAAoB,QAAW,YAAa;AAC5C,gBAAY;AAAA,EACb;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,uBAAsB,gBAAgB;AAAA,MACtC,eAAY,YAAAC,SAAM,uCAAuC;AAAA,QACxD,sBAAsB;AAAA,MACvB,CAAE;AAAA,MAEF;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,UAAS;AAAA,YAGT,MAAK;AAAA,YACL,kBAAa,gBAAI,mBAAoB;AAAA,YAErC,WAAU;AAAA,YACV,WAAY,CAAE,UAAW;AACxB,kBAAK,0BAAU,MAAM,WAAW,0BAAU,MAAM,SAAU;AACzD,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,YACA,SAAU,MAAM,SAAS;AAAA,YACzB,SAAU,MAAM;AACf,kBAAK,YAAa;AACjB,yBAAS;AAAA,cACV;AAAA,YACD;AAAA,YAEE,uBAAa,QAAQ;AAAA;AAAA,QACxB;AAAA,QACA;AAAA,UAAC,gBAAAC;AAAA,UAAA;AAAA,YACA;AAAA,YACA,UAAS;AAAA,YACT,YAAU;AAAA,YACV,uBAAqB;AAAA;AAAA,QACtB;AAAA;AAAA;AAAA,EACD;AAEF;", "names": ["blockEditorStore", "clsx", "Inserter"] }