UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 4.85 kB
{ "version": 3, "sources": ["../../../src/list-item/hooks/use-enter.js"], "sourcesContent": ["import {\n\tcreateBlock,\n\tgetDefaultBlockName,\n\tcloneBlock,\n} from '@wordpress/blocks';\nimport { useRefEffect } from '@wordpress/compose';\nimport { privateApis as richTextPrivateApis } from '@wordpress/rich-text';\nimport { useRegistry } from '@wordpress/data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { outdentListItems, getOutdentTarget } from '../utils';\nimport { unlock } from '../../lock-unlock';\n\nconst { subscribeOwnedListener } = unlock( richTextPrivateApis );\n\nexport default function useEnter( clientId ) {\n\tconst registry = useRegistry();\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tfunction onBeforeInput( event ) {\n\t\t\t\tif (\n\t\t\t\t\tevent.defaultPrevented ||\n\t\t\t\t\tevent.inputType !== 'insertParagraph'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst select = registry.select( blockEditorStore );\n\t\t\t\tconst {\n\t\t\t\t\tgetBlock,\n\t\t\t\t\tgetBlockAttributes,\n\t\t\t\t\tgetBlockRootClientId,\n\t\t\t\t\tgetBlockIndex,\n\t\t\t\t} = select;\n\t\t\t\tconst { replaceBlocks, selectionChange } =\n\t\t\t\t\tregistry.dispatch( blockEditorStore );\n\n\t\t\t\tconst { content } = getBlockAttributes( clientId ) ?? {};\n\t\t\t\tif ( content?.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\tconst canOutdent = !! getOutdentTarget( select, clientId );\n\t\t\t\tif ( canOutdent ) {\n\t\t\t\t\toutdentListItems( registry );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Here we are in top level list so we need to split.\n\t\t\t\tconst topParentListBlock = getBlock(\n\t\t\t\t\tgetBlockRootClientId( clientId )\n\t\t\t\t);\n\t\t\t\tconst blockIndex = getBlockIndex( clientId );\n\t\t\t\tconst head = cloneBlock( {\n\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\tinnerBlocks: topParentListBlock.innerBlocks.slice(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tblockIndex\n\t\t\t\t\t),\n\t\t\t\t} );\n\t\t\t\tconst middle = createBlock( getDefaultBlockName() );\n\t\t\t\t// Last list item might contain a `list` block innerBlock\n\t\t\t\t// In that case append remaining innerBlocks blocks.\n\t\t\t\tconst after = [\n\t\t\t\t\t...( topParentListBlock.innerBlocks[ blockIndex ]\n\t\t\t\t\t\t.innerBlocks[ 0 ]?.innerBlocks || [] ),\n\t\t\t\t\t...topParentListBlock.innerBlocks.slice( blockIndex + 1 ),\n\t\t\t\t];\n\t\t\t\tconst tail = after.length\n\t\t\t\t\t? [\n\t\t\t\t\t\t\tcloneBlock( {\n\t\t\t\t\t\t\t\t...topParentListBlock,\n\t\t\t\t\t\t\t\tinnerBlocks: after,\n\t\t\t\t\t\t\t} ),\n\t\t\t\t\t ]\n\t\t\t\t\t: [];\n\t\t\t\treplaceBlocks(\n\t\t\t\t\ttopParentListBlock.clientId,\n\t\t\t\t\t[ head, middle, ...tail ],\n\t\t\t\t\t1\n\t\t\t\t);\n\t\t\t\t// We manually change the selection here because we are replacing\n\t\t\t\t// a different block than the selected one.\n\t\t\t\tselectionChange( middle.clientId );\n\t\t\t}\n\n\t\t\t// Enter is handled on beforeinput: moving focus while the\n\t\t\t// keydown is still being handled leaves the iOS keyboard's\n\t\t\t// auto-capitalization stale. Capture phase so we run before\n\t\t\t// writing-flow's ancestor-bubble handler that gates on\n\t\t\t// `event.defaultPrevented`.\n\t\t\treturn subscribeOwnedListener(\n\t\t\t\telement,\n\t\t\t\t'beforeinput',\n\t\t\t\tonBeforeInput,\n\t\t\t\ttrue\n\t\t\t);\n\t\t},\n\t\t[ clientId, registry ]\n\t);\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAIO;AACP,qBAA6B;AAC7B,uBAAmD;AACnD,kBAA4B;AAC5B,0BAA0C;AAC1C,mBAAmD;AACnD,yBAAuB;AAEvB,IAAM,EAAE,uBAAuB,QAAI,2BAAQ,iBAAAA,WAAoB;AAEhD,SAAR,SAA2B,UAAW;AAC5C,QAAM,eAAW,yBAAY;AAC7B,aAAO;AAAA,IACN,CAAE,YAAa;AACd,eAAS,cAAe,OAAQ;AAC/B,YACC,MAAM,oBACN,MAAM,cAAc,mBACnB;AACD;AAAA,QACD;AACA,cAAM,SAAS,SAAS,OAAQ,oBAAAC,KAAiB;AACjD,cAAM;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD,IAAI;AACJ,cAAM,EAAE,eAAe,gBAAgB,IACtC,SAAS,SAAU,oBAAAA,KAAiB;AAErC,cAAM,EAAE,QAAQ,IAAI,mBAAoB,QAAS,KAAK,CAAC;AACvD,YAAK,SAAS,QAAS;AACtB;AAAA,QACD;AACA,cAAM,eAAe;AACrB,cAAM,aAAa,CAAC,KAAE,+BAAkB,QAAQ,QAAS;AACzD,YAAK,YAAa;AACjB,6CAAkB,QAAS;AAC3B;AAAA,QACD;AAEA,cAAM,qBAAqB;AAAA,UAC1B,qBAAsB,QAAS;AAAA,QAChC;AACA,cAAM,aAAa,cAAe,QAAS;AAC3C,cAAM,WAAO,0BAAY;AAAA,UACxB,GAAG;AAAA,UACH,aAAa,mBAAmB,YAAY;AAAA,YAC3C;AAAA,YACA;AAAA,UACD;AAAA,QACD,CAAE;AACF,cAAM,aAAS,+BAAa,mCAAoB,CAAE;AAGlD,cAAM,QAAQ;AAAA,UACb,GAAK,mBAAmB,YAAa,UAAW,EAC9C,YAAa,CAAE,GAAG,eAAe,CAAC;AAAA,UACpC,GAAG,mBAAmB,YAAY,MAAO,aAAa,CAAE;AAAA,QACzD;AACA,cAAM,OAAO,MAAM,SAChB;AAAA,cACA,0BAAY;AAAA,YACX,GAAG;AAAA,YACH,aAAa;AAAA,UACd,CAAE;AAAA,QACF,IACA,CAAC;AACJ;AAAA,UACC,mBAAmB;AAAA,UACnB,CAAE,MAAM,QAAQ,GAAG,IAAK;AAAA,UACxB;AAAA,QACD;AAGA,wBAAiB,OAAO,QAAS;AAAA,MAClC;AAOA,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,UAAU,QAAS;AAAA,EACtB;AACD;", "names": ["richTextPrivateApis", "blockEditorStore"] }