UNPKG

@vimeo/iris

Version:
372 lines (367 loc) 19.5 kB
'use strict'; var tslib_es6 = require('../../../tslib.es6-3ec409b7.js'); var React = require('react'); var react_esm = require('../../../react.esm-d9b3c6bd.js'); var index = require('../../../index-1aed0cf1.js'); var components_inputs_ColorSelect_ColorSelect = require('./ColorSelect.js'); var styled = require('styled-components'); var themes_index = require('../../../themes/index.js'); require('../../../es.typed-array.set-5ee45ede.js'); require('os'); require('tty'); require('react-dom'); require('util'); require('polished'); require('./ColorSelect.style.js'); require('./ColorSelect.state.js'); require('../../../color/colorUtils.js'); require('./Slider.js'); require('./Slider.style.js'); require('../../../color/colors.js'); require('./Inputs.js'); require('../Input/Input.js'); require('../Input/Text.js'); require('../Input/Input.style.js'); require('../Shared.js'); require('../Input/useSuggestions.js'); require('../../../typography/Header/Header.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'); require('../../../utils/css.js'); require('../Wrapper/Wrapper.js'); require('../../../typography/Paragraph/Paragraph.js'); require('../../../typography/Paragraph/Paragraph.style.js'); require('../../PopOver/PopOver.js'); require('../../PopOver/PopOver.style.js'); require('../../PopOver/PopOver.error.js'); require('../../../utils/hooks/usePortal_DEPRECATED/usePortal_DEPRECATED.js'); require('../../../utils/hooks/usePortal_DEPRECATED/usePortal_DEPRECATED.style.js'); require('../../../utils/hooks/usePortal_DEPRECATED/useMountAnimations.js'); require('../../../utils/hooks/useIsomorphicEffect.js'); require('../../../utils/DOM/getComputedStyles.js'); require('../../../utils/DOM/animate.js'); require('../../../utils/events/onEvent.js'); require('../../../utils/hooks/usePortal_DEPRECATED/coordinates.js'); require('../../../utils/hooks/usePortal_DEPRECATED/Anchor.js'); require('../../../utils/hooks/useOutsideClick.js'); require('../../../utils/DOM/SSR.js'); require('../../../utils/DOM/createPortalOutlet.js'); require('../../../utils/DOM/createElement.js'); require('../Input/Mark.js'); require('../../../utils/general/generateUID.js'); require('../../Button/Button.js'); require('../../Button/Button.style.js'); require('../../Button/Button.config.js'); require('../../Button/FeaturedIcon.js'); require('../../LoaderCircular/LoaderCircular.js'); require('../../LoaderCircular/LoaderCircular.style.js'); require('../../../utils/hooks/useDeprecate.js'); require('../../../utils/general/mergeReactRefs.js'); require('./ColorSelectInput.js'); require('../InnerButton.js'); require('../../Tip/Tip.js'); require('../../Tip/Tip.settings.js'); require('../../Tip/Tip.style.js'); require('../../../utils/hooks/useIrisError.js'); require('../../../icons/ui/History.js'); require('./ColorSelectSpectrum.js'); require('../../../utils/general/throttle.js'); require('./Presets.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var Provider = function (_a) { var children = _a.children; return (React__default["default"].createElement(styled.ThemeProvider, { theme: themes_index.themes['light'] }, children)); }; var renderWithThemeProvider = function (ui, options) { return react_esm.render(ui, tslib_es6.__assign({ wrapper: Provider }, options)); }; var TEST_COLOR = '#CCCCCC'; describe('ColorSelect', function () { it('Renders ColorSelect input', function () { renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, null)); var input = react_esm.screen.getByLabelText('color'); expect(input).toBeInTheDocument(); }); it('Renders ColorSelect picker using input', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input, picker; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, null)); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); picker = react_esm.screen.getByLabelText('color picker'); expect(picker).toBeInTheDocument(); return [2 /*return*/]; } }); }); }); it('Renders ColorSelect picker using children', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var trigger, picker; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, null, React__default["default"].createElement("button", { "data-testid": "trigger" }))); trigger = react_esm.screen.getByTestId('trigger'); return [4 /*yield*/, index.userEvent.click(trigger)]; case 1: _a.sent(); picker = react_esm.screen.getByLabelText('color picker'); expect(picker).toBeInTheDocument(); return [2 /*return*/]; } }); }); }); it('Set ColorSelect color using value prop', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input, selectedColor, selectedColorValue; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { value: TEST_COLOR })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); selectedColor = react_esm.screen.getByLabelText('color preview'); selectedColorValue = selectedColor.getAttribute('color'); expect(selectedColorValue).toBe(TEST_COLOR); return [2 /*return*/]; } }); }); }); it('Change ColorSelect color using input', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input, selectedColor, selectedColorValue; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, null)); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); react_esm.fireEvent.change(input, { target: { value: TEST_COLOR } }); selectedColor = react_esm.screen.getByLabelText('color preview'); selectedColorValue = selectedColor.getAttribute('color'); expect(selectedColorValue).toBe(TEST_COLOR); return [2 /*return*/]; } }); }); }); it('Fires onChange callback', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var mockFn, input; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: mockFn = jest.fn(); renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { onChange: mockFn })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); react_esm.fireEvent.change(input, { target: { value: TEST_COLOR } }); expect(mockFn).toBeCalledWith(TEST_COLOR); return [2 /*return*/]; } }); }); }); it('Fires onClose callback', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var mockFn, input; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: mockFn = jest.fn(); renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { onClose: mockFn })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); return [4 /*yield*/, index.userEvent.click(input)]; case 2: _a.sent(); // Another click to close the picker expect(mockFn).toBeCalled(); return [2 /*return*/]; } }); }); }); it('Resets ColorSelect color using reset button', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var reset, input, resetButton, selectedColor, selectedColorValue; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: reset = { color: '#FFFFFF', label: 'My Reset' }; renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { reset: reset })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); react_esm.fireEvent.change(input, { target: { value: TEST_COLOR } }); resetButton = react_esm.screen.getByLabelText('reset'); return [4 /*yield*/, index.userEvent.click(resetButton)]; case 2: _a.sent(); selectedColor = react_esm.screen.getByLabelText('color preview'); selectedColorValue = selectedColor.getAttribute('color'); expect(selectedColorValue).toBe(reset.color); return [2 /*return*/]; } }); }); }); it('Change size', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var rerender, label; return tslib_es6.__generator(this, function (_a) { rerender = renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { size: "sm" })).rerender; label = react_esm.screen.getByLabelText('color'); expect(label).toHaveStyle({ 'font-size': '0.75rem' }); rerender(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { size: "md" })); expect(label).toHaveStyle({ 'font-size': '1rem' }); rerender(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { size: "lg" })); expect(label).toHaveStyle({ 'font-size': '1.5rem' }); rerender(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { size: "xl" })); expect(label).toHaveStyle({ 'font-size': '1.75rem' }); return [2 /*return*/]; }); }); }); it('Make ColorSelect required', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input, picker, pickerInner; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { required: true })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); picker = react_esm.screen.getByLabelText('color picker'); pickerInner = picker.querySelector('div'); expect(pickerInner).toHaveAttribute('required'); return [2 /*return*/]; } }); }); }); it('Has a name', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var name, input, picker, pickerInner, nameAttribute; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: name = 'hello'; renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { name: name })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); picker = react_esm.screen.getByLabelText('color picker'); pickerInner = picker.querySelector('div'); nameAttribute = pickerInner.getAttribute('name'); expect(nameAttribute).toBe(name); return [2 /*return*/]; } }); }); }); it('Render a label for ColorSelect', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var label, renderedLabel; return tslib_es6.__generator(this, function (_a) { label = 'My Label'; renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { label: label })); renderedLabel = document.querySelector('label'); expect(renderedLabel.innerHTML).toBe(label); return [2 /*return*/]; }); }); }); it('Render with initial color', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var initial, input; return tslib_es6.__generator(this, function (_a) { initial = { color: TEST_COLOR }; renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { initial: initial })); input = react_esm.screen.getByLabelText('color'); expect(input.value).toBe(TEST_COLOR); return [2 /*return*/]; }); }); }); it('Render ColorSelect without hue slider', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var input, hueSlider; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect, { showHueSlider: false })); input = react_esm.screen.getByLabelText('color'); return [4 /*yield*/, index.userEvent.click(input)]; case 1: _a.sent(); hueSlider = document.querySelector('[kind=hue]'); expect(hueSlider).not.toBeInTheDocument(); return [2 /*return*/]; } }); }); }); it('Select color from presets', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var palette, mockFn, preset; return tslib_es6.__generator(this, function (_a) { switch (_a.label) { case 0: palette = ['#909CDC', '#7BD8DB', '#78DD89', '#CCE190']; mockFn = jest.fn(); renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect.Presets, { palette: palette, label: "Presets", onColorClick: mockFn })); preset = react_esm.screen.getByLabelText(palette[1]); return [4 /*yield*/, index.userEvent.click(preset)]; case 1: _a.sent(); expect(mockFn).toBeCalledWith(palette[1]); return [2 /*return*/]; } }); }); }); it('Render a label for presets', function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () { var palette, label, renderedLabel; return tslib_es6.__generator(this, function (_a) { palette = ['#909CDC', '#7BD8DB', '#78DD89', '#CCE190']; label = 'My Label'; renderWithThemeProvider(React__default["default"].createElement(components_inputs_ColorSelect_ColorSelect.ColorSelect.Presets, { palette: palette, label: label, onColorClick: function () { console.log('click '); } })); renderedLabel = document.querySelector('h6'); expect(renderedLabel.innerHTML).toBe(label); return [2 /*return*/]; }); }); }); });