283 lines
9.7 KiB
JavaScript
283 lines
9.7 KiB
JavaScript
var wp;
|
|
(wp ||= {}).keyboardShortcuts = (() => {
|
|
var __create = Object.create;
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __getProtoOf = Object.getPrototypeOf;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __commonJS = (cb, mod) => function __require() {
|
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
};
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
// file that has been converted to a CommonJS file using a Babel-
|
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
mod
|
|
));
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
|
|
// package-external:@wordpress/data
|
|
var require_data = __commonJS({
|
|
"package-external:@wordpress/data"(exports, module) {
|
|
module.exports = window.wp.data;
|
|
}
|
|
});
|
|
|
|
// package-external:@wordpress/keycodes
|
|
var require_keycodes = __commonJS({
|
|
"package-external:@wordpress/keycodes"(exports, module) {
|
|
module.exports = window.wp.keycodes;
|
|
}
|
|
});
|
|
|
|
// package-external:@wordpress/element
|
|
var require_element = __commonJS({
|
|
"package-external:@wordpress/element"(exports, module) {
|
|
module.exports = window.wp.element;
|
|
}
|
|
});
|
|
|
|
// vendor-external:react/jsx-runtime
|
|
var require_jsx_runtime = __commonJS({
|
|
"vendor-external:react/jsx-runtime"(exports, module) {
|
|
module.exports = window.ReactJSXRuntime;
|
|
}
|
|
});
|
|
|
|
// packages/keyboard-shortcuts/build-module/index.mjs
|
|
var index_exports = {};
|
|
__export(index_exports, {
|
|
ShortcutProvider: () => ShortcutProvider,
|
|
__unstableUseShortcutEventMatch: () => useShortcutEventMatch,
|
|
store: () => store,
|
|
useShortcut: () => useShortcut
|
|
});
|
|
|
|
// packages/keyboard-shortcuts/build-module/store/index.mjs
|
|
var import_data2 = __toESM(require_data(), 1);
|
|
|
|
// packages/keyboard-shortcuts/build-module/store/reducer.mjs
|
|
function reducer(state = {}, action) {
|
|
switch (action.type) {
|
|
case "REGISTER_SHORTCUT":
|
|
return {
|
|
...state,
|
|
[action.name]: {
|
|
category: action.category,
|
|
keyCombination: action.keyCombination,
|
|
aliases: action.aliases,
|
|
description: action.description
|
|
}
|
|
};
|
|
case "UNREGISTER_SHORTCUT":
|
|
const { [action.name]: actionName, ...remainingState } = state;
|
|
return remainingState;
|
|
}
|
|
return state;
|
|
}
|
|
var reducer_default = reducer;
|
|
|
|
// packages/keyboard-shortcuts/build-module/store/actions.mjs
|
|
var actions_exports = {};
|
|
__export(actions_exports, {
|
|
registerShortcut: () => registerShortcut,
|
|
unregisterShortcut: () => unregisterShortcut
|
|
});
|
|
function registerShortcut({
|
|
name,
|
|
category,
|
|
description,
|
|
keyCombination,
|
|
aliases
|
|
}) {
|
|
return {
|
|
type: "REGISTER_SHORTCUT",
|
|
name,
|
|
category,
|
|
keyCombination,
|
|
aliases,
|
|
description
|
|
};
|
|
}
|
|
function unregisterShortcut(name) {
|
|
return {
|
|
type: "UNREGISTER_SHORTCUT",
|
|
name
|
|
};
|
|
}
|
|
|
|
// packages/keyboard-shortcuts/build-module/store/selectors.mjs
|
|
var selectors_exports = {};
|
|
__export(selectors_exports, {
|
|
getAllShortcutKeyCombinations: () => getAllShortcutKeyCombinations,
|
|
getAllShortcutRawKeyCombinations: () => getAllShortcutRawKeyCombinations,
|
|
getCategoryShortcuts: () => getCategoryShortcuts,
|
|
getShortcutAliases: () => getShortcutAliases,
|
|
getShortcutDescription: () => getShortcutDescription,
|
|
getShortcutKeyCombination: () => getShortcutKeyCombination,
|
|
getShortcutRepresentation: () => getShortcutRepresentation
|
|
});
|
|
var import_data = __toESM(require_data(), 1);
|
|
var import_keycodes = __toESM(require_keycodes(), 1);
|
|
var EMPTY_ARRAY = [];
|
|
var FORMATTING_METHODS = {
|
|
display: import_keycodes.displayShortcut,
|
|
raw: import_keycodes.rawShortcut,
|
|
ariaLabel: import_keycodes.shortcutAriaLabel
|
|
};
|
|
function getKeyCombinationRepresentation(shortcut, representation) {
|
|
if (!shortcut) {
|
|
return null;
|
|
}
|
|
return shortcut.modifier ? FORMATTING_METHODS[representation][shortcut.modifier](
|
|
shortcut.character
|
|
) : shortcut.character;
|
|
}
|
|
function getShortcutKeyCombination(state, name) {
|
|
return state[name] ? state[name].keyCombination : null;
|
|
}
|
|
function getShortcutRepresentation(state, name, representation = "display") {
|
|
const shortcut = getShortcutKeyCombination(state, name);
|
|
return getKeyCombinationRepresentation(shortcut, representation);
|
|
}
|
|
function getShortcutDescription(state, name) {
|
|
return state[name] ? state[name].description : null;
|
|
}
|
|
function getShortcutAliases(state, name) {
|
|
return state[name] && state[name].aliases ? state[name].aliases : EMPTY_ARRAY;
|
|
}
|
|
var getAllShortcutKeyCombinations = (0, import_data.createSelector)(
|
|
(state, name) => {
|
|
return [
|
|
getShortcutKeyCombination(state, name),
|
|
...getShortcutAliases(state, name)
|
|
].filter(Boolean);
|
|
},
|
|
(state, name) => [state[name]]
|
|
);
|
|
var getAllShortcutRawKeyCombinations = (0, import_data.createSelector)(
|
|
(state, name) => {
|
|
return getAllShortcutKeyCombinations(state, name).map(
|
|
(combination) => getKeyCombinationRepresentation(combination, "raw")
|
|
);
|
|
},
|
|
(state, name) => [state[name]]
|
|
);
|
|
var getCategoryShortcuts = (0, import_data.createSelector)(
|
|
(state, categoryName) => {
|
|
return Object.entries(state).filter(([, shortcut]) => shortcut.category === categoryName).map(([name]) => name);
|
|
},
|
|
(state) => [state]
|
|
);
|
|
|
|
// packages/keyboard-shortcuts/build-module/store/index.mjs
|
|
var STORE_NAME = "core/keyboard-shortcuts";
|
|
var store = (0, import_data2.createReduxStore)(STORE_NAME, {
|
|
reducer: reducer_default,
|
|
actions: actions_exports,
|
|
selectors: selectors_exports
|
|
});
|
|
(0, import_data2.register)(store);
|
|
|
|
// packages/keyboard-shortcuts/build-module/hooks/use-shortcut.mjs
|
|
var import_element2 = __toESM(require_element(), 1);
|
|
|
|
// packages/keyboard-shortcuts/build-module/hooks/use-shortcut-event-match.mjs
|
|
var import_data3 = __toESM(require_data(), 1);
|
|
var import_keycodes2 = __toESM(require_keycodes(), 1);
|
|
function useShortcutEventMatch() {
|
|
const { getAllShortcutKeyCombinations: getAllShortcutKeyCombinations2 } = (0, import_data3.useSelect)(
|
|
store
|
|
);
|
|
function isMatch(name, event) {
|
|
return getAllShortcutKeyCombinations2(name).some(
|
|
({ modifier, character }) => {
|
|
return import_keycodes2.isKeyboardEvent[modifier](event, character);
|
|
}
|
|
);
|
|
}
|
|
return isMatch;
|
|
}
|
|
|
|
// packages/keyboard-shortcuts/build-module/context.mjs
|
|
var import_element = __toESM(require_element(), 1);
|
|
var globalShortcuts = /* @__PURE__ */ new Set();
|
|
var globalListener = (event) => {
|
|
for (const keyboardShortcut of globalShortcuts) {
|
|
keyboardShortcut(event);
|
|
}
|
|
};
|
|
var context = (0, import_element.createContext)({
|
|
add: (shortcut) => {
|
|
if (globalShortcuts.size === 0) {
|
|
document.addEventListener("keydown", globalListener);
|
|
}
|
|
globalShortcuts.add(shortcut);
|
|
},
|
|
delete: (shortcut) => {
|
|
globalShortcuts.delete(shortcut);
|
|
if (globalShortcuts.size === 0) {
|
|
document.removeEventListener("keydown", globalListener);
|
|
}
|
|
}
|
|
});
|
|
context.displayName = "KeyboardShortcutsContext";
|
|
|
|
// packages/keyboard-shortcuts/build-module/hooks/use-shortcut.mjs
|
|
function useShortcut(name, callback, { isDisabled = false } = {}) {
|
|
const shortcuts = (0, import_element2.useContext)(context);
|
|
const isMatch = useShortcutEventMatch();
|
|
const callbackRef = (0, import_element2.useRef)();
|
|
(0, import_element2.useEffect)(() => {
|
|
callbackRef.current = callback;
|
|
}, [callback]);
|
|
(0, import_element2.useEffect)(() => {
|
|
if (isDisabled) {
|
|
return;
|
|
}
|
|
function _callback(event) {
|
|
if (isMatch(name, event)) {
|
|
callbackRef.current(event);
|
|
}
|
|
}
|
|
shortcuts.add(_callback);
|
|
return () => {
|
|
shortcuts.delete(_callback);
|
|
};
|
|
}, [name, isDisabled, shortcuts]);
|
|
}
|
|
|
|
// packages/keyboard-shortcuts/build-module/components/shortcut-provider.mjs
|
|
var import_element3 = __toESM(require_element(), 1);
|
|
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
|
|
var { Provider } = context;
|
|
function ShortcutProvider(props) {
|
|
const [keyboardShortcuts] = (0, import_element3.useState)(() => /* @__PURE__ */ new Set());
|
|
function onKeyDown(event) {
|
|
if (props.onKeyDown) {
|
|
props.onKeyDown(event);
|
|
}
|
|
for (const keyboardShortcut of keyboardShortcuts) {
|
|
keyboardShortcut(event);
|
|
}
|
|
}
|
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Provider, { value: keyboardShortcuts, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ...props, onKeyDown }) });
|
|
}
|
|
return __toCommonJS(index_exports);
|
|
})();
|