Files
wr.do/components/shared/tiptap/tiptap-ui-primitive/button/button.scss
2025-10-20 11:34:05 +08:00

315 lines
7.2 KiB
SCSS

.tiptap-button {
font-size: 0.875rem;
font-weight: 500;
font-feature-settings:
"salt" on,
"cv01" on;
line-height: 1.15;
height: 2rem;
min-width: 2rem;
border: none;
padding: 0.5rem;
gap: 0.25rem;
display: flex;
align-items: center;
justify-content: center;
border-radius: var(--tt-radius-lg, 0.75rem);
transition-property: background, color, opacity;
transition-duration: var(--tt-transition-duration-default);
transition-timing-function: var(--tt-transition-easing-default);
// focus-visible
&:focus-visible {
outline: none;
}
&[data-highlighted="true"],
&[data-focus-visible="true"] {
background-color: var(--tt-button-hover-bg-color);
color: var(--tt-button-hover-text-color);
// outline: 2px solid var(--tt-button-active-icon-color);
}
&[data-weight="small"] {
width: 1.5rem;
min-width: 1.5rem;
padding-right: 0;
padding-left: 0;
}
/* button size large */
&[data-size="large"] {
font-size: 0.9375rem;
height: 2.375rem;
min-width: 2.375rem;
padding: 0.625rem;
}
/* button size small */
&[data-size="small"] {
font-size: 0.75rem;
line-height: 1.2;
height: 1.5rem;
min-width: 1.5rem;
padding: 0.3125rem;
border-radius: var(--tt-radius-md, 0.5rem);
}
/* trim / expand text of the button */
.tiptap-button-text {
padding: 0 0.125rem;
flex-grow: 1;
text-align: left;
line-height: 1.5rem;
}
&[data-text-trim="on"] {
.tiptap-button-text {
text-overflow: ellipsis;
overflow: hidden;
}
}
/* global icon settings */
.tiptap-button-icon,
.tiptap-button-icon-sub,
.tiptap-button-dropdown-arrows,
.tiptap-button-dropdown-small {
flex-shrink: 0;
}
/* standard icon, what is used */
.tiptap-button-icon {
width: 1rem;
height: 1rem;
}
&[data-size="large"] .tiptap-button-icon {
width: 1.125rem;
height: 1.125rem;
}
&[data-size="small"] .tiptap-button-icon {
width: 0.875rem;
height: 0.875rem;
}
/* if 2 icons are used and this icon should be more subtle */
.tiptap-button-icon-sub {
width: 1rem;
height: 1rem;
}
&[data-size="large"] .tiptap-button-icon-sub {
width: 1.125rem;
height: 1.125rem;
}
&[data-size="small"] .tiptap-button-icon-sub {
width: 0.875rem;
height: 0.875rem;
}
/* dropdown menus or arrows that are slightly smaller */
.tiptap-button-dropdown-arrows {
width: 0.75rem;
height: 0.75rem;
}
&[data-size="large"] .tiptap-button-dropdown-arrows {
width: 0.875rem;
height: 0.875rem;
}
&[data-size="small"] .tiptap-button-dropdown-arrows {
width: 0.625rem;
height: 0.625rem;
}
/* dropdown menu for icon buttons only */
.tiptap-button-dropdown-small {
width: 0.625rem;
height: 0.625rem;
}
&[data-size="large"] .tiptap-button-dropdown-small {
width: 0.75rem;
height: 0.75rem;
}
&[data-size="small"] .tiptap-button-dropdown-small {
width: 0.5rem;
height: 0.5rem;
}
/* button only has icons */
&:has(> svg):not(:has(> :not(svg))) {
gap: 0.125rem;
&[data-size="large"],
&[data-size="small"] {
gap: 0.125rem;
}
}
/* button only has 2 icons and one of them is dropdown small */
&:has(> svg:nth-of-type(2)):has(> .tiptap-button-dropdown-small):not(
:has(> svg:nth-of-type(3))
):not(:has(> .tiptap-button-text)) {
gap: 0;
padding-right: 0.25rem;
&[data-size="large"] {
padding-right: 0.375rem;
}
&[data-size="small"] {
padding-right: 0.25rem;
}
}
/* Emoji is used in a button */
.tiptap-button-emoji {
width: 1rem;
display: flex;
justify-content: center;
}
&[data-size="large"] .tiptap-button-emoji {
width: 1.125rem;
}
&[data-size="small"] .tiptap-button-emoji {
width: 0.875rem;
}
}
/* --------------------------------------------
----------- BUTTON COLOR SETTINGS -------------
-------------------------------------------- */
.tiptap-button {
background-color: var(--tt-button-default-bg-color);
color: var(--tt-button-default-text-color);
.tiptap-button-icon {
color: var(--tt-button-default-icon-color);
}
.tiptap-button-icon-sub {
color: var(--tt-button-default-icon-sub-color);
}
.tiptap-button-dropdown-arrows {
color: var(--tt-button-default-dropdown-arrows-color);
}
.tiptap-button-dropdown-small {
color: var(--tt-button-default-dropdown-arrows-color);
}
/* hover state of a button */
&:hover:not([data-active-item="true"]):not([disabled]),
&[data-active-item="true"]:not([disabled]),
&[data-highlighted]:not([disabled]):not([data-highlighted="false"]) {
background-color: var(--tt-button-hover-bg-color);
color: var(--tt-button-hover-text-color);
.tiptap-button-icon {
color: var(--tt-button-hover-icon-color);
}
.tiptap-button-icon-sub {
color: var(--tt-button-hover-icon-sub-color);
}
.tiptap-button-dropdown-arrows,
.tiptap-button-dropdown-small {
color: var(--tt-button-hover-dropdown-arrows-color);
}
}
/* Active state of a button */
&[data-active-state="on"]:not([disabled]),
&[data-state="open"]:not([disabled]) {
background-color: var(--tt-button-active-bg-color);
color: var(--tt-button-active-text-color);
.tiptap-button-icon {
color: var(--tt-button-active-icon-color);
}
.tiptap-button-icon-sub {
color: var(--tt-button-active-icon-sub-color);
}
.tiptap-button-dropdown-arrows,
.tiptap-button-dropdown-small {
color: var(--tt-button-active-dropdown-arrows-color);
}
&:hover {
background-color: var(--tt-button-active-hover-bg-color);
}
/* Emphasized */
&[data-appearance="emphasized"] {
background-color: var(--tt-button-active-bg-color-emphasized);
color: var(--tt-button-active-text-color-emphasized);
.tiptap-button-icon {
color: var(--tt-button-active-icon-color-emphasized);
}
.tiptap-button-icon-sub {
color: var(--tt-button-active-icon-sub-color-emphasized);
}
.tiptap-button-dropdown-arrows,
.tiptap-button-dropdown-small {
color: var(--tt-button-active-dropdown-arrows-color-emphasized);
}
&:hover {
background-color: var(--tt-button-active-hover-bg-color-emphasized);
}
}
/* Subdued */
&[data-appearance="subdued"] {
background-color: var(--tt-button-active-bg-color-subdued);
color: var(--tt-button-active-text-color-subdued);
.tiptap-button-icon {
color: var(--tt-button-active-icon-color-subdued);
}
.tiptap-button-icon-sub {
color: var(--tt-button-active-icon-sub-color-subdued);
}
.tiptap-button-dropdown-arrows,
.tiptap-button-dropdown-small {
color: var(--tt-button-active-dropdown-arrows-color-subdued);
}
&:hover {
background-color: var(--tt-button-active-hover-bg-color-subdued);
.tiptap-button-icon {
color: var(--tt-button-active-icon-color-subdued);
}
}
}
}
&:disabled {
background-color: var(--tt-button-disabled-bg-color);
color: var(--tt-button-disabled-text-color);
.tiptap-button-icon {
color: var(--tt-button-disabled-icon-color);
}
}
}