@vimeo/iris
Version:
Vimeo Design System
103 lines (96 loc) • 5.87 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var tslib_es6 = require('../../../tslib.es6-3ec409b7.js');
var React = require('react');
var styled = require('styled-components');
var polished = require('polished');
var typography_Header_Header = require('../../../typography/Header/Header.js');
var color_colors = require('../../../color/colors.js');
var utils_css = require('../../../utils/css.js');
require('../../../typography/Header/Header.style.js');
require('../../../typography/typography.js');
require('../../../typography/Text/Text.js');
require('../../../typography/Text/Text.style.js');
require('../../../tokens/core.js');
require('../../../tokens/color/index.js');
require('../../../tokens/color/background/background.js');
require('../../../tokens/util/readToken.js');
require('../../../tokens/util/clamp.js');
require('../../../tokens/color/format/format.js');
require('../../../tokens/color/format/primary.js');
require('../../../tokens/color/format/secondary.js');
require('../../../tokens/color/format/tertiary.js');
require('../../../tokens/color/rainbow/rainbow.js');
require('../../../tokens/color/rainbow/conic/index.js');
require('../../../tokens/color/rainbow/conic/sm.js');
require('../../../tokens/color/rainbow/conic/xl.js');
require('../../../tokens/color/rainbow/linear/index.js');
require('../../../tokens/color/rainbow/linear/sm.js');
require('../../../tokens/color/rainbow/linear/xl.js');
require('../../../tokens/color/livestream/livestream.js');
require('../../../tokens/color/status/status.js');
require('../../../tokens/color/status/caution.js');
require('../../../tokens/color/status/negative.js');
require('../../../tokens/color/status/positive.js');
require('../../../tokens/color/stroke/stroke.js');
require('../../../tokens/color/surface/surface.js');
require('../../../tokens/color/text/text.js');
require('../../../tokens/util/round.js');
require('../../../tokens/color/upsell/upsell.js');
require('../../../tokens/color/upsell/sm.js');
require('../../../tokens/color/upsell/xl.js');
require('../../../tokens/color/upsell/new.js');
require('../../../tokens/edge/edge.js');
require('../../../tokens/space/space.js');
require('../../../tokens/typography/index.js');
require('../../../tokens/typography/size/size.js');
require('../../../typography/Text/EditableText.js');
require('../../../utils/HOCs/withIris.js');
require('../../../utils/hooks/useLayoutStyles.js');
require('../../../utils/DOM/geometry.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
function useSuggestions(_a) {
var autosuggest = _a.autosuggest, onSelect = _a.onSelect;
if (typeof autosuggest === 'undefined')
return;
if (autosuggest === null)
return { has: true, show: false };
function onKeyDown(suggestion) {
return function (event) {
var _a, _b, _c, _d;
event.preventDefault();
switch (event.key) {
case 'Escape':
case 'Tab':
return onSelect();
case 'ArrowDown':
return (_b = (_a = event.target) === null || _a === void 0 ? void 0 : _a.nextSibling) === null || _b === void 0 ? void 0 : _b.focus();
case 'ArrowUp':
return (_d = (_c = event.target) === null || _c === void 0 ? void 0 : _c.previousSibling) === null || _d === void 0 ? void 0 : _d.focus();
case 'Enter':
return onSelect(suggestion);
}
};
}
var suggestions = autosuggest === null || autosuggest === void 0 ? void 0 : autosuggest.map(function (suggestion, key) { return (React__default["default"].createElement(Suggestion, { key: key, onKeyDown: onKeyDown(suggestion), onClick: function () { return onSelect(suggestion); } }, suggestion)); });
suggestions.has = true;
suggestions.show = (suggestions === null || suggestions === void 0 ? void 0 : suggestions.length) > 0;
return suggestions;
}
function Suggestion(_a) {
var children = _a.children, props = tslib_es6.__rest(_a, ["children"]);
return (React__default["default"].createElement(Header, tslib_es6.__assign({}, props),
children,
React__default["default"].createElement(utils_css.Focus, { parent: Header })));
}
var Header = styled__default["default"](typography_Header_Header.Header).attrs({
variant: 'thin',
size: '2',
// Temporary hack for accessibility. I don't want to
// change the types to explicitly permit button Headers.
element: 'button',
})(templateObject_1 || (templateObject_1 = tslib_es6.__makeTemplateObject(["\n position: relative;\n padding: 0.5rem 2rem;\n width: 100%;\n text-align: left;\n margin: 0;\n cursor: pointer;\n font-smoothing: antialiased;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizelegibility;\n &:first-child {\n padding: 0.75rem 2rem 0.5rem;\n }\n &:last-child {\n padding: 0.5rem 2rem 0.75rem;\n }\n &:focus {\n outline: none;\n }\n &:hover {\n background: ", ";\n }\n"], ["\n position: relative;\n padding: 0.5rem 2rem;\n width: 100%;\n text-align: left;\n margin: 0;\n cursor: pointer;\n font-smoothing: antialiased;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-rendering: optimizelegibility;\n &:first-child {\n padding: 0.75rem 2rem 0.5rem;\n }\n &:last-child {\n padding: 0.5rem 2rem 0.75rem;\n }\n &:focus {\n outline: none;\n }\n &:hover {\n background: ", ";\n }\n"])), polished.rgba(color_colors.blue(500), 0.15));
var templateObject_1;
exports.useSuggestions = useSuggestions;