Comparing version 0.2.1 to 0.3.0
@@ -0,1 +1,3 @@ | ||
import memoize from 'lodash.memoize'; | ||
/** | ||
@@ -35,3 +37,62 @@ * @param {Array<function(...any): void>} handlers the event handler functions | ||
function memoizeCombineEventHandlers() { | ||
return memoize(combineEventHandlers); | ||
} | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
/** | ||
* @typedef {Object} ButtonEventHandlers | ||
* @property {function(MouseEvent, ...any): void} handleClick | ||
* @property {function(KeyboardEvent, ...any): void} handleKeyDown | ||
*/ | ||
/** | ||
* @typedef {Object} Options | ||
* @property {boolean} [preventDefault] | ||
*/ | ||
var KEYBOARD_INTERACTIONS = [" ", "Enter"]; | ||
/** | ||
* Create event handlers for native button behavior for non-button elements | ||
* @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role | ||
* | ||
* @param {function(MouseEvent|KeyboardEvent, ...any): void} [handler] the event handler function | ||
* @param {Options} [options] | ||
* @returns {ButtonEventHandlers} | ||
*/ | ||
function createButtonEventHandlers(handler) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
if (!handler) return {}; | ||
var _options$preventDefau = options.preventDefault, | ||
preventDefault = _options$preventDefau === undefined ? true : _options$preventDefau; | ||
return { | ||
handleClick: handler, | ||
handleKeyDown: function handleKeyDown(event) { | ||
var key = event.key; | ||
if (!KEYBOARD_INTERACTIONS.includes(key)) return; | ||
// Prevent space key default scrolling behavior | ||
if (preventDefault) event.preventDefault(); | ||
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | ||
args[_key - 1] = arguments[_key]; | ||
} | ||
handler.apply(undefined, [event].concat(_toConsumableArray(args))); | ||
} | ||
}; | ||
} | ||
function memoizeCreateButtonEventHandlers() { | ||
return memoize(createButtonEventHandlers); | ||
} | ||
/** | ||
* Generates a unique ID | ||
@@ -47,2 +108,2 @@ * @param {string} key | ||
export { combineEventHandlers, generateId }; | ||
export { combineEventHandlers, memoizeCombineEventHandlers, createButtonEventHandlers, memoizeCreateButtonEventHandlers, generateId }; |
@@ -5,2 +5,6 @@ 'use strict'; | ||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } | ||
var memoize = _interopDefault(require('lodash.memoize')); | ||
/** | ||
@@ -40,3 +44,62 @@ * @param {Array<function(...any): void>} handlers the event handler functions | ||
function memoizeCombineEventHandlers() { | ||
return memoize(combineEventHandlers); | ||
} | ||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } | ||
/** | ||
* @typedef {Object} ButtonEventHandlers | ||
* @property {function(MouseEvent, ...any): void} handleClick | ||
* @property {function(KeyboardEvent, ...any): void} handleKeyDown | ||
*/ | ||
/** | ||
* @typedef {Object} Options | ||
* @property {boolean} [preventDefault] | ||
*/ | ||
var KEYBOARD_INTERACTIONS = [" ", "Enter"]; | ||
/** | ||
* Create event handlers for native button behavior for non-button elements | ||
* @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/button_role | ||
* | ||
* @param {function(MouseEvent|KeyboardEvent, ...any): void} [handler] the event handler function | ||
* @param {Options} [options] | ||
* @returns {ButtonEventHandlers} | ||
*/ | ||
function createButtonEventHandlers(handler) { | ||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
if (!handler) return {}; | ||
var _options$preventDefau = options.preventDefault, | ||
preventDefault = _options$preventDefau === undefined ? true : _options$preventDefau; | ||
return { | ||
handleClick: handler, | ||
handleKeyDown: function handleKeyDown(event) { | ||
var key = event.key; | ||
if (!KEYBOARD_INTERACTIONS.includes(key)) return; | ||
// Prevent space key default scrolling behavior | ||
if (preventDefault) event.preventDefault(); | ||
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | ||
args[_key - 1] = arguments[_key]; | ||
} | ||
handler.apply(undefined, [event].concat(_toConsumableArray(args))); | ||
} | ||
}; | ||
} | ||
function memoizeCreateButtonEventHandlers() { | ||
return memoize(createButtonEventHandlers); | ||
} | ||
/** | ||
* Generates a unique ID | ||
@@ -53,2 +116,5 @@ * @param {string} key | ||
exports.combineEventHandlers = combineEventHandlers; | ||
exports.memoizeCombineEventHandlers = memoizeCombineEventHandlers; | ||
exports.createButtonEventHandlers = createButtonEventHandlers; | ||
exports.memoizeCreateButtonEventHandlers = memoizeCreateButtonEventHandlers; | ||
exports.generateId = generateId; |
@@ -0,1 +1,9 @@ | ||
# [@hig/utils-v0.3.0](https://github.com/Autodesk/hig/compare/@hig/utils@0.2.1...@hig/utils@0.3.0) (2018-09-26) | ||
### Features | ||
* **a11y:** add `createButtonEventHandlers` ([05b93f4](https://github.com/Autodesk/hig/commit/05b93f4)) | ||
* **performance:** add `memoizeCombineEventHandlers` ([bba60c4](https://github.com/Autodesk/hig/commit/bba60c4)) | ||
# [@hig/utils-v0.2.1](https://github.com/Autodesk/hig/compare/@hig/utils@0.2.0...@hig/utils@0.2.1) (2018-08-24) | ||
@@ -2,0 +10,0 @@ |
{ | ||
"name": "@hig/utils", | ||
"version": "0.2.1", | ||
"version": "0.3.0", | ||
"description": "Non-component specific utility functions for HIG components", | ||
@@ -19,2 +19,5 @@ "author": "Autodesk Inc.", | ||
], | ||
"dependencies": { | ||
"lodash.memoize": "^4.1.2" | ||
}, | ||
"devDependencies": { | ||
@@ -21,0 +24,0 @@ "@hig/babel-preset": "^0.1.0", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
9243
177
1
+ Addedlodash.memoize@^4.1.2
+ Addedlodash.memoize@4.1.2(transitive)