@vimeo/iris
Version:
Vimeo Design System
366 lines (364 loc) • 17.9 kB
JavaScript
import { g as __awaiter, c as __assign, h as __generator } from '../../../tslib.es6-7f0e734f.js';
import React__default from 'react';
import { s as screen, r as render, f as fireEvent } from '../../../react.esm-edf204b5.js';
import { u as userEvent } from '../../../index-cff9b439.js';
import { ColorSelect } from './ColorSelect.esm.js';
import { ThemeProvider } from 'styled-components';
import { themes } from '../../../themes/index.esm.js';
import '../../../es.typed-array.set-c204e812.js';
import 'os';
import 'tty';
import 'react-dom';
import 'util';
import 'polished';
import './ColorSelect.style.esm.js';
import './ColorSelect.state.esm.js';
import '../../../color/colorUtils.esm.js';
import './Slider.esm.js';
import './Slider.style.esm.js';
import '../../../color/colors.esm.js';
import './Inputs.esm.js';
import '../Input/Input.esm.js';
import '../Input/Text.esm.js';
import '../Input/Input.style.esm.js';
import '../Shared.esm.js';
import '../Input/useSuggestions.esm.js';
import '../../../typography/Header/Header.esm.js';
import '../../../typography/Header/Header.style.esm.js';
import '../../../typography/typography.esm.js';
import '../../../typography/Text/Text.esm.js';
import '../../../typography/Text/Text.style.esm.js';
import '../../../tokens/core.esm.js';
import '../../../tokens/color/index.esm.js';
import '../../../tokens/color/background/background.esm.js';
import '../../../tokens/util/readToken.esm.js';
import '../../../tokens/util/clamp.esm.js';
import '../../../tokens/color/format/format.esm.js';
import '../../../tokens/color/format/primary.esm.js';
import '../../../tokens/color/format/secondary.esm.js';
import '../../../tokens/color/format/tertiary.esm.js';
import '../../../tokens/color/rainbow/rainbow.esm.js';
import '../../../tokens/color/rainbow/conic/index.esm.js';
import '../../../tokens/color/rainbow/conic/sm.esm.js';
import '../../../tokens/color/rainbow/conic/xl.esm.js';
import '../../../tokens/color/rainbow/linear/index.esm.js';
import '../../../tokens/color/rainbow/linear/sm.esm.js';
import '../../../tokens/color/rainbow/linear/xl.esm.js';
import '../../../tokens/color/livestream/livestream.esm.js';
import '../../../tokens/color/status/status.esm.js';
import '../../../tokens/color/status/caution.esm.js';
import '../../../tokens/color/status/negative.esm.js';
import '../../../tokens/color/status/positive.esm.js';
import '../../../tokens/color/stroke/stroke.esm.js';
import '../../../tokens/color/surface/surface.esm.js';
import '../../../tokens/color/text/text.esm.js';
import '../../../tokens/util/round.esm.js';
import '../../../tokens/color/upsell/upsell.esm.js';
import '../../../tokens/color/upsell/sm.esm.js';
import '../../../tokens/color/upsell/xl.esm.js';
import '../../../tokens/color/upsell/new.esm.js';
import '../../../tokens/edge/edge.esm.js';
import '../../../tokens/space/space.esm.js';
import '../../../tokens/typography/index.esm.js';
import '../../../tokens/typography/size/size.esm.js';
import '../../../typography/Text/EditableText.esm.js';
import '../../../utils/HOCs/withIris.esm.js';
import '../../../utils/hooks/useLayoutStyles.esm.js';
import '../../../utils/DOM/geometry.esm.js';
import '../../../utils/css.esm.js';
import '../Wrapper/Wrapper.esm.js';
import '../../../typography/Paragraph/Paragraph.esm.js';
import '../../../typography/Paragraph/Paragraph.style.esm.js';
import '../../PopOver/PopOver.esm.js';
import '../../PopOver/PopOver.style.esm.js';
import '../../PopOver/PopOver.error.esm.js';
import '../../../utils/hooks/usePortal_DEPRECATED/usePortal_DEPRECATED.esm.js';
import '../../../utils/hooks/usePortal_DEPRECATED/usePortal_DEPRECATED.style.esm.js';
import '../../../utils/hooks/usePortal_DEPRECATED/useMountAnimations.esm.js';
import '../../../utils/hooks/useIsomorphicEffect.esm.js';
import '../../../utils/DOM/getComputedStyles.esm.js';
import '../../../utils/DOM/animate.esm.js';
import '../../../utils/events/onEvent.esm.js';
import '../../../utils/hooks/usePortal_DEPRECATED/coordinates.esm.js';
import '../../../utils/hooks/usePortal_DEPRECATED/Anchor.esm.js';
import '../../../utils/hooks/useOutsideClick.esm.js';
import '../../../utils/DOM/SSR.esm.js';
import '../../../utils/DOM/createPortalOutlet.esm.js';
import '../../../utils/DOM/createElement.esm.js';
import '../Input/Mark.esm.js';
import '../../../utils/general/generateUID.esm.js';
import '../../Button/Button.esm.js';
import '../../Button/Button.style.esm.js';
import '../../Button/Button.config.esm.js';
import '../../Button/FeaturedIcon.esm.js';
import '../../LoaderCircular/LoaderCircular.esm.js';
import '../../LoaderCircular/LoaderCircular.style.esm.js';
import '../../../utils/hooks/useDeprecate.esm.js';
import '../../../utils/general/mergeReactRefs.esm.js';
import './ColorSelectInput.esm.js';
import '../InnerButton.esm.js';
import '../../Tip/Tip.esm.js';
import '../../Tip/Tip.settings.esm.js';
import '../../Tip/Tip.style.esm.js';
import '../../../utils/hooks/useIrisError.esm.js';
import '../../../icons/ui/History.esm.js';
import './ColorSelectSpectrum.esm.js';
import '../../../utils/general/throttle.esm.js';
import './Presets.esm.js';
var Provider = function (_a) {
var children = _a.children;
return (React__default.createElement(ThemeProvider, { theme: themes['light'] }, children));
};
var renderWithThemeProvider = function (ui, options) { return render(ui, __assign({ wrapper: Provider }, options)); };
var TEST_COLOR = '#CCCCCC';
describe('ColorSelect', function () {
it('Renders ColorSelect input', function () {
renderWithThemeProvider(React__default.createElement(ColorSelect, null));
var input = screen.getByLabelText('color');
expect(input).toBeInTheDocument();
});
it('Renders ColorSelect picker using input', function () { return __awaiter(void 0, void 0, void 0, function () {
var input, picker;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
renderWithThemeProvider(React__default.createElement(ColorSelect, null));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
picker = screen.getByLabelText('color picker');
expect(picker).toBeInTheDocument();
return [2 /*return*/];
}
});
}); });
it('Renders ColorSelect picker using children', function () { return __awaiter(void 0, void 0, void 0, function () {
var trigger, picker;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
renderWithThemeProvider(React__default.createElement(ColorSelect, null,
React__default.createElement("button", { "data-testid": "trigger" })));
trigger = screen.getByTestId('trigger');
return [4 /*yield*/, userEvent.click(trigger)];
case 1:
_a.sent();
picker = screen.getByLabelText('color picker');
expect(picker).toBeInTheDocument();
return [2 /*return*/];
}
});
}); });
it('Set ColorSelect color using value prop', function () { return __awaiter(void 0, void 0, void 0, function () {
var input, selectedColor, selectedColorValue;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
renderWithThemeProvider(React__default.createElement(ColorSelect, { value: TEST_COLOR }));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
selectedColor = screen.getByLabelText('color preview');
selectedColorValue = selectedColor.getAttribute('color');
expect(selectedColorValue).toBe(TEST_COLOR);
return [2 /*return*/];
}
});
}); });
it('Change ColorSelect color using input', function () { return __awaiter(void 0, void 0, void 0, function () {
var input, selectedColor, selectedColorValue;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
renderWithThemeProvider(React__default.createElement(ColorSelect, null));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
fireEvent.change(input, { target: { value: TEST_COLOR } });
selectedColor = screen.getByLabelText('color preview');
selectedColorValue = selectedColor.getAttribute('color');
expect(selectedColorValue).toBe(TEST_COLOR);
return [2 /*return*/];
}
});
}); });
it('Fires onChange callback', function () { return __awaiter(void 0, void 0, void 0, function () {
var mockFn, input;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
mockFn = jest.fn();
renderWithThemeProvider(React__default.createElement(ColorSelect, { onChange: mockFn }));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
fireEvent.change(input, { target: { value: TEST_COLOR } });
expect(mockFn).toBeCalledWith(TEST_COLOR);
return [2 /*return*/];
}
});
}); });
it('Fires onClose callback', function () { return __awaiter(void 0, void 0, void 0, function () {
var mockFn, input;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
mockFn = jest.fn();
renderWithThemeProvider(React__default.createElement(ColorSelect, { onClose: mockFn }));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () {
var reset, input, resetButton, selectedColor, selectedColorValue;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
reset = { color: '#FFFFFF', label: 'My Reset' };
renderWithThemeProvider(React__default.createElement(ColorSelect, { reset: reset }));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
fireEvent.change(input, { target: { value: TEST_COLOR } });
resetButton = screen.getByLabelText('reset');
return [4 /*yield*/, userEvent.click(resetButton)];
case 2:
_a.sent();
selectedColor = screen.getByLabelText('color preview');
selectedColorValue = selectedColor.getAttribute('color');
expect(selectedColorValue).toBe(reset.color);
return [2 /*return*/];
}
});
}); });
it('Change size', function () { return __awaiter(void 0, void 0, void 0, function () {
var rerender, label;
return __generator(this, function (_a) {
rerender = renderWithThemeProvider(React__default.createElement(ColorSelect, { size: "sm" })).rerender;
label = screen.getByLabelText('color');
expect(label).toHaveStyle({ 'font-size': '0.75rem' });
rerender(React__default.createElement(ColorSelect, { size: "md" }));
expect(label).toHaveStyle({ 'font-size': '1rem' });
rerender(React__default.createElement(ColorSelect, { size: "lg" }));
expect(label).toHaveStyle({ 'font-size': '1.5rem' });
rerender(React__default.createElement(ColorSelect, { size: "xl" }));
expect(label).toHaveStyle({ 'font-size': '1.75rem' });
return [2 /*return*/];
});
}); });
it('Make ColorSelect required', function () { return __awaiter(void 0, void 0, void 0, function () {
var input, picker, pickerInner;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
renderWithThemeProvider(React__default.createElement(ColorSelect, { required: true }));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
picker = screen.getByLabelText('color picker');
pickerInner = picker.querySelector('div');
expect(pickerInner).toHaveAttribute('required');
return [2 /*return*/];
}
});
}); });
it('Has a name', function () { return __awaiter(void 0, void 0, void 0, function () {
var name, input, picker, pickerInner, nameAttribute;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
name = 'hello';
renderWithThemeProvider(React__default.createElement(ColorSelect, { name: name }));
input = screen.getByLabelText('color');
return [4 /*yield*/, userEvent.click(input)];
case 1:
_a.sent();
picker = 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 __awaiter(void 0, void 0, void 0, function () {
var label, renderedLabel;
return __generator(this, function (_a) {
label = 'My Label';
renderWithThemeProvider(React__default.createElement(ColorSelect, { label: label }));
renderedLabel = document.querySelector('label');
expect(renderedLabel.innerHTML).toBe(label);
return [2 /*return*/];
});
}); });
it('Render with initial color', function () { return __awaiter(void 0, void 0, void 0, function () {
var initial, input;
return __generator(this, function (_a) {
initial = { color: TEST_COLOR };
renderWithThemeProvider(React__default.createElement(ColorSelect, { initial: initial }));
input = screen.getByLabelText('color');
expect(input.value).toBe(TEST_COLOR);
return [2 /*return*/];
});
}); });
it('Render ColorSelect without hue slider', function () { return __awaiter(void 0, void 0, void 0, function () {
var input, hueSlider;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
renderWithThemeProvider(React__default.createElement(ColorSelect, { showHueSlider: false }));
input = screen.getByLabelText('color');
return [4 /*yield*/, 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 __awaiter(void 0, void 0, void 0, function () {
var palette, mockFn, preset;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
palette = ['#909CDC', '#7BD8DB', '#78DD89', '#CCE190'];
mockFn = jest.fn();
renderWithThemeProvider(React__default.createElement(ColorSelect.Presets, { palette: palette, label: "Presets", onColorClick: mockFn }));
preset = screen.getByLabelText(palette[1]);
return [4 /*yield*/, userEvent.click(preset)];
case 1:
_a.sent();
expect(mockFn).toBeCalledWith(palette[1]);
return [2 /*return*/];
}
});
}); });
it('Render a label for presets', function () { return __awaiter(void 0, void 0, void 0, function () {
var palette, label, renderedLabel;
return __generator(this, function (_a) {
palette = ['#909CDC', '#7BD8DB', '#78DD89', '#CCE190'];
label = 'My Label';
renderWithThemeProvider(React__default.createElement(ColorSelect.Presets, { palette: palette, label: label, onColorClick: function () {
console.log('click ');
} }));
renderedLabel = document.querySelector('h6');
expect(renderedLabel.innerHTML).toBe(label);
return [2 /*return*/];
});
}); });
});