@wordpress/block-library
Version:
Block library for the WordPress editor.
8 lines (7 loc) • 2.93 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/list-item/hooks/use-tab.js"],
"sourcesContent": ["import { useRefEffect } from '@wordpress/compose';\nimport { privateApis as richTextPrivateApis } from '@wordpress/rich-text';\nimport { SPACE, TAB } from '@wordpress/keycodes';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { useRegistry } from '@wordpress/data';\nimport { isEntirelySelected } from '@wordpress/dom';\nimport { indentListItems, outdentListItems } from '../utils';\nimport { unlock } from '../../lock-unlock';\n\nconst { subscribeOwnedListener } = unlock( richTextPrivateApis );\n\nexport default function useTab() {\n\tconst registry = useRegistry();\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tfunction onKeyDown( event ) {\n\t\t\t\tconst { keyCode, shiftKey, altKey, metaKey, ctrlKey } = event;\n\n\t\t\t\tif (\n\t\t\t\t\tevent.defaultPrevented ||\n\t\t\t\t\t( keyCode !== SPACE && keyCode !== TAB ) ||\n\t\t\t\t\t// Shift selects outdent; other modifiers pass through.\n\t\t\t\t\taltKey ||\n\t\t\t\t\tmetaKey ||\n\t\t\t\t\tctrlKey\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { getSelectionStart, getSelectionEnd } =\n\t\t\t\t\tregistry.select( blockEditorStore );\n\t\t\t\tconst isAtStart =\n\t\t\t\t\tgetSelectionStart().offset === 0 &&\n\t\t\t\t\tgetSelectionEnd().offset === 0;\n\n\t\t\t\t// Both keys act at the start of an item; Tab also acts on a\n\t\t\t\t// full selection.\n\t\t\t\tif (\n\t\t\t\t\t! isAtStart &&\n\t\t\t\t\t! ( keyCode === TAB && isEntirelySelected( element ) )\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst move = shiftKey ? outdentListItems : indentListItems;\n\t\t\t\tif ( move( registry ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Capture phase so we run before writing-flow's ancestor-bubble\n\t\t\t// keydown handlers that gate on `event.defaultPrevented`.\n\t\t\treturn subscribeOwnedListener(\n\t\t\t\telement,\n\t\t\t\t'keydown',\n\t\t\t\tonKeyDown,\n\t\t\t\ttrue\n\t\t\t);\n\t\t},\n\t\t[ registry ]\n\t);\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA6B;AAC7B,uBAAmD;AACnD,sBAA2B;AAC3B,0BAA0C;AAC1C,kBAA4B;AAC5B,iBAAmC;AACnC,mBAAkD;AAClD,yBAAuB;AAEvB,IAAM,EAAE,uBAAuB,QAAI,2BAAQ,iBAAAA,WAAoB;AAEhD,SAAR,SAA0B;AAChC,QAAM,eAAW,yBAAY;AAE7B,aAAO;AAAA,IACN,CAAE,YAAa;AACd,eAAS,UAAW,OAAQ;AAC3B,cAAM,EAAE,SAAS,UAAU,QAAQ,SAAS,QAAQ,IAAI;AAExD,YACC,MAAM,oBACJ,YAAY,yBAAS,YAAY;AAAA,QAEnC,UACA,WACA,SACC;AACD;AAAA,QACD;AAEA,cAAM,EAAE,mBAAmB,gBAAgB,IAC1C,SAAS,OAAQ,oBAAAC,KAAiB;AACnC,cAAM,YACL,kBAAkB,EAAE,WAAW,KAC/B,gBAAgB,EAAE,WAAW;AAI9B,YACC,CAAE,aACF,EAAI,YAAY,2BAAO,+BAAoB,OAAQ,IAClD;AACD;AAAA,QACD;AACA,cAAM,OAAO,WAAW,gCAAmB;AAC3C,YAAK,KAAM,QAAS,GAAI;AACvB,gBAAM,eAAe;AAAA,QACtB;AAAA,MACD;AAIA,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AACD;",
"names": ["richTextPrivateApis", "blockEditorStore"]
}