@cbpds/web-components
Version:
Web components for the CBP Design System.
231 lines (226 loc) • 11.6 kB
CSS
/*
* Caution: "global styles" get injected into every component and can cause file size bloat.
* These should only include SASS variables and mixins that are not written out to CSS directly
*/
/**
* @prop --cbp-file-input-color: var(--cbp-color-text-darkest);
* @prop --cbp-file-input-color-bg: var(--cbp-color-white);
* @prop --cbp-file-input-color-border: var(--cbp-color-interactive-secondary-base);
* @prop --cbp-file-input-color-border-hover: var(--cbp-color-interactive-secondary-darker);
* @prop --cbp-file-input-color-border-focus: var(--cbp-color-interactive-focus-dark);
* @prop --cbp-file-input-color-outline: transparent;
* @prop --cbp-file-input-color-outline-hover: var(--cbp-color-interactive-secondary-light);
* @prop --cbp-file-input-color-outline-focus: var(--cbp-color-interactive-focus-light);
* @prop --cbp-file-input-color-dark: var(--cbp-color-text-lightest);
* @prop --cbp-file-input-color-bg-dark: var(--cbp-color-gray-cool-70);
* @prop --cbp-file-input-color-border-dark: var(--cbp-color-interactive-secondary-light);
* @prop --cbp-file-input-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter);
* @prop --cbp-file-input-color-border-focus-dark:var(--cbp-color-interactive-focus-light);
* @prop --cbp-file-input-color-outline-dark: transparent;
* @prop --cbp-file-input-color-outline-hover-dark: var(--cbp-color-interactive-secondary-dark);
* @prop --cbp-file-input-color-outline-focus-dark: var(--cbp-color-white);
* @prop --cbp-file-input-icon-color: var(--cbp-color-text-base);
* @prop --cbp-file-input-file-color-bg: var(--cbp-color-gray-cool-10);
* @prop --cbp-file-input-file-color-bg-dark: var(--cbp-color-gray-cool-60);
*/
:root {
--cbp-file-input-color: var(--cbp-color-text-darkest);
--cbp-file-input-color-bg: var(--cbp-color-white);
--cbp-file-input-color-bg-dragged: var(--cbp-color-interactive-primary-lighter);
--cbp-file-input-color-border: var(--cbp-color-interactive-secondary-base);
--cbp-file-input-color-border-hover: var(--cbp-color-interactive-secondary-darker);
--cbp-file-input-color-border-focus: var(--cbp-color-interactive-focus-dark);
--cbp-file-input-color-outline: transparent;
--cbp-file-input-color-outline-hover: var(--cbp-color-interactive-secondary-light);
--cbp-file-input-color-outline-focus: var(--cbp-color-interactive-focus-light);
--cbp-file-input-color-dark: var(--cbp-color-text-lightest);
--cbp-file-input-color-bg-dark: var(--cbp-color-gray-cool-70);
--cbp-file-input-color-bg-dragged-dark: var(--cbp-color-interactive-primary-darker);
--cbp-file-input-color-border-dark: var(--cbp-color-interactive-secondary-light);
--cbp-file-input-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter);
--cbp-file-input-color-border-focus-dark:var(--cbp-color-interactive-focus-light);
--cbp-file-input-color-outline-dark: transparent;
--cbp-file-input-color-outline-hover-dark: var(--cbp-color-interactive-secondary-dark);
--cbp-file-input-color-outline-focus-dark: var(--cbp-color-white);
--cbp-file-input-icon-color: var(--cbp-color-text-base);
--cbp-file-input-file-color-bg: var(--cbp-color-gray-cool-10);
--cbp-file-input-file-color-bg-dark: var(--cbp-color-gray-cool-60);
--cbp-file-input-file-color-bg-error: var(--cbp-color-danger-lighter);
--cbp-file-input-file-color-bg-error-dark: var(--cbp-color-danger-darker);
}
[data-cbp-theme=light] cbp-file-input[context*=dark],
[data-cbp-theme=dark] cbp-file-input:not([context=dark-inverts]):not([context=light-always]) {
--cbp-file-input-color-label: var(--cbp-file-input-color-label-dark);
--cbp-file-input-color: var(--cbp-file-input-color-dark);
--cbp-file-input-color-bg: var(--cbp-file-input-color-bg-dark);
--cbp-file-input-color-bg-dragged: var(--cbp-file-input-color-bg-dragged-dark);
--cbp-file-input-color-border: var(--cbp-file-input-color-border-dark);
--cbp-file-input-color-border-hover: var(--cbp-file-input-color-border-hover-dark);
--cbp-file-input-color-border-focus: var(--cbp-file-input-color-border-focus-dark);
--cbp-file-input-color-outline: var(--cbp-file-input-color-outline-dark);
--cbp-file-input-color-outline-hover: var(--cbp-file-input-color-outline-hover-dark);
--cbp-file-input-color-outline-focus: var(--cbp-file-input-color-outline-focus-dark);
--cbp-file-input-file-color-bg: var(--cbp-file-input-file-color-bg-dark);
--cbp-file-input-file-color-bg-error: var(--cbp-file-input-file-color-bg-error-dark);
}
cbp-file-input {
display: block;
margin-block-start: var(--cbp-space-2x);
container-type: inline-size;
}
cbp-file-input[error] {
--cbp-file-input-color-border: var(--cbp-color-danger-dark);
--cbp-file-input-color-border-hover: var(--cbp-color-danger-dark);
--cbp-file-input-color-outline-hover: var(--cbp-color-danger-light);
--cbp-file-input-color-border-dark: var(--cbp-color-danger-light);
--cbp-file-input-color-border-hover-dark: var(--cbp-color-danger-lighter);
--cbp-file-input-color-outline-hover-dark: var(--cbp-color-danger-light);
}
cbp-file-input[error] .cbp-file-input-visuals cbp-button {
--cbp-button-color-bg: var(--cbp-color-danger-dark);
--cbp-button-color-bg-hover: var(--cbp-color-danger-darker);
--cbp-button-color-border: var(--cbp-color-danger-dark);
--cbp-button-color-border-hover: var(--cbp-color-danger-darker);
--cbp-button-color-bg-dark: var(--cbp-color-danger-light);
--cbp-button-color-bg-hover-dark: var(--cbp-color-danger-lighter);
--cbp-button-color-border-dark: var(--cbp-color-danger-light);
--cbp-button-color-border-hover-dark: var(--cbp-color-danger-lighter);
}
cbp-file-input:has(input.cbp-file-input-dragged) {
--cbp-file-input-color-bg: var(--cbp-file-input-color-bg-dragged);
--cbp-file-input-color-bg-dark: var(--cbp-file-input-color-bg-dragged-dark);
}
cbp-file-input:has(input:disabled) {
--cbp-file-input-color: var(--cbp-color-interactive-disabled-dark);
--cbp-file-input-color-dark: var(--cbp-color-interactive-disabled-light);
--cbp-file-input-color-bg: transparent;
--cbp-file-input-color-bg-dark: transparent;
--cbp-file-input-color-border: var(--cbp-color-interactive-disabled-dark);
--cbp-file-input-color-border-dark: var(--cbp-color-interactive-disabled-light);
--cbp-file-input-icon-color: currentColor;
--cbp-file-input-file-color-bg: var(--cbp-color-interactive-disabled-light);
--cbp-file-input-file-color-bg-dark: var(--cbp-color-interactive-disabled-dark);
}
cbp-file-input .cbp-file-input-wrapper {
display: flex;
align-items: center;
position: relative;
width: 100%;
max-width: 100%;
min-height: 4.5rem;
margin-block-end: var(--cbp-space-4x);
color: var(--cbp-file-input-color);
background-color: var(--cbp-file-input-color-bg);
border-width: var(--cbp-border-size-md);
border-color: var(--cbp-file-input-color-border);
border-radius: var(--cbp-file-input-border-radius);
outline-style: solid;
outline-width: 0;
outline-color: var(--cbp-file-input-color-outline);
outline-offset: calc((var(--cbp-border-size-md) + var(--cbp-border-size-xl)) * -1);
border-style: dashed;
}
cbp-file-input .cbp-file-input-wrapper:hover:not(:has(input:disabled)) {
--cbp-file-input-color-border: var(--cbp-file-input-color-border-hover);
--cbp-file-input-color-outline: var(--cbp-file-input-color-outline-hover);
outline-width: var(--cbp-border-size-xl);
}
cbp-file-input .cbp-file-input-wrapper:hover:not(:has(input:disabled)) cbp-button[fill=solid][color=secondary] {
--cbp-button-color: var(--cbp-button-color-hover);
--cbp-button-color-bg: var(--cbp-button-color-bg-hover);
--cbp-button-color-border: var(--cbp-button-color-border-hover);
--cbp-button-color-dark: var(--cbp-button-color-hover-dark);
--cbp-button-color-bg-dark: var(--cbp-button-color-bg-hover-dark);
--cbp-button-color-border-dark: var(--cbp-button-color-border-hover-dark);
}
cbp-file-input .cbp-file-input-wrapper:focus:not(:has(input:disabled)), cbp-file-input .cbp-file-input-wrapper:focus-within:not(:has(input:disabled)) {
--cbp-file-input-color-border: var(--cbp-file-input-color-border-focus);
--cbp-file-input-color-outline: var(--cbp-file-input-color-outline-focus);
outline-width: var(--cbp-border-size-xl);
}
cbp-file-input .cbp-file-input-wrapper:focus:not(:has(input:disabled)) cbp-button[fill=solid][color=secondary], cbp-file-input .cbp-file-input-wrapper:focus-within:not(:has(input:disabled)) cbp-button[fill=solid][color=secondary] {
--cbp-button-color: var(--cbp-button-color-focus);
--cbp-button-color-bg: var(--cbp-button-color-bg-focus);
--cbp-button-color-border: var(--cbp-button-color-border-focus);
--cbp-button-color-dark: var(--cbp-button-color-focus-dark);
--cbp-button-color-bg-dark: var(--cbp-button-color-bg-focus-dark);
--cbp-button-color-border-dark: var(--cbp-button-color-border-focus-dark);
}
cbp-file-input .cbp-file-input-wrapper:focus:not(:has(input:disabled)) cbp-button[fill=solid][color=secondary] button, cbp-file-input .cbp-file-input-wrapper:focus-within:not(:has(input:disabled)) cbp-button[fill=solid][color=secondary] button {
outline-width: var(--cbp-border-size-md);
}
cbp-file-input .cbp-file-input-wrapper[readonly], cbp-file-input .cbp-file-input-wrapper:disabled {
font-style: italic;
cursor: not-allowed;
}
cbp-file-input .cbp-file-input-wrapper .cbp-file-input-visuals {
display: flex;
align-items: center;
gap: var(--cbp-space-3x);
width: 100%;
height: 100%;
padding-inline-start: var(--cbp-space-4x);
padding-inline-end: var(--cbp-space-3x);
}
cbp-file-input .cbp-file-input-wrapper .cbp-file-input-visuals .cbp-file-input-text {
flex-grow: 1;
display: flex;
align-items: center;
font-style: italic;
text-wrap: pretty;
}
cbp-file-input .cbp-file-input-wrapper .cbp-file-input-visuals > cbp-icon {
--cbp-icon-color: var(--cbp-file-input-icon-color);
}
cbp-file-input .cbp-file-input-wrapper input[type=file]:not(#fakeId) {
appearance: none;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
opacity: 0;
z-index: 2;
}
cbp-file-input .cbp-file-input-filelist {
display: flex;
flex-direction: column;
gap: var(--cbp-space-4x);
}
cbp-file-input .cbp-file-input-filelist .cbp-file-input-file-error {
--cbp-file-input-file-color-bg: var(--cbp-file-input-file-color-bg-error);
}
cbp-file-input .cbp-file-input-filelist > div {
display: flex;
align-items: center;
gap: var(--cbp-space-2x);
padding: var(--cbp-space-2x);
background-color: var(--cbp-file-input-file-color-bg);
font-style: italic;
line-height: var(--cbp-line-height-xs);
overflow: hidden;
text-overflow: ellipsis;
}
cbp-file-input .cbp-file-input-filelist > div :first-child {
flex-grow: 9;
}
cbp-file-input .cbp-file-input-filelist > div cbp-button:not(#fakeId) {
--cbp-icon-size: var(--cbp-space-3x);
--cbp-button-padding: 0;
--cbp-button-min-width: var(--cbp-space-7x);
--cbp-button-min-height: var(--cbp-space-7x);
--cbp-button-width: var(--cbp-space-7x);
--cbp-button-height: var(--cbp-space-7x);
--cbp-button-border-radius: var(--cbp-border-radius-circle);
--cbp-button-color-hover: var(--cbp-color-text-lightest);
--cbp-button-color-hover-dark: var(--cbp-color-text-darkest);
--cbp-button-color-bg-hover: var(--cbp-color-interactive-secondary-darker);
--cbp-button-color-bg-hover-dark: var(--cbp-color-interactive-secondary-lighter);
--cbp-button-color-border-hover: var(--cbp-color-interactive-secondary-darker);
--cbp-button-color-border-hover-dark: var(--cbp-color-interactive-secondary-lighter);
}
@container (width <= 19rem) {
.cbp-file-input-visuals cbp-icon {
display: none;
}
}