UNPKG

raft-ui

Version:

React UI components for Raft.

1,316 lines (1,121 loc) • 33.4 kB
.r-float-button { --r-float-button-size: 32px; --r-float-button-width: var(--r-float-button-size); --r-float-button-padding-x: 0px; --r-float-button-border-radius: 8px; --r-float-button-border-width: 1.5px; --r-float-button-border-style: solid; --r-float-button-border-color: var(--line-strong); --r-float-button-bg: var(--layer-card); --r-float-button-bg-hover: var(--layer-card); --r-float-button-press: var(--fill-pressed); --r-float-button-text-color: var(--foreground); --r-float-button-text-hover-color: var(--foreground); --r-float-button-text-disabled-color: var(--foreground-disabled); --r-float-button-box-shadow: none; --r-float-button-shadow-hover: none; --r-float-button-shadow-active: none; --r-float-button-transform-hover: none; --r-float-button-transform-active: none; --r-float-button-outline: 2px solid var(--line-strong); --r-float-button-outline-offset: 2px; --r-float-button-font-size: 12px; --r-float-button-font-weight: 700; --r-float-button-desc-font-size: 10px; --r-float-button-icon-size: 16px; --r-float-button-opacity-disabled: 1; &.r-float-button--xs { --r-float-button-size: 24px; --r-float-button-icon-size: 12px; --r-float-button-font-size: 11px; --r-float-button-desc-font-size: 8px; --r-float-button-padding-x: 8px; } &.r-float-button--sm { --r-float-button-size: 28px; --r-float-button-icon-size: 14px; --r-float-button-font-size: 12px; --r-float-button-desc-font-size: 9px; --r-float-button-padding-x: 10px; } &.r-float-button--md { --r-float-button-size: 32px; --r-float-button-icon-size: 16px; --r-float-button-font-size: 12px; --r-float-button-desc-font-size: 10px; --r-float-button-padding-x: 12px; } &.r-float-button--lg { --r-float-button-size: 36px; --r-float-button-icon-size: 18px; --r-float-button-font-size: 14px; --r-float-button-desc-font-size: 11px; --r-float-button-padding-x: 14px; } &.r-float-button--with-text { --r-float-button-width: auto; } &.r-float-button--pill { --r-float-button-width: auto; padding-left: var(--r-float-button-padding-x); padding-right: var(--r-float-button-padding-x); } &.r-float-button--primary, &.r-float-button--accent { --r-float-button-border-color: var(--sticker-ink); --r-float-button-bg: var(--accent-400); --r-float-button-bg-hover: var(--accent-400); --r-float-button-press: var(--sticker-pressed); --r-float-button-text-color: var(--sticker-ink); --r-float-button-text-hover-color: var(--sticker-ink); } &.r-float-button--warning { --r-float-button-border-color: var(--sticker-ink); --r-float-button-bg: var(--warning); --r-float-button-bg-hover: var(--warning); --r-float-button-press: var(--sticker-pressed); --r-float-button-text-color: var(--sticker-ink); --r-float-button-text-hover-color: var(--sticker-ink); } &.r-float-button--danger { --r-float-button-border-color: var(--sticker-ink); --r-float-button-bg: var(--danger); --r-float-button-bg-hover: var(--danger); --r-float-button-press: var(--sticker-pressed); --r-float-button-text-color: var(--sticker-ink); --r-float-button-text-hover-color: var(--sticker-ink); } &.r-float-button--ghost { --r-float-button-border-color: transparent; --r-float-button-bg: transparent; --r-float-button-bg-hover: var(--fill-pressed); --r-float-button-press: transparent; } } .r-float-button { user-select: none; cursor: pointer; box-sizing: border-box; width: var(--r-float-button-width, var(--r-float-button-size)); min-width: var(--r-float-button-size); height: var(--r-float-button-size); border-radius: var(--r-float-button-border-radius); border-width: var(--r-float-button-border-width); border-style: var(--r-float-button-border-style); border-color: var(--r-float-button-border-color); background-color: var(--r-float-button-bg); color: var(--r-float-button-text-color); box-shadow: var(--r-float-button-box-shadow); font-size: var(--r-float-button-font-size); font-weight: var(--r-float-button-font-weight); outline: none; flex-shrink: 0; justify-content: center; align-items: center; padding: 0; transition: transform .15s cubic-bezier(.4, 0, .2, 1), box-shadow .15s cubic-bezier(.4, 0, .2, 1), background-color .15s cubic-bezier(.4, 0, .2, 1), border-color .15s cubic-bezier(.4, 0, .2, 1), color .15s cubic-bezier(.4, 0, .2, 1); display: inline-flex; position: relative; @media (prefers-reduced-motion: reduce) { transition: none; } &.r-float-button--with-text, &.r-float-button--pill { padding-left: var(--r-float-button-padding-x); padding-right: var(--r-float-button-padding-x); } &:hover:not(:disabled) { background-color: var(--r-float-button-bg-hover); color: var(--r-float-button-text-hover-color); box-shadow: var(--r-float-button-shadow-hover); transform: var(--r-float-button-transform-hover); } &:active:not(:disabled) { box-shadow: var(--r-float-button-shadow-active); transform: var(--r-float-button-transform-active); } &:focus-visible { outline: var(--r-float-button-outline); outline-offset: var(--r-float-button-outline-offset); } &:is(:hover, :active):not(:disabled) { background-image: linear-gradient(var(--r-float-button-press), var(--r-float-button-press)); } &:disabled { pointer-events: none; opacity: var(--r-float-button-opacity-disabled); cursor: not-allowed; border-color: var(--line-muted); background-color: var(--fill-muted); color: var(--r-float-button-text-disabled-color); background-image: none; } &.r-float-button--ghost:disabled { background-color: #0000; border-color: #0000; } & svg { pointer-events: none; width: var(--r-float-button-icon-size); height: var(--r-float-button-icon-size); flex-shrink: 0; } & > .r-float-button__content { white-space: nowrap; justify-content: center; align-items: center; gap: 6px; display: inline-flex; &.r-float-button__content--with-desc { flex-direction: column; gap: 2px; } } &.r-float-button--square.r-float-button--with-desc { padding-top: 2px; padding-bottom: 2px; } & .r-float-button__text { white-space: nowrap; align-items: center; line-height: 1; display: inline-flex; } & .r-float-button__desc { font-size: var(--r-float-button-desc-font-size); text-align: center; text-overflow: ellipsis; white-space: nowrap; line-height: 1.25; overflow: hidden; } } .r-float-button-group { --r-float-button-group-gap: 10px; user-select: none; box-sizing: border-box; align-items: center; gap: var(--r-float-button-group-gap); display: inline-flex; &.r-float-button-group--vertical { flex-direction: column; } &.r-float-button-group--horizontal { flex-direction: row; } &.r-float-button-group--attached { --r-float-button-group-gap: 0px; gap: 0; } &.r-float-button-group--attached.r-float-button-group--vertical > .r-float-button:not(:last-child) { border-bottom-width: 0; } &.r-float-button-group--attached.r-float-button-group--vertical > .r-float-button:not(:first-child):not(:last-child) { border-radius: 0; } &.r-float-button-group--attached.r-float-button-group--horizontal > .r-float-button:not(:last-child) { border-right-width: 0; } &.r-float-button-group--attached.r-float-button-group--horizontal > .r-float-button:not(:first-child):not(:last-child), &.r-float-button-group--attached.r-float-button-group--square > .r-float-button { border-radius: 0; } &.r-float-button-group--attached.r-float-button-group--vertical > .r-float-button:first-child:not(:last-child) { border-radius: 8px 8px 0 0; } &.r-float-button-group--attached.r-float-button-group--vertical > .r-float-button:last-child:not(:first-child) { border-radius: 0 0 8px 8px; } &.r-float-button-group--attached.r-float-button-group--horizontal > .r-float-button:first-child:not(:last-child) { border-radius: 8px 0 0 8px; } &.r-float-button-group--attached.r-float-button-group--horizontal > .r-float-button:last-child:not(:first-child) { border-radius: 0 8px 8px 0; } } .r-timeline { --r-timeline-icon-size: var(--r-timeline-custom-icon-size, 9px); --r-timeline-title-font-size: 14px; --r-timeline-content-font-size: 12px; --r-timeline-time-font-size: 12px; --r-timeline-line-height: 20px; --r-timeline-item-inner-gap: 2px; --r-timeline-title-font-family: var(--font-sans); --r-timeline-title-font-weight: 400; --r-timeline-gap: 12px; --r-timeline-item-gap: 12px; --r-timeline-horizontal-item-gap: 40px; --r-timeline-line-width: 1px; --r-timeline-line-color: var(--line-muted); --r-timeline-marker-border-width: 1.5px; --r-timeline-marker-radius: 2px; --r-timeline-marker-fill: 100%; --r-timeline-marker-border-color: var(--sticker-ink); --r-timeline-axis-offset: calc((20px - var(--r-timeline-icon-size)) / 2); &.r-timeline--lg { --r-timeline-title-font-size: 16px; --r-timeline-line-height: 24px; --r-timeline-axis-offset: calc((24px - var(--r-timeline-icon-size)) / 2); } &.r-timeline--horizontal { --r-timeline-axis-offset: 0px; } } .r-timeline-item { --r-timeline-item-color: var(--foreground-hint); --r-timeline-item-fill: var(--presence-offline); &.r-timeline-item--information { --r-timeline-item-color: var(--info-strong); --r-timeline-item-fill: var(--info); } &.r-timeline-item--success { --r-timeline-item-color: var(--success-strong); --r-timeline-item-fill: var(--success); } &.r-timeline-item--warning { --r-timeline-item-color: var(--warning-strong); --r-timeline-item-fill: var(--warning); } &.r-timeline-item--danger { --r-timeline-item-color: var(--danger-strong); --r-timeline-item-fill: var(--danger); } &.r-timeline-item--accent { --r-timeline-item-color: var(--task-status-in-review-strong); --r-timeline-item-fill: var(--task-status-in-review); } &.r-timeline-item--color { --r-timeline-item-color: var(--r-timeline-custom-color); --r-timeline-item-fill: var(--r-timeline-custom-color); } &[data-icon] { --r-timeline-icon-size: var(--r-timeline-custom-icon-size, 14px); --r-timeline-axis-offset: calc((var(--r-timeline-line-height) - var(--r-timeline-icon-size)) / 2); } } .r-timeline { line-height: var(--r-timeline-line-height); flex-direction: column; margin: 0; padding: 0; list-style: none; display: flex; } .r-timeline-item { gap: var(--r-timeline-gap); margin: 0; padding: 0; display: flex; } .r-timeline-item__axis { padding-top: var(--r-timeline-axis-offset); width: var(--r-timeline-icon-size); flex-direction: column; flex: none; align-items: center; display: flex; } .r-timeline-item__marker { background: color-mix(in oklch, var(--r-timeline-item-fill) var(--r-timeline-marker-fill), transparent); border: var(--r-timeline-marker-border-width) solid var(--r-timeline-marker-border-color, var(--r-timeline-item-color)); border-radius: var(--r-timeline-marker-radius); box-sizing: border-box; height: var(--r-timeline-icon-size); width: var(--r-timeline-icon-size); flex: none; } .r-timeline-item__icon { color: var(--r-timeline-item-color); font-size: var(--r-timeline-icon-size); height: var(--r-timeline-icon-size); width: var(--r-timeline-icon-size); flex: none; justify-content: center; align-items: center; display: flex; & svg { width: 1em; height: 1em; } } .r-timeline-item__line { border-inline-start: var(--r-timeline-line-width) solid var(--r-timeline-line-color); margin-bottom: calc(2px - var(--r-timeline-axis-offset)); flex: 1; margin-top: 2px; } .r-timeline-item--dashed > .r-timeline-item__axis > .r-timeline-item__line { border-style: dashed; } .r-timeline-item:last-child > .r-timeline-item__axis > .r-timeline-item__line { visibility: hidden; } .r-timeline-item__body { min-width: 0; padding-bottom: var(--r-timeline-item-gap); flex: 1; } .r-timeline-item:last-child > .r-timeline-item__body { padding-bottom: 0; } .r-timeline-title { color: var(--foreground-strong); font-family: var(--r-timeline-title-font-family); font-size: var(--r-timeline-title-font-size); font-weight: var(--r-timeline-title-font-weight); margin-bottom: var(--r-timeline-item-inner-gap); overflow-wrap: anywhere; } .r-timeline-content { color: var(--foreground-hint); font-family: var(--font-mono); font-size: var(--r-timeline-content-font-size); overflow-wrap: anywhere; line-height: 16px; } .r-timeline-time { color: var(--foreground-hint); font-family: var(--font-mono); font-size: var(--r-timeline-time-font-size); margin-top: var(--r-timeline-item-inner-gap); white-space: nowrap; } .r-timeline--left > .r-timeline-item > .r-timeline-item__body { column-gap: var(--r-timeline-gap); grid-template-columns: minmax(0, 1fr) auto; display: grid; & > * { grid-column: 1; } & > .r-timeline-time { grid-area: 1 / 2; margin-top: 0; } } .r-timeline--right > .r-timeline-item { text-align: end; flex-direction: row-reverse; } .r-timeline--horizontal { flex-direction: row; } .r-timeline--horizontal > .r-timeline-item { flex-direction: column; flex: none; & > .r-timeline-item__axis { height: var(--r-timeline-icon-size); flex-direction: row; width: auto; padding-top: 0; } & > .r-timeline-item__axis > .r-timeline-item__line { border-inline-start: 0; border-top: var(--r-timeline-line-width) solid var(--r-timeline-line-color); margin-top: 0; margin-bottom: 0; } &.r-timeline-item--dashed > .r-timeline-item__axis > .r-timeline-item__line { border-top-style: dashed; } & > .r-timeline-item__body { padding-bottom: 0; padding-inline-end: var(--r-timeline-horizontal-item-gap); } } .r-steps { --r-steps-indicator-size: 20px; --r-steps-indicator-font-size: 12px; --r-steps-icon-size: 14px; --r-steps-title-font-size: 13px; --r-steps-description-font-size: 12px; --r-steps-line-height: calc(18 / 13); --r-steps-gap: 8px; --r-steps-connector-gap: 8px; --r-steps-connector-min-width: 16px; --r-steps-vertical-item-gap: 16px; --r-steps-indicator-font-family: var(--font-mono); --r-steps-indicator-font-weight: 700; --r-steps-indicator-border-width: 1px; --r-steps-indicator-radius: var(--radius-sticker, 4px); --r-steps-title-font-family: var(--font-sans); --r-steps-title-font-weight: 600; --r-steps-connector-width: 1px; --r-steps-connector-color: var(--line-seam); --r-steps-connector-color-finish: var(--line-seam); --r-steps-focus-radius: var(--radius-sticker, 4px); --r-steps-focus-outline: 2px solid var(--line-strong); --r-steps-duration: .16s; --r-steps-easing: ease-out; --r-steps-indicator-color-wait: var(--layer-card); --r-steps-indicator-color-process: var(--primary-400); --r-steps-indicator-color-finish: var(--foreground); --r-steps-indicator-color-error: var(--warning); --r-steps-indicator-border-color-wait: var(--line-seam); --r-steps-indicator-border-color-process: var(--sticker-ink); --r-steps-indicator-border-color-finish: var(--foreground); --r-steps-indicator-border-color-error: var(--sticker-ink); --r-steps-indicator-border-color-hover: var(--line-strong); --r-steps-indicator-text-color-wait: var(--foreground-hint); --r-steps-indicator-text-color-process: var(--sticker-ink); --r-steps-indicator-text-color-finish: var(--layer-canvas); --r-steps-indicator-text-color-error: var(--sticker-ink); --r-steps-indicator-shadow-process: none; --r-steps-indicator-shadow-hover: none; --r-steps-title-color-wait: var(--foreground-hint); --r-steps-title-color-process: var(--foreground); --r-steps-title-color-finish: var(--foreground-muted); --r-steps-title-color-error: var(--foreground); --r-steps-title-color-hover: var(--foreground); --r-steps-title-color-disabled: var(--foreground-disabled); } .r-step { --r-step-indicator-color: var(--r-steps-indicator-color-wait); --r-step-indicator-border-color: var(--r-steps-indicator-border-color-wait); --r-step-indicator-text-color: var(--r-steps-indicator-text-color-wait); --r-step-indicator-shadow: none; --r-step-title-color: var(--r-steps-title-color-wait); --r-step-description-color: var(--foreground-hint); --r-step-connector-color: var(--r-steps-connector-color); &.r-step--process { --r-step-indicator-color: var(--r-steps-indicator-color-process); --r-step-indicator-border-color: var(--r-steps-indicator-border-color-process); --r-step-indicator-text-color: var(--r-steps-indicator-text-color-process); --r-step-indicator-shadow: var(--r-steps-indicator-shadow-process); --r-step-title-color: var(--r-steps-title-color-process); --r-step-description-color: var(--foreground-muted); } &.r-step--finish { --r-step-indicator-color: var(--r-steps-indicator-color-finish); --r-step-indicator-border-color: var(--r-steps-indicator-border-color-finish); --r-step-indicator-text-color: var(--r-steps-indicator-text-color-finish); --r-step-title-color: var(--r-steps-title-color-finish); --r-step-connector-color: var(--r-steps-connector-color-finish); } &.r-step--error { --r-step-indicator-color: var(--r-steps-indicator-color-error); --r-step-indicator-border-color: var(--r-steps-indicator-border-color-error); --r-step-indicator-text-color: var(--r-steps-indicator-text-color-error); --r-step-title-color: var(--r-steps-title-color-error); --r-step-description-color: var(--foreground-muted); } @media (hover: hover) { &.r-step--clickable:hover { --r-step-title-color: var(--r-steps-title-color-hover); } &.r-step--clickable.r-step--wait:hover { --r-step-indicator-border-color: var(--r-steps-indicator-border-color-hover); } &.r-step--clickable:not(.r-step--process):hover { --r-step-indicator-shadow: var(--r-steps-indicator-shadow-hover); } } &.r-step--disabled { --r-step-title-color: var(--r-steps-title-color-disabled); } } .r-steps > .r-step:is(.r-step--process, .r-step--finish, .r-step--error) { --r-steps-indicator-border-width: 1.5px; } .r-steps { line-height: var(--r-steps-line-height); margin: 0; padding: 0; list-style: none; display: flex; } .r-step { min-width: 0; margin: 0; padding: 0; display: flex; position: relative; } .r-step__main { gap: var(--r-steps-gap); display: flex; position: relative; } .r-step__indicator { background: var(--r-step-indicator-color); border: var(--r-steps-indicator-border-width) solid var(--r-step-indicator-border-color); border-radius: var(--r-steps-indicator-radius); box-shadow: var(--r-step-indicator-shadow); box-sizing: border-box; color: var(--r-step-indicator-text-color); font-family: var(--r-steps-indicator-font-family); font-size: var(--r-steps-indicator-font-size); font-variant-numeric: tabular-nums; font-weight: var(--r-steps-indicator-font-weight); height: var(--r-steps-indicator-size); transition: background-color var(--r-steps-duration) var(--r-steps-easing), border-color var(--r-steps-duration) var(--r-steps-easing), box-shadow var(--r-steps-duration) var(--r-steps-easing), color var(--r-steps-duration) var(--r-steps-easing); width: var(--r-steps-indicator-size); flex: none; justify-content: center; align-items: center; line-height: 1; display: flex; & > svg { height: var(--r-steps-icon-size); width: var(--r-steps-icon-size); flex: none; } } .r-step__content { min-width: 0; padding-top: calc((var(--r-steps-indicator-size) - var(--r-steps-title-font-size) * var(--r-steps-line-height)) / 2); } .r-step__title { color: var(--r-step-title-color); font-family: var(--r-steps-title-font-family); font-size: var(--r-steps-title-font-size); font-weight: var(--r-steps-title-font-weight); transition: color var(--r-steps-duration) var(--r-steps-easing); white-space: nowrap; display: block; } .r-step__description { color: var(--r-step-description-color); font-size: var(--r-steps-description-font-size); margin-top: 2px; } .r-step__status { clip-path: inset(50%); white-space: nowrap; width: 1px; height: 1px; position: absolute; overflow: hidden; } .r-step__button { appearance: none; cursor: pointer; line-height: inherit; text-align: start; background: none; border: 0; margin: 0; padding: 0; &:after { border-radius: var(--r-steps-focus-radius); content: ""; position: absolute; inset: -4px; } &:focus-visible { outline: none; } &:focus-visible:after { outline: var(--r-steps-focus-outline); } &:disabled { cursor: not-allowed; } } .r-step__connector { border-color: var(--r-step-connector-color); transition: border-color var(--r-steps-duration) var(--r-steps-easing); border-style: solid; border-width: 0; } .r-step:last-child > .r-step__connector { display: none; } .r-steps--horizontal > .r-step { grid-template-columns: var(--r-steps-indicator-size) auto calc(var(--r-steps-connector-min-width) + 2 * var(--r-steps-connector-gap)); flex: none; align-content: start; display: grid; &:last-child { grid-template-columns: var(--r-steps-indicator-size) auto; } & > .r-step__main, & > .r-step__main > .r-step__content { display: contents; } & > .r-step__main > .r-step__indicator { grid-area: 1 / 1; } & > .r-step__main > .r-step__content > .r-step__title { grid-area: 1 / 2; align-self: center; margin-inline-start: var(--r-steps-gap); } & > .r-step__main > .r-step__content > .r-step__description { grid-area: 2 / 2 / auto / -1; margin-inline-start: var(--r-steps-gap); } & > .r-step__connector { border-top-width: var(--r-steps-connector-width); margin-inline: var(--r-steps-connector-gap); grid-area: 1 / 3; align-self: center; } } @media (width >= 40rem) { .r-steps--horizontal { flex-wrap: wrap; row-gap: 8px; } } @media (width < 40rem) { .r-steps--horizontal > .r-step { --r-steps-connector-gap: 6px; --r-steps-connector-min-width: 8px; grid-template-columns: var(--r-steps-indicator-size) minmax(0, 1fr); flex: 1 1 0; &:last-child { grid-template-columns: var(--r-steps-indicator-size) minmax(0, 1fr); } & > .r-step__main > .r-step__content { padding-inline-end: var(--r-steps-connector-gap); grid-area: 2 / 1 / auto / -1; padding-top: 6px; display: block; } & > .r-step__main > .r-step__content > .r-step__title, & > .r-step__main > .r-step__content > .r-step__description { margin-inline-start: 0; } & > .r-step__main > .r-step__content > .r-step__title { overflow-wrap: anywhere; white-space: normal; } & > .r-step__connector { grid-column: 2; } } } .r-steps--vertical { flex-direction: column; } .r-steps--vertical > .r-step { padding-bottom: var(--r-steps-vertical-item-gap); &:last-child { padding-bottom: 0; } & > .r-step__connector { border-inline-start-width: var(--r-steps-connector-width); bottom: 4px; inset-inline-start: calc((var(--r-steps-indicator-size) - var(--r-steps-connector-width)) / 2); top: calc(var(--r-steps-indicator-size) + 4px); position: absolute; } & > .r-step__main > .r-step__content > .r-step__title { white-space: normal; } } @media (prefers-reduced-motion: reduce) { .r-step__indicator, .r-step__title, .r-step__connector { transition: none; } } .r-otter-indicator { overflow: visible; } .r-otter-indicator * { transform-box: view-box; } .r-otter-indicator__body { transform-origin: 24px 28px; } .r-otter-indicator__arm { transform-origin: 29px 27px; } .r-otter-indicator__ripple { opacity: 0; transform-origin: 6px 30.5px; } .r-otter-indicator__z { opacity: 0; } .r-otter-indicator__parcel--adrift { transform-origin: 6px 25px; } @media (prefers-reduced-motion: no-preference) { .r-otter-indicator__wave { animation: 1.2s linear infinite r-otter-indicator-wave; } .r-otter-indicator__wave--back { animation-duration: 2s; } .r-otter-indicator--process .r-otter-indicator__body { animation: 1.8s ease-in-out infinite alternate r-otter-indicator-bob; } .r-otter-indicator--process .r-otter-indicator__arm { animation: .9s ease-in-out infinite alternate r-otter-indicator-paddle; } .r-otter-indicator--process .r-otter-indicator__ripple { animation: 1.8s ease-out infinite r-otter-indicator-ripple; } .r-otter-indicator--process .r-otter-indicator__ripple--late { animation-delay: .9s; } .r-otter-indicator--finish .r-otter-indicator__wave { animation-duration: 3s; } .r-otter-indicator--finish .r-otter-indicator__body { animation: 3.2s ease-in-out infinite alternate r-otter-indicator-bob; } .r-otter-indicator--wait .r-otter-indicator__body { animation: 2.4s ease-in-out infinite alternate r-otter-indicator-breathe; } .r-otter-indicator--wait .r-otter-indicator__z { animation: 2.4s ease-out infinite r-otter-indicator-z; } .r-otter-indicator--wait .r-otter-indicator__z--late { animation-delay: 1.2s; } .r-otter-indicator--error .r-otter-indicator__body { animation: .18s linear infinite alternate r-otter-indicator-shiver; } .r-otter-indicator--error .r-otter-indicator__parcel--adrift { animation: 2s ease-in-out infinite alternate r-otter-indicator-drift; } } @media (prefers-reduced-motion: reduce) { .r-otter-indicator__z { opacity: 1; } } @keyframes r-otter-indicator-bob { from { transform: translateY(-.6px) rotate(-3deg); } to { transform: translateY(1.2px) rotate(2deg); } } @keyframes r-otter-indicator-paddle { from { transform: rotate(-35deg); } to { transform: rotate(30deg); } } @keyframes r-otter-indicator-wave { to { transform: translateX(-12px); } } @keyframes r-otter-indicator-ripple { from { opacity: .8; transform: scale(.4); } to { opacity: 0; transform: scale(1.6); } } @keyframes r-otter-indicator-breathe { from { transform: scale(1); } to { transform: scale(1.02, 1.05); } } @keyframes r-otter-indicator-z { from { opacity: 0; transform: translate(0); } 30% { opacity: 1; } to { opacity: 0; transform: translate(4px, -7px); } } @keyframes r-otter-indicator-shiver { from { transform: translateX(-.4px); } to { transform: translateX(.4px); } } @keyframes r-otter-indicator-drift { from { transform: translate(0) rotate(-18deg); } to { transform: translate(-1.5px, 1.2px) rotate(-8deg); } } .r-combobox-select { min-width: 0; position: relative; } .r-combobox-select__control { box-sizing: border-box; border: 1.5px solid var(--line-strong); background: var(--layer-card); min-width: 0; min-height: 44px; color: var(--foreground); box-shadow: none; border-radius: 8px; outline: 0; align-items: center; gap: .5rem; padding: 0 6px 0 12px; font-size: 16px; line-height: 24px; transition: box-shadow 90ms ease-out; display: flex; } .r-combobox-select__control:focus-within { box-shadow: var(--theme-focus-ring); } .r-combobox-select__input { box-sizing: border-box; width: 100%; min-width: 3rem; color: inherit; font: inherit; background: none; border: 0; outline: 0; flex: 1; padding: 0; } .r-combobox-select__input::placeholder { color: var(--foreground-placeholder); } .r-combobox-select__chips { border: 0; flex-wrap: wrap; flex: 1; align-items: center; gap: 6px; min-width: 0; min-height: 28px; margin-inline-start: -6px; padding: 6px 0; display: flex; } .r-combobox-select__chips .r-combobox-select__input { min-height: 28px; padding: 0 4px; } .r-combobox-select__chip { background: var(--fill-muted); max-width: 100%; min-height: 28px; color: var(--foreground); border-radius: 6px; align-items: center; gap: 6px; padding: 0 2px 0 8px; font-size: 13px; font-weight: 600; line-height: 18px; display: inline-flex; overflow: hidden; } .r-combobox-select__control:not(:focus-within) .r-combobox-select__chip[data-overflow] { display: none; } .r-combobox-select__text { text-overflow: ellipsis; white-space: nowrap; min-width: 0; overflow: hidden; } .r-combobox-select__actions { flex: none; align-items: center; gap: .125rem; display: inline-flex; } .r-combobox-select__action, .r-combobox-select__remove { background: none; border: 0; outline: 0; flex: none; justify-content: center; align-items: center; padding: 0; transition: color .15s, background-color .15s; display: inline-flex; } .r-combobox-select__remove { width: 22px; height: 22px; color: var(--foreground-hint); border-radius: 4px; } .r-combobox-select__action { width: 32px; height: 32px; color: var(--foreground-hint); border-radius: 8px; } .r-combobox-select__action > svg, .r-combobox-select__remove > svg { pointer-events: none; } .r-combobox-select__action > svg { width: 16px; height: 16px; } .r-combobox-select__remove > svg { width: .875rem; height: .875rem; } .r-combobox-select__action:hover, .r-combobox-select__remove:hover { background: var(--fill-pressed); color: var(--foreground); } .r-combobox-select__action:focus-visible, .r-combobox-select__remove:focus-visible { box-shadow: var(--theme-focus-ring); } .r-combobox-select__positioner { z-index: 50; isolation: isolate; outline: 0; } .r-combobox-select__popup { box-sizing: border-box; width: var(--anchor-width, max-content); min-width: 13.75rem; max-width: var(--available-width); max-height: min(var(--available-height), 24rem); background: var(--layer-popover); color: var(--foreground); box-shadow: 0 0 0 1px var(--line-seam), var(--theme-shadow-float); border: 0; border-radius: 10px; outline: 0; overflow: hidden; } .r-combobox-select__list { overscroll-behavior: contain; max-height: 16rem; padding: 6px; scroll-padding-block: 6px; overflow-y: auto; } .r-combobox-select__option { box-sizing: border-box; cursor: default; user-select: none; width: 100%; min-height: 36px; color: var(--foreground); border-radius: 8px; outline: 0; justify-content: space-between; align-items: center; gap: 10px; padding: 0 10px; font-size: 14px; font-weight: 500; line-height: 20px; transition: background-color .12s, color .12s; display: flex; overflow: hidden; } .r-combobox-select__option:hover, .r-combobox-select__option[data-highlighted] { background: var(--primary-soft); color: var(--foreground); } .r-combobox-select__option[data-selected] { font-weight: 700; } .r-combobox-select__option[data-disabled] { pointer-events: none; color: var(--foreground-disabled); background: none; } .r-combobox-select__option > svg { pointer-events: none; width: 16px; height: 16px; color: var(--foreground-icon); flex: none; } .r-combobox-select__indicator { color: var(--foreground); flex: none; justify-content: center; align-items: center; margin-inline-start: auto; display: inline-flex; } .r-combobox-select__indicator > svg { width: 16px; height: 16px; } .r-combobox-select__group-label { color: var(--foreground-hint); padding: 8px 10px 4px; font-size: 12px; font-weight: 700; line-height: 16px; } .r-combobox-select__message { color: var(--foreground-hint); text-align: start; padding: 14px 16px; font-size: 14px; line-height: 20px; } .r-combobox-select__overflow { color: var(--foreground-hint); font-family: var(--mono-font, ui-monospace, monospace); font-size: 12px; line-height: 16px; } .r-combobox-select__spinner { width: .875rem; height: .875rem; animation: .7s linear infinite r-combobox-select-spin; } .r-combobox-select--sm.r-combobox-select__control { min-height: 1.75rem; font-size: 13px; line-height: 18px; } .r-combobox-select--sm .r-combobox-select__chips { min-height: 1.5rem; padding: 1px 0; } .r-combobox-select--sm .r-combobox-select__chip { min-height: 1.375rem; } .r-combobox-select--sm .r-combobox-select__action { width: 1.5rem; height: 1.5rem; } .r-combobox-select--lg.r-combobox-select__control { min-height: 52px; } .r-combobox-select__control[data-status="error"], .r-combobox-select__control[data-invalid] { border-color: var(--danger-strong); } .r-combobox-select__control[data-status="warning"] { border-color: var(--warning-strong); } .r-combobox-select__control[data-disabled] { border-color: var(--line-muted); background: var(--fill-muted); color: var(--foreground-disabled); } @keyframes r-combobox-select-spin { to { transform: rotate(360deg); } } @media (prefers-reduced-motion: reduce) { .r-combobox-select *, .r-combobox-select__positioner { transition-duration: .01ms !important; animation-duration: .01ms !important; } }