UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

104 lines (96 loc) 4.76 kB
'use strict'; var React = require('react'); var octiconsReact = require('@primer/octicons-react'); var Group = require('./Group.js'); var shared = require('./shared.js'); var Visuals = require('./Visuals.js'); var Box = require('../Box/Box.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); const Selection = ({ selected }) => { const { selectionVariant: listSelectionVariant, role: listRole } = React__default.default.useContext(shared.ListContext); const { selectionVariant: groupSelectionVariant } = React__default.default.useContext(Group.GroupContext); /** selectionVariant in Group can override the selectionVariant in List root */ /** fallback to selectionVariant from container menu if any (ActionMenu, SelectPanel ) */ let selectionVariant; if (typeof groupSelectionVariant !== 'undefined') selectionVariant = groupSelectionVariant;else selectionVariant = listSelectionVariant; if (!selectionVariant) { // if selectionVariant is not set on List, but Item is selected // fail loudly instead of silently ignoring if (selected) { throw new Error('For Item to be selected, ActionList or ActionList.Group needs to have a selectionVariant defined'); } else { return null; } } if (selectionVariant === 'single' || listRole === 'menu') { return /*#__PURE__*/React__default.default.createElement(Visuals.LeadingVisualContainer, { "data-component": "ActionList.Selection" }, selected && /*#__PURE__*/React__default.default.createElement(octiconsReact.CheckIcon, null)); } /** * selectionVariant is multiple * we use a styled div instead of an input because there should not * be an interactive element inside an option */ const checkmarkIn = { from: { clipPath: 'inset(var(--base-size-16, 16px) 0 0 0)' }, to: { clipPath: 'inset(0 0 0 0)' } }; const checkmarkOut = { from: { clipPath: 'inset(0 0 0 0)' }, to: { clipPath: 'inset(var(--base-size-16, 16px) 0 0 0)' } }; return /*#__PURE__*/React__default.default.createElement(Visuals.LeadingVisualContainer, { "data-component": "ActionList.Selection" }, /*#__PURE__*/React__default.default.createElement(Box, { sx: { borderColor: selected ? 'accent.fg' : 'neutral.emphasis', borderStyle: 'solid', borderWidth: '1', borderRadius: '1', cursor: 'pointer', display: 'grid', height: 'var(--base-size-16, 16px)', margin: '0', placeContent: 'center', width: 'var(--base-size-16, 16px)', backgroundColor: selected ? 'accent.fg' : 'canvas.default', transition: selected ? 'background-color, border-color 80ms cubic-bezier(0.33, 1, 0.68, 1)' : 'background-color, border-color 80ms cubic-bezier(0.32, 0, 0.67, 0) 0ms', '::before': { width: 'var(--base-size-16, 16px)', height: 'var(--base-size-16, 16px)', visibility: selected ? 'visible' : 'hidden', content: '""', backgroundColor: 'fg.onEmphasis', transition: selected ? 'visibility 0s linear 0s' : 'visibility 0s linear 230ms', clipPath: 'inset(var(--base-size-16, 16px) 0 0 0)', maskImage: "url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNzgwMyAwLjIxOTYyNUMxMS45MjEgMC4zNjA0MjcgMTIgMC41NTEzMDUgMTIgMC43NTAzMTNDMTIgMC45NDkzMjEgMTEuOTIxIDEuMTQwMTkgMTEuNzgwMyAxLjI4MUw0LjUxODYgOC41NDA0MkM0LjM3Nzc1IDguNjgxIDQuMTg2ODIgOC43NiAzLjk4Nzc0IDguNzZDMy43ODg2NyA4Ljc2IDMuNTk3NzMgOC42ODEgMy40NTY4OSA4LjU0MDQyTDAuMjAxNjIyIDUuMjg2MkMwLjA2ODkyNzcgNS4xNDM4MyAtMC4wMDMzMDkwNSA0Ljk1NTU1IDAuMDAwMTE2NDkzIDQuNzYwOThDMC4wMDM1NTIwNSA0LjU2NjQzIDAuMDgyMzg5NCA0LjM4MDgxIDAuMjIwMDMyIDQuMjQzMjFDMC4zNTc2NjUgNC4xMDU2MiAwLjU0MzM1NSA0LjAyNjgxIDAuNzM3OTcgNC4wMjMzOEMwLjkzMjU4NCA0LjAxOTk0IDEuMTIwOTMgNC4wOTIxNyAxLjI2MzM0IDQuMjI0ODJMMy45ODc3NCA2Ljk0ODM1TDEwLjcxODYgMC4yMTk2MjVDMTAuODU5NSAwLjA3ODk5MjMgMTEuMDUwNCAwIDExLjI0OTUgMEMxMS40NDg1IDAgMTEuNjM5NSAwLjA3ODk5MjMgMTEuNzgwMyAwLjIxOTYyNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=')", maskSize: '75%', maskRepeat: 'no-repeat', maskPosition: 'center', animation: selected ? 'checkmarkIn 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards 80ms' : 'checkmarkOut 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards', '@keyframes checkmarkIn': checkmarkIn, '@keyframes checkmarkOut': checkmarkOut } }, "data-component": "ActionList.Checkbox" })); }; Selection.displayName = "Selection"; exports.Selection = Selection;