@primer/react
Version:
An implementation of GitHub's Primer Design System using React
1 lines • 26.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/ActionList/ActionList.module.css","../../postcss-preset-primer/src/mixins/focusOutline.css","../../postcss-preset-primer/src/mixins/activeIndicatorLine.css"],"names":[],"mappings":"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","file":"ActionList-167cf6c7.css","sourcesContent":["/* stylelint-disable max-nesting-depth, selector-max-specificity, selector-max-compound-selectors */\n\n.ActionList {\n padding: 0;\n margin: 0;\n list-style: none;\n\n ul {\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n &:where([data-variant='inset']) {\n padding-block: var(--base-size-8);\n }\n\n &:where([data-variant='inset'], [data-variant='horizontal-inset']) {\n /* this is only to match default experience */\n & .ActionListItem {\n margin-inline: var(--base-size-8);\n }\n }\n\n &:where([data-variant='horizontal-inset']) {\n padding-bottom: var(--base-size-8);\n }\n\n &:where([data-dividers='true']) {\n /* place dividers on the wrapper that excludes leading visuals/actions */\n & .ActionListSubContent::before {\n position: absolute;\n\n /* use this top size after FF removed */\n\n /* top: calc(-1 * var(--control-medium-paddingBlock)); */\n /* stylelint-disable-next-line primer/spacing */\n top: -7px;\n display: block;\n width: 100%;\n height: 1px;\n content: '';\n /* stylelint-disable-next-line primer/colors */\n background: var(--borderColor-muted);\n }\n\n /* if inline description, move pseudo divider to description wrapper */\n & [data-description-variant='inline'] {\n &::before {\n position: absolute;\n\n /* use this top size after FF removed */\n\n /* top: calc(-1 * var(--control-medium-paddingBlock)); */\n /* stylelint-disable-next-line primer/spacing */\n top: -7px;\n display: block;\n width: 100%;\n height: var(--borderWidth-thin);\n content: '';\n /* stylelint-disable-next-line primer/colors */\n background: var(--borderColor-muted);\n }\n\n /* remove the default divider */\n & .ActionListSubContent::before {\n content: unset;\n }\n }\n\n /* hide if item is first of type with label::before, or is the first item after a sectionDivider */\n .ActionListItem:first-of-type .ActionListSubContent::before,\n .Divider + .ActionListItem .ActionListSubContent::before {\n visibility: hidden;\n }\n\n /* hide if item is first of type with label::before, or is the first item after a sectionDivider */\n .ActionListItem:first-of-type [data-description-variant='inline']::before,\n .Divider + .ActionListItem [data-description-variant='inline']::before {\n visibility: hidden;\n }\n }\n\n /* Make sure that the first visible item isn't a divider */\n & .Divider:first-child {\n display: none;\n }\n\n /* if a list has a mix of items with and without descriptions, reset the label font-weight to normal */\n &:has([data-has-description='true']):has([data-has-description='false']) {\n & .ItemLabel {\n font-weight: var(--base-text-weight-normal);\n }\n }\n}\n\n/* ActionListItem is a li that handles visual state, while ActionListItemContent controls actual state via button or link */\n\n.ActionListItem {\n position: relative;\n list-style: none;\n background-color: var(--control-transparent-bgColor-rest);\n border-radius: var(--borderRadius-medium);\n\n /* apply flex if trailing action exists as an immediate child */\n &:has(> .TrailingAction) {\n display: flex;\n flex-wrap: nowrap;\n }\n\n /* state */\n\n @media (forced-colors: active) {\n :focus,\n &:focus-visible,\n /* stylelint-disable-next-line selector-no-qualifying-type */\n >a.focus-visible,\n &[data-is-active-descendant] {\n /* Support for Windows high contrast https://sarahmhigley.com/writing/whcm-quick-tips */\n outline: solid 1px transparent !important;\n }\n }\n\n &:not(:has([aria-disabled], [disabled]), [data-has-subitem='true']) {\n @media (hover: hover) {\n &:hover,\n &:active {\n cursor: pointer;\n }\n\n &:hover {\n background-color: var(--control-transparent-bgColor-hover);\n\n &:not([data-active], :focus-visible) {\n /* Support for \"Windows high contrast mode\" https:sarahmhigley.com/writing/whcm-quick-tips/ */\n outline: solid var(--borderWidth-thin) transparent;\n outline-offset: calc(-1 * var(--borderWidth-thin));\n box-shadow: var(--boxShadow-thin) var(--control-transparent-borderColor-active);\n }\n }\n }\n\n &:active {\n background-color: var(--control-transparent-bgColor-active);\n\n &:not([data-active]) {\n /* Support for \"Windows high contrast mode\" https:sarahmhigley.com/writing/whcm-quick-tips/ */\n outline: solid var(--borderWidth-thin) transparent;\n outline-offset: calc(-1 * var(--borderWidth-thin));\n box-shadow: var(--boxShadow-thin) var(--control-transparent-borderColor-active);\n }\n }\n\n &:focus-visible {\n @mixin focusOutline 0;\n\n & .ActionListSubContent::before,\n & + .ActionListItem .ActionListSubContent::before {\n visibility: hidden;\n }\n }\n\n /* danger */\n &:where([data-variant='danger']) {\n & * :not([popover], .TrailingVisual) {\n color: var(--control-danger-fgColor-rest);\n }\n\n @media (hover: hover) {\n &:hover {\n background: var(--control-danger-bgColor-hover);\n\n & * :not([popover]) {\n color: var(--control-danger-fgColor-hover);\n }\n }\n }\n\n &:active {\n background: var(--control-danger-bgColor-active);\n\n & * :not([popover]) {\n color: var(--control-danger-fgColor-hover);\n }\n }\n }\n\n /* active state [aria-current] */\n &:where([data-active]) {\n background: var(--control-transparent-bgColor-selected);\n\n /* provides a visual indication of the current item for Windows high-contrast mode */\n outline: 2px solid transparent;\n\n & .ItemLabel {\n font-weight: var(--base-text-weight-semibold);\n color: var(--control-fgColor-rest);\n }\n\n @media (hover: hover) {\n &:hover {\n background-color: var(--control-transparent-bgColor-hover);\n }\n }\n\n /* hide dividers if showDividers is true and item is active */\n\n & .ActionListSubContent::before,\n & + .ActionListItem .ActionListSubContent::before {\n visibility: hidden;\n }\n\n /* blue accent line */\n &::after {\n @mixin activeIndicatorLine;\n }\n }\n\n &:where([data-is-active-descendant]) {\n background: var(--control-transparent-bgColor-selected);\n\n /* provides a visual indication of the current item for Windows high-contrast mode */\n outline: 2px solid transparent;\n\n /* hide dividers if showDividers is true and item is active */\n\n /* add back in after FF ship */\n\n /* & .ActionListSubContent::before,\n & + .ActionListItem .ActionListSubContent::before {\n visibility: hidden;\n } */\n\n /* blue accent line */\n &::after {\n @mixin activeIndicatorLine;\n }\n }\n\n /* inactive */\n &:where([data-inactive='true']) {\n /* ignore tooltip */\n & * :not([popover], .InactiveWarning) {\n color: var(--fgColor-muted);\n }\n\n @media (hover: hover) {\n &:hover {\n cursor: not-allowed;\n background-color: transparent;\n\n & * :not([popover], .InactiveWarning) {\n color: var(--fgColor-muted);\n }\n }\n }\n\n &:active {\n background: transparent;\n }\n }\n\n &:where([data-loading='true']),\n &:has([data-loading='true']) {\n & * {\n color: var(--fgColor-muted);\n }\n }\n\n /* hide dividers */\n @media (hover: hover) {\n &:hover {\n & .ActionListSubContent::before,\n & + .ActionListItem .ActionListSubContent::before {\n visibility: hidden;\n }\n\n & [data-description-variant='inline']::before,\n & + .ActionListItem [data-description-variant='inline']::before {\n visibility: hidden;\n }\n }\n }\n }\n\n /* if item has subitem, move hover styles to ActionListContent */\n &[data-has-subitem='true'] {\n /* first child */\n & > .ActionListContent {\n z-index: 1;\n\n @media (hover: hover) {\n &:hover {\n cursor: pointer;\n background-color: var(--control-transparent-bgColor-hover);\n }\n }\n\n &:active {\n background-color: var(--control-transparent-bgColor-active);\n }\n }\n\n & .Spacer {\n display: block;\n }\n }\n\n /* disabled */\n\n &[aria-disabled='true'],\n &:has([aria-disabled='true'], [disabled]) {\n & .ActionListContent * {\n color: var(--control-fgColor-disabled);\n }\n\n & .ActionListContent {\n @media (hover: hover) {\n &:hover {\n cursor: not-allowed;\n background-color: transparent;\n }\n }\n }\n\n @media (hover: hover) {\n &:hover {\n background-color: transparent;\n }\n }\n\n & .MultiSelectCheckbox {\n background-color: var(--control-bgColor-disabled);\n border-color: var(--control-borderColor-disabled);\n }\n\n &[aria-checked='true'],\n &[aria-selected='true'] {\n & .MultiSelectCheckbox {\n background-color: var(--control-checked-bgColor-disabled);\n /* stylelint-disable-next-line primer/colors */\n border-color: var(--control-checked-bgColor-disabled);\n\n &::before {\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--control-checked-fgColor-disabled);\n }\n }\n }\n }\n\n /* When TrailingAction is in loading state, keep labels and descriptions accessible */\n &:has(.TrailingAction [data-loading='true']):not([aria-disabled='true']) {\n /* Ensure labels and descriptions maintain accessibility contrast */\n & .ItemLabel {\n color: var(--fgColor-default);\n }\n\n & .Description {\n color: var(--fgColor-default);\n }\n }\n\n /* Make sure that the first visible item isn't a divider */\n &[aria-hidden] + .Divider {\n display: none;\n }\n\n /*\n * checkbox item [aria-checked]\n * listbox [aria-selected]\n */\n\n & .MultiSelectCheckbox {\n position: relative;\n display: grid;\n width: var(--base-size-16);\n height: var(--base-size-16);\n margin: 0;\n cursor: pointer;\n background-color: var(--bgColor-default);\n border: var(--borderWidth-thin) solid var(--control-borderColor-emphasis);\n border-radius: var(--borderRadius-small);\n transition:\n background-color,\n border-color 80ms cubic-bezier(0.33, 1, 0.68, 1);\n /* checked -> unchecked - add 120ms delay to fully see animation-out */\n\n place-content: center;\n\n &::before {\n width: var(--base-size-16);\n height: var(--base-size-16);\n content: '';\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--control-checked-fgColor-rest);\n transition: visibility 0s linear 230ms;\n clip-path: inset(var(--base-size-16) 0 0 0);\n\n /* octicon checkmark image */\n mask-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNzgwMyAwLjIxOTYyNUMxMS45MjEgMC4zNjA0MjcgMTIgMC41NTEzMDUgMTIgMC43NTAzMTNDMTIgMC45NDkzMjEgMTEuOTIxIDEuMTQwMTkgMTEuNzgwMyAxLjI4MUw0LjUxODYgOC41NDA0MkM0LjM3Nzc1IDguNjgxIDQuMTg2ODIgOC43NiAzLjk4Nzc0IDguNzZDMy43ODg2NyA4Ljc2IDMuNTk3NzMgOC42ODEgMy40NTY4OSA4LjU0MDQyTDAuMjAxNjIyIDUuMjg2MkMwLjA2ODkyNzcgNS4xNDM4MyAtMC4wMDMzMDkwNSA0Ljk1NTU1IDAuMDAwMTE2NDkzIDQuNzYwOThDMC4wMDM1NTIwNSA0LjU2NjQzIDAuMDgyMzg5NCA0LjM4MDgxIDAuMjIwMDMyIDQuMjQzMjFDMC4zNTc2NjUgNC4xMDU2MiAwLjU0MzM1NSA0LjAyNjgxIDAuNzM3OTcgNC4wMjMzOEMwLjkzMjU4NCA0LjAxOTk0IDEuMTIwOTMgNC4wOTIxNyAxLjI2MzM0IDQuMjI0ODJMMy45ODc3NCA2Ljk0ODM1TDEwLjcxODYgMC4yMTk2MjVDMTAuODU5NSAwLjA3ODk5MjMgMTEuMDUwNCAwIDExLjI0OTUgMEMxMS40NDg1IDAgMTEuNjM5NSAwLjA3ODk5MjMgMTEuNzgwMyAwLjIxOTYyNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=');\n mask-size: 75%;\n mask-repeat: no-repeat;\n mask-position: center;\n animation: checkmarkOut 80ms cubic-bezier(0.65, 0, 0.35, 1);\n /* forwards; slightly snappier animation out */\n }\n\n @media (forced-colors: active) {\n /* Support for Windows high contrast https://sarahmhigley.com/writing/whcm-quick-tips */\n\n /* background-color will be overriden but border-width is a workaround */\n border-width: var(--borderWidth-thin);\n }\n }\n\n &[aria-checked='true'],\n &[aria-selected='true'] {\n & .MultiSelectCheckbox {\n background-color: var(--control-checked-bgColor-rest);\n border-color: var(--control-checked-borderColor-rest);\n transition:\n background-color,\n border-color 80ms cubic-bezier(0.32, 0, 0.67, 0) 0ms;\n /* unchecked -> checked */\n\n &::before {\n visibility: visible;\n transition: visibility 0s linear 0s;\n animation: checkmarkIn 80ms cubic-bezier(0.65, 0, 0.35, 1) forwards 80ms;\n }\n\n @media (forced-colors: active) {\n /* Support for Windows high contrast https://sarahmhigley.com/writing/whcm-quick-tips\n background-color will be overriden but border-width is a workaround */\n /* stylelint-disable-next-line primer/borders */\n border-width: 8px;\n }\n }\n\n & .SingleSelectCheckmark {\n visibility: visible;\n }\n }\n\n &[aria-checked='false'],\n &[aria-selected='false'] {\n & .MultiSelectCheckbox {\n &::before {\n visibility: hidden;\n }\n }\n\n & .SingleSelectCheckmark {\n visibility: hidden;\n }\n }\n}\n\n/* hide by default to support inactive state where role cannot be menuitemradio or menuitemcheckbox */\n.SingleSelectCheckmark {\n visibility: hidden;\n}\n\n/* button or a tag */\n\n/* [ [spacer] [leadingAction] [leadingVisual] [content] ] */\n.ActionListContent {\n --subitem-depth: 0px;\n\n position: relative;\n display: grid;\n width: 100%;\n color: var(--control-fgColor-rest);\n text-align: left;\n user-select: none;\n background-color: transparent;\n border: none;\n border-radius: var(--borderRadius-medium);\n transition: background 33.333ms linear;\n /* stylelint-disable-next-line primer/spacing */\n padding-block: var(--control-medium-paddingBlock);\n /* stylelint-disable-next-line primer/spacing */\n padding-inline: var(--control-medium-paddingInline-condensed);\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n grid-template-rows: min-content;\n grid-template-areas: 'spacer leadingAction leadingVisual content';\n grid-template-columns: min-content min-content min-content minmax(0, auto);\n align-items: start;\n\n /* column-gap persists with empty grid-areas, margin applies only when children exist */\n & > :not(:last-child, .Spacer) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--control-medium-gap);\n }\n\n &:hover {\n text-decoration: none;\n cursor: pointer;\n }\n\n /* large */\n\n &[data-size='large'] {\n /* stylelint-disable-next-line primer/spacing */\n padding-block: var(--control-large-paddingBlock);\n }\n\n /* collapsible item [aria-expanded] */\n\n &[aria-expanded='true'] {\n & .ExpandIcon {\n transform: scaleY(-1);\n }\n }\n\n &[aria-expanded='false'] {\n & .ExpandIcon {\n transform: scaleY(1);\n }\n\n & + .SubGroup {\n display: none;\n }\n\n /* show active indicator on parent collapse if child is active */\n &:has(+ .SubGroup [data-active='true']) {\n background: var(--control-transparent-bgColor-selected);\n\n & .ItemLabel {\n font-weight: var(--base-text-weight-semibold);\n }\n\n & .ActionListSubContent::before,\n & + .ActionListItem .ActionListSubContent::before {\n visibility: hidden;\n }\n\n /* blue accent line */\n &::after {\n @mixin activeIndicatorLine;\n }\n }\n }\n}\n\n/* [ [content] [trailingVisual] [trailingAction] ] */\n.ActionListSubContent {\n grid-area: content;\n position: relative;\n display: grid;\n width: 100%;\n grid-template-rows: min-content;\n grid-template-areas: 'label trailingVisual trailingAction';\n grid-template-columns: minmax(0, auto) min-content min-content;\n align-items: start;\n\n /* column-gap persists with empty grid-areas, margin applies only when children exist */\n & > :not(:last-child) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--control-medium-gap);\n }\n}\n\n/* place children on grid */\n\n/* spacer used to create depth for nested lists */\n\n.Spacer {\n display: none;\n width: max(0px, var(--subitem-depth) * 8px);\n grid-area: spacer;\n}\n\n.LeadingAction {\n grid-area: leadingAction;\n}\n\n.LeadingVisual {\n grid-area: leadingVisual;\n}\n\n.TrailingVisual {\n grid-area: trailingVisual;\n font-size: var(--text-body-size-medium);\n}\n\n.TrailingAction {\n grid-area: trailingAction;\n}\n\n/* wrapper span\ndefault block */\n.ItemDescriptionWrap {\n grid-area: label;\n display: flex;\n flex-direction: column;\n gap: var(--base-size-4);\n\n & .ItemLabel {\n font-weight: var(--base-text-weight-semibold);\n /* stylelint-disable-next-line declaration-property-value-keyword-no-deprecated */\n word-break: break-word;\n }\n\n /* inline */\n &:where([data-description-variant='inline']) {\n position: relative;\n word-break: normal;\n flex-direction: row;\n align-items: baseline;\n gap: var(--base-size-8);\n\n & .ItemLabel {\n word-break: normal;\n }\n\n &:has([data-truncate='true']) {\n & .ItemLabel {\n flex: 1 0 auto;\n }\n }\n\n & .Description {\n /* adjust line-height for baseline alignment */\n\n /* line-height: calc(var(--control-medium-lineBoxHeight) - var(--base-size-2)); */\n /* stylelint-disable-next-line primer/typography */\n line-height: 16px;\n }\n }\n}\n\n/* description */\n.Description {\n font-size: var(--text-body-size-small);\n font-weight: var(--base-text-weight-normal);\n\n /* line-height: var(--text-caption-lineHeight); */\n\n /* remove after FF ships */\n /* stylelint-disable-next-line primer/typography */\n line-height: 16px;\n color: var(--fgColor-muted);\n}\n\n/* helper for grid alignment with multi-line content\nspan wrapping svg or text */\n.VisualWrap {\n display: flex;\n min-width: max-content;\n min-height: var(--control-medium-lineBoxHeight);\n /* stylelint-disable-next-line primer/typography */\n line-height: 20px;\n /* temporary until we fix line-height rounding in primitives */\n color: var(--fgColor-muted);\n pointer-events: none;\n fill: var(--fgColor-muted);\n align-items: center;\n}\n\n/* text */\n.ItemLabel {\n position: relative;\n font-size: var(--text-body-size-medium);\n font-weight: var(--base-text-weight-normal);\n /* stylelint-disable-next-line primer/typography */\n line-height: 20px;\n /* temporary until we fix line-height rounding in primitives */\n color: var(--fgColor-default);\n grid-area: label;\n /* stylelint-disable-next-line declaration-property-value-keyword-no-deprecated */\n word-break: break-word;\n}\n\n.SubGroup {\n & .ItemLabel {\n font-size: var(--text-body-size-small);\n }\n\n & .ActionListItem {\n margin-inline: 0;\n }\n}\n\n/* trailing action icon button */\n\n.TrailingActionButton {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n\n /* Preserve width consistency when loading state is active for text buttons only */\n &[data-loading='true']:has([data-component='buttonContent']) {\n /* Double the left padding to compensate for missing right padding */\n padding: 0 0 0 calc(var(--base-size-12) * 2);\n\n /* Position spinner at the end to align with IconButton */\n & [data-component='loadingSpinner'] {\n place-self: end;\n /* Match the IconButton spinner size */\n width: var(--control-medium-size, 2rem);\n height: var(--control-medium-size, 2rem);\n /* Ensure spinner is properly centered */\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n}\n\n.InactiveButtonWrap {\n &:has(.TrailingVisual) {\n grid-area: trailingVisual;\n }\n\n &:has(.LeadingVisual) {\n grid-area: leadingVisual;\n }\n}\n\n.Divider {\n display: block;\n height: var(--borderWidth-thin);\n padding: 0;\n /* stylelint-disable-next-line primer/spacing */\n margin-block-start: calc(var(--base-size-8) - var(--borderWidth-thin));\n margin-block-end: var(--base-size-8);\n list-style: none;\n /* stylelint-disable-next-line primer/colors */\n background: var(--borderColor-muted);\n border: 0;\n}\n\n.InactiveButtonReset {\n display: flex;\n padding: 0;\n font: inherit;\n color: inherit;\n cursor: pointer;\n background: none;\n border: none;\n}\n\n.InactiveWarning {\n font-size: var(--text-body-size-small);\n\n /* line-height: var(--text-caption-lineHeight); */\n\n /* use variable when FF removed */\n /* stylelint-disable-next-line primer/typography */\n line-height: 16px;\n color: var(--fgColor-attention);\n grid-row: 2/2;\n}\n\n@keyframes checkmarkIn {\n from {\n clip-path: inset(var(--base-size-16) 0 0 0);\n }\n\n to {\n clip-path: inset(0 0 0 0);\n }\n}\n\n@keyframes checkmarkOut {\n from {\n clip-path: inset(0 0 0 0);\n }\n\n to {\n clip-path: inset(var(--base-size-16) 0 0 0);\n }\n}\n","@define-mixin focusOutline $outlineOffset: -2px, $outlineColor: var(--focus-outlineColor) {\n outline: 2px solid $outlineColor;\n outline-offset: $outlineOffset;\n box-shadow: none;\n}\n","@define-mixin activeIndicatorLine {\n position: absolute;\n top: calc(50% - var(--base-size-12));\n left: calc(-1 * var(--base-size-8));\n width: var(--base-size-4);\n height: var(--base-size-24);\n content: '';\n /* stylelint-disable-next-line primer/colors */\n background: var(--borderColor-accent-emphasis);\n border-radius: var(--borderRadius-medium);\n}\n"]}