@vimeo/iris
Version:
Vimeo Design System
372 lines (367 loc) • 19.5 kB
JavaScript
'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*/];
});
}); });
});