UNPKG

@vimeo/iris

Version:
103 lines (96 loc) 5.87 kB
'use strict'; 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;