UNPKG

@jupyter/web-components

Version:

A component library for building extensions in Jupyter frontends.

80 lines (71 loc) 3.38 kB
// Copyright (c) Jupyter Development Team. // Copyright (c) Microsoft Corporation. // Distributed under the terms of the Modified BSD License. import { css } from '@microsoft/fast-element'; import { disabledCursor, display, focusVisible, forcedColorsStylesheetBehavior, ListboxElement, ListboxOption } from '@microsoft/fast-foundation'; import { SystemColors } from '@microsoft/fast-web-utilities'; import { controlCornerRadius, designUnit, disabledOpacity, fillColor, focusStrokeOuter, focusStrokeWidth, neutralStrokeRest, strokeWidth } from '../design-tokens.js'; import { heightNumber } from '../styles/size.js'; /** * Styles for Listbox * @public */ export const listboxStyles = (context, definition) => { const ListboxOptionTag = context.tagFor(ListboxOption); const hostContext = context.name === context.tagFor(ListboxElement) ? '' : '.listbox'; // The expression interpolations present in this block cause Prettier to generate // various formatting bugs. // prettier-ignore return css ` ${!hostContext ? display('inline-flex') : ''} :host ${hostContext} { background: ${fillColor}; border: calc(${strokeWidth} * 1px) solid ${neutralStrokeRest}; border-radius: calc(${controlCornerRadius} * 1px); box-sizing: border-box; flex-direction: column; padding: calc(${designUnit} * 1px) 0; } ${!hostContext ? css ` :host(:${focusVisible}:not([disabled])) { outline: none; } :host(:focus-within:not([disabled])) { border-color: ${focusStrokeOuter}; box-shadow: 0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${focusStrokeOuter} inset; } :host([disabled]) ::slotted(*) { cursor: ${disabledCursor}; opacity: ${disabledOpacity}; pointer-events: none; } ` : ''} ${hostContext || ':host([size])'} { max-height: calc( (var(--size) * ${heightNumber} + (${designUnit} * ${strokeWidth} * 2)) * 1px ); overflow-y: auto; } :host([size="0"]) ${hostContext} { max-height: none; } `.withBehaviors(forcedColorsStylesheetBehavior(css ` :host(:not([multiple]):${focusVisible}) ::slotted(${ListboxOptionTag}[aria-selected="true"]), :host([multiple]:${focusVisible}) ::slotted(${ListboxOptionTag}[aria-checked="true"]) { border-color: ${SystemColors.ButtonText}; box-shadow: 0 0 0 calc(${focusStrokeWidth} * 1px) inset ${SystemColors.HighlightText}; } :host(:not([multiple]):${focusVisible}) ::slotted(${ListboxOptionTag}[aria-selected="true"]) { background: ${SystemColors.Highlight}; color: ${SystemColors.HighlightText}; fill: currentcolor; } ::slotted(${ListboxOptionTag}[aria-selected="true"]:not([aria-checked="true"])) { background: ${SystemColors.Highlight}; border-color: ${SystemColors.HighlightText}; color: ${SystemColors.HighlightText}; } `)); };